From 2749cdc757d7eed8d2f56419383c93cd1051f3ba Mon Sep 17 00:00:00 2001 From: RubixDev Date: Wed, 8 Jan 2025 16:44:44 +0100 Subject: [PATCH] wip: 1.21.3 support waiting for BRRP update --- build.gradle | 2 + settings.json | 3 +- .../mixins/AbstractCauldronBlockMixin.java | 34 ++++++------- .../mixins/AbstractCookingRecipeMixin.java | 31 +++++++++--- .../rubixdev/rug/mixins/BlockItemMixin.java | 29 ++++++----- .../de/rubixdev/rug/mixins/BlockMixin.java | 2 +- .../rug/mixins/CreeperEntityMixin.java | 30 ++---------- .../rug/mixins/EnderDragonEntityMixin.java | 34 ++++++++++--- .../rug/mixins/LivingEntityMixin.java | 39 +++++++++++++-- .../rug/mixins/PlayerEntityMixin.java | 49 ++++++++++--------- .../mixins/PointedDripstoneBlockMixin.java | 15 +++++- .../rug/mixins/ServerPlayerEntityMixin.java | 27 +++++++++- .../rug/mixins/StoneCutterBlockMixin.java | 13 ++++- .../rug/mixins/VillagerEntityMixin.java | 14 +++++- versions/1.21.3/gradle.properties | 21 ++++++++ versions/1.21.3/rug.accesswidener | 3 ++ versions/mainProject | 2 +- 17 files changed, 241 insertions(+), 107 deletions(-) create mode 100644 versions/1.21.3/gradle.properties create mode 100644 versions/1.21.3/rug.accesswidener diff --git a/build.gradle b/build.gradle index 81d9355..3e83447 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,9 @@ preprocess { def mc1204 = createNode('1.20.4' , 1_20_04, 'yarn') def mc1206 = createNode('1.20.6' , 1_20_06, 'yarn') def mc1211 = createNode('1.21.1' , 1_21_01, 'yarn') + def mc1213 = createNode('1.21.3' , 1_21_03, 'yarn') + mc1213.link(mc1211, null) mc1211.link(mc1206, null) mc1206.link(mc1204, file('versions/mapping-1.20.6-1.20.4.txt')) mc1204.link(mc1202, file('versions/mapping-1.20.4-1.20.2.txt')) diff --git a/settings.json b/settings.json index 3f0d372..a079a8d 100644 --- a/settings.json +++ b/settings.json @@ -4,6 +4,7 @@ "1.20.2", "1.20.4", "1.20.6", - "1.21.1" + "1.21.1", + "1.21.3" ] } diff --git a/src/main/java/de/rubixdev/rug/mixins/AbstractCauldronBlockMixin.java b/src/main/java/de/rubixdev/rug/mixins/AbstractCauldronBlockMixin.java index 0694f77..6240985 100644 --- a/src/main/java/de/rubixdev/rug/mixins/AbstractCauldronBlockMixin.java +++ b/src/main/java/de/rubixdev/rug/mixins/AbstractCauldronBlockMixin.java @@ -18,32 +18,28 @@ //#if MC >= 12006 import net.minecraft.item.ItemStack; -import net.minecraft.util.ItemActionResult; +//#endif + +//#if MC >= 12006 && < 12103 +//$$ import net.minecraft.util.ItemActionResult; //#else -//$$ import net.minecraft.util.ActionResult; +import net.minecraft.util.ActionResult; //#endif @Mixin(AbstractCauldronBlock.class) public class AbstractCauldronBlockMixin { - //#if MC >= 12006 @Inject( + //#if MC >= 12006 method = "onUseWithItem", + //#else + //$$ method = "onUse", + //#endif at = @At( value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getItem()Lnet/minecraft/item/Item;", shift = At.Shift.AFTER), cancellable = true) - //#else - //$$ @Inject( - //$$ method = "onUse", - //$$ at = - //$$ @At( - //$$ value = "INVOKE", - //$$ target = "Lnet/minecraft/item/ItemStack;getItem()Lnet/minecraft/item/Item;", - //$$ shift = At.Shift.AFTER), - //$$ cancellable = true) - //#endif private void onOnUse( //#if MC >= 12006 ItemStack stack, @@ -54,10 +50,10 @@ private void onOnUse( PlayerEntity player, Hand hand, BlockHitResult hit, - //#if MC >= 12006 - CallbackInfoReturnable cir + //#if MC >= 12006 && MC < 12103 + //$$ CallbackInfoReturnable cir //#else - //$$ CallbackInfoReturnable cir + CallbackInfoReturnable cir //#endif ) { Item item = player.getStackInHand(hand).getItem(); @@ -71,10 +67,10 @@ private void onOnUse( player.getStackInHand(hand).decrement(1); } - //#if MC >= 12006 - cir.setReturnValue(ItemActionResult.SUCCESS); + //#if MC >= 12006 && MC < 12103 + //$$ cir.setReturnValue(ItemActionResult.SUCCESS); //#else - //$$ cir.setReturnValue(ActionResult.SUCCESS); + cir.setReturnValue(ActionResult.SUCCESS); //#endif } } diff --git a/src/main/java/de/rubixdev/rug/mixins/AbstractCookingRecipeMixin.java b/src/main/java/de/rubixdev/rug/mixins/AbstractCookingRecipeMixin.java index 5700ca7..40f4756 100644 --- a/src/main/java/de/rubixdev/rug/mixins/AbstractCookingRecipeMixin.java +++ b/src/main/java/de/rubixdev/rug/mixins/AbstractCookingRecipeMixin.java @@ -5,22 +5,39 @@ import net.minecraft.item.Items; import net.minecraft.recipe.AbstractCookingRecipe; import net.minecraft.recipe.Ingredient; -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.callback.CallbackInfoReturnable; -@Mixin(AbstractCookingRecipe.class) -public class AbstractCookingRecipeMixin { - @Shadow @Final protected ItemStack result; +//#if MC >= 12103 +import net.minecraft.recipe.SingleStackRecipe; +//#else +//$$ import org.spongepowered.asm.mixin.Final; +//$$ import org.spongepowered.asm.mixin.Shadow; +//#endif - @Shadow @Final protected Ingredient ingredient; +//#if MC >= 12103 +@Mixin(AbstractCookingRecipe.class) +public abstract class AbstractCookingRecipeMixin extends SingleStackRecipe { + public AbstractCookingRecipeMixin(String group, Ingredient ingredient, ItemStack result) { + super(group, ingredient, result); + } +//#else +//$$ @Mixin(AbstractCookingRecipe.class) +//$$ public class AbstractCookingRecipeMixin { +//$$ @Shadow @Final protected ItemStack result; +//$$ +//$$ @Shadow @Final protected Ingredient ingredient; +//#endif @Inject(method = "getExperience", at = @At("HEAD"), cancellable = true) private void setCactusXp(CallbackInfoReturnable cir) { - if (this.result.isOf(Items.GREEN_DYE) && this.ingredient.test(Items.CACTUS.getDefaultStack())) { + //#if MC >= 12103 + if (this.result().isOf(Items.GREEN_DYE) && this.ingredient().test(Items.CACTUS.getDefaultStack())) { + //#else + //$$ if (this.result.isOf(Items.GREEN_DYE) && this.ingredient.test(Items.CACTUS.getDefaultStack())) { + //#endif cir.setReturnValue((float) RugSettings.cactusFurnaceXp); } } diff --git a/src/main/java/de/rubixdev/rug/mixins/BlockItemMixin.java b/src/main/java/de/rubixdev/rug/mixins/BlockItemMixin.java index 6070f10..6a3752f 100644 --- a/src/main/java/de/rubixdev/rug/mixins/BlockItemMixin.java +++ b/src/main/java/de/rubixdev/rug/mixins/BlockItemMixin.java @@ -61,17 +61,20 @@ private void onPlace( } } - @Redirect( - method = "place(Lnet/minecraft/item/ItemPlacementContext;)Lnet/minecraft/util/ActionResult;", - at = - @At( - value = "INVOKE", - target = "Lnet/minecraft/util/ActionResult;success(Z)Lnet/minecraft/util/ActionResult;")) - private ActionResult onPlace(boolean swingHand) { - if (isValidLilyPad) { - return ActionResult.success(true); - } else { - return ActionResult.success(swingHand); - } - } + // TODO: rewrite this entire mixin + //#if MC < 12103 + //$$ @Redirect( + //$$ method = "place(Lnet/minecraft/item/ItemPlacementContext;)Lnet/minecraft/util/ActionResult;", + //$$ at = + //$$ @At( + //$$ value = "INVOKE", + //$$ target = "Lnet/minecraft/util/ActionResult;success(Z)Lnet/minecraft/util/ActionResult;")) + //$$ private ActionResult onPlace(boolean swingHand) { + //$$ if (isValidLilyPad) { + //$$ return ActionResult.success(true); + //$$ } else { + //$$ return ActionResult.success(swingHand); + //$$ } + //$$ } + //#endif } diff --git a/src/main/java/de/rubixdev/rug/mixins/BlockMixin.java b/src/main/java/de/rubixdev/rug/mixins/BlockMixin.java index f0568e0..400c9c7 100644 --- a/src/main/java/de/rubixdev/rug/mixins/BlockMixin.java +++ b/src/main/java/de/rubixdev/rug/mixins/BlockMixin.java @@ -51,7 +51,7 @@ private static void onDropStacks( ItemStack stack, CallbackInfo ci) { //#if MC >= 12101 - boolean usesSilkTouch = EnchantmentHelper.getLevel(world.getRegistryManager().getWrapperOrThrow(RegistryKeys.ENCHANTMENT).getOrThrow(Enchantments.SILK_TOUCH), stack) > 0; + boolean usesSilkTouch = EnchantmentHelper.getLevel(world.getRegistryManager().getOrThrow(RegistryKeys.ENCHANTMENT).getOrThrow(Enchantments.SILK_TOUCH), stack) > 0; //#else //$$ boolean usesSilkTouch = EnchantmentHelper.getLevel(Enchantments.SILK_TOUCH, stack) > 0; //#endif diff --git a/src/main/java/de/rubixdev/rug/mixins/CreeperEntityMixin.java b/src/main/java/de/rubixdev/rug/mixins/CreeperEntityMixin.java index e5707df..fabbbba 100644 --- a/src/main/java/de/rubixdev/rug/mixins/CreeperEntityMixin.java +++ b/src/main/java/de/rubixdev/rug/mixins/CreeperEntityMixin.java @@ -1,37 +1,17 @@ package de.rubixdev.rug.mixins; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import de.rubixdev.rug.RugSettings; -import net.minecraft.entity.Entity; import net.minecraft.entity.mob.CreeperEntity; import net.minecraft.world.World; -import net.minecraft.world.explosion.Explosion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(CreeperEntity.class) public class CreeperEntityMixin { - @Redirect( - method = "explode", - at = - @At( - value = "INVOKE", - target = - "Lnet/minecraft/world/World;createExplosion(Lnet/minecraft/entity/Entity;DDDFLnet/minecraft/world/World$ExplosionSourceType;)Lnet/minecraft/world/explosion/Explosion;")) - private Explosion noCreeperGriefing( - World instance, - Entity entity, - double x, - double y, - double z, - float power, - World.ExplosionSourceType explosionSourceType) { - return instance.createExplosion( - entity, - x, - y, - z, - power, - RugSettings.noCreeperGriefing ? World.ExplosionSourceType.NONE : explosionSourceType); + @ModifyExpressionValue(method = "explode", at = @At(value = "FIELD", target = "Lnet/minecraft/world/World$ExplosionSourceType;MOB:Lnet/minecraft/world/World$ExplosionSourceType;")) + private World.ExplosionSourceType noCreeperGriefing(World.ExplosionSourceType original) { + // TODO: test this + return RugSettings.noCreeperGriefing ? World.ExplosionSourceType.NONE : original; } } diff --git a/src/main/java/de/rubixdev/rug/mixins/EnderDragonEntityMixin.java b/src/main/java/de/rubixdev/rug/mixins/EnderDragonEntityMixin.java index 24dbc0c..5e73a0d 100644 --- a/src/main/java/de/rubixdev/rug/mixins/EnderDragonEntityMixin.java +++ b/src/main/java/de/rubixdev/rug/mixins/EnderDragonEntityMixin.java @@ -15,6 +15,10 @@ import org.spongepowered.asm.mixin.injection.ModifyConstant; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +//#if MC >= 12103 +import net.minecraft.server.world.ServerWorld; +//#endif + @Mixin(EnderDragonEntity.class) public abstract class EnderDragonEntityMixin extends Entity { public EnderDragonEntityMixin(EntityType type, World world) { @@ -31,19 +35,35 @@ public EnderDragonEntityMixin(EntityType type, World world) { ordinal = 1)) private void onUpdatePostDeath(CallbackInfo ci) { String rugSetting = RugSettings.dragonDrops; - if (!rugSetting.equals("none") && this.getWorld().getGameRules().getBoolean(GameRules.DO_MOB_LOOT)) { + //#if MC >= 12103 + if (!rugSetting.equals("none") && this.getWorld() instanceof ServerWorld world && world.getGameRules().getBoolean(GameRules.DO_MOB_LOOT)) { boolean dropAll = rugSetting.equals("all"); - if (rugSetting.contains("elytra") || dropAll) { - this.dropStack(new ItemStack(Items.ELYTRA)); + if (dropAll || rugSetting.contains("elytra")) { + this.dropStack(world, new ItemStack(Items.ELYTRA)); } - if (rugSetting.contains("dragon_egg") || dropAll) { - this.dropStack(new ItemStack(Items.DRAGON_EGG)); + if (dropAll || rugSetting.contains("dragon_egg")) { + this.dropStack(world, new ItemStack(Items.DRAGON_EGG)); } - if (rugSetting.contains("dragon_head") || dropAll) { - this.dropStack(new ItemStack(Items.DRAGON_HEAD)); + if (dropAll || rugSetting.contains("dragon_head")) { + this.dropStack(world, new ItemStack(Items.DRAGON_HEAD)); } } + //#else + //$$ if (!rugSetting.equals("none") && this.getWorld().getGameRules().getBoolean(GameRules.DO_MOB_LOOT)) { + //$$ boolean dropAll = rugSetting.equals("all"); + //$$ + //$$ if (dropAll || rugSetting.contains("elytra")) { + //$$ this.dropStack(new ItemStack(Items.ELYTRA)); + //$$ } + //$$ if (dropAll || rugSetting.contains("dragon_egg")) { + //$$ this.dropStack(new ItemStack(Items.DRAGON_EGG)); + //$$ } + //$$ if (dropAll || rugSetting.contains("dragon_head")) { + //$$ this.dropStack(new ItemStack(Items.DRAGON_HEAD)); + //$$ } + //$$ } + //#endif } @ModifyConstant(method = "updatePostDeath", constant = @Constant(intValue = 500)) diff --git a/src/main/java/de/rubixdev/rug/mixins/LivingEntityMixin.java b/src/main/java/de/rubixdev/rug/mixins/LivingEntityMixin.java index 0dbce9f..b189a6a 100644 --- a/src/main/java/de/rubixdev/rug/mixins/LivingEntityMixin.java +++ b/src/main/java/de/rubixdev/rug/mixins/LivingEntityMixin.java @@ -9,6 +9,7 @@ import net.minecraft.entity.damage.DamageSource; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.server.world.ServerWorld; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -19,12 +20,42 @@ public LivingEntityMixin(EntityType type, World world) { super(type, world); } - @WrapOperation(method = "drop", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;dropLoot(Lnet/minecraft/entity/damage/DamageSource;Z)V")) - private void onDrop(LivingEntity instance, DamageSource damageSource, boolean causedByPlayer, Operation original) { + @WrapOperation( + method = "drop", + at = @At( + value = "INVOKE", + //#if MC >= 12103 + target = "Lnet/minecraft/entity/LivingEntity;dropLoot(Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/entity/damage/DamageSource;Z)V" + //#else + //$$ target = "Lnet/minecraft/entity/LivingEntity;dropLoot(Lnet/minecraft/entity/damage/DamageSource;Z)V" + //#endif + ) + ) + private void onDrop( + LivingEntity instance, + //#if MC >= 12103 + ServerWorld world, + //#endif + DamageSource damageSource, + boolean causedByPlayer, + Operation original + ) { if (this.getType().equals(EntityType.SHULKER) && RugSettings.strictShulkerShells > 0) { - this.dropStack(new ItemStack(Items.SHULKER_SHELL, RugSettings.strictShulkerShells)); + this.dropStack( + //#if MC >= 12103 + world, + //#endif + new ItemStack(Items.SHULKER_SHELL, RugSettings.strictShulkerShells) + ); } else { - original.call(instance, damageSource, causedByPlayer); + original.call( + instance, + //#if MC >= 12103 + world, + //#endif + damageSource, + causedByPlayer + ); } } } diff --git a/src/main/java/de/rubixdev/rug/mixins/PlayerEntityMixin.java b/src/main/java/de/rubixdev/rug/mixins/PlayerEntityMixin.java index f101323..e0cfd18 100644 --- a/src/main/java/de/rubixdev/rug/mixins/PlayerEntityMixin.java +++ b/src/main/java/de/rubixdev/rug/mixins/PlayerEntityMixin.java @@ -10,8 +10,6 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; -import net.minecraft.world.Difficulty; -import net.minecraft.world.GameRules; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.*; @@ -21,31 +19,38 @@ import net.minecraft.registry.RegistryKeys; //#endif +//#if MC < 12103 +//$$ import net.minecraft.world.Difficulty; +//#endif + @Mixin(PlayerEntity.class) public abstract class PlayerEntityMixin extends LivingEntity { protected PlayerEntityMixin(EntityType entityType, World world) { super(entityType, world); } - @Redirect( - method = "tickMovement", - at = - @At( - value = "INVOKE", - target = "Lnet/minecraft/world/World;getDifficulty()Lnet/minecraft/world/Difficulty;")) - private Difficulty onTickMovement(World world) { - return RugSettings.peacefulHunger ? Difficulty.PEACEFUL : world.getDifficulty(); - } - - @Redirect( - method = "tickMovement", - at = - @At( - value = "INVOKE", - target = "Lnet/minecraft/world/GameRules;getBoolean(Lnet/minecraft/world/GameRules$Key;)Z")) - private boolean onTickMovement(GameRules gameRules, GameRules.Key rule) { - return !RugSettings.foodInstantHeal && gameRules.getBoolean(rule); - } + // TODO: test + //#if MC < 12103 + //$$ @ModifyExpressionValue( + //$$ method = "tickMovement", + //$$ at = + //$$ @At( + //$$ value = "INVOKE", + //$$ target = "Lnet/minecraft/world/World;getDifficulty()Lnet/minecraft/world/Difficulty;")) + //$$ private Difficulty onTickMovement(Difficulty original) { + //$$ return RugSettings.peacefulHunger ? Difficulty.PEACEFUL : original; + //$$ } + //$$ + //$$ @ModifyExpressionValue( + //$$ method = "tickMovement", + //$$ at = + //$$ @At( + //$$ value = "INVOKE", + //$$ target = "Lnet/minecraft/world/GameRules;getBoolean(Lnet/minecraft/world/GameRules$Key;)Z")) + //$$ private boolean onTickMovement(boolean original) { + //$$ return !RugSettings.foodInstantHeal && original; + //$$ } + //#endif @Inject(method = "canHarvest", at = @At("HEAD"), cancellable = true) private void onCanHarvest(BlockState block, CallbackInfoReturnable cir) { @@ -77,7 +82,7 @@ private boolean infinityNeedsArrow(boolean original, ItemStack bow) { return original || ( !RugSettings.infinityNeedsArrow //#if MC >= 12101 - && EnchantmentHelper.getLevel(getRegistryManager().getWrapperOrThrow(RegistryKeys.ENCHANTMENT).getOrThrow(Enchantments.INFINITY), bow) > 0 + && EnchantmentHelper.getLevel(getRegistryManager().getOrThrow(RegistryKeys.ENCHANTMENT).getOrThrow(Enchantments.INFINITY), bow) > 0 //#else //$$ && EnchantmentHelper.getLevel(Enchantments.INFINITY, bow) > 0 //#endif diff --git a/src/main/java/de/rubixdev/rug/mixins/PointedDripstoneBlockMixin.java b/src/main/java/de/rubixdev/rug/mixins/PointedDripstoneBlockMixin.java index 92fc00a..8c9150a 100644 --- a/src/main/java/de/rubixdev/rug/mixins/PointedDripstoneBlockMixin.java +++ b/src/main/java/de/rubixdev/rug/mixins/PointedDripstoneBlockMixin.java @@ -10,17 +10,28 @@ import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; +//#if MC >= 12103 +import net.minecraft.server.world.ServerWorld; +//#endif + @Mixin(PointedDripstoneBlock.class) public class PointedDripstoneBlockMixin extends Block { public PointedDripstoneBlockMixin(AbstractBlock.Settings settings) { super(settings); } + // TODO: rewrite this with Mixin inheritance @Override public void onSteppedOn(World world, BlockPos pos, BlockState state, Entity entity) { - if (RugSettings.stalagmiteSteppingDamage > 0) { - entity.damage(world.getDamageSources().generic(), RugSettings.stalagmiteSteppingDamage); + //#if MC >= 12103 + if (RugSettings.stalagmiteSteppingDamage > 0 && world instanceof ServerWorld serverWorld) { + entity.damage(serverWorld, world.getDamageSources().generic(), RugSettings.stalagmiteSteppingDamage); } + //#else + //$$ if (RugSettings.stalagmiteSteppingDamage > 0) { + //$$ entity.damage(world.getDamageSources().generic(), RugSettings.stalagmiteSteppingDamage); + //$$ } + //#endif super.onSteppedOn(world, pos, state, entity); } } diff --git a/src/main/java/de/rubixdev/rug/mixins/ServerPlayerEntityMixin.java b/src/main/java/de/rubixdev/rug/mixins/ServerPlayerEntityMixin.java index 1df9ef6..62d1b80 100644 --- a/src/main/java/de/rubixdev/rug/mixins/ServerPlayerEntityMixin.java +++ b/src/main/java/de/rubixdev/rug/mixins/ServerPlayerEntityMixin.java @@ -24,8 +24,29 @@ //$$ import net.minecraft.nbt.NbtHelper; //#endif +//#if MC >= 12103 +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.Difficulty; +import org.spongepowered.asm.mixin.Shadow; +//#endif + @Mixin(ServerPlayerEntity.class) public abstract class ServerPlayerEntityMixin extends PlayerEntity { + //#if MC >= 12103 + @Shadow public abstract ServerWorld getServerWorld(); + + @ModifyExpressionValue(method = "tickHunger", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;getDifficulty()Lnet/minecraft/world/Difficulty;")) + private Difficulty peacefulHunger(Difficulty original) { + return RugSettings.peacefulHunger ? Difficulty.PEACEFUL : original; + } + + @ModifyExpressionValue(method = "tickHunger", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/GameRules;getBoolean(Lnet/minecraft/world/GameRules$Key;)Z")) + private boolean foodInstantHeal(boolean original) { + return !RugSettings.foodInstantHeal && original; + } + //#endif + public ServerPlayerEntityMixin(World world, BlockPos pos, float yaw, GameProfile gameProfile) { super(world, pos, yaw, gameProfile); } @@ -52,7 +73,11 @@ private void onOnDeath(DamageSource damageSource, CallbackInfo ci) { //$$ stack.getOrCreateNbt() //$$ .put("SkullOwner", NbtHelper.writeGameProfile(new NbtCompound(), this.getGameProfile())); //#endif - this.dropStack(stack); + //#if MC >= 12103 + this.dropStack(getServerWorld(), stack); + //#else + //$$ this.dropStack(stack); + //#endif } } diff --git a/src/main/java/de/rubixdev/rug/mixins/StoneCutterBlockMixin.java b/src/main/java/de/rubixdev/rug/mixins/StoneCutterBlockMixin.java index 2932b3c..747cbd7 100644 --- a/src/main/java/de/rubixdev/rug/mixins/StoneCutterBlockMixin.java +++ b/src/main/java/de/rubixdev/rug/mixins/StoneCutterBlockMixin.java @@ -10,17 +10,26 @@ import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; +//#if MC >= 12103 +import net.minecraft.server.world.ServerWorld; +//#endif + @Mixin(StonecutterBlock.class) public class StoneCutterBlockMixin extends Block { public StoneCutterBlockMixin(Settings settings) { super(settings); } - @SuppressWarnings("deprecation") + // TODO: rewrite this with Mixin inheritance @Override public void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity) { if (RugSettings.stonecutterDamage > 0 && !(entity instanceof ItemEntity)) { - entity.damage(world.getDamageSources().generic(), RugSettings.stonecutterDamage); + //#if MC >= 12103 + if (world instanceof ServerWorld serverWorld) + entity.damage(serverWorld, world.getDamageSources().generic(), RugSettings.stonecutterDamage); + //#else + //$$ entity.damage(world.getDamageSources().generic(), RugSettings.stonecutterDamage); + //#endif } } } diff --git a/src/main/java/de/rubixdev/rug/mixins/VillagerEntityMixin.java b/src/main/java/de/rubixdev/rug/mixins/VillagerEntityMixin.java index 406a693..c2f9e15 100644 --- a/src/main/java/de/rubixdev/rug/mixins/VillagerEntityMixin.java +++ b/src/main/java/de/rubixdev/rug/mixins/VillagerEntityMixin.java @@ -13,6 +13,10 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +//#if MC >= 12103 +import net.minecraft.server.world.ServerWorld; +//#endif + @Mixin(VillagerEntity.class) public abstract class VillagerEntityMixin extends Entity { public VillagerEntityMixin(EntityType type, World world) { @@ -27,8 +31,14 @@ public VillagerEntityMixin(EntityType type, World world) { target = "Lnet/minecraft/entity/damage/DamageSource;getAttacker()Lnet/minecraft/entity/Entity;")) private void dropEmeralds(DamageSource source, CallbackInfo ci) { - if (RugSettings.villagersDropEmeralds != 0) { - dropStack(new ItemStack(Items.EMERALD, random.nextInt(RugSettings.villagersDropEmeralds) + 1)); + //#if MC >= 12103 + if (RugSettings.villagersDropEmeralds != 0 && getWorld() instanceof ServerWorld world) { + dropStack(world, new ItemStack(Items.EMERALD, random.nextInt(RugSettings.villagersDropEmeralds) + 1)); } + //#else + //$$ if (RugSettings.villagersDropEmeralds != 0) { + //$$ dropStack(new ItemStack(Items.EMERALD, random.nextInt(RugSettings.villagersDropEmeralds) + 1)); + //$$ } + //#endif } } diff --git a/versions/1.21.3/gradle.properties b/versions/1.21.3/gradle.properties new file mode 100644 index 0000000..2bf6c4c --- /dev/null +++ b/versions/1.21.3/gradle.properties @@ -0,0 +1,21 @@ +# Fabric Properties + # check these on https://fabricmc.net/develop/ + minecraft_version=1.21.3 + yarn_mappings=1.21.3+build.2 + +# Fabric Mod Metadata + minecraft_dependency=1.21.x + carpet_dependency=1.4.158 + +# Dependencies + fabric_version=0.114.0+1.21.3 + # https://masa.dy.fi/maven/carpet/fabric-carpet/ + carpet_core_version=1.21.2-1.4.158+v241022 + # https://maven.nucleoid.xyz/eu/pb4/sgui/ or https://github.com/Patbox/sgui/releases + sgui_version=1.7.2+1.21.2 + # https://modrinth.com/mod/brrp/versions?l=fabric + brrp_version=1.0.4-mc1.21.1-fabric + +# Build Information + # The target mc versions for the mod during mod publishing, separated with \n + game_versions=1.21.2\n1.21.3 diff --git a/versions/1.21.3/rug.accesswidener b/versions/1.21.3/rug.accesswidener new file mode 100644 index 0000000..13191a7 --- /dev/null +++ b/versions/1.21.3/rug.accesswidener @@ -0,0 +1,3 @@ +accessWidener v2 named + +accessible method net/minecraft/entity/Entity setWorld (Lnet/minecraft/world/World;)V diff --git a/versions/mainProject b/versions/mainProject index 87967a7..49340f5 100644 --- a/versions/mainProject +++ b/versions/mainProject @@ -1 +1 @@ -1.21.1 \ No newline at end of file +1.21.3 \ No newline at end of file