diff --git a/src/main/java/com/minelittlepony/unicopia/item/HeavyProjectileItem.java b/src/main/java/com/minelittlepony/unicopia/item/HeavyProjectileItem.java index 25283025..08240df2 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/HeavyProjectileItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/HeavyProjectileItem.java @@ -20,8 +20,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 18a65522..09a40053 100644 --- a/src/main/java/com/minelittlepony/unicopia/projectile/PhysicsBodyProjectileEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/projectile/PhysicsBodyProjectileEntity.java @@ -81,7 +81,7 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl @Override public void setStack(ItemStack stack) { - getDataTracker().set(ITEM, stack); + getDataTracker().set(ITEM, stack.isEmpty() ? getDefaultItemStack() : stack.copy()); super.setStack(stack); } @@ -101,6 +101,11 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl @Override protected ItemStack asItemStack() { + return getStack().copy(); + } + + @Override + public ItemStack getItemStack() { return getStack(); } @@ -291,7 +296,7 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl super.writeCustomDataToNbt(nbt); ItemStack stack = getStack(); if (!stack.isEmpty()) { - ItemStack.CODEC.encodeStart(NbtOps.INSTANCE, stack).result().ifPresent(item -> nbt.put("Item", item)); + ItemStack.CODEC.encodeStart(NbtOps.INSTANCE, stack).result().ifPresent(item -> nbt.put("item", item)); } nbt.putString("damageType", damageType.getValue().toString()); } @@ -299,7 +304,7 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl @Override public void readCustomDataFromNbt(NbtCompound nbt) { super.readCustomDataFromNbt(nbt); - setStack(ItemStack.fromNbtOrEmpty(getRegistryManager(), nbt.getCompound("Item"))); + setStack(ItemStack.fromNbtOrEmpty(getRegistryManager(), 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 246d156d..2978ef3d 100644 --- a/src/main/java/com/minelittlepony/unicopia/projectile/Projectile.java +++ b/src/main/java/com/minelittlepony/unicopia/projectile/Projectile.java @@ -43,12 +43,12 @@ public interface Projectile extends ItemConvertible, ProjectileItem { 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)); }