From e7bc56bd6685c01466c9899f16557c44cf38cb94 Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Sat, 22 Aug 2020 20:26:14 +0800 Subject: [PATCH] 1.16: items and recipes --- arclight-common/build.gradle | 2 + .../mixin/core/block/KelpTopBlockMixin.java | 19 --- .../container/FurnaceResultSlotMixin.java | 4 +- .../mixin/core/item/BlockItemMixin.java | 43 ++++++- .../common/mixin/core/item/BoatItemMixin.java | 24 ++-- .../common/mixin/core/item/BowItemMixin.java | 8 +- .../mixin/core/item/BucketItemMixin.java | 16 +-- .../mixin/core/item/ChorusFruitItemMixin.java | 22 ++-- .../mixin/core/item/CrossbowItemMixin.java | 24 ++-- .../common/mixin/core/item/DyeItemMixin.java | 19 +-- .../common/mixin/core/item/EggItemMixin.java | 45 ++++--- .../mixin/core/item/EnderEyeItemMixin.java | 28 +++++ .../mixin/core/item/EnderPearlItemMixin.java | 12 +- .../mixin/core/item/FilledMapItemMixin.java | 4 +- .../mixin/core/item/FishingRodItemMixin.java | 6 +- .../core/item/FlintAndSteelItemMixin.java | 8 +- .../mixin/core/item/MinecartItemMixin.java | 60 ++-------- .../mixin/core/item/SnowballItemMixin.java | 7 +- .../mixin/core/item/SpawnEggItemMixin.java | 26 ++++ .../mixin/core/item/TridentItemMixin.java | 19 +-- .../item/crafting/ArmorDyeRecipeMixin.java | 27 ----- .../crafting/BannerDuplicateRecipeMixin.java | 27 ----- .../item/crafting/BookCloningRecipeMixin.java | 21 ---- .../crafting/FireworkRocketRecipeMixin.java | 27 ----- .../crafting/FireworkStarFadeRecipeMixin.java | 27 ----- .../crafting/FireworkStarRecipeMixin.java | 27 ----- .../core/item/crafting/IRecipeMixin.java | 3 +- .../core/item/crafting/IngredientMixin.java | 27 ++--- .../item/crafting/MapCloningRecipeMixin.java | 27 ----- .../item/crafting/RepairItemRecipeMixin.java | 27 ----- .../item/crafting/ShieldRecipesMixin.java | 27 ----- .../ShulkerBoxColoringRecipeMixin.java | 28 ----- .../item/crafting/SmithingRecipeMixin.java | 32 +++++ .../crafting/SuspiciousStewRecipeMixin.java | 26 ---- .../item/crafting/TippedArrowRecipeMixin.java | 31 ----- .../mod/util/ArclightSpecialRecipe.java | 111 +++--------------- .../main/resources/mixins.arclight.core.json | 19 +-- arclight-forge-1.16/build.gradle | 2 + 38 files changed, 274 insertions(+), 638 deletions(-) delete mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/block/KelpTopBlockMixin.java create mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/EnderEyeItemMixin.java create mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/SpawnEggItemMixin.java delete mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/ArmorDyeRecipeMixin.java delete mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/BannerDuplicateRecipeMixin.java delete mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/BookCloningRecipeMixin.java delete mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/FireworkRocketRecipeMixin.java delete mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/FireworkStarFadeRecipeMixin.java delete mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/FireworkStarRecipeMixin.java delete mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/MapCloningRecipeMixin.java delete mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/RepairItemRecipeMixin.java delete mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/ShieldRecipesMixin.java delete mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/ShulkerBoxColoringRecipeMixin.java create mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/SmithingRecipeMixin.java delete mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/SuspiciousStewRecipeMixin.java delete mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/TippedArrowRecipeMixin.java diff --git a/arclight-common/build.gradle b/arclight-common/build.gradle index 5e39d648..00b906f7 100644 --- a/arclight-common/build.gradle +++ b/arclight-common/build.gradle @@ -48,6 +48,7 @@ repositories { maven { url = 'https://repo.codemc.io/repository/nms/' } maven { url = 'https://files.minecraftforge.net/maven/' } maven { url = 'https://www.dogforce-games.com/maven/' } + maven { url = 'https://jitpack.io/' } } dependencies { @@ -55,6 +56,7 @@ dependencies { compile "org.spigotmc:spigot-api:$minecraftVersion-R0.1-SNAPSHOT@jar" compile 'org.jetbrains:annotations:19.0.0' compile 'org.spongepowered:mixin:0.8' + compile 'com.github.ArclightTeam:mixin-tools:1.0.0' compile 'jline:jline:2.12.1' compile 'net.md-5:SpecialSource:1.8.6' compile 'org.apache.logging.log4j:log4j-jul:2.11.2' diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/block/KelpTopBlockMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/block/KelpTopBlockMixin.java deleted file mode 100644 index 3b21418f..00000000 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/block/KelpTopBlockMixin.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.izzel.arclight.common.mixin.core.block; - -import net.minecraft.block.BlockState; -import net.minecraft.block.KelpTopBlock; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.server.ServerWorld; -import org.bukkit.craftbukkit.v.event.CraftEventFactory; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(KelpTopBlock.class) -public class KelpTopBlockMixin { - - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/server/ServerWorld;setBlockState(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;)Z")) - public boolean arclight$blockGrow(ServerWorld world, BlockPos pos, BlockState state) { - return CraftEventFactory.handleBlockGrowEvent(world, pos, state); - } -} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/inventory/container/FurnaceResultSlotMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/inventory/container/FurnaceResultSlotMixin.java index a847b86c..6825e504 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/inventory/container/FurnaceResultSlotMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/inventory/container/FurnaceResultSlotMixin.java @@ -17,8 +17,8 @@ public class FurnaceResultSlotMixin { @Shadow private int removeCount; // @formatter:on - @Redirect(method = "onCrafting(Lnet/minecraft/item/ItemStack;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/tileentity/AbstractFurnaceTileEntity;func_213995_d(Lnet/minecraft/entity/player/PlayerEntity;)V")) + @Redirect(method = "onCrafting(Lnet/minecraft/item/ItemStack;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/tileentity/AbstractFurnaceTileEntity;unlockRecipes(Lnet/minecraft/entity/player/PlayerEntity;)V")) public void arclight$furnaceDropExp(AbstractFurnaceTileEntity furnace, PlayerEntity playerEntity, ItemStack stack) { - ((AbstractFurnaceTileEntityBridge) furnace).bridge$dropExp(playerEntity, stack, this.removeCount); + ((AbstractFurnaceTileEntityBridge) furnace).bridge$dropExp(playerEntity.world, playerEntity.getPositionVec(), playerEntity, stack, this.removeCount); } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BlockItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BlockItemMixin.java index 5f0f2296..177c06a5 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BlockItemMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BlockItemMixin.java @@ -7,30 +7,67 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItemUseContext; import net.minecraft.nbt.CompoundNBT; -import net.minecraft.state.IProperty; +import net.minecraft.state.Property; import net.minecraft.state.StateContainer; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.world.server.ServerWorld; import org.bukkit.Bukkit; import org.bukkit.craftbukkit.v.block.CraftBlock; +import org.bukkit.craftbukkit.v.block.CraftBlockState; import org.bukkit.craftbukkit.v.block.data.CraftBlockData; +import org.bukkit.craftbukkit.v.event.CraftEventFactory; import org.bukkit.entity.Player; import org.bukkit.event.block.BlockCanBuildEvent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; 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.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(BlockItem.class) public abstract class BlockItemMixin { // @formatter:off @Shadow protected abstract boolean checkPosition(); - @Shadow private static > BlockState func_219988_a(BlockState p_219988_0_, IProperty p_219988_1_, String p_219988_2_) { return null; } + @Shadow private static > BlockState func_219988_a(BlockState p_219988_0_, Property p_219988_1_, String p_219988_2_) { return null; } // @formatter:on + private transient org.bukkit.block.BlockState arclight$state; + + @Inject(method = "tryPlace", locals = LocalCapture.CAPTURE_FAILHARD, + at = @At(value = "INVOKE", shift = At.Shift.AFTER, target = "Lnet/minecraft/item/BlockItem;getStateForPlacement(Lnet/minecraft/item/BlockItemUseContext;)Lnet/minecraft/block/BlockState;")) + private void arclight$prePlaceLilypad(BlockItemUseContext context, CallbackInfoReturnable cir, BlockItemUseContext context1) { + this.arclight$state = CraftBlockState.getBlockState(context1.getWorld(), context1.getPos()); + } + + @Inject(method = "tryPlace", locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true, + at = @At(value = "INVOKE", shift = At.Shift.AFTER, target = "Lnet/minecraft/block/Block;onBlockPlacedBy(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Lnet/minecraft/entity/LivingEntity;Lnet/minecraft/item/ItemStack;)V")) + private void arclight$postPlaceLilypad(BlockItemUseContext context, CallbackInfoReturnable cir, BlockItemUseContext context1) { + org.bukkit.block.BlockState state = arclight$state; + arclight$state = null; + BlockPos pos = context1.getPos(); + if (state != null) { + org.bukkit.event.block.BlockPlaceEvent placeEvent = CraftEventFactory.callBlockPlaceEvent((ServerWorld) context1.getWorld(), context1.getPlayer(), context1.getHand(), state, pos.getX(), pos.getY(), pos.getZ()); + if (placeEvent != null && (placeEvent.isCancelled() || !placeEvent.canBuild())) { + state.update(true, false); + cir.setReturnValue(ActionResultType.FAIL); + } + } + } + + @Inject(method = "tryPlace", at = @At("RETURN")) + private void arclight$cleanup(BlockItemUseContext context, CallbackInfoReturnable cir) { + this.arclight$state = null; + } + private static BlockState getBlockState(BlockState blockState, CompoundNBT nbt) { StateContainer statecontainer = blockState.getBlock().getStateContainer(); for (String s : nbt.keySet()) { - IProperty iproperty = statecontainer.getProperty(s); + Property iproperty = statecontainer.getProperty(s); if (iproperty != null) { String s1 = nbt.get(s).getString(); blockState = func_219988_a(blockState, iproperty, s1); diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BoatItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BoatItemMixin.java index 5cd52cf1..dab8e11d 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BoatItemMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BoatItemMixin.java @@ -14,11 +14,12 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.RayTraceContext; import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; import org.bukkit.craftbukkit.v.event.CraftEventFactory; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; +import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; @@ -44,17 +45,17 @@ public class BoatItemMixin extends Item { * @reason */ @Overwrite - public ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { + public @NotNull ActionResult onItemRightClick(@NotNull World worldIn, PlayerEntity playerIn, @NotNull Hand handIn) { ItemStack itemstack = playerIn.getHeldItem(handIn); - RayTraceResult raytraceresult = rayTrace(worldIn, playerIn, RayTraceContext.FluidMode.ANY); - if (raytraceresult.getType() == RayTraceResult.Type.MISS) { + BlockRayTraceResult result = rayTrace(worldIn, playerIn, RayTraceContext.FluidMode.ANY); + if (result.getType() == RayTraceResult.Type.MISS) { return new ActionResult<>(ActionResultType.PASS, itemstack); } else { - Vec3d vec3d = playerIn.getLook(1.0F); + Vector3d vec3d = playerIn.getLook(1.0F); double d0 = 5.0D; List list = worldIn.getEntitiesInAABBexcluding(playerIn, playerIn.getBoundingBox().expand(vec3d.scale(5.0D)).grow(1.0D), field_219989_a); if (!list.isEmpty()) { - Vec3d vec3d1 = playerIn.getEyePosition(1.0F); + Vector3d vec3d1 = playerIn.getEyePosition(1.0F); for (Entity entity : list) { AxisAlignedBB axisalignedbb = entity.getBoundingBox().grow(entity.getCollisionBorderSize()); @@ -64,22 +65,21 @@ public class BoatItemMixin extends Item { } } - if (raytraceresult.getType() == RayTraceResult.Type.BLOCK) { - BlockRayTraceResult blockRayTraceResult = (BlockRayTraceResult) raytraceresult; - PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(playerIn, Action.RIGHT_CLICK_BLOCK, blockRayTraceResult.getPos(), blockRayTraceResult.getFace(), itemstack, handIn); + if (result.getType() == RayTraceResult.Type.BLOCK) { + PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(playerIn, Action.RIGHT_CLICK_BLOCK, result.getPos(), result.getFace(), itemstack, handIn); if (event.isCancelled()) { return new ActionResult<>(ActionResultType.PASS, itemstack); } - BoatEntity boatentity = new BoatEntity(worldIn, raytraceresult.getHitVec().x, raytraceresult.getHitVec().y, raytraceresult.getHitVec().z); + BoatEntity boatentity = new BoatEntity(worldIn, result.getHitVec().x, result.getHitVec().y, result.getHitVec().z); boatentity.setBoatType(this.type); boatentity.rotationYaw = playerIn.rotationYaw; if (!worldIn.hasNoCollisions(boatentity, boatentity.getBoundingBox().grow(-0.1D))) { return new ActionResult<>(ActionResultType.FAIL, itemstack); } else { if (!worldIn.isRemote) { - if (CraftEventFactory.callEntityPlaceEvent(worldIn, blockRayTraceResult.getPos(), blockRayTraceResult.getFace(), playerIn, boatentity).isCancelled()) { + if (CraftEventFactory.callEntityPlaceEvent(worldIn, result.getPos(), result.getFace(), playerIn, boatentity).isCancelled()) { return new ActionResult<>(ActionResultType.FAIL, itemstack); } if (!worldIn.addEntity(boatentity)) { @@ -92,7 +92,7 @@ public class BoatItemMixin extends Item { } playerIn.addStat(Stats.ITEM_USED.get(this)); - return new ActionResult<>(ActionResultType.SUCCESS, itemstack); + return ActionResult.func_233538_a_(itemstack, worldIn.isRemote()); } } else { return new ActionResult<>(ActionResultType.PASS, itemstack); diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BowItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BowItemMixin.java index 83282a9e..2e1d1c1e 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BowItemMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BowItemMixin.java @@ -33,7 +33,7 @@ public abstract class BowItemMixin extends ShootableItem { // @formatter:off @Shadow public abstract int getUseDuration(ItemStack stack); @Shadow public static float getArrowVelocity(int charge) { return 0; } - @Shadow(remap = false) public abstract AbstractArrowEntity customeArrow(AbstractArrowEntity arrow); + @Shadow(remap = false) public abstract AbstractArrowEntity customArrow(AbstractArrowEntity arrow); // @formatter:on /** @@ -62,8 +62,8 @@ public abstract class BowItemMixin extends ShootableItem { if (!worldIn.isRemote) { ArrowItem arrowitem = (ArrowItem) (itemstack.getItem() instanceof ArrowItem ? itemstack.getItem() : Items.ARROW); AbstractArrowEntity abstractarrowentity = arrowitem.createArrow(worldIn, itemstack, playerentity); - abstractarrowentity = customeArrow(abstractarrowentity); - abstractarrowentity.shoot(playerentity, playerentity.rotationPitch, playerentity.rotationYaw, 0.0F, f * 3.0F, 1.0F); + abstractarrowentity = customArrow(abstractarrowentity); + abstractarrowentity.func_234612_a_(playerentity, playerentity.rotationPitch, playerentity.rotationYaw, 0.0F, f * 3.0F, 1.0F); if (f == 1.0F) { abstractarrowentity.setIsCritical(true); } @@ -105,7 +105,7 @@ public abstract class BowItemMixin extends ShootableItem { } } - worldIn.playSound(null, playerentity.posX, playerentity.posY, playerentity.posZ, SoundEvents.ENTITY_ARROW_SHOOT, SoundCategory.PLAYERS, 1.0F, 1.0F / (random.nextFloat() * 0.4F + 1.2F) + f * 0.5F); + worldIn.playSound(null, playerentity.getPosX(), playerentity.getPosY(), playerentity.getPosZ(), SoundEvents.ENTITY_ARROW_SHOOT, SoundCategory.PLAYERS, 1.0F, 1.0F / (random.nextFloat() * 0.4F + 1.2F) + f * 0.5F); if (!flag1 && !playerentity.abilities.isCreativeMode) { itemstack.shrink(1); if (itemstack.isEmpty()) { diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BucketItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BucketItemMixin.java index 99938824..e2307fcc 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BucketItemMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/BucketItemMixin.java @@ -13,11 +13,11 @@ import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; import net.minecraft.util.Hand; -import net.minecraft.util.IItemProvider; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; import org.bukkit.craftbukkit.v.event.CraftEventFactory; import org.bukkit.craftbukkit.v.inventory.CraftItemStack; import org.bukkit.craftbukkit.v.util.DummyGeneratorAccess; @@ -28,7 +28,7 @@ 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.ModifyArg; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @@ -44,7 +44,7 @@ public abstract class BucketItemMixin { BlockPos pos = ((BlockRayTraceResult) result).getPos(); BlockState state = worldIn.getBlockState(pos); Fluid dummyFluid = ((IBucketPickupHandler) state.getBlock()).pickupFluid(DummyGeneratorAccess.INSTANCE, pos, state); - PlayerBucketFillEvent event = CraftEventFactory.callPlayerBucketFillEvent(worldIn, playerIn, pos, pos, ((BlockRayTraceResult) result).getFace(), stack, dummyFluid.getFilledBucket()); + PlayerBucketFillEvent event = CraftEventFactory.callPlayerBucketFillEvent((ServerWorld) worldIn, playerIn, pos, pos, ((BlockRayTraceResult) result).getFace(), stack, dummyFluid.getFilledBucket()); if (event.isCancelled()) { ((ServerPlayerEntity) playerIn).connection.sendPacket(new SChangeBlockPacket(worldIn, pos)); ((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().updateInventory(); @@ -72,9 +72,9 @@ public abstract class BucketItemMixin { private transient org.bukkit.inventory.@Nullable ItemStack arclight$captureItem; - @Redirect(method = "fillBucket", at = @At(value = "NEW", target = "net/minecraft/item/ItemStack")) - private ItemStack arclight$useCapture(IItemProvider fillBucket) { - return arclight$captureItem == null ? new ItemStack(fillBucket) : CraftItemStack.asNMSCopy(arclight$captureItem); + @ModifyArg(method = "onItemRightClick", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/DrinkHelper;func_242398_a(Lnet/minecraft/item/ItemStack;Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/item/ItemStack;)Lnet/minecraft/item/ItemStack;")) + private ItemStack arclight$useEventItem(ItemStack itemStack) { + return arclight$captureItem == null ? itemStack : CraftItemStack.asNMSCopy(arclight$captureItem); } public boolean a(PlayerEntity entity, World world, BlockPos pos, @Nullable BlockRayTraceResult result, Direction direction, BlockPos clicked, ItemStack itemstack) { @@ -94,10 +94,10 @@ public abstract class BucketItemMixin { private transient BlockPos arclight$click; private transient ItemStack arclight$stack; - @Inject(method = "tryPlaceContainedLiquid", cancellable = true, at = @At(value = "INVOKE", target = "Lnet/minecraft/world/dimension/Dimension;doesWaterVaporize()Z")) + @Inject(method = "tryPlaceContainedLiquid", cancellable = true, at = @At(value = "INVOKE", target = "Lnet/minecraft/world/DimensionType;func_236040_e_()Z")) private void arclight$bucketEmpty(PlayerEntity player, World worldIn, BlockPos posIn, BlockRayTraceResult p_180616_4_, CallbackInfoReturnable cir) { if (player != null) { - PlayerBucketEmptyEvent event = CraftEventFactory.callPlayerBucketEmptyEvent(worldIn, player, posIn, arclight$click, arclight$direction, arclight$stack); + PlayerBucketEmptyEvent event = CraftEventFactory.callPlayerBucketEmptyEvent((ServerWorld) worldIn, player, posIn, arclight$click, arclight$direction, arclight$stack); if (event.isCancelled()) { ((ServerPlayerEntity) player).connection.sendPacket(new SChangeBlockPacket(worldIn, posIn)); ((ServerPlayerEntityBridge) player).bridge$getBukkitEntity().updateInventory(); diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/ChorusFruitItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/ChorusFruitItemMixin.java index 928e6aa4..18712c48 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/ChorusFruitItemMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/ChorusFruitItemMixin.java @@ -2,12 +2,14 @@ package io.izzel.arclight.common.mixin.core.item; import io.izzel.arclight.common.bridge.entity.player.ServerPlayerEntityBridge; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.passive.FoxEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.item.ChorusFruitItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvents; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; @@ -15,6 +17,7 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerTeleportEvent; +import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; @@ -30,17 +33,17 @@ public class ChorusFruitItemMixin extends Item { * @reason */ @Overwrite - public ItemStack onItemUseFinish(ItemStack stack, World worldIn, LivingEntity entityLiving) { + public @NotNull ItemStack onItemUseFinish(@NotNull ItemStack stack, @NotNull World worldIn, @NotNull LivingEntity entityLiving) { ItemStack itemstack = super.onItemUseFinish(stack, worldIn, entityLiving); if (!worldIn.isRemote) { - double d0 = entityLiving.posX; - double d1 = entityLiving.posY; - double d2 = entityLiving.posZ; + double d0 = entityLiving.getPosX(); + double d1 = entityLiving.getPosY(); + double d2 = entityLiving.getPosZ(); for (int i = 0; i < 16; ++i) { - double d3 = entityLiving.posX + (entityLiving.getRNG().nextDouble() - 0.5D) * 16.0D; - double d4 = MathHelper.clamp(entityLiving.posY + (double) (entityLiving.getRNG().nextInt(16) - 8), 0.0D, worldIn.getActualHeight() - 1); - double d5 = entityLiving.posZ + (entityLiving.getRNG().nextDouble() - 0.5D) * 16.0D; + double d3 = entityLiving.getPosX() + (entityLiving.getRNG().nextDouble() - 0.5D) * 16.0D; + double d4 = MathHelper.clamp(entityLiving.getPosY() + (double) (entityLiving.getRNG().nextInt(16) - 8), 0.0D, worldIn.func_234938_ad_() - 1); + double d5 = entityLiving.getPosZ() + (entityLiving.getRNG().nextDouble() - 0.5D) * 16.0D; if (entityLiving instanceof ServerPlayerEntity) { Player player = ((ServerPlayerEntityBridge) entityLiving).bridge$getBukkitEntity(); @@ -59,8 +62,9 @@ public class ChorusFruitItemMixin extends Item { } if (entityLiving.attemptTeleport(d3, d4, d5, true)) { - worldIn.playSound(null, d0, d1, d2, SoundEvents.ITEM_CHORUS_FRUIT_TELEPORT, SoundCategory.PLAYERS, 1.0F, 1.0F); - entityLiving.playSound(SoundEvents.ITEM_CHORUS_FRUIT_TELEPORT, 1.0F, 1.0F); + SoundEvent soundevent = entityLiving instanceof FoxEntity ? SoundEvents.ENTITY_FOX_TELEPORT : SoundEvents.ITEM_CHORUS_FRUIT_TELEPORT; + worldIn.playSound(null, d0, d1, d2, soundevent, SoundCategory.PLAYERS, 1.0F, 1.0F); + entityLiving.playSound(soundevent, 1.0F, 1.0F); break; } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/CrossbowItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/CrossbowItemMixin.java index e8c25d2f..51a2aa85 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/CrossbowItemMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/CrossbowItemMixin.java @@ -2,10 +2,11 @@ package io.izzel.arclight.common.mixin.core.item; import io.izzel.arclight.common.bridge.entity.EntityBridge; import io.izzel.arclight.common.bridge.entity.player.ServerPlayerEntityBridge; +import io.izzel.arclight.mixin.Eject; import net.minecraft.entity.Entity; -import net.minecraft.entity.IProjectile; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.entity.projectile.ProjectileEntity; import net.minecraft.item.CrossbowItem; import net.minecraft.item.ItemStack; import net.minecraft.util.Hand; @@ -15,7 +16,6 @@ import org.bukkit.event.entity.EntityShootBowEvent; import org.spongepowered.asm.mixin.Mixin; 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.LocalCapture; @@ -24,8 +24,8 @@ public class CrossbowItemMixin { @Inject(method = "fireProjectile", cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD, at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;damageItem(ILnet/minecraft/entity/LivingEntity;Ljava/util/function/Consumer;)V")) private static void arclight$entityShoot(World worldIn, LivingEntity shooter, Hand handIn, ItemStack crossbow, ItemStack projectile, float soundPitch, boolean isCreativeMode, float velocity, float inaccuracy, float projectileAngle, CallbackInfo ci, - boolean flag, IProjectile proj) { - EntityShootBowEvent event = CraftEventFactory.callEntityShootBowEvent(shooter, crossbow, (Entity) proj, soundPitch); + boolean flag, ProjectileEntity proj) { + EntityShootBowEvent event = CraftEventFactory.callEntityShootBowEvent(shooter, crossbow, proj, soundPitch); if (event.isCancelled()) { event.getProjectile().remove(); ci.cancel(); @@ -35,26 +35,16 @@ public class CrossbowItemMixin { private static transient boolean arclight$capturedBoolean; - @Redirect(method = "fireProjectile", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;addEntity(Lnet/minecraft/entity/Entity;)Z")) - private static boolean arclight$addEntity(World world, Entity entityIn, World worldIn, LivingEntity shooter) { + @Eject(method = "fireProjectile", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;addEntity(Lnet/minecraft/entity/Entity;)Z")) + private static boolean arclight$addEntity(World world, Entity entityIn, World worldIn, LivingEntity shooter, CallbackInfo ci) { if (arclight$capturedBoolean) { if (!world.addEntity(entityIn)) { if (shooter instanceof ServerPlayerEntity) { ((ServerPlayerEntityBridge) shooter).bridge$getBukkitEntity().updateInventory(); } - arclight$capturedBoolean = true; - } else { - arclight$capturedBoolean = false; + ci.cancel(); } } return true; } - - @Inject(method = "fireProjectile", cancellable = true, at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;playSound(Lnet/minecraft/entity/player/PlayerEntity;DDDLnet/minecraft/util/SoundEvent;Lnet/minecraft/util/SoundCategory;FF)V")) - private static void arclight$returnIfFail(World worldIn, LivingEntity shooter, Hand handIn, ItemStack crossbow, ItemStack projectile, float soundPitch, boolean isCreativeMode, float velocity, float inaccuracy, float projectileAngle, CallbackInfo ci) { - if (arclight$capturedBoolean) { - ci.cancel(); - } - arclight$capturedBoolean = false; - } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/DyeItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/DyeItemMixin.java index 7e7bd394..0290bf96 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/DyeItemMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/DyeItemMixin.java @@ -1,6 +1,7 @@ package io.izzel.arclight.common.mixin.core.item; import io.izzel.arclight.common.bridge.entity.LivingEntityBridge; +import io.izzel.arclight.mixin.Eject; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.passive.SheepEntity; import net.minecraft.entity.player.PlayerEntity; @@ -15,8 +16,6 @@ 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.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(DyeItem.class) @@ -26,23 +25,15 @@ public class DyeItemMixin { @Shadow @Final private DyeColor dyeColor; // @formatter:on - @Inject(method = "itemInteractionForEntity", cancellable = true, at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/passive/SheepEntity;setFleeceColor(Lnet/minecraft/item/DyeColor;)V")) - public void arclight$sheepDyeWool(ItemStack stack, PlayerEntity playerIn, LivingEntity target, Hand hand, CallbackInfoReturnable cir) { + @Eject(method = "itemInteractionForEntity", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/passive/SheepEntity;setFleeceColor(Lnet/minecraft/item/DyeColor;)V")) + private void arclight$sheepDyeWool(SheepEntity sheepEntity, DyeColor color, CallbackInfoReturnable cir, ItemStack stack, PlayerEntity playerIn, LivingEntity target, Hand hand) { byte bColor = (byte) this.dyeColor.getId(); SheepDyeWoolEvent event = new SheepDyeWoolEvent((Sheep) ((LivingEntityBridge) target).bridge$getBukkitEntity(), org.bukkit.DyeColor.getByWoolData(bColor)); Bukkit.getPluginManager().callEvent(event); - if (event.isCancelled()) { cir.setReturnValue(false); + } else { + sheepEntity.setFleeceColor(DyeColor.byId(event.getColor().getWoolData())); } - arclight$capturedColor = DyeColor.byId(event.getColor().getWoolData()); - } - - private transient DyeColor arclight$capturedColor; - - @Redirect(method = "itemInteractionForEntity", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/passive/SheepEntity;setFleeceColor(Lnet/minecraft/item/DyeColor;)V")) - public void arclight$setColor(SheepEntity sheepEntity, DyeColor color) { - sheepEntity.setFleeceColor(arclight$capturedColor); - arclight$capturedColor = null; } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/EggItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/EggItemMixin.java index ed043cbd..8964e140 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/EggItemMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/EggItemMixin.java @@ -1,19 +1,23 @@ package io.izzel.arclight.common.mixin.core.item; import io.izzel.arclight.common.bridge.entity.player.ServerPlayerEntityBridge; +import io.izzel.arclight.mixin.Eject; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.entity.projectile.EggEntity; import net.minecraft.item.EggItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.stats.Stats; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvents; import net.minecraft.world.World; +import org.jetbrains.annotations.NotNull; 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.callback.CallbackInfoReturnable; @Mixin(EggItem.class) public abstract class EggItemMixin extends Item { @@ -22,26 +26,21 @@ public abstract class EggItemMixin extends Item { super(properties); } - @Override - public ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { - ItemStack stack = playerIn.getHeldItem(handIn); - if (!worldIn.isRemote) { - EggEntity eggEntity = new EggEntity(worldIn, playerIn); - eggEntity.setItem(stack); - eggEntity.shoot(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0f, 1.5f, 1.0f); - if (!worldIn.addEntity(eggEntity)) { - if (playerIn instanceof ServerPlayerEntity) { - ((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().updateInventory(); - } - return ActionResult.resultFail(stack); - } - } - worldIn.playSound(null, playerIn.getPosX(), playerIn.getPosY(), playerIn.getPosZ(), SoundEvents.ENTITY_EGG_THROW, SoundCategory.PLAYERS, 0.5f, 0.4f / (random.nextFloat() * 0.4f + 0.8f)); - playerIn.addStat(Stats.ITEM_USED.get(this)); - if (!playerIn.abilities.isCreativeMode) { - stack.shrink(1); - } - return ActionResult.resultSuccess(stack); + @Redirect(method = "onItemRightClick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;playSound(Lnet/minecraft/entity/player/PlayerEntity;DDDLnet/minecraft/util/SoundEvent;Lnet/minecraft/util/SoundCategory;FF)V")) + private void arclight$muteSound(World world, PlayerEntity player, double x, double y, double z, SoundEvent soundIn, SoundCategory category, float volume, float pitch) { } + @Eject(method = "onItemRightClick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;addEntity(Lnet/minecraft/entity/Entity;)Z")) + private boolean arclight$updateIfFail(World world, Entity entityIn, CallbackInfoReturnable> cir, World worldIn, PlayerEntity playerIn, @NotNull Hand handIn) { + if (!worldIn.addEntity(entityIn)) { + if (playerIn instanceof ServerPlayerEntityBridge) { + ((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().updateInventory(); + } + cir.setReturnValue(ActionResult.resultFail(playerIn.getHeldItem(handIn))); + return false; + } else { + worldIn.playSound(null, playerIn.getPosX(), playerIn.getPosY(), playerIn.getPosZ(), SoundEvents.ENTITY_EGG_THROW, SoundCategory.PLAYERS, 0.5F, 0.4F / (random.nextFloat() * 0.4F + 0.8F)); + return true; + } + } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/EnderEyeItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/EnderEyeItemMixin.java new file mode 100644 index 00000000..ac431c66 --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/EnderEyeItemMixin.java @@ -0,0 +1,28 @@ +package io.izzel.arclight.common.mixin.core.item; + +import io.izzel.arclight.mixin.Eject; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.EnderEyeItem; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(EnderEyeItem.class) +public class EnderEyeItemMixin { + + @Eject(method = "onItemRightClick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;addEntity(Lnet/minecraft/entity/Entity;)Z")) + private boolean arclight$returnIfFail(World world, Entity entityIn, CallbackInfoReturnable> cir, World worldIn, PlayerEntity playerIn, Hand handIn) { + if (!world.addEntity(entityIn)) { + cir.setReturnValue(new ActionResult<>(ActionResultType.FAIL, playerIn.getHeldItem(handIn))); + return false; + } else { + return true; + } + } +} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/EnderPearlItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/EnderPearlItemMixin.java index 84596482..544ad371 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/EnderPearlItemMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/EnderPearlItemMixin.java @@ -13,6 +13,7 @@ import net.minecraft.util.Hand; import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvents; import net.minecraft.world.World; +import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; @@ -28,13 +29,12 @@ public class EnderPearlItemMixin extends Item { * @reason */ @Overwrite - public ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { + public @NotNull ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, @NotNull Hand handIn) { ItemStack itemstack = playerIn.getHeldItem(handIn); - if (!worldIn.isRemote) { EnderPearlEntity enderpearlentity = new EnderPearlEntity(worldIn, playerIn); enderpearlentity.setItem(itemstack); - enderpearlentity.shoot(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); + enderpearlentity.func_234612_a_(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); if (!worldIn.addEntity(enderpearlentity)) { if (playerIn instanceof ServerPlayerEntityBridge) { ((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().updateInventory(); @@ -43,14 +43,14 @@ public class EnderPearlItemMixin extends Item { } } - worldIn.playSound(null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_ENDER_PEARL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (random.nextFloat() * 0.4F + 0.8F)); + worldIn.playSound(null, playerIn.getPosX(), playerIn.getPosY(), playerIn.getPosZ(), SoundEvents.ENTITY_ENDER_PEARL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (random.nextFloat() * 0.4F + 0.8F)); playerIn.getCooldownTracker().setCooldown(this, 20); playerIn.addStat(Stats.ITEM_USED.get(this)); - if (!playerIn.abilities.isCreativeMode) { itemstack.shrink(1); } - return new ActionResult<>(ActionResultType.SUCCESS, itemstack); + + return ActionResult.func_233538_a_(itemstack, worldIn.isRemote()); } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/FilledMapItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/FilledMapItemMixin.java index ebc34eae..b703b32f 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/FilledMapItemMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/FilledMapItemMixin.java @@ -4,8 +4,8 @@ import io.izzel.arclight.common.bridge.world.storage.MapDataBridge; import net.minecraft.item.FilledMapItem; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.RegistryKey; import net.minecraft.world.World; -import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.storage.MapData; import org.bukkit.Bukkit; import org.bukkit.event.server.MapInitializeEvent; @@ -21,7 +21,7 @@ public class FilledMapItemMixin { @Inject(method = "createMapData", locals = LocalCapture.CAPTURE_FAILHARD, at = @At("RETURN")) private static void arclight$mapInit(ItemStack stack, World worldIn, int x, int z, int scale, boolean trackingPosition, - boolean unlimitedTracking, DimensionType dimensionTypeIn, CallbackInfoReturnable cir, + boolean unlimitedTracking, RegistryKey dimensionTypeIn, CallbackInfoReturnable cir, int i, MapData mapData) { MapInitializeEvent event = new MapInitializeEvent(((MapDataBridge) mapData).bridge$getMapView()); Bukkit.getPluginManager().callEvent(event); diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/FishingRodItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/FishingRodItemMixin.java index 960b1aa4..d4f806f6 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/FishingRodItemMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/FishingRodItemMixin.java @@ -44,7 +44,7 @@ public class FishingRodItemMixin extends Item { } playerIn.swingArm(handIn); - worldIn.playSound(null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_FISHING_BOBBER_RETRIEVE, SoundCategory.NEUTRAL, 1.0F, 0.4F / (random.nextFloat() * 0.4F + 0.8F)); + worldIn.playSound(null, playerIn.getPosX(), playerIn.getPosY(), playerIn.getPosZ(), SoundEvents.ENTITY_FISHING_BOBBER_RETRIEVE, SoundCategory.NEUTRAL, 1.0F, 0.4F / (random.nextFloat() * 0.4F + 0.8F)); } else { if (!worldIn.isRemote) { int k = EnchantmentHelper.getFishingSpeedBonus(itemstack); @@ -58,7 +58,7 @@ public class FishingRodItemMixin extends Item { playerIn.fishingBobber = null; return new ActionResult<>(ActionResultType.PASS, itemstack); } - worldIn.playSound(null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_FISHING_BOBBER_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (random.nextFloat() * 0.4F + 0.8F)); + worldIn.playSound(null, playerIn.getPosX(), playerIn.getPosY(), playerIn.getPosZ(), SoundEvents.ENTITY_FISHING_BOBBER_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (random.nextFloat() * 0.4F + 0.8F)); worldIn.addEntity(new FishingBobberEntity(playerIn, worldIn, j, k)); } @@ -66,6 +66,6 @@ public class FishingRodItemMixin extends Item { playerIn.addStat(Stats.ITEM_USED.get(this)); } - return new ActionResult<>(ActionResultType.SUCCESS, itemstack); + return ActionResult.func_233538_a_(itemstack, worldIn.isRemote()); } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/FlintAndSteelItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/FlintAndSteelItemMixin.java index 71dee754..5b7a64bc 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/FlintAndSteelItemMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/FlintAndSteelItemMixin.java @@ -5,7 +5,7 @@ import net.minecraft.item.FlintAndSteelItem; import net.minecraft.item.ItemUseContext; import net.minecraft.util.ActionResultType; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IWorld; +import net.minecraft.world.World; import org.bukkit.craftbukkit.v.event.CraftEventFactory; import org.bukkit.event.block.BlockIgniteEvent; import org.spongepowered.asm.mixin.Mixin; @@ -16,13 +16,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(FlintAndSteelItem.class) public class FlintAndSteelItemMixin { - @Inject(method = "onItemUse", cancellable = true, at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/world/IWorld;playSound(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/SoundEvent;Lnet/minecraft/util/SoundCategory;FF)V")) + @Inject(method = "onItemUse", cancellable = true, at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/world/World;playSound(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/SoundEvent;Lnet/minecraft/util/SoundCategory;FF)V")) public void arclight$blockIgnite(ItemUseContext context, CallbackInfoReturnable cir) { PlayerEntity playerentity = context.getPlayer(); - IWorld world = context.getWorld(); + World world = context.getWorld(); BlockPos blockpos = context.getPos(); BlockPos blockpos1 = blockpos.offset(context.getFace()); - if (CraftEventFactory.callBlockIgniteEvent(world.getWorld(), blockpos1, BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL, playerentity).isCancelled()) { + if (CraftEventFactory.callBlockIgniteEvent(world, blockpos1, BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL, playerentity).isCancelled()) { context.getItem().damageItem(1, playerentity, (entity) -> { entity.sendBreakAnimation(context.getHand()); }); diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/MinecartItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/MinecartItemMixin.java index 3fe2a914..b887d9e7 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/MinecartItemMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/MinecartItemMixin.java @@ -1,63 +1,29 @@ package io.izzel.arclight.common.mixin.core.item; -import net.minecraft.block.AbstractRailBlock; -import net.minecraft.block.BlockState; -import net.minecraft.entity.item.minecart.AbstractMinecartEntity; -import net.minecraft.item.ItemStack; +import io.izzel.arclight.mixin.Eject; +import net.minecraft.entity.Entity; import net.minecraft.item.ItemUseContext; import net.minecraft.item.MinecartItem; -import net.minecraft.state.properties.RailShape; -import net.minecraft.tags.BlockTags; import net.minecraft.util.ActionResultType; -import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import org.bukkit.craftbukkit.v.event.CraftEventFactory; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(MinecartItem.class) public class MinecartItemMixin { - // @formatter:off - @Shadow @Final private AbstractMinecartEntity.Type minecartType; - // @formatter:on - - /** - * @author IzzelAliz - * @reason - */ - @Overwrite - public ActionResultType onItemUse(ItemUseContext context) { - World world = context.getWorld(); - BlockPos blockpos = context.getPos(); - BlockState blockstate = world.getBlockState(blockpos); - if (!blockstate.isIn(BlockTags.RAILS)) { - return ActionResultType.FAIL; + @Eject(method = "onItemUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;addEntity(Lnet/minecraft/entity/Entity;)Z")) + private boolean arclight$entityPlace(World world, Entity entityIn, CallbackInfoReturnable cir, ItemUseContext context) { + if (CraftEventFactory.callEntityPlaceEvent(context, entityIn).isCancelled()) { + cir.setReturnValue(ActionResultType.FAIL); + return false; + } else if (!world.addEntity(entityIn)) { + cir.setReturnValue(ActionResultType.PASS); + return false; } else { - ItemStack itemstack = context.getItem(); - if (!world.isRemote) { - RailShape railshape = blockstate.getBlock() instanceof AbstractRailBlock ? ((AbstractRailBlock) blockstate.getBlock()).getRailDirection(blockstate, world, blockpos, null) : RailShape.NORTH_SOUTH; - double d0 = 0.0D; - if (railshape.isAscending()) { - d0 = 0.5D; - } - - AbstractMinecartEntity abstractminecartentity = AbstractMinecartEntity.create(world, (double) blockpos.getX() + 0.5D, (double) blockpos.getY() + 0.0625D + d0, (double) blockpos.getZ() + 0.5D, this.minecartType); - if (itemstack.hasDisplayName()) { - abstractminecartentity.setCustomName(itemstack.getDisplayName()); - } - if (CraftEventFactory.callEntityPlaceEvent(context, abstractminecartentity).isCancelled()) { - return ActionResultType.FAIL; - } - if (!world.addEntity(abstractminecartentity)) { - return ActionResultType.PASS; - } - } - - itemstack.shrink(1); - return ActionResultType.SUCCESS; + return true; } } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/SnowballItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/SnowballItemMixin.java index 2a9f4a23..c6d27db9 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/SnowballItemMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/SnowballItemMixin.java @@ -14,6 +14,7 @@ import net.minecraft.util.Hand; import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvents; import net.minecraft.world.World; +import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; @@ -29,7 +30,7 @@ public class SnowballItemMixin extends Item { * @reason */ @Overwrite - public ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { + public @NotNull ActionResult onItemRightClick(World worldIn, PlayerEntity playerIn, @NotNull Hand handIn) { ItemStack itemstack = playerIn.getHeldItem(handIn); if (!worldIn.isRemote) { SnowballEntity snowballentity = new SnowballEntity(worldIn, playerIn); @@ -38,8 +39,8 @@ public class SnowballItemMixin extends Item { if (!playerIn.abilities.isCreativeMode) { itemstack.shrink(1); } - worldIn.playSound(null, playerIn.posX, playerIn.posY, playerIn.posZ, SoundEvents.ENTITY_SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (random.nextFloat() * 0.4F + 0.8F)); - snowballentity.shoot(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); + worldIn.playSound(null, playerIn.getPosX(), playerIn.getPosY(), playerIn.getPosZ(), SoundEvents.ENTITY_SNOWBALL_THROW, SoundCategory.NEUTRAL, 0.5F, 0.4F / (random.nextFloat() * 0.4F + 0.8F)); + snowballentity.func_234612_a_(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); } else if (playerIn instanceof ServerPlayerEntity) { ((ServerPlayerEntityBridge) playerIn).bridge$getBukkitEntity().updateInventory(); } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/SpawnEggItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/SpawnEggItemMixin.java new file mode 100644 index 00000000..d060b339 --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/SpawnEggItemMixin.java @@ -0,0 +1,26 @@ +package io.izzel.arclight.common.mixin.core.item; + +import io.izzel.arclight.common.bridge.world.WorldBridge; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.MobEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.SpawnEggItem; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.server.ServerWorld; +import org.bukkit.event.entity.CreatureSpawnEvent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.Optional; + +@Mixin(SpawnEggItem.class) +public class SpawnEggItemMixin { + + @Inject(method = "func_234809_a_", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/server/ServerWorld;func_242417_l(Lnet/minecraft/entity/Entity;)V")) + private void arclight$reason(PlayerEntity p_234809_1_, MobEntity p_234809_2_, EntityType p_234809_3_, ServerWorld world, Vector3d p_234809_5_, ItemStack p_234809_6_, CallbackInfoReturnable> cir) { + ((WorldBridge) world).bridge$pushAddEntityReason(CreatureSpawnEvent.SpawnReason.SPAWNER_EGG); + } +} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/TridentItemMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/TridentItemMixin.java index d7dd48fd..a9341a3f 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/TridentItemMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/TridentItemMixin.java @@ -2,6 +2,7 @@ package io.izzel.arclight.common.mixin.core.item; import io.izzel.arclight.common.bridge.entity.player.ServerPlayerEntityBridge; import io.izzel.arclight.common.bridge.entity.projectile.TridentEntityBridge; +import io.izzel.arclight.mixin.Eject; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; @@ -29,27 +30,19 @@ public class TridentItemMixin { if (j != 0) stack.damageItem(amount, entityIn, onBroken); } - private transient boolean arclight$success; - - @Inject(method = "onPlayerStoppedUsing", cancellable = true, at = @At(value = "INVOKE", shift = At.Shift.AFTER, target = "Lnet/minecraft/world/World;addEntity(Lnet/minecraft/entity/Entity;)Z")) - public void arclight$returnIfFail(ItemStack stack, World worldIn, LivingEntity entityLiving, int timeLeft, CallbackInfo ci) { - if (!arclight$success) { - ci.cancel(); - } - } - - @Redirect(method = "onPlayerStoppedUsing", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;addEntity(Lnet/minecraft/entity/Entity;)Z")) - public boolean arclight$addEntity(World world, Entity entityIn, ItemStack stack, World worldIn, LivingEntity entityLiving, int timeLeft) { + @Eject(method = "onPlayerStoppedUsing", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;addEntity(Lnet/minecraft/entity/Entity;)Z")) + public boolean arclight$addEntity(World world, Entity entityIn, CallbackInfo ci, ItemStack stack, World worldIn, LivingEntity entityLiving, int timeLeft) { if (!world.addEntity(entityIn)) { if (entityLiving instanceof ServerPlayerEntity) { ((ServerPlayerEntityBridge) entityLiving).bridge$getBukkitEntity().updateInventory(); } - return arclight$success = false; + ci.cancel(); + return false; } stack.damageItem(1, entityLiving, (entity) -> entity.sendBreakAnimation(entityLiving.getActiveHand())); ((TridentEntityBridge) entityIn).bridge$setThrownStack(stack.copy()); - return arclight$success = true; + return true; } @Inject(method = "onPlayerStoppedUsing", at = @At(value = "FIELD", ordinal = 1, target = "Lnet/minecraft/entity/player/PlayerEntity;rotationYaw:F")) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/ArmorDyeRecipeMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/ArmorDyeRecipeMixin.java deleted file mode 100644 index a8501cb9..00000000 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/ArmorDyeRecipeMixin.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.izzel.arclight.common.mixin.core.item.crafting; - -import io.izzel.arclight.common.bridge.item.crafting.IRecipeBridge; -import net.minecraft.item.Items; -import net.minecraft.item.crafting.ArmorDyeRecipe; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.item.crafting.SpecialRecipe; -import net.minecraft.util.ResourceLocation; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; -import org.spongepowered.asm.mixin.Mixin; -import io.izzel.arclight.common.mod.util.ArclightSpecialRecipe; - -@Mixin(ArmorDyeRecipe.class) -public abstract class ArmorDyeRecipeMixin extends SpecialRecipe implements IRecipeBridge { - - public ArmorDyeRecipeMixin(ResourceLocation idIn) { - super(idIn); - } - - @Override - public Recipe bridge$toBukkitRecipe() { - return ArclightSpecialRecipe.shapeless(new ItemStack(Material.LEATHER_HELMET), this, - Ingredient.fromItems(Items.BONE_MEAL)); - } -} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/BannerDuplicateRecipeMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/BannerDuplicateRecipeMixin.java deleted file mode 100644 index f0e26c7b..00000000 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/BannerDuplicateRecipeMixin.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.izzel.arclight.common.mixin.core.item.crafting; - -import io.izzel.arclight.common.bridge.item.crafting.IRecipeBridge; -import net.minecraft.item.Items; -import net.minecraft.item.crafting.BannerDuplicateRecipe; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.item.crafting.SpecialRecipe; -import net.minecraft.util.ResourceLocation; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; -import org.spongepowered.asm.mixin.Mixin; -import io.izzel.arclight.common.mod.util.ArclightSpecialRecipe; - -@Mixin(BannerDuplicateRecipe.class) -public abstract class BannerDuplicateRecipeMixin extends SpecialRecipe implements IRecipeBridge { - - public BannerDuplicateRecipeMixin(ResourceLocation idIn) { - super(idIn); - } - - @Override - public Recipe bridge$toBukkitRecipe() { - return ArclightSpecialRecipe.shapeless(new ItemStack(Material.WHITE_BANNER), this, - Ingredient.fromItems(Items.WHITE_BANNER)); - } -} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/BookCloningRecipeMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/BookCloningRecipeMixin.java deleted file mode 100644 index 37950a6a..00000000 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/BookCloningRecipeMixin.java +++ /dev/null @@ -1,21 +0,0 @@ -package io.izzel.arclight.common.mixin.core.item.crafting; - -import io.izzel.arclight.common.bridge.item.crafting.IRecipeBridge; -import io.izzel.arclight.common.mod.util.ArclightSpecialRecipe; -import net.minecraft.item.Items; -import net.minecraft.item.crafting.BookCloningRecipe; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.item.crafting.Ingredient; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; -import org.spongepowered.asm.mixin.Mixin; - -@Mixin(BookCloningRecipe.class) -public class BookCloningRecipeMixin implements IRecipeBridge { - - @Override - public Recipe bridge$toBukkitRecipe() { - return ArclightSpecialRecipe.shapeless(new ItemStack(Material.WRITTEN_BOOK), (IRecipe) this, Ingredient.fromItems(Items.WRITTEN_BOOK)); - } -} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/FireworkRocketRecipeMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/FireworkRocketRecipeMixin.java deleted file mode 100644 index 98a61aa7..00000000 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/FireworkRocketRecipeMixin.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.izzel.arclight.common.mixin.core.item.crafting; - -import io.izzel.arclight.common.bridge.item.crafting.IRecipeBridge; -import net.minecraft.item.Items; -import net.minecraft.item.crafting.FireworkRocketRecipe; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.item.crafting.SpecialRecipe; -import net.minecraft.util.ResourceLocation; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; -import org.spongepowered.asm.mixin.Mixin; -import io.izzel.arclight.common.mod.util.ArclightSpecialRecipe; - -@Mixin(FireworkRocketRecipe.class) -public abstract class FireworkRocketRecipeMixin extends SpecialRecipe implements IRecipeBridge { - - public FireworkRocketRecipeMixin(ResourceLocation idIn) { - super(idIn); - } - - @Override - public Recipe bridge$toBukkitRecipe() { - return ArclightSpecialRecipe.shapeless(new ItemStack(Material.FIREWORK_ROCKET, 3), this, - Ingredient.fromItems(Items.GUNPOWDER)); - } -} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/FireworkStarFadeRecipeMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/FireworkStarFadeRecipeMixin.java deleted file mode 100644 index d2395ca6..00000000 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/FireworkStarFadeRecipeMixin.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.izzel.arclight.common.mixin.core.item.crafting; - -import io.izzel.arclight.common.bridge.item.crafting.IRecipeBridge; -import net.minecraft.item.Items; -import net.minecraft.item.crafting.FireworkStarFadeRecipe; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.item.crafting.SpecialRecipe; -import net.minecraft.util.ResourceLocation; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; -import org.spongepowered.asm.mixin.Mixin; -import io.izzel.arclight.common.mod.util.ArclightSpecialRecipe; - -@Mixin(FireworkStarFadeRecipe.class) -public abstract class FireworkStarFadeRecipeMixin extends SpecialRecipe implements IRecipeBridge { - - public FireworkStarFadeRecipeMixin(ResourceLocation idIn) { - super(idIn); - } - - @Override - public Recipe bridge$toBukkitRecipe() { - return ArclightSpecialRecipe.shapeless(new ItemStack(Material.FIREWORK_STAR), this, - Ingredient.fromItems(Items.FIREWORK_STAR, Items.BONE_MEAL)); - } -} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/FireworkStarRecipeMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/FireworkStarRecipeMixin.java deleted file mode 100644 index f8185664..00000000 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/FireworkStarRecipeMixin.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.izzel.arclight.common.mixin.core.item.crafting; - -import io.izzel.arclight.common.bridge.item.crafting.IRecipeBridge; -import net.minecraft.item.Items; -import net.minecraft.item.crafting.FireworkStarRecipe; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.item.crafting.SpecialRecipe; -import net.minecraft.util.ResourceLocation; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; -import org.spongepowered.asm.mixin.Mixin; -import io.izzel.arclight.common.mod.util.ArclightSpecialRecipe; - -@Mixin(FireworkStarRecipe.class) -public abstract class FireworkStarRecipeMixin extends SpecialRecipe implements IRecipeBridge { - - public FireworkStarRecipeMixin(ResourceLocation idIn) { - super(idIn); - } - - @Override - public Recipe bridge$toBukkitRecipe() { - return ArclightSpecialRecipe.shapeless(new ItemStack(Material.FIREWORK_STAR), this, - Ingredient.fromItems(Items.GUNPOWDER)); - } -} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/IRecipeMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/IRecipeMixin.java index a032651a..41533942 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/IRecipeMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/IRecipeMixin.java @@ -4,7 +4,6 @@ import io.izzel.arclight.common.bridge.item.crafting.IRecipeBridge; import io.izzel.arclight.common.mod.util.ArclightSpecialRecipe; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; -import org.bukkit.craftbukkit.v.inventory.CraftItemStack; import org.bukkit.inventory.Recipe; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -22,6 +21,6 @@ public interface IRecipeMixin extends IRecipeBridge { @Override default Recipe bridge$toBukkitRecipe() { - return ArclightSpecialRecipe.shapeless(CraftItemStack.asCraftMirror(getRecipeOutput()), (IRecipe) this); + return new ArclightSpecialRecipe((IRecipe) this); } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/IngredientMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/IngredientMixin.java index c65687d6..5f66827f 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/IngredientMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/IngredientMixin.java @@ -3,7 +3,6 @@ package io.izzel.arclight.common.mixin.core.item.crafting; import io.izzel.arclight.common.bridge.item.crafting.IngredientBridge; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; @@ -14,7 +13,6 @@ import javax.annotation.Nullable; public abstract class IngredientMixin implements IngredientBridge { // @formatter:off - @Shadow @Final private Ingredient.IItemList[] acceptedItems; @Shadow public abstract void determineMatchingStacks(); @Shadow public ItemStack[] matchingStacks; // @formatter:on @@ -29,24 +27,25 @@ public abstract class IngredientMixin implements IngredientBridge { public boolean test(@Nullable ItemStack stack) { if (stack == null) { return false; - } else if (this.acceptedItems.length == 0) { - return stack.isEmpty(); } else { this.determineMatchingStacks(); - - for (ItemStack itemstack : this.matchingStacks) { - if (exact) { - if (itemstack.getItem() == stack.getItem() && ItemStack.areItemsEqual(itemstack, stack)) { + if (this.matchingStacks.length == 0) { + return stack.isEmpty(); + } else { + for (ItemStack itemstack : this.matchingStacks) { + if (exact) { + if (itemstack.getItem() == stack.getItem() && ItemStack.areItemsEqual(itemstack, stack)) { + return true; + } + continue; + } + if (itemstack.getItem() == stack.getItem()) { return true; } - continue; } - if (itemstack.getItem() == stack.getItem()) { - return true; - } - } - return false; + return false; + } } } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/MapCloningRecipeMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/MapCloningRecipeMixin.java deleted file mode 100644 index d826d279..00000000 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/MapCloningRecipeMixin.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.izzel.arclight.common.mixin.core.item.crafting; - -import io.izzel.arclight.common.bridge.item.crafting.IRecipeBridge; -import net.minecraft.item.Items; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.item.crafting.MapCloningRecipe; -import net.minecraft.item.crafting.SpecialRecipe; -import net.minecraft.util.ResourceLocation; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; -import org.spongepowered.asm.mixin.Mixin; -import io.izzel.arclight.common.mod.util.ArclightSpecialRecipe; - -@Mixin(MapCloningRecipe.class) -public abstract class MapCloningRecipeMixin extends SpecialRecipe implements IRecipeBridge { - - public MapCloningRecipeMixin(ResourceLocation idIn) { - super(idIn); - } - - @Override - public Recipe bridge$toBukkitRecipe() { - return ArclightSpecialRecipe.shapeless(new ItemStack(Material.MAP), this, - Ingredient.fromItems(Items.MAP)); - } -} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/RepairItemRecipeMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/RepairItemRecipeMixin.java deleted file mode 100644 index 454307b1..00000000 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/RepairItemRecipeMixin.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.izzel.arclight.common.mixin.core.item.crafting; - -import io.izzel.arclight.common.bridge.item.crafting.IRecipeBridge; -import net.minecraft.item.Items; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.item.crafting.RepairItemRecipe; -import net.minecraft.item.crafting.SpecialRecipe; -import net.minecraft.util.ResourceLocation; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; -import org.spongepowered.asm.mixin.Mixin; -import io.izzel.arclight.common.mod.util.ArclightSpecialRecipe; - -@Mixin(RepairItemRecipe.class) -public abstract class RepairItemRecipeMixin extends SpecialRecipe implements IRecipeBridge { - - public RepairItemRecipeMixin(ResourceLocation idIn) { - super(idIn); - } - - @Override - public Recipe bridge$toBukkitRecipe() { - return ArclightSpecialRecipe.shapeless(new ItemStack(Material.LEATHER_HELMET), this, - Ingredient.fromItems(Items.LEATHER_HELMET)); - } -} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/ShieldRecipesMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/ShieldRecipesMixin.java deleted file mode 100644 index 5f3ade46..00000000 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/ShieldRecipesMixin.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.izzel.arclight.common.mixin.core.item.crafting; - -import io.izzel.arclight.common.bridge.item.crafting.IRecipeBridge; -import io.izzel.arclight.common.mod.util.ArclightSpecialRecipe; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.item.crafting.ShieldRecipes; -import net.minecraft.item.crafting.SpecialRecipe; -import net.minecraft.util.ResourceLocation; -import org.bukkit.craftbukkit.v.inventory.CraftItemStack; -import org.bukkit.inventory.Recipe; -import org.spongepowered.asm.mixin.Mixin; - -@Mixin(ShieldRecipes.class) -public abstract class ShieldRecipesMixin extends SpecialRecipe implements IRecipeBridge { - - public ShieldRecipesMixin(ResourceLocation idIn) { - super(idIn); - } - - @Override - public Recipe bridge$toBukkitRecipe() { - return ArclightSpecialRecipe.shapeless(CraftItemStack.asCraftMirror(new ItemStack(Items.SHIELD)), this, - Ingredient.fromItems(Items.WHITE_BANNER)); - } -} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/ShulkerBoxColoringRecipeMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/ShulkerBoxColoringRecipeMixin.java deleted file mode 100644 index 9dadb96c..00000000 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/ShulkerBoxColoringRecipeMixin.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.izzel.arclight.common.mixin.core.item.crafting; - -import io.izzel.arclight.common.bridge.item.crafting.IRecipeBridge; -import net.minecraft.block.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.item.crafting.ShulkerBoxColoringRecipe; -import net.minecraft.item.crafting.SpecialRecipe; -import net.minecraft.util.ResourceLocation; -import org.bukkit.craftbukkit.v.inventory.CraftItemStack; -import org.bukkit.inventory.Recipe; -import org.spongepowered.asm.mixin.Mixin; -import io.izzel.arclight.common.mod.util.ArclightSpecialRecipe; - -@Mixin(ShulkerBoxColoringRecipe.class) -public abstract class ShulkerBoxColoringRecipeMixin extends SpecialRecipe implements IRecipeBridge { - - public ShulkerBoxColoringRecipeMixin(ResourceLocation idIn) { - super(idIn); - } - - @Override - public Recipe bridge$toBukkitRecipe() { - return ArclightSpecialRecipe.shapeless(CraftItemStack.asCraftMirror(new ItemStack(Blocks.WHITE_SHULKER_BOX)), this, - Ingredient.fromItems(Items.BONE_MEAL)); - } -} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/SmithingRecipeMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/SmithingRecipeMixin.java new file mode 100644 index 00000000..4add535a --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/SmithingRecipeMixin.java @@ -0,0 +1,32 @@ +package io.izzel.arclight.common.mixin.core.item.crafting; + +import io.izzel.arclight.common.bridge.item.crafting.IRecipeBridge; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.item.crafting.SmithingRecipe; +import net.minecraft.util.ResourceLocation; +import org.bukkit.craftbukkit.v.inventory.CraftItemStack; +import org.bukkit.craftbukkit.v.inventory.CraftRecipe; +import org.bukkit.craftbukkit.v.inventory.CraftSmithingRecipe; +import org.bukkit.craftbukkit.v.util.CraftNamespacedKey; +import org.bukkit.inventory.Recipe; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(SmithingRecipe.class) +public class SmithingRecipeMixin implements IRecipeBridge { + + // @formatter:off + @Shadow @Final private ItemStack result; + @Shadow @Final private ResourceLocation recipeId; + @Shadow @Final private Ingredient base; + @Shadow @Final private Ingredient addition; + // @formatter:on + + @Override + public Recipe bridge$toBukkitRecipe() { + CraftItemStack result = CraftItemStack.asCraftMirror(this.result); + return new CraftSmithingRecipe(CraftNamespacedKey.fromMinecraft(this.recipeId), result, CraftRecipe.toBukkit(this.base), CraftRecipe.toBukkit(this.addition)); + } +} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/SuspiciousStewRecipeMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/SuspiciousStewRecipeMixin.java deleted file mode 100644 index a34c0fce..00000000 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/SuspiciousStewRecipeMixin.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.izzel.arclight.common.mixin.core.item.crafting; - -import io.izzel.arclight.common.bridge.item.crafting.IRecipeBridge; -import net.minecraft.item.Items; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.item.crafting.SpecialRecipe; -import net.minecraft.item.crafting.SuspiciousStewRecipe; -import net.minecraft.util.ResourceLocation; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; -import org.spongepowered.asm.mixin.Mixin; -import io.izzel.arclight.common.mod.util.ArclightSpecialRecipe; - -@Mixin(SuspiciousStewRecipe.class) -public abstract class SuspiciousStewRecipeMixin extends SpecialRecipe implements IRecipeBridge { - - public SuspiciousStewRecipeMixin(ResourceLocation idIn) { - super(idIn); - } - - @Override - public Recipe bridge$toBukkitRecipe() { - return ArclightSpecialRecipe.shapeless(new ItemStack(Material.SUSPICIOUS_STEW), this, Ingredient.fromItems(Items.BOWL)); - } -} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/TippedArrowRecipeMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/TippedArrowRecipeMixin.java deleted file mode 100644 index 2aaa211c..00000000 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/item/crafting/TippedArrowRecipeMixin.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.izzel.arclight.common.mixin.core.item.crafting; - -import io.izzel.arclight.common.bridge.item.crafting.IRecipeBridge; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.item.crafting.SpecialRecipe; -import net.minecraft.item.crafting.TippedArrowRecipe; -import net.minecraft.util.ResourceLocation; -import org.bukkit.craftbukkit.v.inventory.CraftItemStack; -import org.bukkit.inventory.Recipe; -import org.spongepowered.asm.mixin.Mixin; -import io.izzel.arclight.common.mod.util.ArclightSpecialRecipe; - -@Mixin(TippedArrowRecipe.class) -public abstract class TippedArrowRecipeMixin extends SpecialRecipe implements IRecipeBridge { - - public TippedArrowRecipeMixin(ResourceLocation idIn) { - super(idIn); - } - - @Override - public Recipe bridge$toBukkitRecipe() { - CraftItemStack result = CraftItemStack.asCraftMirror(new ItemStack(Items.TIPPED_ARROW, 8)); - return ArclightSpecialRecipe.shaped(result, this, 3, - Ingredient.fromItems(Items.ARROW), Ingredient.fromItems(Items.ARROW), Ingredient.fromItems(Items.ARROW), - Ingredient.fromItems(Items.ARROW), Ingredient.fromItems(Items.LINGERING_POTION), Ingredient.fromItems(Items.ARROW), - Ingredient.fromItems(Items.ARROW), Ingredient.fromItems(Items.ARROW), Ingredient.fromItems(Items.ARROW) - ); - } -} diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/ArclightSpecialRecipe.java b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/ArclightSpecialRecipe.java index 133443a8..e2e2ede5 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/ArclightSpecialRecipe.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mod/util/ArclightSpecialRecipe.java @@ -2,114 +2,35 @@ package io.izzel.arclight.common.mod.util; import io.izzel.arclight.common.bridge.item.crafting.RecipeManagerBridge; import net.minecraft.item.crafting.IRecipe; -import net.minecraft.item.crafting.Ingredient; -import net.minecraft.item.crafting.SpecialRecipe; -import org.bukkit.Bukkit; -import org.bukkit.Keyed; +import net.minecraftforge.fml.server.ServerLifecycleHooks; import org.bukkit.NamespacedKey; -import org.bukkit.craftbukkit.v.CraftServer; +import org.bukkit.craftbukkit.v.inventory.CraftComplexRecipe; import org.bukkit.craftbukkit.v.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v.inventory.CraftRecipe; -import org.bukkit.craftbukkit.v.inventory.CraftShapedRecipe; -import org.bukkit.craftbukkit.v.inventory.CraftShapelessRecipe; import org.bukkit.craftbukkit.v.util.CraftNamespacedKey; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.RecipeChoice; import org.jetbrains.annotations.NotNull; -public class ArclightSpecialRecipe { +public class ArclightSpecialRecipe extends CraftComplexRecipe { - public static class Shapeless extends CraftShapelessRecipe { + private final IRecipe recipe; - private final IRecipe recipe; - - public Shapeless(ItemStack result, IRecipe recipe) { - super(CraftNamespacedKey.fromMinecraft(recipe.getId()), result); - this.recipe = recipe; - this.setGroup(this.recipe.getGroup()); - } - - @Override - public void addToCraftingManager() { - ((RecipeManagerBridge) ((CraftServer) Bukkit.getServer()).getServer() - .getRecipeManager()).bridge$addRecipe(recipe); - } + public ArclightSpecialRecipe(IRecipe recipe) { + super(null); + this.recipe = recipe; } - public static class Shaped extends CraftShapedRecipe { - - private final SpecialRecipe recipe; - - public Shaped(ItemStack result, SpecialRecipe recipe) { - super(CraftNamespacedKey.fromMinecraft(recipe.getId()), result); - this.recipe = recipe; - this.setGroup(this.recipe.getGroup()); - } - - @Override - public void addToCraftingManager() { - ((RecipeManagerBridge) ((CraftServer) Bukkit.getServer()).getServer() - .getRecipeManager()).bridge$addRecipe(recipe); - } + @Override + public @NotNull ItemStack getResult() { + return CraftItemStack.asCraftMirror(this.recipe.getRecipeOutput()); } - public static class Dynamic implements CraftRecipe, Keyed { - - private final IRecipe recipe; - - public Dynamic(IRecipe recipe) { - this.recipe = recipe; - } - - @Override - public void addToCraftingManager() { - ((RecipeManagerBridge) ((CraftServer) Bukkit.getServer()).getServer().getRecipeManager()).bridge$addRecipe(this.recipe); - } - - @Override - public @NotNull ItemStack getResult() { - return CraftItemStack.asCraftMirror(this.recipe.getRecipeOutput()); - } - - @Override - @NotNull - public NamespacedKey getKey() { - return CraftNamespacedKey.fromMinecraft(this.recipe.getId()); - } + @Override + public @NotNull NamespacedKey getKey() { + return CraftNamespacedKey.fromMinecraft(this.recipe.getId()); } - public static CraftRecipe shapeless(ItemStack result, IRecipe recipe, Ingredient... ingredients) { - if (recipe.getRecipeOutput().isEmpty()) { - return new Dynamic(recipe); - } - Shapeless shapeless = new Shapeless(result, recipe); - for (Ingredient ingredient : ingredients) { - shapeless.addIngredient(CraftRecipe.toBukkit(ingredient)); - } - return shapeless; - } - - public static CraftShapedRecipe shaped(ItemStack result, SpecialRecipe recipe, int width, Ingredient... ingredients) { - Shaped shaped = new Shaped(result, recipe); - int height = ingredients.length / width; - String[] shape = new String[height]; - char c = 'a'; - for (int i = 0; i < height; i++) { - StringBuilder builder = new StringBuilder(); - for (int j = 0; j < width; j++) { - builder.append(c++); - } - shape[i] = builder.toString(); - } - shaped.shape(shape); - c = 'a'; - for (Ingredient ingredient : ingredients) { - RecipeChoice choice = CraftRecipe.toBukkit(ingredient); - if (choice != null) { - shaped.setIngredient(c, choice); - } - c++; - } - return shaped; + @Override + public void addToCraftingManager() { + ((RecipeManagerBridge) ServerLifecycleHooks.getCurrentServer().getRecipeManager()).bridge$addRecipe(this.recipe); } } diff --git a/arclight-common/src/main/resources/mixins.arclight.core.json b/arclight-common/src/main/resources/mixins.arclight.core.json index 089b4d9e..b9165533 100644 --- a/arclight-common/src/main/resources/mixins.arclight.core.json +++ b/arclight-common/src/main/resources/mixins.arclight.core.json @@ -60,14 +60,12 @@ "block.GrassBlockMixin", "block.IceBlockMixin", "block.JukeBoxBlockMixin", - "block.KelpTopBlockMixin", "block.LeavesBlockMixin", "block.LecternBlockMixin", "block.LeverBlockMixin", "block.LilyPadBlockMixin", "block.MagmaBlockMixin", "block.MushroomBlockMixin", - "block.NetherPortalBlock_SizeMixin", "block.NetherPortalBlockMixin", "block.NetherWartBlockMixin", "block.NoteBlockMixin", @@ -110,7 +108,6 @@ "command.arguments.EntitySelectorParserMixin", "command.impl.EffectCommandMixin", "command.impl.ReloadCommandMixin", - "command.impl.SummonCommandMixin", "command.impl.TeleportCommandMixin", "command.impl.TimeCommandMixin", "enchantment.DamageEnchantmentMixin", @@ -299,6 +296,7 @@ "item.DyeItemMixin", "item.EggItemMixin", "item.EnderCrystalItemMixin", + "item.EnderEyeItemMixin", "item.EnderPearlItemMixin", "item.FilledMapItemMixin", "item.FireChargeItemMixin", @@ -313,31 +311,21 @@ "item.PotionItemMixin", "item.ShearsItemMixin", "item.SnowballItemMixin", + "item.SpawnEggItemMixin", "item.TridentItemMixin", - "item.crafting.ArmorDyeRecipeMixin", - "item.crafting.BannerDuplicateRecipeMixin", "item.crafting.BlastingRecipeMixin", - "item.crafting.BookCloningRecipeMixin", "item.crafting.CampfireCookingRecipeMixin", - "item.crafting.FireworkRocketRecipeMixin", - "item.crafting.FireworkStarFadeRecipeMixin", - "item.crafting.FireworkStarRecipeMixin", "item.crafting.FurnaceRecipeMixin", "item.crafting.IngredientMixin", "item.crafting.IRecipeMixin", - "item.crafting.MapCloningRecipeMixin", "item.crafting.RecipeManagerMixin", - "item.crafting.RepairItemRecipeMixin", "item.crafting.ServerRecipeBookMixin", "item.crafting.ShapedRecipeMixin", "item.crafting.ShapelessRecipeMixin", - "item.crafting.ShieldRecipesMixin", - "item.crafting.ShulkerBoxColoringRecipeMixin", + "item.crafting.SmithingRecipeMixin", "item.crafting.SmokingRecipeMixin", "item.crafting.SpecialRecipeMixin", "item.crafting.StonecuttingRecipeMixin", - "item.crafting.SuspiciousStewRecipeMixin", - "item.crafting.TippedArrowRecipeMixin", "network.NetworkManagerMixin", "network.PacketThreadUtilMixin", "network.datasync.EntityDataManagerMixin", @@ -427,7 +415,6 @@ "world.storage.DerivedWorldInfoMixin", "world.storage.MapData_MapInfoMixin", "world.storage.MapDataMixin", - "world.storage.SaveFormat_LevelSaveMixin", "world.storage.SaveFormatMixin", "world.storage.SaveHandlerMixin", "world.storage.WorldInfoMixin", diff --git a/arclight-forge-1.16/build.gradle b/arclight-forge-1.16/build.gradle index f1b47fb7..e04eeb5d 100644 --- a/arclight-forge-1.16/build.gradle +++ b/arclight-forge-1.16/build.gradle @@ -56,6 +56,7 @@ repositories { maven { url = 'https://repo.codemc.io/repository/nms/' } maven { url = 'https://files.minecraftforge.net/maven/' } maven { url = 'https://www.dogforce-games.com/maven/' } + maven { url = 'https://jitpack.io/' } } def embedLibs = ['org.spongepowered:mixin:0.8', 'org.ow2.asm:asm-util:8.0.1', @@ -80,6 +81,7 @@ dependencies { } embed 'net.md-5:bungeecord-chat:1.16-R0.3@jar' embed "org.spigotmc:spigot-api:$minecraftVersion-R0.1-SNAPSHOT@jar" + embed 'com.github.ArclightTeam:mixin-tools:1.0.0' } def getGitHash = { ->