Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx1G
loader_version=0.18.4

# Mod Properties
mod_version = 0.4.0+1.21.1
mod_version = 0.4.1+1.21.1
maven_group = net.errorcraft
archives_base_name = itematic

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,16 @@ public record PersistentProjectileEntityInitializer<T extends PersistentProjecti
@Override
public T create(ActionContext context) {
if (context.entity(ActionContextParameter.THIS).orElse(null) instanceof LivingEntity entity) {
ItemStack shooter = entity.getActiveItem();
if (shooter.isEmpty()) {
shooter = null;
}

return this.ownerCreator.create(
context.world(),
entity,
context.stack().copyWithCount(1),
entity.getActiveItem()
shooter
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ public static void bootstrap(Registerable<ItemGroupEntryProvider> registerable)
ItemGroupEntry.tag(ItematicItemTags.BEDS),
ItemGroupEntry.tag(ItematicItemTags.CANDLES),
ItemGroupEntry.tag(ItematicItemTags.BANNERS),
StackItemGroupEntry.fromStack(RaidUtil.createOminousBanner(items, bannerPatterns)),
StackItemGroupEntry.fromStack(RaidUtil.getOminousBanner(items, bannerPatterns)),
ItemGroupEntry.tag(ItematicItemTags.HEADS),
ItemGroupEntry.simple(items.getOrThrow(ItemKeys.DRAGON_EGG)),
ItemGroupEntry.simple(items.getOrThrow(ItemKeys.END_PORTAL_FRAME)),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
package net.errorcraft.itematic.mixin.entity.mob;

import net.errorcraft.itematic.village.raid.RaidUtil;
import net.minecraft.block.entity.BannerPattern;
import net.minecraft.entity.EntityData;
import net.minecraft.entity.SpawnReason;
import net.minecraft.entity.mob.PatrolEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.RegistryEntryLookup;
import net.minecraft.world.LocalDifficulty;
import net.minecraft.world.ServerWorldAccess;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(PatrolEntity.class)
public class PatrolEntityExtender {
@Redirect(
@Inject(
method = "initialize",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/village/raid/Raid;getOminousBanner(Lnet/minecraft/registry/RegistryEntryLookup;)Lnet/minecraft/item/ItemStack;"
)
)
private ItemStack getOminousBannerUseRegistryEntry(RegistryEntryLookup<BannerPattern> bannerPatternLookup, ServerWorldAccess world) {
return RaidUtil.createOminousBanner(world, bannerPatternLookup);
private void getOminousBannerSetDataDrivenItemStack(ServerWorldAccess world, LocalDifficulty difficulty, SpawnReason spawnReason, EntityData entityData, CallbackInfoReturnable<EntityData> info) {
RaidUtil.createOminousBanner(world);
}
}
Original file line number Diff line number Diff line change
@@ -1,34 +1,36 @@
package net.errorcraft.itematic.mixin.entity.raid;

import net.errorcraft.itematic.village.raid.RaidUtil;
import net.minecraft.block.entity.BannerPattern;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.mob.PatrolEntity;
import net.minecraft.entity.raid.RaiderEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.RegistryEntryLookup;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(RaiderEntity.class)
public class RaiderEntityExtender extends PatrolEntity {
protected RaiderEntityExtender(EntityType<? extends PatrolEntity> entityType, World world) {
super(entityType, world);
}

@Redirect(
method = { "onDeath", "loot" },
@Inject(
method = {
"onDeath",
"loot"
},
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/village/raid/Raid;getOminousBanner(Lnet/minecraft/registry/RegistryEntryLookup;)Lnet/minecraft/item/ItemStack;"
)
)
private ItemStack getOminousBannerUseRegistryEntry(RegistryEntryLookup<BannerPattern> bannerPatternLookup) {
return RaidUtil.createOminousBanner(this.getWorld(), bannerPatternLookup);
private void getOminousBannerSetDataDrivenItemStack(CallbackInfo info) {
RaidUtil.createOminousBanner(this.getWorld());
}

@Mixin(RaiderEntity.PickupBannerAsLeaderGoal.class)
Expand All @@ -37,15 +39,15 @@ public static class PickupBannerAsLeaderGoalExtender<T extends RaiderEntity> {
@Final
private T actor;

@Redirect(
@Inject(
method = "canStart",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/village/raid/Raid;getOminousBanner(Lnet/minecraft/registry/RegistryEntryLookup;)Lnet/minecraft/item/ItemStack;"
)
)
private ItemStack getOminousBannerUseRegistryEntry(RegistryEntryLookup<BannerPattern> bannerPatternLookup) {
return RaidUtil.createOminousBanner(this.actor.getWorld(), bannerPatternLookup);
private void getOminousBannerSetDataDrivenItemStack(CallbackInfoReturnable<Boolean> info) {
RaidUtil.createOminousBanner(this.actor.getWorld());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@

import com.llamalad7.mixinextras.sugar.Local;
import net.errorcraft.itematic.village.raid.RaidUtil;
import net.minecraft.block.entity.BannerPattern;
import net.minecraft.entity.raid.RaiderEntity;
import net.minecraft.item.ItemConvertible;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.RegistryEntryLookup;
import net.minecraft.village.raid.Raid;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(Raid.class)
Expand Down Expand Up @@ -45,14 +45,14 @@ private static void checkEmptyStack(CallbackInfoReturnable<ItemStack> info, @Loc
}
}

@Redirect(
@Inject(
method = "setWaveCaptain",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/village/raid/Raid;getOminousBanner(Lnet/minecraft/registry/RegistryEntryLookup;)Lnet/minecraft/item/ItemStack;"
)
)
private ItemStack getOminousBannerUseRegistryEntry(RegistryEntryLookup<BannerPattern> bannerPatternLookup) {
return RaidUtil.createOminousBanner(this.getWorld(), bannerPatternLookup);
private void getOminousBannerSetDataDrivenItemStack(int wave, RaiderEntity entity, CallbackInfo info) {
RaidUtil.createOminousBanner(this.getWorld());
}
}
21 changes: 8 additions & 13 deletions src/main/java/net/errorcraft/itematic/village/raid/RaidUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,18 @@ public static ItemStack ominousBanner() {
if (ominousBanner == null) {
return ItemStack.EMPTY;
}
return ominousBanner;
}

public static ItemStack createOminousBanner(WorldAccess world, RegistryEntryLookup<BannerPattern> bannerPatterns) {
ItemStack stack = world.itematic$createStack(ItemKeys.WHITE_BANNER);
return createOminousBanner(stack, bannerPatterns);
ItemStack resultingOminousBanner = ominousBanner;
ominousBanner = null;
return resultingOminousBanner;
}

public static ItemStack createOminousBanner(RegistryEntryLookup<Item> items, RegistryEntryLookup<BannerPattern> bannerPatterns) {
ItemStack stack = new ItemStack(items.getOrThrow(ItemKeys.WHITE_BANNER));
return createOminousBanner(stack, bannerPatterns);
public static void createOminousBanner(WorldAccess world) {
ominousBanner = world.itematic$createStack(ItemKeys.WHITE_BANNER);
}

private static ItemStack createOminousBanner(ItemStack stack, RegistryEntryLookup<BannerPattern> bannerPatterns) {
ominousBanner = stack;
Raid.getOminousBanner(bannerPatterns);
ominousBanner = null;
return stack;
public static ItemStack getOminousBanner(RegistryEntryLookup<Item> items, RegistryEntryLookup<BannerPattern> bannerPatterns) {
ominousBanner = new ItemStack(items.getOrThrow(ItemKeys.WHITE_BANNER));
return Raid.getOminousBanner(bannerPatterns);
}
}