Skip to content

Commit

Permalink
update to support 1.20.4 (#163)
Browse files Browse the repository at this point in the history
This is an early stab at updating to 1.20.4. There are several
deficiencies:

- carpetfixes.mixins.advanced.MinecraftServer_autosaveDelayMixin needs
  to be rewritten to match the changes in the game

- I do not understand what
  carpetfixes.mixins.reIntroduced.PlayerManager_LlamaRidingDupeMixin
  is trying to do with the "vmp" and "c2me" prefixes.

- The method call intercept to
  com.google.commons.collect.Maps.newHashMap() fail in
  carpetfixes.mixins.blockFixes.PistonBlock_pushOrderMixin and I do not
  understand why.

- Update suppression fixes should be removed as they are handled by TIS.

The mod does compile and work for the few fixes I have tried.

Co-authored-by: Peter Svensson <petersv@psv.nu>
  • Loading branch information
petersv5 and Peter Svensson authored Jan 18, 2024
1 parent 4955026 commit 1b21751
Show file tree
Hide file tree
Showing 17 changed files with 69 additions and 63 deletions.
10 changes: 5 additions & 5 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ org.gradle.jvmargs=-Xmx2G

# Fabric Properties
# check these on https://fabricmc.net/use or https://modmuss50.me/fabric.html
minecraft_version=1.20
minecraft_version=1.20.4
display_minecraft_version=1.20
yarn_mappings=1.20+build.1
loader_version=0.14.3
carpet_minecraft_version=1.20
yarn_mappings=1.20.4+build.3
loader_version=0.15.3
carpet_minecraft_version=1.20.3
# check available versions on maven for the given minecraft version you are using
carpet_core_version=1.4.112+v230608
carpet_core_version=1.4.128+v231205


# Mod Properties
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,29 +10,30 @@
public class MinecraftServer_autosaveDelayMixin {


@ModifyConstant(
method = "tick(Ljava/util/function/BooleanSupplier;)V",
constant = @Constant(intValue = 6000)
)
public int tickAutoSave(int autoSaveDelay) {
return CFSettings.delayBetweenAutoSaves;
}


@ModifyConstant(
method = "canExecute(Lnet/minecraft/server/ServerTask;)Z",
constant = @Constant(intValue = 3) //statusUpdateDelay
)
public int shouldRunWithLatency(int maxTickLatency) {
return CFSettings.maxTickLatency;
}


@ModifyConstant(
method = "tick(Ljava/util/function/BooleanSupplier;)V",
constant = @Constant(longValue = 5000000000L)
)
public long customStatusUpdateDelay(long maxTickLatency) {
return CFSettings.statusUpdateDelay;
}
// FIXME - this seems to have been rewritten
// @ModifyConstant(
// method = "tick(Ljava/util/function/BooleanSupplier;)V",
// constant = @Constant(intValue = 6000)
// )
// public int tickAutoSave(int autoSaveDelay) {
// return CFSettings.delayBetweenAutoSaves;
// }
//
//
// @ModifyConstant(
// method = "canExecute(Lnet/minecraft/server/ServerTask;)Z",
// constant = @Constant(intValue = 3) //statusUpdateDelay
// )
// public int shouldRunWithLatency(int maxTickLatency) {
// return CFSettings.maxTickLatency;
// }
//
//
// @ModifyConstant(
// method = "tick(Ljava/util/function/BooleanSupplier;)V",
// constant = @Constant(longValue = 5000000000L)
// )
// public long customStatusUpdateDelay(long maxTickLatency) {
// return CFSettings.statusUpdateDelay;
// }
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class EnchantingTableBlock_transparentMixin {


@Redirect(
method = "canAccessBookshelf(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;" +
method = "canAccessPowerProvider(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;" +
"Lnet/minecraft/util/math/BlockPos;)Z",
at = @At(
value = "INVOKE",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public HopperBlock_missingUpdateMixin(Settings settings) {

@ModifyArg(
method = "updateEnabled(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;" +
"Lnet/minecraft/block/BlockState;I)V",
"Lnet/minecraft/block/BlockState;)V",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/world/World;" +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ private Direction directionToUpdate(BlockState state) {


@Inject(
method = "onUse",
method = "flip",
at = @At(
shift = At.Shift.AFTER,
value = "INVOKE",
Expand All @@ -59,7 +59,7 @@ private Direction directionToUpdate(BlockState state) {
)
)
private void updateOnUseCorrectly(BlockState state, World world, BlockPos pos, PlayerEntity player,
Hand hand, BlockHitResult hit, CallbackInfoReturnable<ActionResult> cir) {
CallbackInfo ci) {
if (CFSettings.trapdoorMissingUpdateFix)
world.updateNeighbor(pos.offset(directionToUpdate(state)),state.getBlock(),pos);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import carpetfixes.helpers.BlockUpdateUtils;
import net.minecraft.block.BlockState;
import net.minecraft.block.RedstoneTorchBlock;
import net.minecraft.block.TorchBlock;
import net.minecraft.block.AbstractTorchBlock;
import net.minecraft.particle.ParticleEffect;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
Expand All @@ -18,12 +18,12 @@
*/

@Mixin(RedstoneTorchBlock.class)
public abstract class RedstoneTorchBlock_updateMixin extends TorchBlock {
public abstract class RedstoneTorchBlock_updateMixin extends AbstractTorchBlock {

RedstoneTorchBlock self = (RedstoneTorchBlock)(Object)this;

protected RedstoneTorchBlock_updateMixin(Settings settings, ParticleEffect particle) {
super(settings, particle);
protected RedstoneTorchBlock_updateMixin(Settings settings) {
super(settings);
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public abstract class StatusEffectInstance_wrongEffectMixin {
private void addHere(LivingEntity entity, Runnable overwriteCallback, CallbackInfoReturnable<Boolean> cir) {
if (CFSettings.brokenHiddenStatusEffectFix) {
((LivingEntityAccessor)entity).setEffectsChanged(true);
this.getEffectType().onRemoved(entity, entity.getAttributes(), this.getAmplifier());
this.getEffectType().onRemoved(entity.getAttributes());
}
}

Expand All @@ -63,7 +63,7 @@ private void addHere(LivingEntity entity, Runnable overwriteCallback, CallbackIn
)
private void removeHere(LivingEntity entity, Runnable overwriteCallback, CallbackInfoReturnable<Boolean> cir) {
if (CFSettings.brokenHiddenStatusEffectFix) {
this.getEffectType().onApplied(entity, entity.getAttributes(), this.getAmplifier());
this.getEffectType().onApplied(entity.getAttributes(), this.getAmplifier());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,22 +26,23 @@ public TripwireHookBlock_hookDupeMixin(Settings settings) {
}

@Shadow
protected abstract void playSound(World w, BlockPos pos, boolean a, boolean on, boolean detached, boolean off);
protected static void playSound(World w, BlockPos pos, boolean a, boolean on, boolean detached, boolean off) { }

@Shadow
protected abstract void updateNeighborsOnAxis(World world, BlockPos pos, Direction direction);
protected static void updateNeighborsOnAxis(Block block, World world, BlockPos pos, Direction direction) { }


/**
* @author FX - PR0CESS
* @reason Fix for the tripwire hook duplication bug
*/
@Overwrite
public void update(World world, BlockPos pos, BlockState state, boolean beingRemoved,
public static void update(World world, BlockPos pos, BlockState state, boolean beingRemoved,
boolean bl, int i, @Nullable BlockState blockState) {
Direction direction = state.get(FACING);
boolean attached = state.get(ATTACHED);
boolean powered = state.get(POWERED);
Block block = state.getBlock();
boolean notRemoving = !beingRemoved;
boolean on = false;
int index = 0;
Expand All @@ -63,32 +64,32 @@ public void update(World world, BlockPos pos, BlockState state, boolean beingRem
on |= armed && blockState2.get(TripwireBlock.POWERED);
blockStates[k] = blockState2;
if (k == i) {
world.scheduleBlockTick(pos, this, 10);
world.scheduleBlockTick(pos, block, 10);
notRemoving &= armed;
}
}
}
notRemoving &= index > 1;
on &= notRemoving;
BlockState newState = this.getDefaultState().with(ATTACHED, notRemoving).with(POWERED, on);
BlockState newState = block.getDefaultState().with(ATTACHED, notRemoving).with(POWERED, on);
if (index > 0) {
blockPos = pos.offset(direction, index);
Direction blockState2 = direction.getOpposite();
world.setBlockState(blockPos, newState.with(FACING, blockState2), Block.NOTIFY_ALL);
this.updateNeighborsOnAxis(world, blockPos, blockState2);
this.playSound(world, blockPos, notRemoving, on, attached, powered);
updateNeighborsOnAxis(block, world, blockPos, blockState2);
playSound(world, blockPos, notRemoving, on, attached, powered);
}
this.playSound(world, pos, notRemoving, on, attached, powered);
if (!beingRemoved && (!CFSettings.tripwireHookDupeFix || world.getBlockState(pos).isOf(this))) {
playSound(world, pos, notRemoving, on, attached, powered);
if (!beingRemoved && (!CFSettings.tripwireHookDupeFix || world.getBlockState(pos).isOf(Blocks.TRIPWIRE_HOOK))) {
world.setBlockState(pos, newState.with(FACING, direction), Block.NOTIFY_ALL);
if (bl) this.updateNeighborsOnAxis(world, pos, direction);
if (bl) updateNeighborsOnAxis(block, world, pos, direction);
}
if (attached != notRemoving) {
for(int x = 1; x < index; ++x) {
BlockPos pos2 = pos.offset(direction, x);
BlockState state2 = blockStates[x];
if (state2 != null) {
if (!CFSettings.tripwireNotDisarmingFix || world.getBlockState(pos2).isOf(this)) {
if (!CFSettings.tripwireNotDisarmingFix || world.getBlockState(pos2).isOf(Blocks.TRIPWIRE_HOOK)) {
world.setBlockState(pos2, state2.with(ATTACHED, notRemoving), Block.NOTIFY_ALL);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package carpetfixes.mixins.dupeFixes.saferItemTransfer;

import carpetfixes.CFSettings;
import net.minecraft.block.BlockState;
import net.minecraft.block.DropperBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.server.world.ServerWorld;
Expand All @@ -24,7 +25,7 @@ public class DropperBlock_dontCopyMixin {


@Redirect(
method = "dispense(Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/util/math/BlockPos;)V",
method = "dispense(Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;)V",
slice = @Slice(
from = @At("HEAD"),
to = @At(
Expand All @@ -46,7 +47,7 @@ protected ItemStack shouldCopyFirst(ItemStack itemStack) {


@Redirect(
method = "dispense(Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/util/math/BlockPos;)V",
method = "dispense(Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;)V",
slice = @Slice(
from = @At(
value = "INVOKE",
Expand All @@ -65,10 +66,10 @@ protected ItemStack shouldCopy(ItemStack itemStack) {


@Inject(
method = "dispense(Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/util/math/BlockPos;)V",
method = "dispense(Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;)V",
at = @At("TAIL")
)
private void removeInstance(ServerWorld world, BlockPos pos, CallbackInfo ci) {
private void removeInstance(ServerWorld world, BlockState state, BlockPos pos, CallbackInfo ci) {
stack = ItemStack.EMPTY;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public abstract class ArmorStandEntity_damageMixin {
method = "damage(Lnet/minecraft/entity/damage/DamageSource;F)Z",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/entity/damage/DamageSource;getSource()Lnet/minecraft/entity/Entity;",
target = "Lnet/minecraft/entity/damage/DamageSource;getAttacker()Lnet/minecraft/entity/Entity;",
ordinal = 0,
shift = At.Shift.BEFORE
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public DrownedEntity_enchantedTridentMixin(EntityType<? extends ZombieEntity> en


@Redirect(
method = "attack",
method = "shootAt",
at = @At(
value = "NEW",
target = "net/minecraft/item/ItemStack"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import net.minecraft.entity.EntityType;
import net.minecraft.entity.projectile.PersistentProjectileEntity;
import net.minecraft.entity.projectile.TridentEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
Expand All @@ -17,8 +18,8 @@
@Mixin(TridentEntity.class)
public abstract class TridentEntity_fallingMixin extends PersistentProjectileEntity {

protected TridentEntity_fallingMixin(EntityType<? extends PersistentProjectileEntity> entityType, World world) {
super(entityType, world);
protected TridentEntity_fallingMixin(EntityType<? extends PersistentProjectileEntity> entityType, World world, ItemStack stack) {
super(entityType, world, stack);
}

@Shadow
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import carpetfixes.CFSettings;
import net.minecraft.advancement.Advancement;
import net.minecraft.advancement.AdvancementEntry;
import net.minecraft.advancement.PlayerAdvancementTracker;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.world.GameMode;
Expand All @@ -27,7 +28,7 @@ public class PlayerAdvancementTracker_grantCriterionMixin {
at = @At("HEAD"),
cancellable = true
)
private void grantCriterion(Advancement advancement, String criterionName, CallbackInfoReturnable<Boolean> cir) {
private void grantCriterion(AdvancementEntry advancement, String criterionName, CallbackInfoReturnable<Boolean> cir) {
if (CFSettings.spectatorAdvancementGrantingFix &&
owner.interactionManager.getGameMode().equals(GameMode.SPECTATOR)) {
cir.cancel();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ protected PlayerEntity_absorptionMixin(EntityType<? extends LivingEntity> entity


@Inject(
method = "setAbsorptionAmount(F)V",
method = "setAbsorptionAmountUnclamped(F)V",
at = @At("RETURN")
)
private void onAbsorptionChanged(float amount, CallbackInfo ci) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
*/

@Mixin(AbstractRedstoneGateBlock.class)
public class AbstractRedstoneGateBlock_repeaterPriorityMixin extends HorizontalFacingBlock {
abstract public class AbstractRedstoneGateBlock_repeaterPriorityMixin extends HorizontalFacingBlock {

protected AbstractRedstoneGateBlock_repeaterPriorityMixin(Settings settings) {
super(settings);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ private static Vec3d adjustMovementForCollisionsAtPos(@Nullable Entity entity, V
}

private static boolean canWorldBorderCollideAtPos(WorldBorder worldBorder, Vec3d pos, Box box) {
double d = Math.max(MathHelper.absMax(box.getXLength(), box.getZLength()), 1.0);
double d = Math.max(MathHelper.absMax(box.getLengthX(), box.getLengthZ()), 1.0);
return worldBorder.getDistanceInsideBorder(pos.getX(), pos.getZ()) < d * 2.0 &&
worldBorder.contains(pos.getX(), pos.getZ(), d);
}
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/carpet-fixes.accesswidener
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ accessible class net/minecraft/world/chunk/PaletteResizeListener
accessible method net/minecraft/world/chunk/ArrayPalette <init> (Lnet/minecraft/util/collection/IndexedIterable;[Ljava/lang/Object;Lnet/minecraft/world/chunk/PaletteResizeListener;II)V
accessible method net/minecraft/world/chunk/BiMapPalette <init> (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;
extendable method net/minecraft/entity/LivingEntity canBreatheInWater ()Z

0 comments on commit 1b21751

Please sign in to comment.