diff --git a/build.gradle b/build.gradle index 7e8a7b55..3c6171ad 100644 --- a/build.gradle +++ b/build.gradle @@ -71,8 +71,6 @@ dependencies { include "com.github.LlamaLad7:MixinExtras:${project.mixinextras_version}" implementation("com.github.LlamaLad7:MixinExtras:${project.mixinextras_version}") annotationProcessor("com.github.LlamaLad7:MixinExtras:${project.mixinextras_version}") - - modRuntimeOnly "com.github.astei:lazydfu:0.1.2" } processResources { diff --git a/gradle.properties b/gradle.properties index ae9d4678..2e460cd2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,24 +3,24 @@ org.gradle.jvmargs=-Xmx2G # Fabric Properties # check these on https://fabricmc.net/use or https://modmuss50.me/fabric.html - display_minecraft_version=1.19.3 - minecraft_version=1.19.3 - yarn_mappings=1.19.3+build.2 + display_minecraft_version=1.19.4 + minecraft_version=1.19.4 + yarn_mappings=1.19.4+build.2 loader_version=0.14.3 - carpet_minecraft_version=1.19.3 + carpet_minecraft_version=1.19.4 # check available versions on maven for the given minecraft version you are using - carpet_core_version=1.4.91+v221207 + carpet_core_version=1.4.101+v230319 # Mod Properties - mod_version = 1.13.0 + mod_version = 1.14.0 maven_group = carpet-fixes archives_base_name = carpet-fixes # Dependencies - # https://github.com/Fallen-Breath/conditional-mixin - conditionalmixin_version = v0.3.1 - # https://github.com/2No2Name/McTester - mctester_version = v0.3.0 - # https://github.com/LlamaLad7/MixinExtras - mixinextras_version = 0.0.6 +# https://github.com/Fallen-Breath/conditional-mixin +conditionalmixin_version = v0.3.1 +# https://github.com/2No2Name/McTester +mctester_version = v0.3.0 +# https://github.com/LlamaLad7/MixinExtras +mixinextras_version = 0.0.6 diff --git a/src/main/java/carpetfixes/CFSettings.java b/src/main/java/carpetfixes/CFSettings.java index d797fa20..90238753 100644 --- a/src/main/java/carpetfixes/CFSettings.java +++ b/src/main/java/carpetfixes/CFSettings.java @@ -678,18 +678,6 @@ public class CFSettings { ) public static boolean structureManagerCantLoadSnbtFix = false; - //by FX - PR0CESS - @Rule( - categories = {BUGFIX} - ) - public static boolean stepAndDestroyBlockGoalUsesOriginFix = false; - - //by FX - PR0CESS - @Rule( - categories = {BUGFIX} - ) - public static boolean hopperMinecartSlowerAtOriginFix = false; - //By FX - PR0CESS @Rule( categories = {BUGFIX} @@ -852,12 +840,6 @@ public class CFSettings { ) public static boolean witchAndCatSpawnMergedFix = false; - //By FX - PR0CESS - @Rule( - categories = {BUGFIX} - ) - public static boolean jukeboxDiscItemOffsetOnBreakFix = false; - //By FX - PR0CESS @Rule( categories = {BUGFIX} diff --git a/src/main/java/carpetfixes/helpers/CenterUtils.java b/src/main/java/carpetfixes/helpers/CenterUtils.java index 98f68f41..1cc1316c 100644 --- a/src/main/java/carpetfixes/helpers/CenterUtils.java +++ b/src/main/java/carpetfixes/helpers/CenterUtils.java @@ -18,8 +18,8 @@ public class CenterUtils { public static void iterateTouchingBlocks(Entity entity, Consumer perBlock) { Box box = entity.getBoundingBox(); - BlockPos blockPos = new BlockPos(box.minX + OFFSET, entity.getBlockY(), box.minZ + OFFSET); - BlockPos blockPos2 = new BlockPos(box.maxX - OFFSET, entity.getBlockY(), box.maxZ - OFFSET); + BlockPos blockPos = BlockPos.ofFloored(box.minX + OFFSET, entity.getBlockY(), box.minZ + OFFSET); + BlockPos blockPos2 = BlockPos.ofFloored(box.maxX - OFFSET, entity.getBlockY(), box.maxZ - OFFSET); if (entity.world.isRegionLoaded(blockPos, blockPos2)) { BlockPos.Mutable mutable = new BlockPos.Mutable(); for(int i = blockPos.getX(); i <= blockPos2.getX(); ++i) @@ -30,8 +30,8 @@ public static void iterateTouchingBlocks(Entity entity, Consumer>> delayedWorldEvents = new HashMap<>(); - public static void addDelayedWorldEvent(World world, int eventId, BlockPos pos, int data) { - addDelayedWorldEvent(world, eventId, pos, data, 1); + public static void addDelayedWorldEvent(World world, GameEvent gameEvent, Vec3d emitterPos, GameEvent.Emitter emitter) { + addDelayedWorldEvent(world, gameEvent, emitterPos, emitter, 1); } - public static void addDelayedWorldEvent(World world, int eventId, BlockPos pos, int data, int delay) { + public static void addDelayedWorldEvent(World world, GameEvent gameEvent, Vec3d emitterPos, GameEvent.Emitter emitter, int delay) { delayedWorldEvents.computeIfAbsent(world,(a) -> new ArrayList<>()) - .add(new Pair<>(delay,new DelayedWorldEvent(eventId, pos, data))); + .add(new Pair<>(delay, new DelayedWorldEvent(gameEvent, emitterPos, emitter))); } public static void tick(World world) { @@ -38,18 +40,18 @@ public static void tick(World world) { static class DelayedWorldEvent { - private final int eventId; - private final BlockPos pos; - private final int data; + private final GameEvent event; + private final Vec3d emitterPos; + private final GameEvent.Emitter emitter; - DelayedWorldEvent(int eventId, BlockPos pos, int data) { - this.eventId = eventId; - this.pos = pos; - this.data = data; + DelayedWorldEvent(GameEvent event, Vec3d emitterPos, GameEvent.Emitter emitter) { + this.event = event; + this.emitterPos = emitterPos; + this.emitter = emitter; } public void sendWorldEvent(World world) { - world.syncWorldEvent(null, this.eventId, this.pos, this.data); + world.emitGameEvent(this.event, this.emitterPos, this.emitter); } } } diff --git a/src/main/java/carpetfixes/helpers/RaycastUtils.java b/src/main/java/carpetfixes/helpers/RaycastUtils.java deleted file mode 100644 index 3c54514f..00000000 --- a/src/main/java/carpetfixes/helpers/RaycastUtils.java +++ /dev/null @@ -1,113 +0,0 @@ -package carpetfixes.helpers; - -import net.minecraft.block.BlockState; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.BlockStateRaycastContext; -import net.minecraft.world.World; - -import java.util.function.BiFunction; -import java.util.function.Function; - -public class RaycastUtils { - - /** - * This class is currently only used for occlusion checks against blocks. Due to a bug, although more raycasts - * will be implemented here in the future. Such as explosions - */ - - private static final double RAY_STEP_START = -1.0E-7D; - - //Raycast from net.minecraft.world.BlockView - public static BlockHitResult raycast(World world, BlockStateRaycastContext context) { - return raycast(context.getStart(), context.getEnd(), context, (newContext, pos) -> { - BlockState blockState = world.getBlockState(pos); - Vec3d endPos = newContext.getStart().subtract(newContext.getEnd()); - if (newContext.getStatePredicate().test(blockState)) { - return new BlockHitResult( - newContext.getEnd(), - Direction.getFacing(endPos.x, endPos.y, endPos.z), - new BlockPos(newContext.getEnd()), - false - ); - } - return null; - }, (newContext) -> { - Vec3d endPos = newContext.getStart().subtract(newContext.getEnd()); - return BlockHitResult.createMissed( - newContext.getEnd(), - Direction.getFacing(endPos.x, endPos.y, endPos.z), - new BlockPos(newContext.getEnd()) - ); - }); - } - - //Raycast from net.minecraft.world.BlockView //TODO: Fix possible issue in 45 degree calculation - private static T raycast(Vec3d start, Vec3d end, C context, - BiFunction blockHitFactory, Function missFactory) { - if (start.equals(end)) return missFactory.apply(context); - double d = MathHelper.lerp(RAY_STEP_START, end.x, start.x); - double e = MathHelper.lerp(RAY_STEP_START, end.y, start.y); - double f = MathHelper.lerp(RAY_STEP_START, end.z, start.z); - double g = MathHelper.lerp(RAY_STEP_START, start.x, end.x); - double h = MathHelper.lerp(RAY_STEP_START, start.y, end.y); - double i = MathHelper.lerp(RAY_STEP_START, start.z, end.z); - int j = MathHelper.floor(g); - int k = MathHelper.floor(h); - int l = MathHelper.floor(i); - int x1 = Math.abs(j); - int y1 = Math.abs(k); - int z1 = Math.abs(l); - BlockPos.Mutable mutable = new BlockPos.Mutable(j, k, l); - T object = blockHitFactory.apply(context, mutable); - if (object != null) return object; - boolean isPerfectHorizontalDiagonal = x1 == z1; //This is a 45 degree angle - boolean isPerfectVerticalDiagonalX = x1 == y1; - boolean isPerfectVerticalDiagonalZ = y1 == z1; - double m = d - g; - double n = e - h; - double o = f - i; - int p = MathHelper.sign(m); - int q = MathHelper.sign(n); - int r = MathHelper.sign(o); - double s = p == 0 ? Double.MAX_VALUE : (double)p / m; - double t = q == 0 ? Double.MAX_VALUE : (double)q / n; - double u = r == 0 ? Double.MAX_VALUE : (double)r / o; - double v = s * (p > 0 ? 1.0D - MathHelper.fractionalPart(g) : MathHelper.fractionalPart(g)); - double w = t * (q > 0 ? 1.0D - MathHelper.fractionalPart(h) : MathHelper.fractionalPart(h)); - double x = u * (r > 0 ? 1.0D - MathHelper.fractionalPart(i) : MathHelper.fractionalPart(i)); - while(v <= 1.0 || w <= 1.0 || x <= 1.0) { - if (v < w) { - if (v < x) { - j += p; - v += s; - } else { - l += r; - x += u; - } - } else if (w < x) { - k += q; - w += t; - } else { - l += r; - x += u; - } - T object2 = blockHitFactory.apply(context, mutable.set(j, k, l)); - if (isPerfectHorizontalDiagonal && object2 == null) { - object2 = blockHitFactory.apply(context, mutable.set(l, k, j)); - } else { - if (isPerfectVerticalDiagonalX && object2 == null) { - object2 = blockHitFactory.apply(context, mutable.set(k, j, l)); - } - if (isPerfectVerticalDiagonalZ && object2 == null) { - object2 = blockHitFactory.apply(context, mutable.set(j, l, k)); - } - } - if (object2 != null) return object2; - } - return missFactory.apply(context); - } -} diff --git a/src/main/java/carpetfixes/mixins/blockFixes/JukeboxBlock_itemOffsetMixin.java b/src/main/java/carpetfixes/mixins/blockFixes/JukeboxBlock_itemOffsetMixin.java deleted file mode 100644 index f0b9b64b..00000000 --- a/src/main/java/carpetfixes/mixins/blockFixes/JukeboxBlock_itemOffsetMixin.java +++ /dev/null @@ -1,71 +0,0 @@ -package carpetfixes.mixins.blockFixes; - -import carpetfixes.CFSettings; -import net.minecraft.block.BlockState; -import net.minecraft.block.JukeboxBlock; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.block.entity.JukeboxBlockEntity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.ItemEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -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.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; - -/** - * Fixes records not creating the record item in the correct location, causing it to clip in the block above - */ - -@Mixin(JukeboxBlock.class) -public class JukeboxBlock_itemOffsetMixin { - - private static boolean shouldDropCentered = false; - - - @Inject( - method = "onStateReplaced(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/World;" + - "Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Z)V", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/block/JukeboxBlock;removeRecord(Lnet/minecraft/world/World;" + - "Lnet/minecraft/util/math/BlockPos;)V", - shift = At.Shift.BEFORE - ) - ) - public void onStateReplacedDropCentered(BlockState state, World world, BlockPos pos, - BlockState newState, boolean moved, CallbackInfo ci) { - if (CFSettings.jukeboxDiscItemOffsetOnBreakFix) shouldDropCentered = true; - } - - - @Inject( - method = "removeRecord(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;)V", - locals = LocalCapture.CAPTURE_FAILSOFT, - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/block/entity/JukeboxBlockEntity;clear()V", - shift = At.Shift.AFTER - ), - cancellable = true - ) - private void modifyHeight(World world, BlockPos pos, CallbackInfo ci, BlockEntity blockEntity, - JukeboxBlockEntity jukeboxBlockEntity, ItemStack itemStack) { - if (shouldDropCentered) { // Use modern item scatterer code - double width = EntityType.ITEM.getWidth(); - double timesAmt = 1.0 - width; - double horizontalOffset = width / 2.0; - double x = world.random.nextDouble() * timesAmt + horizontalOffset; - double y = world.random.nextDouble() * timesAmt; - double z = world.random.nextDouble() * timesAmt + horizontalOffset; - ItemStack itemStack2 = itemStack.copy(); - ItemEntity itemEntity = new ItemEntity(world, pos.getX() + x, pos.getY() + y, pos.getZ() + z, itemStack2); - itemEntity.setToDefaultPickupDelay(); - world.spawnEntity(itemEntity); - ci.cancel(); - } - } -} diff --git a/src/main/java/carpetfixes/mixins/blockFixes/PressurePlateBlock_collisionOnPlaceMixin.java b/src/main/java/carpetfixes/mixins/blockFixes/PressurePlateBlock_collisionOnPlaceMixin.java index c0d1b131..a791886d 100644 --- a/src/main/java/carpetfixes/mixins/blockFixes/PressurePlateBlock_collisionOnPlaceMixin.java +++ b/src/main/java/carpetfixes/mixins/blockFixes/PressurePlateBlock_collisionOnPlaceMixin.java @@ -2,9 +2,11 @@ import carpetfixes.CFSettings; import net.minecraft.block.AbstractPressurePlateBlock; +import net.minecraft.block.BlockSetType; import net.minecraft.block.BlockState; import net.minecraft.block.PressurePlateBlock; import net.minecraft.entity.Entity; +import net.minecraft.sound.SoundCategory; import net.minecraft.state.property.BooleanProperty; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -26,8 +28,8 @@ public abstract class PressurePlateBlock_collisionOnPlaceMixin extends AbstractP @Final public static BooleanProperty POWERED; - public PressurePlateBlock_collisionOnPlaceMixin(Settings settings) { - super(settings); + public PressurePlateBlock_collisionOnPlaceMixin(Settings settings, BlockSetType blockSetType) { + super(settings, blockSetType); } @Override @@ -47,10 +49,10 @@ private void tryPowerOnPlace(BlockState state, World world, BlockPos pos) { world.setBlockState(pos, state.with(POWERED, bl), 3); this.updateNeighbors(world, pos); if (bl) { - this.playPressSound(world, pos); + world.playSound(null, pos, this.blockSetType.pressurePlateClickOff(), SoundCategory.BLOCKS); world.emitGameEvent(list.stream().findFirst().orElse(null), GameEvent.BLOCK_DEACTIVATE, pos); } else { - this.playDepressSound(world, pos); + world.playSound(null, pos, this.blockSetType.pressurePlateClickOn(), SoundCategory.BLOCKS); world.emitGameEvent(list.stream().findFirst().orElse(null), GameEvent.BLOCK_ACTIVATE, pos); } } diff --git a/src/main/java/carpetfixes/mixins/coreSystemFixes/StructureTemplate_entityPassengersMixin.java b/src/main/java/carpetfixes/mixins/coreSystemFixes/StructureTemplate_entityPassengersMixin.java index e93d72af..2cb8fbf4 100644 --- a/src/main/java/carpetfixes/mixins/coreSystemFixes/StructureTemplate_entityPassengersMixin.java +++ b/src/main/java/carpetfixes/mixins/coreSystemFixes/StructureTemplate_entityPassengersMixin.java @@ -57,7 +57,7 @@ private void getEntityWithPassengers(ServerWorldAccess world, BlockPos pos, Bloc if (initializeMobs && entity instanceof MobEntity) { ((MobEntity) entity).initialize( world, - world.getLocalDifficulty(new BlockPos(vec3d2)), + world.getLocalDifficulty(BlockPos.ofFloored(vec3d2)), SpawnReason.STRUCTURE, null, nbtCompound diff --git a/src/main/java/carpetfixes/mixins/dupeFixes/LecternBlockEntity_blockDupeMixin.java b/src/main/java/carpetfixes/mixins/dupeFixes/LecternBlockEntity_blockDupeMixin.java index e0c3f611..965bfc32 100644 --- a/src/main/java/carpetfixes/mixins/dupeFixes/LecternBlockEntity_blockDupeMixin.java +++ b/src/main/java/carpetfixes/mixins/dupeFixes/LecternBlockEntity_blockDupeMixin.java @@ -28,7 +28,7 @@ public LecternBlockEntity_blockDupeMixin(BlockEntityType type, BlockPos pos, method = "onBookRemoved", at = @At( value = "INVOKE", - target = "Lnet/minecraft/block/LecternBlock;setHasBook(" + + target = "Lnet/minecraft/block/LecternBlock;setHasBook(Lnet/minecraft/entity/Entity;" + "Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;" + "Lnet/minecraft/block/BlockState;Z)V", shift = At.Shift.BEFORE @@ -39,8 +39,9 @@ private void onBookRemovedCheckIfBlockStillThere(CallbackInfo ci) { if (CFSettings.lecternBlockDupeFix) { if (!this.isRemoved()) { // If the lectern block entity is removed, no world interactions should be done BlockState state = this.getWorld().getBlockState(this.getPos()); - if (state.isOf(Blocks.LECTERN)) - LecternBlock.setHasBook(this.getWorld(), this.getPos(), state, false); + if (state.isOf(Blocks.LECTERN)) { + LecternBlock.setHasBook(null, this.getWorld(), this.getPos(), state, false); + } } ci.cancel(); } diff --git a/src/main/java/carpetfixes/mixins/entityFixes/ArmorStandEntity_damageMixin.java b/src/main/java/carpetfixes/mixins/entityFixes/ArmorStandEntity_damageMixin.java index bc6b117b..d8ce24a5 100644 --- a/src/main/java/carpetfixes/mixins/entityFixes/ArmorStandEntity_damageMixin.java +++ b/src/main/java/carpetfixes/mixins/entityFixes/ArmorStandEntity_damageMixin.java @@ -2,7 +2,9 @@ import carpetfixes.CFSettings; import net.minecraft.entity.damage.DamageSource; +import net.minecraft.entity.damage.DamageTypes; import net.minecraft.entity.decoration.ArmorStandEntity; +import net.minecraft.registry.tag.DamageTypeTags; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -27,13 +29,13 @@ public abstract class ArmorStandEntity_damageMixin { cancellable = true ) private void beforeProjectileCheck(DamageSource source, float amount, CallbackInfoReturnable cir) { - if (CFSettings.armorStandNegateLavaDamageFix && DamageSource.LAVA.equals(source)) { + if (CFSettings.armorStandNegateLavaDamageFix && source.isOf(DamageTypes.LAVA)) { this.updateHealth(source, 4.0F); cir.setReturnValue(false); - } else if (CFSettings.armorStandNegateCactusDamageFix && DamageSource.CACTUS.equals(source)) { + } else if (CFSettings.armorStandNegateCactusDamageFix && source.isOf(DamageTypes.CACTUS)) { this.updateHealth(source, amount); cir.setReturnValue(false); - } else if (CFSettings.armorStandNegateAnvilDamageFix && source.isFallingBlock()) { + } else if (CFSettings.armorStandNegateAnvilDamageFix && source.isOf(DamageTypes.FALLING_BLOCK)) { this.updateHealth(source, amount * 3.0F); cir.setReturnValue(false); } diff --git a/src/main/java/carpetfixes/mixins/entityFixes/EndCrystalEntity_ExplosionChainingMixin.java b/src/main/java/carpetfixes/mixins/entityFixes/EndCrystalEntity_ExplosionChainingMixin.java index ddf74b27..d7d7979b 100644 --- a/src/main/java/carpetfixes/mixins/entityFixes/EndCrystalEntity_ExplosionChainingMixin.java +++ b/src/main/java/carpetfixes/mixins/entityFixes/EndCrystalEntity_ExplosionChainingMixin.java @@ -3,6 +3,7 @@ import carpetfixes.CFSettings; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.decoration.EndCrystalEntity; +import net.minecraft.registry.tag.TagKey; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -20,10 +21,10 @@ public class EndCrystalEntity_ExplosionChainingMixin { method = "damage(Lnet/minecraft/entity/damage/DamageSource;F)Z", at = @At( value = "INVOKE", - target = "Lnet/minecraft/entity/damage/DamageSource;isExplosive()Z" + target = "Lnet/minecraft/entity/damage/DamageSource;isIn(Lnet/minecraft/registry/tag/TagKey;)Z" ) ) - public boolean isExplosiveBypass(DamageSource fakeSource, DamageSource source, float amount) { - return !CFSettings.crystalExplodeOnExplodedFix && source.isExplosive(); + private boolean isExplosiveBypass(DamageSource source, TagKey tagKey) { + return !CFSettings.crystalExplodeOnExplodedFix && source.isIn(tagKey); } } diff --git a/src/main/java/carpetfixes/mixins/entityFixes/EndermanEntity_explosionDamageMixin.java b/src/main/java/carpetfixes/mixins/entityFixes/EndermanEntity_explosionDamageMixin.java index b6423a0a..9852b195 100644 --- a/src/main/java/carpetfixes/mixins/entityFixes/EndermanEntity_explosionDamageMixin.java +++ b/src/main/java/carpetfixes/mixins/entityFixes/EndermanEntity_explosionDamageMixin.java @@ -6,6 +6,7 @@ import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.mob.EndermanEntity; import net.minecraft.entity.projectile.thrown.PotionEntity; +import net.minecraft.registry.tag.DamageTypeTags; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; @@ -38,7 +39,7 @@ protected EndermanEntity_explosionDamageMixin(EntityType ) private void damageFromExplosion(DamageSource source, float amount, CallbackInfoReturnable cir) { if (CFSettings.endermanDontTakeExplosionDamageFix - && !source.isProjectile() + && !source.isIn(DamageTypeTags.IS_PROJECTILE) && !(source.getSource() instanceof PotionEntity)) { boolean bl = super.damage(source, amount); if (!this.world.isClient() && !(source.getAttacker() instanceof LivingEntity) && this.random.nextInt(10) != 0) { diff --git a/src/main/java/carpetfixes/mixins/entityFixes/HopperMinecartEntity_slowMixin.java b/src/main/java/carpetfixes/mixins/entityFixes/HopperMinecartEntity_slowMixin.java deleted file mode 100644 index 82038344..00000000 --- a/src/main/java/carpetfixes/mixins/entityFixes/HopperMinecartEntity_slowMixin.java +++ /dev/null @@ -1,29 +0,0 @@ -package carpetfixes.mixins.entityFixes; - -import carpetfixes.CFSettings; -import net.minecraft.entity.vehicle.HopperMinecartEntity; -import net.minecraft.util.math.BlockPos; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -/** - * Fixes the hopper minecart being slower at [0,0,0] due to some stupid check - * TODO: Fixed in the next snapshot xD - */ - -@Mixin(HopperMinecartEntity.class) -public class HopperMinecartEntity_slowMixin { - - - @Redirect( - method = "tick()V", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/util/math/BlockPos;equals(Ljava/lang/Object;)Z" - ) - ) - private boolean notEqual(BlockPos blockPos, Object o) { - return !CFSettings.hopperMinecartSlowerAtOriginFix && blockPos.equals(o); - } -} diff --git a/src/main/java/carpetfixes/mixins/entityFixes/ItemFrameEntity_explosionWaterMixin.java b/src/main/java/carpetfixes/mixins/entityFixes/ItemFrameEntity_explosionWaterMixin.java index ad137041..02c57f05 100644 --- a/src/main/java/carpetfixes/mixins/entityFixes/ItemFrameEntity_explosionWaterMixin.java +++ b/src/main/java/carpetfixes/mixins/entityFixes/ItemFrameEntity_explosionWaterMixin.java @@ -4,6 +4,7 @@ import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.decoration.ItemFrameEntity; import net.minecraft.fluid.Fluids; +import net.minecraft.registry.tag.DamageTypeTags; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -28,7 +29,7 @@ public abstract class ItemFrameEntity_explosionWaterMixin { cancellable = true ) private void isInvulnerableOrWater(DamageSource source, float amount, CallbackInfoReturnable cir) { - if (CFSettings.explosionBreaksItemFrameInWaterFix && source.isExplosive() && + if (CFSettings.explosionBreaksItemFrameInWaterFix && source.isIn(DamageTypeTags.IS_EXPLOSION) && self.world.getFluidState(self.getBlockPos()).getFluid().matchesType(Fluids.WATER)) cir.setReturnValue(true); } diff --git a/src/main/java/carpetfixes/mixins/entityFixes/VillagerEntity_fireworkMixin.java b/src/main/java/carpetfixes/mixins/entityFixes/VillagerEntity_fireworkMixin.java index ad54f53c..63f63477 100644 --- a/src/main/java/carpetfixes/mixins/entityFixes/VillagerEntity_fireworkMixin.java +++ b/src/main/java/carpetfixes/mixins/entityFixes/VillagerEntity_fireworkMixin.java @@ -5,6 +5,7 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.passive.VillagerEntity; +import net.minecraft.registry.tag.DamageTypeTags; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; @@ -24,9 +25,11 @@ protected VillagerEntity_fireworkMixin(EntityType entity @Override public boolean damage(DamageSource source, float amount) { - if (CFSettings.badVillagerPyrotechnicsFix && source.isProjectile() && source.isExplosive() && - Objects.equals(source.getName(), "fireworks") && source.getAttacker() instanceof VillagerEntity) + if (CFSettings.badVillagerPyrotechnicsFix && source.isIn(DamageTypeTags.IS_PROJECTILE) && + source.isIn(DamageTypeTags.IS_EXPLOSION) && Objects.equals(source.getName(), "fireworks") && + source.getAttacker() instanceof VillagerEntity) { return false; + } return super.damage(source, amount); } } diff --git a/src/main/java/carpetfixes/mixins/featureFixes/ShipwreckGenerator$Piece_differentPaletteMixin.java b/src/main/java/carpetfixes/mixins/featureFixes/Piece_differentPaletteMixin.java similarity index 96% rename from src/main/java/carpetfixes/mixins/featureFixes/ShipwreckGenerator$Piece_differentPaletteMixin.java rename to src/main/java/carpetfixes/mixins/featureFixes/Piece_differentPaletteMixin.java index 4f360f28..cae8807c 100644 --- a/src/main/java/carpetfixes/mixins/featureFixes/ShipwreckGenerator$Piece_differentPaletteMixin.java +++ b/src/main/java/carpetfixes/mixins/featureFixes/Piece_differentPaletteMixin.java @@ -48,13 +48,13 @@ */ @Mixin(net.minecraft.structure.ShipwreckGenerator.Piece.class) -public abstract class ShipwreckGenerator$Piece_differentPaletteMixin extends SimpleStructurePiece { +public abstract class Piece_differentPaletteMixin extends SimpleStructurePiece { @Shadow @Final private boolean grounded; - public ShipwreckGenerator$Piece_differentPaletteMixin(StructurePieceType type, int length, + public Piece_differentPaletteMixin(StructurePieceType type, int length, StructureTemplateManager structureTemplateManager, Identifier id, String template, StructurePlacementData placementData, BlockPos pos) { diff --git a/src/main/java/carpetfixes/mixins/gameEventFixes/SpawnEggItem_offsetAndOcclusionMixin.java b/src/main/java/carpetfixes/mixins/gameEventFixes/SpawnEggItem_offsetAndOcclusionMixin.java index 34788987..31e58858 100644 --- a/src/main/java/carpetfixes/mixins/gameEventFixes/SpawnEggItem_offsetAndOcclusionMixin.java +++ b/src/main/java/carpetfixes/mixins/gameEventFixes/SpawnEggItem_offsetAndOcclusionMixin.java @@ -78,7 +78,9 @@ private void newEventCall(ItemUsageContext context, CallbackInfoReturnable entityType, ServerWorld world, Vec3d pos, ItemStack stack, CallbackInfoReturnable> cir) { //Using blockpos for backwards compat - if (CFSettings.spawnEggMissingEventFix) world.emitGameEvent(entity,GameEvent.ENTITY_PLACE, new BlockPos(pos)); + if (CFSettings.spawnEggMissingEventFix) { + world.emitGameEvent(entity,GameEvent.ENTITY_PLACE, BlockPos.ofFloored(pos)); + } } diff --git a/src/main/java/carpetfixes/mixins/goalFixes/StepAndDestroyBlockGoal_originMixin.java b/src/main/java/carpetfixes/mixins/goalFixes/StepAndDestroyBlockGoal_originMixin.java deleted file mode 100644 index d6ebbb30..00000000 --- a/src/main/java/carpetfixes/mixins/goalFixes/StepAndDestroyBlockGoal_originMixin.java +++ /dev/null @@ -1,39 +0,0 @@ -package carpetfixes.mixins.goalFixes; - -import carpetfixes.CFSettings; -import net.minecraft.entity.ai.goal.MoveToTargetPosGoal; -import net.minecraft.entity.ai.goal.StepAndDestroyBlockGoal; -import net.minecraft.entity.mob.PathAwareEntity; -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; - -/** - * Fixes the step and destroy block goal using the default origin blockpos [0,0,0] as a valid first check without - * proper checks for distance. - */ - -@Mixin(StepAndDestroyBlockGoal.class) -public abstract class StepAndDestroyBlockGoal_originMixin extends MoveToTargetPosGoal { - - public StepAndDestroyBlockGoal_originMixin(PathAwareEntity mob, double speed, int range) { - super(mob, speed, range); - } - - @Inject( - method = "hasAvailableTarget()Z", - at = @At("HEAD"), - cancellable = true - ) - private void onHasAvailableTarget(CallbackInfoReturnable cir) { - if (CFSettings.stepAndDestroyBlockGoalUsesOriginFix) { - cir.setReturnValue( - this.targetPos != null && - this.mob.isInWalkTargetRange(this.targetPos) && - this.isTargetPos(this.mob.world, this.targetPos) || - this.findTargetPos() - ); - } - } -} diff --git a/src/main/java/carpetfixes/mixins/itemFixes/MusicDiscItem_worldEventMixin.java b/src/main/java/carpetfixes/mixins/itemFixes/MusicDiscItem_worldEventMixin.java index 2222110e..6d10d5d7 100644 --- a/src/main/java/carpetfixes/mixins/itemFixes/MusicDiscItem_worldEventMixin.java +++ b/src/main/java/carpetfixes/mixins/itemFixes/MusicDiscItem_worldEventMixin.java @@ -2,10 +2,11 @@ import carpetfixes.CFSettings; import carpetfixes.helpers.DelayedWorldEventManager; -import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.MusicDiscItem; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; +import net.minecraft.world.event.GameEvent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -23,15 +24,15 @@ public class MusicDiscItem_worldEventMixin { method = "useOnBlock", at = @At( value = "INVOKE", - target = "Lnet/minecraft/world/World;syncWorldEvent(" + - "Lnet/minecraft/entity/player/PlayerEntity;ILnet/minecraft/util/math/BlockPos;I)V" + target = "Lnet/minecraft/world/World;emitGameEvent(Lnet/minecraft/world/event/GameEvent;" + + "Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/world/event/GameEvent$Emitter;)V" ) ) - private void worldEvent(World world, PlayerEntity playerEntity, int eventId, BlockPos blockPos, int data) { + private void worldEvent(World world, GameEvent gameEvent, BlockPos blockPos, GameEvent.Emitter emitter) { if (CFSettings.recordWorldEventFix) { - DelayedWorldEventManager.addDelayedWorldEvent(world, eventId, blockPos, data); + DelayedWorldEventManager.addDelayedWorldEvent(world, gameEvent, Vec3d.ofCenter(blockPos), emitter); } else { - world.syncWorldEvent(playerEntity, eventId, blockPos, data); + world.emitGameEvent(gameEvent, blockPos, emitter); } } } diff --git a/src/main/java/carpetfixes/mixins/playerFixes/PlayerAdvancementTracker_grantCriterionMixin.java b/src/main/java/carpetfixes/mixins/playerFixes/PlayerAdvancementTracker_grantCriterionMixin.java index 5439f450..23d0d583 100644 --- a/src/main/java/carpetfixes/mixins/playerFixes/PlayerAdvancementTracker_grantCriterionMixin.java +++ b/src/main/java/carpetfixes/mixins/playerFixes/PlayerAdvancementTracker_grantCriterionMixin.java @@ -25,13 +25,12 @@ public class PlayerAdvancementTracker_grantCriterionMixin { @Inject( method = "grantCriterion", at = @At("HEAD"), - cancellable = true) - public void grantCriterion(Advancement advancement, String criterionName, CallbackInfoReturnable cir) { - + cancellable = true + ) + private void grantCriterion(Advancement advancement, String criterionName, CallbackInfoReturnable cir) { if (CFSettings.spectatorAdvancementGrantingFix && - owner.interactionManager.getGameMode().equals(GameMode.SPECTATOR)) + owner.interactionManager.getGameMode().equals(GameMode.SPECTATOR)) { cir.cancel(); - - + } } } diff --git a/src/main/java/carpetfixes/mixins/playerFixes/ServerPlayNetworkHandler_nocomMixin.java b/src/main/java/carpetfixes/mixins/playerFixes/ServerPlayNetworkHandler_nocomMixin.java index c1e28742..f62ceed4 100644 --- a/src/main/java/carpetfixes/mixins/playerFixes/ServerPlayNetworkHandler_nocomMixin.java +++ b/src/main/java/carpetfixes/mixins/playerFixes/ServerPlayNetworkHandler_nocomMixin.java @@ -50,7 +50,7 @@ private void addIllegalAction(long currentTime) { at = @At( value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(" + - "Lnet/minecraft/network/Packet;Lnet/minecraft/network/listener/PacketListener;" + + "Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;" + "Lnet/minecraft/server/world/ServerWorld;)V", shift = At.Shift.AFTER ), diff --git a/src/main/java/carpetfixes/mixins/playerFixes/ServerPlayerEntity_spawnPlatformMixin.java b/src/main/java/carpetfixes/mixins/playerFixes/ServerPlayerEntity_spawnPlatformMixin.java index d4a44118..c1b7712a 100644 --- a/src/main/java/carpetfixes/mixins/playerFixes/ServerPlayerEntity_spawnPlatformMixin.java +++ b/src/main/java/carpetfixes/mixins/playerFixes/ServerPlayerEntity_spawnPlatformMixin.java @@ -86,7 +86,7 @@ private void getCustomTeleportTarget(ServerWorld destination, CallbackInfoReturn TeleportTarget teleportTarget = super.getTeleportTarget(destination); if (teleportTarget != null && this.world.getRegistryKey() == World.OVERWORLD && destination.getRegistryKey() == World.END) { Vec3d vec3d = teleportTarget.position.add(0.0, -1.0, 0.0); - BlockPos centerPos = new BlockPos(vec3d); + BlockPos centerPos = BlockPos.ofFloored(vec3d); createEndSpawnObsidian(destination, centerPos); // Create Floor // Find a valid place to teleport to on the platform Optional opt = findValidSpawnPosition(EntityType.PLAYER, destination, centerPos); diff --git a/src/main/java/carpetfixes/mixins/reIntroduced/ScreenHandler_itemShadowingMixin.java b/src/main/java/carpetfixes/mixins/reIntroduced/ScreenHandler_itemShadowingMixin.java index ee1a2380..409caf58 100644 --- a/src/main/java/carpetfixes/mixins/reIntroduced/ScreenHandler_itemShadowingMixin.java +++ b/src/main/java/carpetfixes/mixins/reIntroduced/ScreenHandler_itemShadowingMixin.java @@ -151,7 +151,7 @@ private void runBeforeThirdInventoryUpdate(int slotIndex, int button, SlotAction PlayerEntity player, CallbackInfo ci, PlayerInventory playerInventory, ClickType clickType, Slot slot, ItemStack itemStack, ItemStack itemStack5) { - if (CFSettings.reIntroduceItemShadowing) slot.setStack(itemStack5); + if (CFSettings.reIntroduceItemShadowing) slot.setStackNoCallbacks(itemStack5); } @@ -179,6 +179,6 @@ private void runBeforeThirdInventoryUpdate(int slotIndex, int button, SlotAction require = 0 ) private void dontRunBeforeThirdInventoryUpdate(Slot slot, ItemStack stack) { - if (!CFSettings.reIntroduceItemShadowing) slot.setStack(stack); + if (!CFSettings.reIntroduceItemShadowing) slot.setStackNoCallbacks(stack); } } diff --git a/src/main/java/carpetfixes/mixins/reIntroduced/ServerWorld_zeroTickMixin.java b/src/main/java/carpetfixes/mixins/reIntroduced/ServerWorld_zeroTickMixin.java index 77f3c0d2..43df3fe2 100644 --- a/src/main/java/carpetfixes/mixins/reIntroduced/ServerWorld_zeroTickMixin.java +++ b/src/main/java/carpetfixes/mixins/reIntroduced/ServerWorld_zeroTickMixin.java @@ -3,6 +3,7 @@ import carpetfixes.CFSettings; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.registry.DynamicRegistryManager; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.server.world.ServerWorld; @@ -25,9 +26,12 @@ public abstract class ServerWorld_zeroTickMixin extends World { private final ServerWorld self = (ServerWorld)(Object)this; protected ServerWorld_zeroTickMixin(MutableWorldProperties properties, RegistryKey registryRef, - RegistryEntry registryEntry, Supplier profiler, - boolean isClient, boolean debugWorld, long seed, int i) { - super(properties, registryRef, registryEntry, profiler, isClient, debugWorld, seed, i); + DynamicRegistryManager registryManager, + RegistryEntry dimensionEntry, Supplier profiler, + boolean isClient, boolean debugWorld, long biomeAccess, + int maxChainedNeighborUpdates) { + super(properties, registryRef, registryManager, dimensionEntry, profiler, isClient, + debugWorld, biomeAccess, maxChainedNeighborUpdates); } diff --git a/src/main/java/carpetfixes/testing/commands/FillSummonCommand.java b/src/main/java/carpetfixes/testing/commands/FillSummonCommand.java index be52aded..fd7ec71c 100644 --- a/src/main/java/carpetfixes/testing/commands/FillSummonCommand.java +++ b/src/main/java/carpetfixes/testing/commands/FillSummonCommand.java @@ -40,8 +40,8 @@ public static void register(CommandDispatcher dispatcher, C .executes(context -> execute( context.getSource(), RegistryEntryArgumentType.getSummonableEntityType(context, "entity"), - BlockPosArgumentType.getBlockPos(context, "fromPos"), - BlockPosArgumentType.getBlockPos(context, "toPos"), + BlockPosArgumentType.getValidBlockPos(context, "fromPos"), + BlockPosArgumentType.getValidBlockPos(context, "toPos"), new NbtCompound(), true )) @@ -49,8 +49,8 @@ public static void register(CommandDispatcher dispatcher, C .executes(context -> execute( context.getSource(), RegistryEntryArgumentType.getSummonableEntityType(context, "entity"), - BlockPosArgumentType.getBlockPos(context, "fromPos"), - BlockPosArgumentType.getBlockPos(context, "toPos"), + BlockPosArgumentType.getValidBlockPos(context, "fromPos"), + BlockPosArgumentType.getValidBlockPos(context, "toPos"), NbtCompoundArgumentType.getNbtCompound(context, "nbt"), false ))))))); diff --git a/src/main/resources/assets/carpet-fixes/lang/en_us.json b/src/main/resources/assets/carpet-fixes/lang/en_us.json index 1aad4c2b..c5cce979 100644 --- a/src/main/resources/assets/carpet-fixes/lang/en_us.json +++ b/src/main/resources/assets/carpet-fixes/lang/en_us.json @@ -186,7 +186,6 @@ "carpet-fixes.rule.hardcodedSeaLevelFix.extra": "[MC-226687](https://bugs.mojang.com/browse/MC-226687)", "carpet-fixes.rule.headlessPistonFix.desc": "Fixes being able to make and use Headless Pistons", "carpet-fixes.rule.headlessPistonFix.extra": "[MC-27056](https://bugs.mojang.com/browse/MC-27056)", - "carpet-fixes.rule.hopperMinecartSlowerAtOriginFix.desc": "Fixes hopper minecarts being 4x slower at [0,0,0]", "carpet-fixes.rule.hopperUpdateFix.extra": "invisibleHopperFix is automatically enabled when used\n[Youtube Video](https://www.youtube.com/watch?v=QVOONJ1OY44)", "carpet-fixes.rule.hopperUpdateFix.desc": "Fixes hoppers not giving block updates when placed while powered", "carpet-fixes.rule.hoppersSelectMinecartsRandomlyFix.desc": "Fixes hoppers choosing a random minecart, resulting in slower item transfers", @@ -218,8 +217,6 @@ "carpet-fixes.rule.invulnerableEndCrystalFix.desc": "Fixes being able to make permanent invulnerable end crystals", "carpet-fixes.rule.itemFramePlaysSoundOnReadFix.desc": "Fixes item frames playing a sound when they are read from nbt", "carpet-fixes.rule.itemFramePlaysSoundOnReadFix.extra": "[MC-123450](https://bugs.mojang.com/browse/MC-123450)", - "carpet-fixes.rule.jukeboxDiscItemOffsetOnBreakFix.desc": "Fixes jukebox not spawning disc in the center of the block when broken", - "carpet-fixes.rule.jukeboxDiscItemOffsetOnBreakFix.extra": "[MC-166032](https://bugs.mojang.com/browse/MC-166032)", "carpet-fixes.rule.lavaCalculatesWrongFireStateFix.desc": "Fixes lava creating fire with incorrect block states", "carpet-fixes.rule.lavaCalculatesWrongFireStateFix.extra": "[MC-250048](https://bugs.mojang.com/browse/MC-250048)", "carpet-fixes.rule.lavaIgnoresBubbleColumnFix.desc": "Fixes lava not being able to convert bubble columns to stone", @@ -400,7 +397,6 @@ "carpet-fixes.rule.spongeUpdateFix.extra": "[MC-220636](https://bugs.mojang.com/browse/MC-220636)", "carpet-fixes.rule.statusUpdateDelay.desc": "Allows you to change how long the server player list wait before updating", "carpet-fixes.rule.statusUpdateDelay.extra": "delay is in nanoseconds. Default is 5 seconds (5000000000) [1m,10s,5s,1s]", - "carpet-fixes.rule.stepAndDestroyBlockGoalUsesOriginFix.desc": "Fixes the stepAndDestroyBlockGoal using the origin without first checking if its valid", "carpet-fixes.rule.stringDupeFix.desc": "Fixes a string dupe using water & tripwire hooks", "carpet-fixes.rule.stringDupeFix.extra": "[MC-59471](https://bugs.mojang.com/browse/MC-59471)", "carpet-fixes.rule.structureManagerCantLoadSnbtFix.extra": "This makes it possible for structure blocks to load snbt files also.\nShould not be used in survival or for datapacks, since its slower than nbt", diff --git a/src/main/resources/carpet-fixes.accesswidener b/src/main/resources/carpet-fixes.accesswidener index 11c3b873..30a222bc 100644 --- a/src/main/resources/carpet-fixes.accesswidener +++ b/src/main/resources/carpet-fixes.accesswidener @@ -16,3 +16,4 @@ extendable method net/minecraft/entity/projectile/PersistentProjectileEntity fal accessible class net/minecraft/world/chunk/PaletteResizeListener accessible method net/minecraft/world/chunk/ArrayPalette (Lnet/minecraft/util/collection/IndexedIterable;[Ljava/lang/Object;Lnet/minecraft/world/chunk/PaletteResizeListener;II)V accessible method net/minecraft/world/chunk/BiMapPalette (Lnet/minecraft/util/collection/IndexedIterable;ILnet/minecraft/world/chunk/PaletteResizeListener;Lnet/minecraft/util/collection/Int2ObjectBiMap;)V +accessible field net/minecraft/block/AbstractPressurePlateBlock blockSetType Lnet/minecraft/block/BlockSetType; diff --git a/src/main/resources/carpet-fixes.mixins.json b/src/main/resources/carpet-fixes.mixins.json index 8c146518..e0e1a36a 100644 --- a/src/main/resources/carpet-fixes.mixins.json +++ b/src/main/resources/carpet-fixes.mixins.json @@ -43,7 +43,6 @@ "blockFixes.FlowableFluid_chainedTickMixin", "blockFixes.GrindstoneBlock_movableMixin", "blockFixes.IceBlock_breakMixin", - "blockFixes.JukeboxBlock_itemOffsetMixin", "blockFixes.LavaFluid_bubbleColumnMixin", "blockFixes.LavaFluid_wrongStateMixin", "blockFixes.NoteBlock_placedMixin", @@ -179,7 +178,6 @@ "entityFixes.FallingBlockEntity_portalsMixin", "entityFixes.FishingBobberEntity_outsideWaterMixin", "entityFixes.FoxEntity_lootDropMixin", - "entityFixes.HopperMinecartEntity_slowMixin", "entityFixes.ItemFrameEntity_explosionWaterMixin", "entityFixes.ItemFrameEntity_soundMixin", "entityFixes.LeashKnotEntity_detachMixin", @@ -227,7 +225,7 @@ "featureFixes.BuriedTreasureStructure_centerMixin", "featureFixes.GeodeFeature_lavaloggedMixin", "featureFixes.GiantTrunkPlacer_extraWoodMixin", - "featureFixes.ShipwreckGenerator$Piece_differentPaletteMixin", + "featureFixes.Piece_differentPaletteMixin", "featureFixes.SwampHutGenerator_samePosMixin", "gameEventFixes.SpawnEggItem_offsetAndOcclusionMixin", "gameEventFixes.stepEvent.Entity_stepEventMixin", @@ -243,7 +241,6 @@ "goalFixes.OcelotEntity$FleeGoal_vehicleMixin", "goalFixes.RevengeGoal_selfHarmMixin", "goalFixes.SitGoal_goalLoopMixin", - "goalFixes.StepAndDestroyBlockGoal_originMixin", "goalFixes.slowedGoalFix.DolphinEntity$PlayWithItemsGoal_slowMixin", "goalFixes.slowedGoalFix.EatGrassGoal_slowMixin", "goalFixes.slowedGoalFix.EvokerEntity$SummonVexGoal_slowMixin",