diff --git a/gradle.properties b/gradle.properties index eb71a3a0c71..a907ce2d34b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ mixinConfigs=mixins.sponge.accessors.json,mixins.sponge.api.json,mixins.sponge.c mixins.sponge.tracker.json,mixins.sponge.ipforward.json,mixins.sponge.optimization.json superClassChanges=common.superclasschange -minecraftVersion=1.21.3 +minecraftVersion=24w45a recommendedVersion=0-SNAPSHOT org.gradle.dependency.verification.console=verbose diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 4046353e1be..fb9c7fed25e 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -1232,6 +1232,14 @@ + + + + + + + + diff --git a/src/accessors/java/org/spongepowered/common/accessor/network/chat/StyleAccessor.java b/src/accessors/java/org/spongepowered/common/accessor/network/chat/StyleAccessor.java index ede074bb8f8..d45e749941e 100644 --- a/src/accessors/java/org/spongepowered/common/accessor/network/chat/StyleAccessor.java +++ b/src/accessors/java/org/spongepowered/common/accessor/network/chat/StyleAccessor.java @@ -29,20 +29,22 @@ import net.minecraft.network.chat.Style; import net.minecraft.network.chat.TextColor; import net.minecraft.resources.ResourceLocation; -import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Invoker; import org.spongepowered.common.UntransformedInvokerError; +import javax.annotation.Nullable; +import java.util.Optional; + @Mixin(Style.class) public interface StyleAccessor { @Invoker("") - static Style invoker$new(final @Nullable TextColor color, final @Nullable Boolean bold, final @Nullable Boolean italic, - final @Nullable Boolean underlined, final @Nullable Boolean strikethrough, final @Nullable Boolean obfuscated, - final @Nullable ClickEvent clickEvent, final @Nullable HoverEvent hoverEvent, final @Nullable String insertion, - final @Nullable ResourceLocation font) { + static Style invoker$new(final @Nullable TextColor color, final @Nullable Integer shadowColor, final @Nullable Boolean bold, final @Nullable Boolean italic, + final @Nullable Boolean underlined, final @Nullable Boolean strikethrough, final @Nullable Boolean obfuscated, + final @Nullable ClickEvent clickEvent, final @Nullable HoverEvent hoverEvent, final @Nullable String insertion, + final @Nullable ResourceLocation font) { throw new UntransformedInvokerError(); } diff --git a/src/accessors/java/org/spongepowered/common/accessor/network/protocol/game/ServerboundMoveVehiclePacketAccessor.java b/src/accessors/java/org/spongepowered/common/accessor/network/protocol/game/ServerboundMoveVehiclePacketAccessor.java index c506173e7d3..a0865d608f4 100644 --- a/src/accessors/java/org/spongepowered/common/accessor/network/protocol/game/ServerboundMoveVehiclePacketAccessor.java +++ b/src/accessors/java/org/spongepowered/common/accessor/network/protocol/game/ServerboundMoveVehiclePacketAccessor.java @@ -25,6 +25,7 @@ package org.spongepowered.common.accessor.network.protocol.game; import net.minecraft.network.protocol.game.ServerboundMoveVehiclePacket; +import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.gen.Accessor; @@ -32,11 +33,7 @@ @Mixin(ServerboundMoveVehiclePacket.class) public interface ServerboundMoveVehiclePacketAccessor { - @Accessor("x") @Mutable void accessor$x(final double x); - - @Accessor("y") @Mutable void accessor$y(final double y); - - @Accessor("z") @Mutable void accessor$z(final double z); + @Accessor("position") @Mutable void accessor$position(final Vec3 position); @Accessor("yRot") @Mutable void accessor$yRot(final float yRot); diff --git a/src/main/java/org/spongepowered/common/data/provider/item/stack/ArmorItemStackData.java b/src/main/java/org/spongepowered/common/data/provider/item/stack/ArmorItemStackData.java index 80e8198b33e..45679626783 100644 --- a/src/main/java/org/spongepowered/common/data/provider/item/stack/ArmorItemStackData.java +++ b/src/main/java/org/spongepowered/common/data/provider/item/stack/ArmorItemStackData.java @@ -54,7 +54,7 @@ public static void register(final DataProviderRegistrator registrator) { if (equippable == null) { return null; } - return equippable.model() + return equippable.assetId() .map(rl -> (ResourceKey) (Object) rl) .flatMap(rk -> RegistryTypes.ARMOR_MATERIAL.get().findEntry(rk)) .map(RegistryEntry::value) diff --git a/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackData.java b/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackData.java index 4b991d5a3ca..c32e212194e 100644 --- a/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackData.java +++ b/src/main/java/org/spongepowered/common/data/provider/item/stack/ItemStackData.java @@ -117,10 +117,10 @@ public static void register(final DataProviderRegistrator registrator) { .get(h -> (ItemType) h.getItem().getCraftingRemainder().getItem()) .create(Keys.DISPLAY_NAME) .get(h -> SpongeAdventure.asAdventure(h.getDisplayName())) - .create(Keys.CUSTOM_MODEL_DATA) - .get(h -> h.getOrDefault(DataComponents.CUSTOM_MODEL_DATA, CustomModelData.DEFAULT).value()) - .set((h, v) -> h.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(v))) - .delete(h -> h.remove(DataComponents.CUSTOM_MODEL_DATA)) +// .create(Keys.CUSTOM_MODEL_DATA) +// .get(h -> h.getOrDefault(DataComponents.CUSTOM_MODEL_DATA, CustomModelData.EMPTY)) +// .set((h, v) -> h.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(v))) +// .delete(h -> h.remove(DataComponents.CUSTOM_MODEL_DATA)) .create(Keys.CUSTOM_NAME) .get(h -> { if (h.has(DataComponents.CUSTOM_NAME)) { diff --git a/src/main/java/org/spongepowered/common/effect/particle/SpongeParticleHelper.java b/src/main/java/org/spongepowered/common/effect/particle/SpongeParticleHelper.java index c09654d2ca8..79d7f2da8f5 100644 --- a/src/main/java/org/spongepowered/common/effect/particle/SpongeParticleHelper.java +++ b/src/main/java/org/spongepowered/common/effect/particle/SpongeParticleHelper.java @@ -243,6 +243,7 @@ public void process(final double x, final double y, final double z, final List

createProjectile(final LivingEntity source, fina @Override protected Optional createProjectile(final LivingEntity source, final ServerLocation loc) { if (source instanceof Player) { - final FishingHook hook = new FishingHook((Player) source, source.level(), 0, 0, new ItemStack(Items.FISHING_ROD)); + final FishingHook hook = new FishingHook((Player) source, source.level(), 0, 0); hook.setPos(loc.x(), loc.y(), loc.z()); return ProjectileUtil.doLaunch(loc.world(), (FishingBobber) hook); } diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/minecraft/world/level/levelgen/structure/StructureMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/minecraft/world/level/levelgen/structure/StructureMixin_API.java index 349ad7f4869..6d790982a78 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/api/minecraft/world/level/levelgen/structure/StructureMixin_API.java +++ b/src/mixins/java/org/spongepowered/common/mixin/api/minecraft/world/level/levelgen/structure/StructureMixin_API.java @@ -30,7 +30,9 @@ import net.minecraft.core.Holder; import net.minecraft.core.HolderSet; import net.minecraft.core.SectionPos; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.RegistryOps; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.MobCategory; @@ -73,8 +75,20 @@ public boolean place(final ServerWorld world, final Vector3i pos) { // see PlaceCommand#placeStructure final ServerLevel level = (ServerLevel) world; final ServerChunkCache chunkSource = level.getChunkSource(); - final StructureStart start = ((Structure) (Object) this).generate(level.registryAccess(), chunkSource.getGenerator(), chunkSource.getGenerator().getBiomeSource(), - chunkSource.randomState(), level.getStructureManager(), level.getSeed(), new ChunkPos(VecHelper.toBlockPos(pos)), 0, level, b -> true); + final var key = level.registryAccess().lookupOrThrow(Registries.STRUCTURE).wrapAsHolder((Structure) (Object) this); + final StructureStart start = ((Structure) (Object) this).generate( + key, + level.dimension(), + level.registryAccess(), + chunkSource.getGenerator(), + chunkSource.getGenerator().getBiomeSource(), + chunkSource.randomState(), + level.getStructureManager(), + level.getSeed(), + new ChunkPos(VecHelper.toBlockPos(pos)), + 0, + level, + ignored -> true); if (!start.isValid()) { return false; diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/adventure/text/format/StyleImplMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/adventure/text/format/StyleImplMixin.java index eee014e0b73..ca7a8065c0d 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/adventure/text/format/StyleImplMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/adventure/text/format/StyleImplMixin.java @@ -47,6 +47,7 @@ public abstract class StyleImplMixin implements StyleBridge { this.bridge$vanilla = StyleAccessor.invoker$new( // color SpongeAdventure.asVanillaNullable($this.color()), + null, // decorations SpongeAdventure.asVanillaNullable($this.decoration(TextDecoration.BOLD)), SpongeAdventure.asVanillaNullable($this.decoration(TextDecoration.ITALIC)), diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/server/commands/TeleportCommandMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/server/commands/TeleportCommandMixin.java index 1b6676593a7..a08d031d170 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/server/commands/TeleportCommandMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/server/commands/TeleportCommandMixin.java @@ -118,7 +118,7 @@ private static void performTeleport(CommandSourceStack source, Entity entityIn, if (entityIn instanceof ServerPlayer sp) { ChunkPos chunkpos = new ChunkPos(new BlockPos((int) actualX, (int) actualY, (int) actualZ)); - worldIn.getChunkSource().addRegionTicket(TicketType.POST_TELEPORT, chunkpos, 1, entityIn.getId()); + worldIn.getChunkSource().addRegionTicket(TicketType.FORCED, chunkpos, 1, chunkpos); entityIn.stopRiding(); diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/server/level/ServerPlayerMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/server/level/ServerPlayerMixin.java index 6d21338b8a8..2ba773f469c 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/server/level/ServerPlayerMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/server/level/ServerPlayerMixin.java @@ -229,7 +229,7 @@ public abstract class ServerPlayerMixin extends PlayerMixin implements SubjectBr final var thisPlayer = ((net.minecraft.server.level.ServerPlayer) (Object) this); final ChunkPos chunkPos = new ChunkPos(VecHelper.toBlockPos(pos)); - level.getChunkSource().addRegionTicket(TicketType.POST_TELEPORT, chunkPos, 1, thisPlayer.getId()); + level.getChunkSource().addRegionTicket(TicketType.FORCED, chunkPos, 1, chunkPos); thisPlayer.stopRiding(); if (thisPlayer.isSleeping()) { @@ -425,9 +425,8 @@ public boolean teleportTo(final ServerLevel world, frame.addContext(EventContextKeys.MOVEMENT_TYPE, MovementTypes.PLUGIN); } - final var thisPlayer = (net.minecraft.server.level.ServerPlayer) (Object) this; return this.bridge$changeDimension(new TeleportTransition(world, new Vec3(x, y, z), Vec3.ZERO, yaw, pitch, relative, - e -> world.getChunkSource().addRegionTicket(TicketType.POST_TELEPORT, e.chunkPosition(), 1, thisPlayer.getId()))) != null; + e -> world.getChunkSource().addRegionTicket(TicketType.FORCED, e.chunkPosition(), 1, e.chunkPosition()))) != null; } } @@ -698,7 +697,7 @@ public void die(final DamageSource cause) { final LivingEntity livingentity = this.shadow$getKillCredit(); if (livingentity != null) { this.shadow$awardStat(Stats.ENTITY_KILLED_BY.get(livingentity.getType())); - livingentity.awardKillScore((net.minecraft.server.level.ServerPlayer) (Object) this, this.deathScore, cause); + livingentity.awardKillScore((net.minecraft.server.level.ServerPlayer) (Object) this, cause); this.shadow$createWitherRose(livingentity); } diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/server/network/ServerGamePacketListenerImplMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/server/network/ServerGamePacketListenerImplMixin.java index 58c4741603f..244357dfd85 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/server/network/ServerGamePacketListenerImplMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/server/network/ServerGamePacketListenerImplMixin.java @@ -293,7 +293,7 @@ public abstract class ServerGamePacketListenerImplMixin extends ServerCommonPack at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getControllingPassenger()Lnet/minecraft/world/entity/LivingEntity;") ) private void impl$handleVehicleMoveEvent(final ServerboundMoveVehiclePacket param0, final CallbackInfo ci) { - final ServerboundMoveVehiclePacketAccessor packet = (ServerboundMoveVehiclePacketAccessor) param0; + final ServerboundMoveVehiclePacketAccessor packet = (ServerboundMoveVehiclePacketAccessor) (Object) param0; final Entity rootVehicle = this.player.getRootVehicle(); final Vector3d fromRotation = new Vector3d(rootVehicle.getYRot(), rootVehicle.getXRot(), 0); @@ -301,8 +301,9 @@ public abstract class ServerGamePacketListenerImplMixin extends ServerCommonPack // We need this because we ignore very small position changes as to not spam as many move events. final Vector3d fromPosition = VecHelper.toVector3d(rootVehicle.position()); - final Vector3d originalToPosition = new Vector3d(param0.getX(), param0.getY(), param0.getZ()); - final Vector3d originalToRotation = new Vector3d(param0.getYRot(), param0.getXRot(), 0); + final var position = param0.position(); + final Vector3d originalToPosition = new Vector3d(position.x, position.y(), position.z()); + final Vector3d originalToRotation = new Vector3d(param0.yRot(), param0.xRot(), 0); // common checks and throws are done here. final @Nullable Vector3d toPosition = SpongeCommonEventFactory.callMoveEvent( @@ -325,7 +326,7 @@ public abstract class ServerGamePacketListenerImplMixin extends ServerCommonPack if (!fromRotation.equals(toRotation)) { rootVehicle.absMoveTo(rootVehicle.getX(), rootVehicle.getY(), rootVehicle.getZ(), (float) toRotation.y(), (float) toRotation.x()); } - this.connection.send(new ClientboundMoveVehiclePacket(rootVehicle)); + this.connection.send(ClientboundMoveVehiclePacket.fromEntity(rootVehicle)); ci.cancel(); return; } @@ -333,12 +334,11 @@ public abstract class ServerGamePacketListenerImplMixin extends ServerCommonPack if (!toPosition.equals(originalToPosition) || !toRotation.equals(originalToRotation)) { // notify the client about the new position rootVehicle.absMoveTo(toPosition.x(), toPosition.y(), toPosition.z(), (float) toRotation.y(), (float) toRotation.x()); - this.connection.send(new ClientboundMoveVehiclePacket(rootVehicle)); + this.connection.send(ClientboundMoveVehiclePacket.fromEntity(rootVehicle)); // update the packet, let MC take care of the rest. - packet.accessor$x(toPosition.x()); - packet.accessor$y(toPosition.y()); - packet.accessor$z(toPosition.z()); + final var newPos = VecHelper.toVanillaVector3d(toPosition); + packet.accessor$position(newPos); packet.accessor$yRot((float) toRotation.x()); packet.accessor$xRot((float) toRotation.y()); diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/world/entity/LivingEntityMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/world/entity/LivingEntityMixin.java index 994a4510d38..1eeb8e3757c 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/world/entity/LivingEntityMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/world/entity/LivingEntityMixin.java @@ -92,7 +92,6 @@ public abstract class LivingEntityMixin extends EntityMixin implements LivingEnt // @formatter:off @Shadow protected int useItemRemaining; @Shadow protected boolean dead; - @Shadow protected int deathScore; @Shadow protected ItemStack useItem; @Shadow @Nullable private DamageSource lastDamageSource; @Shadow private long lastDamageStamp; diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/world/entity/LivingEntityMixin_Attack_Impl.java b/src/mixins/java/org/spongepowered/common/mixin/core/world/entity/LivingEntityMixin_Attack_Impl.java index 8bce4b1a806..73899de7437 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/world/entity/LivingEntityMixin_Attack_Impl.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/world/entity/LivingEntityMixin_Attack_Impl.java @@ -189,7 +189,7 @@ public abstract class LivingEntityMixin_Attack_Impl extends EntityMixin implemen * After calling #actuallyHurt, if cancelled return early * Also reset values */ - @Inject(method = "hurtServer",cancellable = true, + @Inject(method = "hurtServer", cancellable = true, at = @At(value = "INVOKE", shift = At.Shift.AFTER, ordinal = 1, target = "Lnet/minecraft/world/entity/LivingEntity;actuallyHurt(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/world/damagesource/DamageSource;F)V")) private void attackImpl$afterActuallyHurt2(ServerLevel $$0, DamageSource $$1, float $$2, CallbackInfoReturnable cir) { @@ -212,32 +212,38 @@ public abstract class LivingEntityMixin_Attack_Impl extends EntityMixin implemen return this.attackImpl$actuallyHurtFinalDamage; } - /** - * Sets blocked damage after #actuallyHurt - */ - @ModifyVariable(method = "hurtServer", ordinal = 2, - at = @At(value = "INVOKE", - target = "Lnet/minecraft/advancements/critereon/EntityHurtPlayerTrigger;trigger(Lnet/minecraft/server/level/ServerPlayer;Lnet/minecraft/world/damagesource/DamageSource;FFZ)V", - shift = At.Shift.AFTER)) - private float attackImpl$modifyBlockedDamage(float damageBlocked) { - return this.attackImpl$actuallyHurtBlockedDamage; - } - - @Redirect(method = "hurtServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;playHurtSound(Lnet/minecraft/world/damagesource/DamageSource;)V")) + // TODO - Pending on a Mixin bug: https://github.com/SpongePowered/Mixin/issues/684 +// /** +// * Sets blocked damage after #actuallyHurt +// */ +// @ModifyVariable(method = "hurtServer", ordinal = 1, +// at = @At(value = "INVOKE", +// target = "Lnet/minecraft/advancements/critereon/EntityHurtPlayerTrigger;trigger(Lnet/minecraft/server/level/ServerPlayer;Lnet/minecraft/world/damagesource/DamageSource;FFZ)V", +// shift = At.Shift.AFTER +// ), +// slice = @Slice( +// from = @At(value = "FIELD", target = "Lnet/minecraft/advancements/CriteriaTriggers;ENTITY_HURT_PLAYER:Lnet/minecraft/advancements/critereon/EntityHurtPlayerTrigger;"), +// to = @At(value = "FIELD", target = "Lnet/minecraft/stats/Stats;DAMAGE_BLOCKED_BY_SHIELD:Lnet/minecraft/resources/ResourceLocation;") +// )) +// private float attackImpl$modifyBlockedDamage(float damageBlocked) { +// return this.attackImpl$actuallyHurtBlockedDamage; +// } + + @Redirect(method = "hurtServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;playHurtSound(Lnet/minecraft/world/damagesource/DamageSource;)V")) private void attackImpl$onHurtSound(final LivingEntity instance, final DamageSource $$0) { if (this.bridge$vanishState().createsSounds()) { this.shadow$playHurtSound($$0); } } - @Redirect(method = "hurtServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;makeSound(Lnet/minecraft/sounds/SoundEvent;)V")) + @Redirect(method = "hurtServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;makeSound(Lnet/minecraft/sounds/SoundEvent;)V")) private void attackImpl$onMakeSound(final LivingEntity instance, final SoundEvent $$0) { if (this.bridge$vanishState().createsSounds()) { instance.makeSound($$0); } } - @Inject(method = "actuallyHurt", at = @At(value = "INVOKE",target = "Lnet/minecraft/world/entity/LivingEntity;getDamageAfterArmorAbsorb(Lnet/minecraft/world/damagesource/DamageSource;F)F")) + @Inject(method = "actuallyHurt", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getDamageAfterArmorAbsorb(Lnet/minecraft/world/damagesource/DamageSource;F)F")) public void attackImpl$startActuallyHurt(final ServerLevel level, final DamageSource damageSource, final float originalDamage, final CallbackInfo ci) { // TODO check for direct call? @@ -341,7 +347,7 @@ public abstract class LivingEntityMixin_Attack_Impl extends EntityMixin implemen * {@link #shadow$hurtArmor} * {@link ServerPlayer#awardStat} for {@link Stats#DAMAGE_RESISTED} and {@link Stats#DAMAGE_DEALT} * from {@link LivingEntity#hurt} and #actuallyHurt - * + *

* And capture inventory changes if needed */ protected void attackImpl$handlePostDamage() { diff --git a/src/mixins/java/org/spongepowered/common/mixin/core/world/item/FishingRodItemMixin.java b/src/mixins/java/org/spongepowered/common/mixin/core/world/item/FishingRodItemMixin.java index 6b53414d803..da7ae4469ed 100644 --- a/src/mixins/java/org/spongepowered/common/mixin/core/world/item/FishingRodItemMixin.java +++ b/src/mixins/java/org/spongepowered/common/mixin/core/world/item/FishingRodItemMixin.java @@ -71,7 +71,7 @@ private void onThrowEvent(Level level, Player player, InteractionHand hand, Call if (level instanceof ServerLevel serverLevel) { int $$6 = (int)(EnchantmentHelper.getFishingTimeReduction(serverLevel, itemstack, player) * 20.0F); int $$7 = EnchantmentHelper.getFishingLuckBonus(serverLevel, itemstack, player); - FishingHook fishHook = new FishingHook(player, level, $$7, $$6, itemstack); + FishingHook fishHook = new FishingHook(player, level, $$7, $$6); PhaseTracker.getCauseStackManager().pushCause(player); if (SpongeCommon.post(SpongeEventFactory.createFishingEventStart(PhaseTracker.getCauseStackManager().currentCause(), (FishingBobber) fishHook))) { @@ -85,7 +85,7 @@ private void onThrowEvent(Level level, Player player, InteractionHand hand, Call } @Redirect(method = "use", at = @At(value = "NEW", target = "net/minecraft/world/entity/projectile/FishingHook")) - private FishingHook onNewEntityFishHook(final Player $$0, final Level $$1, final int $$2, final int $$3, final ItemStack $$4) { + private FishingHook onNewEntityFishHook(final Player $$0, final Level $$1, final int $$2, final int $$3) { // Use the fish hook we created for the event FishingHook fishHook = this.impl$fishHook; this.impl$fishHook = null; diff --git a/vanilla/src/main/java/org/spongepowered/vanilla/client/gui/widget/list/FilterableList.java b/vanilla/src/main/java/org/spongepowered/vanilla/client/gui/widget/list/FilterableList.java index 3522d2607aa..7ebcc9ef51e 100644 --- a/vanilla/src/main/java/org/spongepowered/vanilla/client/gui/widget/list/FilterableList.java +++ b/vanilla/src/main/java/org/spongepowered/vanilla/client/gui/widget/list/FilterableList.java @@ -122,11 +122,6 @@ public int getRowLeft() { return this.getX() + 4; } - @Override - protected int getScrollbarPosition() { - return this.getX() + this.width - 6; - } - @Override public void setSelected(@Nullable final E entry) { if (this.selectConsumer != null) { @@ -138,7 +133,7 @@ public void setSelected(@Nullable final E entry) { @Override public boolean mouseClicked(final double p_mouseClicked_1_, final double p_mouseClicked_3_, final int p_mouseClicked_5_) { - this.updateScrollingState(p_mouseClicked_1_, p_mouseClicked_3_, p_mouseClicked_5_); + this.updateScrolling(p_mouseClicked_1_, p_mouseClicked_3_, p_mouseClicked_5_); if (!this.isMouseOver(p_mouseClicked_1_, p_mouseClicked_3_)) { return false; } else { @@ -150,8 +145,8 @@ public boolean mouseClicked(final double p_mouseClicked_1_, final double p_mouse return true; } } else if (p_mouseClicked_5_ == 0) { - this.clickedHeader((int) (p_mouseClicked_1_ - (double) (this.getX() + this.width / 2 - this.getRowWidth() / 2)), - (int) (p_mouseClicked_3_ - (double) this.getY()) + (int) this.getScrollAmount() - 4); + this.onClick((int) (p_mouseClicked_1_ - (double) (this.getX() + this.width / 2 - this.getRowWidth() / 2)), + (int) (p_mouseClicked_3_ - (double) this.getY()) + (int) this.scrollAmount() - 4); return true; } diff --git a/vanilla/src/mixins/java/org/spongepowered/vanilla/mixin/core/world/entity/LivingEntityMixin_Attack_Impl.java b/vanilla/src/mixins/java/org/spongepowered/vanilla/mixin/core/world/entity/LivingEntityMixin_Attack_Impl.java index 718aacee6b9..ccb7d33c84a 100644 --- a/vanilla/src/mixins/java/org/spongepowered/vanilla/mixin/core/world/entity/LivingEntityMixin_Attack_Impl.java +++ b/vanilla/src/mixins/java/org/spongepowered/vanilla/mixin/core/world/entity/LivingEntityMixin_Attack_Impl.java @@ -41,18 +41,18 @@ public abstract class LivingEntityMixin_Attack_Impl { @SuppressWarnings("InvalidInjectorMethodSignature") - @ModifyConstant(method = "hurtServer", constant = @Constant(classValue = Wolf.class, ordinal = 0)) + @ModifyConstant(method = "resolvePlayerResponsibleForDamage", constant = @Constant(classValue = Wolf.class, ordinal = 0)) private Class attackImpl$onWolfCast(final Object entity, final Class wolf) { return TamableAnimal.class; } - @Redirect(method = "hurtServer", + @Redirect(method = "resolvePlayerResponsibleForDamage", at = @At(value = "INVOKE" , target = "Lnet/minecraft/world/entity/animal/Wolf;isTame()Z")) private boolean attackImpl$onWolfIsTame(@Coerce final Object instance) { return ((TamableAnimal)instance).isTame(); } - @Redirect(method = "hurtServer", + @Redirect(method = "resolvePlayerResponsibleForDamage", at = @At(value = "INVOKE" , target = "Lnet/minecraft/world/entity/animal/Wolf;getOwner()Lnet/minecraft/world/entity/LivingEntity;")) private LivingEntity attackImpl$onWolfGetOwner(@Coerce final Object instance) { return ((TamableAnimal)instance).getOwner();