From d54d6441467a95b4d3f2ca78341dacc9094f8e3f Mon Sep 17 00:00:00 2001 From: Sollace Date: Sun, 6 Oct 2024 18:26:44 +0100 Subject: [PATCH] Fixed muffins and rocks appearing invisible when thrown --- .../unicopia/item/HeavyProjectileItem.java | 4 ++-- .../projectile/PhysicsBodyProjectileEntity.java | 13 ++++++++++--- .../unicopia/projectile/Projectile.java | 10 +++++----- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/item/HeavyProjectileItem.java b/src/main/java/com/minelittlepony/unicopia/item/HeavyProjectileItem.java index e76a2920..1e001dd4 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/HeavyProjectileItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/HeavyProjectileItem.java @@ -19,8 +19,8 @@ public class HeavyProjectileItem extends ProjectileItem { @Override public PhysicsBodyProjectileEntity createProjectile(ItemStack stack, World world, @Nullable PlayerEntity player) { PhysicsBodyProjectileEntity projectile = player == null - ? new PhysicsBodyProjectileEntity(world, stack.copyWithCount(1)) - : new PhysicsBodyProjectileEntity(world, player, stack.copyWithCount(1)); + ? new PhysicsBodyProjectileEntity(world, stack) + : new PhysicsBodyProjectileEntity(world, player, stack); if (player != null) { projectile.setVelocity(player, player.getPitch(), player.getYaw(), 0, 1.5F, 1); } diff --git a/src/main/java/com/minelittlepony/unicopia/projectile/PhysicsBodyProjectileEntity.java b/src/main/java/com/minelittlepony/unicopia/projectile/PhysicsBodyProjectileEntity.java index 04e58a42..c75b21ca 100644 --- a/src/main/java/com/minelittlepony/unicopia/projectile/PhysicsBodyProjectileEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/projectile/PhysicsBodyProjectileEntity.java @@ -57,6 +57,7 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl public PhysicsBodyProjectileEntity(EntityType type, World world, ItemStack stack) { super(type, world, stack); + setStack(stack); } public PhysicsBodyProjectileEntity(World world, ItemStack stack) { @@ -65,6 +66,7 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl public PhysicsBodyProjectileEntity(World world, @Nullable LivingEntity thrower, ItemStack stack) { super(UEntities.MUFFIN, thrower, world, stack); + setStack(stack); } @Override @@ -75,7 +77,7 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl } public void setStack(ItemStack stack) { - getDataTracker().set(ITEM, stack); + getDataTracker().set(ITEM, stack.copy()); } @Override @@ -89,6 +91,11 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl @Override protected ItemStack asItemStack() { + return getStack().copy(); + } + + @Override + public ItemStack getItemStack() { return getStack(); } @@ -273,7 +280,7 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl super.writeCustomDataToNbt(nbt); ItemStack stack = getStack(); if (!stack.isEmpty()) { - nbt.put("Item", stack.writeNbt(new NbtCompound())); + nbt.put("item", stack.writeNbt(new NbtCompound())); } nbt.putString("damageType", damageType.getValue().toString()); } @@ -281,7 +288,7 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl @Override public void readCustomDataFromNbt(NbtCompound nbt) { super.readCustomDataFromNbt(nbt); - setStack(ItemStack.fromNbt(nbt.getCompound("Item"))); + setStack(ItemStack.fromNbt(nbt.getCompound("item"))); if (nbt.contains("damageType", NbtElement.STRING_TYPE)) { Optional.ofNullable(Identifier.tryParse(nbt.getString("damageType"))).ifPresent(id -> { setDamageType(RegistryKey.of(RegistryKeys.DAMAGE_TYPE, id)); diff --git a/src/main/java/com/minelittlepony/unicopia/projectile/Projectile.java b/src/main/java/com/minelittlepony/unicopia/projectile/Projectile.java index c8b0c2a2..34f831ea 100644 --- a/src/main/java/com/minelittlepony/unicopia/projectile/Projectile.java +++ b/src/main/java/com/minelittlepony/unicopia/projectile/Projectile.java @@ -38,12 +38,12 @@ public interface Projectile extends ItemConvertible { default TypedActionResult triggerThrow(World world, PlayerEntity player, Hand hand) { ItemStack stack = player.getStackInHand(hand); - SoundEmitter.playSoundAt(player, - getThrowSound(stack), SoundCategory.NEUTRAL, - 0.5F, - 0.4F / (world.random.nextFloat() * 0.4F + 0.8F)); - if (!world.isClient) { + SoundEmitter.playSoundAt(player, + getThrowSound(stack), SoundCategory.NEUTRAL, + 0.5F, + 0.4F / (world.random.nextFloat() * 0.4F + 0.8F)); + world.spawnEntity(createProjectile(stack.copyWithCount(1), world, player)); }