diff --git a/src/main/java/carpet/helpers/EntityPlayerActionPack.java b/src/main/java/carpet/helpers/EntityPlayerActionPack.java index 64083201..856900d6 100644 --- a/src/main/java/carpet/helpers/EntityPlayerActionPack.java +++ b/src/main/java/carpet/helpers/EntityPlayerActionPack.java @@ -4,6 +4,7 @@ import carpet.fakes.ServerPlayerEntityInterface; import net.minecraft.block.BlockState; import net.minecraft.command.argument.EntityAnchorArgumentType; import net.minecraft.entity.Entity; +import net.minecraft.entity.decoration.ItemFrameEntity; import net.minecraft.entity.passive.HorseBaseEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.vehicle.BoatEntity; @@ -293,9 +294,9 @@ public class EntityPlayerActionPack if (pos.getY() < player.server.getWorldHeight() - (side == Direction.UP ? 1 : 0) && world.canPlayerModifyAt(player, pos)) { ActionResult result = player.interactionManager.interactBlock(player, world, player.getStackInHand(hand), hand, blockHit); - if (result == ActionResult.SUCCESS) + if (result.isAccepted()) { - player.swingHand(hand); + if (result.shouldSwingHand()) player.swingHand(hand); return true; } } @@ -306,18 +307,17 @@ public class EntityPlayerActionPack player.updateLastActionTime(); EntityHitResult entityHit = (EntityHitResult) hit; Entity entity = entityHit.getEntity(); + boolean handWasEmpty = player.getStackInHand(hand).isEmpty(); + boolean itemFrameEmpty = (entity instanceof ItemFrameEntity) && ((ItemFrameEntity) entity).getHeldItemStack().isEmpty(); Vec3d relativeHitPos = entityHit.getPos().subtract(entity.getX(), entity.getY(), entity.getZ()); - if (entity.interactAt(player, relativeHitPos, hand) == ActionResult.SUCCESS) return true; - if (player.interact(entity, hand) == ActionResult.SUCCESS) return true; + if (entity.interactAt(player, relativeHitPos, hand).isAccepted()) return true; + // fix for SS itemframe always returns CONSUME even if no action is performed + if (player.interact(entity, hand).isAccepted() && !(handWasEmpty && itemFrameEmpty)) return true; break; } } ItemStack handItem = player.getStackInHand(hand); - ActionResult result =player.interactionManager.interactItem(player, player.getServerWorld(), handItem, hand); - if (result == ActionResult.SUCCESS) - { - return true; - } + if (player.interactionManager.interactItem(player, player.getServerWorld(), handItem, hand).isAccepted()) return true; } return false; } diff --git a/src/main/java/carpet/patches/EntityPlayerMPFake.java b/src/main/java/carpet/patches/EntityPlayerMPFake.java index de2ca657..357d28c8 100644 --- a/src/main/java/carpet/patches/EntityPlayerMPFake.java +++ b/src/main/java/carpet/patches/EntityPlayerMPFake.java @@ -2,6 +2,7 @@ package carpet.patches; import com.mojang.authlib.GameProfile; import net.minecraft.block.entity.SkullBlockEntity; +import net.minecraft.item.ItemStack; import net.minecraft.network.packet.s2c.play.EntityPositionS2CPacket; import net.minecraft.network.packet.s2c.play.EntitySetHeadYawS2CPacket; import net.minecraft.network.packet.s2c.play.PlayerListS2CPacket; @@ -86,6 +87,11 @@ public class EntityPlayerMPFake extends ServerPlayerEntity isAShadow = shadow; } + @Override + protected void onEquipStack(ItemStack stack) + { + if (!isUsingItem()) super.onEquipStack(stack); + } @Override public void kill()