diff --git a/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java index 1b56c0e20..d82776ae1 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java @@ -4,24 +4,24 @@ import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk; import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskProvider; import com.raoulvdberge.refinedstorage.apiimpl.API; -import io.netty.buffer.ByteBuf; -import net.minecraft.init.Items; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.ListNBT; +import net.minecraft.network.PacketBuffer; import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidAttributes; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandlerItem; -import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.registries.ForgeRegistries; import org.apache.commons.lang3.tuple.Pair; import javax.annotation.Nonnull; @@ -34,20 +34,21 @@ public final class StackUtils { private static final String NBT_INVENTORY = "Inventory_%d"; private static final String NBT_SLOT = "Slot"; - public static void writeItemStack(ByteBuf buf, ItemStack stack) { + // TODO: can we remove this? + public static void writeItemStack(PacketBuffer buf, ItemStack stack) { buf.writeInt(Item.getIdFromItem(stack.getItem())); buf.writeInt(stack.getCount()); - buf.writeShort(stack.getItemDamage()); - ByteBufUtils.writeTag(buf, stack.getItem().getNBTShareTag(stack)); + buf.writeCompoundTag(stack.getItem().getShareTag(stack)); } - public static ItemStack readItemStack(ByteBuf buf) { - ItemStack stack = new ItemStack(Item.getItemById(buf.readInt()), buf.readInt(), buf.readShort()); - stack.setTagCompound(ByteBufUtils.readTag(buf)); + // TODO: Removal + public static ItemStack readItemStack(PacketBuffer buf) { + ItemStack stack = new ItemStack(Item.getItemById(buf.readInt()), buf.readInt()); + stack.setTag(buf.readCompoundTag()); return stack; } - public static void writeItemStack(ByteBuf buf, ItemStack stack, @Nullable INetwork network, boolean displayCraftText) { + public static void writeItemStack(PacketBuffer buf, ItemStack stack, @Nullable INetwork network, boolean displayCraftText) { writeItemStack(buf, stack); buf.writeInt(API.instance().getItemStackHashCode(stack)); @@ -61,23 +62,25 @@ public final class StackUtils { } } - public static void writeFluidStackAndHash(ByteBuf buf, FluidStack stack) { + public static void writeFluidStackAndHash(PacketBuffer buf, FluidStack stack) { buf.writeInt(API.instance().getFluidStackHashCode(stack)); writeFluidStack(buf, stack); } - public static void writeFluidStack(ByteBuf buf, FluidStack stack) { - ByteBufUtils.writeUTF8String(buf, FluidRegistry.getFluidName(stack.getFluid())); - buf.writeInt(stack.amount); - ByteBufUtils.writeTag(buf, stack.tag); + // TODO: Removal + public static void writeFluidStack(PacketBuffer buf, FluidStack stack) { + buf.writeResourceLocation(stack.getFluid().getRegistryName()); // TODO: Probably wrong + buf.writeInt(stack.getAmount()); + buf.writeCompoundTag(stack.getTag()); } - public static FluidStack readFluidStack(ByteBuf buf) { - return new FluidStack(FluidRegistry.getFluid(ByteBufUtils.readUTF8String(buf)), buf.readInt(), ByteBufUtils.readTag(buf)); + // TODO: Removal + public static FluidStack readFluidStack(PacketBuffer buf) { + return new FluidStack(ForgeRegistries.FLUIDS.getValue(buf.readResourceLocation()), buf.readInt(), buf.readCompoundTag()); } - public static Pair readFluidStackAndHash(ByteBuf buf) { + public static Pair readFluidStackAndHash(PacketBuffer buf) { return Pair.of(buf.readInt(), readFluidStack(buf)); } @@ -133,17 +136,17 @@ public final class StackUtils { } public static void writeItems(IItemHandler handler, int id, CompoundNBT tag) { - writeItems(handler, id, tag, stack -> stack.writeToNBT(new CompoundNBT())); + writeItems(handler, id, tag, stack -> stack.write(new CompoundNBT())); } public static void readItems(IItemHandlerModifiable handler, int id, CompoundNBT tag, Function deserializer) { String name = String.format(NBT_INVENTORY, id); - if (tag.hasKey(name)) { + if (tag.contains(name)) { ListNBT tagList = tag.getList(name, Constants.NBT.TAG_COMPOUND); for (int i = 0; i < tagList.size(); i++) { - int slot = tagList.getCompound(i).getInteger(NBT_SLOT); + int slot = tagList.getCompound(i).getInt(NBT_SLOT); if (slot >= 0 && slot < handler.getSlots()) { handler.setStackInSlot(slot, deserializer.apply(tagList.getCompound(i))); @@ -153,7 +156,7 @@ public final class StackUtils { } public static void readItems(IItemHandlerModifiable handler, int id, CompoundNBT tag) { - readItems(handler, id, tag, ItemStack::new); + readItems(handler, id, tag, ItemStack::read); } public static void writeItems(IInventory inventory, int id, CompoundNBT tag) { @@ -165,7 +168,7 @@ public final class StackUtils { stackTag.putInt(NBT_SLOT, i); - inventory.getStackInSlot(i).writeToNBT(stackTag); + inventory.getStackInSlot(i).write(stackTag); tagList.add(stackTag); } @@ -177,13 +180,13 @@ public final class StackUtils { public static void readItems(IInventory inventory, int id, CompoundNBT tag) { String name = String.format(NBT_INVENTORY, id); - if (tag.hasKey(name)) { + if (tag.contains(name)) { ListNBT tagList = tag.getList(name, Constants.NBT.TAG_COMPOUND); for (int i = 0; i < tagList.size(); i++) { - int slot = tagList.getCompound(i).getInteger(NBT_SLOT); + int slot = tagList.getCompound(i).getInt(NBT_SLOT); - ItemStack stack = new ItemStack(tagList.getCompound(i)); + ItemStack stack = ItemStack.read(tagList.getCompound(i)); if (!stack.isEmpty()) { inventory.setInventorySlotContents(slot, stack); @@ -193,7 +196,11 @@ public final class StackUtils { } public static boolean hasFluidBucket(FluidStack stack) { - return stack.getFluid() == FluidRegistry.WATER || stack.getFluid() == FluidRegistry.LAVA || stack.getFluid().getName().equals("milk") || FluidRegistry.getBucketFluids().contains(stack.getFluid()); + return true; // TODO + /*return stack.getFluid() == Fluids.WATER || + stack.getFluid() == Fluids.LAVA || + //stack.getFluid().getName().equals("milk") || + FluidRegistry.getBucketFluids().contains(stack.getFluid());*/ } public static FluidStack copy(FluidStack stack, int size) { @@ -212,12 +219,11 @@ public final class StackUtils { stack = ItemHandlerHelper.copyStackWithSize(stack, 1); } - if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null)) { - IFluidHandlerItem fluidHandler = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); + IFluidHandlerItem handler = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null).orElse(null); + if (handler != null) { + FluidStack result = handler.drain(FluidAttributes.BUCKET_VOLUME, simulate ? IFluidHandler.FluidAction.SIMULATE : IFluidHandler.FluidAction.EXECUTE); - FluidStack result = fluidHandler.drain(Fluid.BUCKET_VOLUME, !simulate); - - return Pair.of(fluidHandler.getContainer(), result); + return Pair.of(handler.getContainer(), result); } return Pair.of(null, null); @@ -225,7 +231,6 @@ public final class StackUtils { private static final String NBT_ITEM_TYPE = "Type"; private static final String NBT_ITEM_QUANTITY = "Quantity"; - private static final String NBT_ITEM_DAMAGE = "Damage"; private static final String NBT_ITEM_NBT = "NBT"; private static final String NBT_ITEM_CAPS = "Caps"; @@ -236,19 +241,19 @@ public final class StackUtils { itemTag.putInt(NBT_ITEM_TYPE, Item.getIdFromItem(stack.getItem())); itemTag.putInt(NBT_ITEM_QUANTITY, stack.getCount()); - itemTag.putInt(NBT_ITEM_DAMAGE, stack.getItemDamage()); - if (stack.hasTagCompound()) { - itemTag.put(NBT_ITEM_NBT, stack.getTagCompound()); + if (stack.hasTag()) { + itemTag.put(NBT_ITEM_NBT, stack.getTag()); } - stack.writeToNBT(dummy); + // TODO: Better way now? + stack.write(dummy); - if (dummy.hasKey("ForgeCaps")) { - itemTag.put(NBT_ITEM_CAPS, dummy.getTag("ForgeCaps")); + if (dummy.contains("ForgeCaps")) { + itemTag.put(NBT_ITEM_CAPS, dummy.get("ForgeCaps")); } - dummy.removeTag("ForgeCaps"); + dummy.remove("ForgeCaps"); return itemTag; } @@ -256,13 +261,12 @@ public final class StackUtils { @Nonnull public static ItemStack deserializeStackFromNbt(CompoundNBT tag) { ItemStack stack = new ItemStack( - Item.getItemById(tag.getInteger(NBT_ITEM_TYPE)), - tag.getInteger(NBT_ITEM_QUANTITY), - tag.getInteger(NBT_ITEM_DAMAGE), - tag.hasKey(NBT_ITEM_CAPS) ? tag.getCompound(NBT_ITEM_CAPS) : null + Item.getItemById(tag.getInt(NBT_ITEM_TYPE)), + tag.getInt(NBT_ITEM_QUANTITY), + tag.contains(NBT_ITEM_CAPS) ? tag.getCompound(NBT_ITEM_CAPS) : null ); - stack.setTagCompound(tag.hasKey(NBT_ITEM_NBT) ? tag.getCompound(NBT_ITEM_NBT) : null); + stack.setTag(tag.contains(NBT_ITEM_NBT) ? tag.getCompound(NBT_ITEM_NBT) : null); return stack; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/util/WorldUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/util/WorldUtils.java index aac2487f9..fb7b292cc 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/util/WorldUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/util/WorldUtils.java @@ -1,17 +1,16 @@ package com.raoulvdberge.refinedstorage.util; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.inventory.InventoryHelper; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; -import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.Style; -import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.world.World; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; @@ -25,7 +24,8 @@ import javax.annotation.Nullable; public final class WorldUtils { public static void updateBlock(@Nullable World world, BlockPos pos) { if (world != null) { - IBlockState state = world.getBlockState(pos); + BlockState state = world.getBlockState(pos); + world.notifyBlockUpdate(pos, state, state, 1 | 2); } } @@ -35,8 +35,7 @@ public final class WorldUtils { return null; } - IItemHandler handler = tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side) ? tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side) : null; - + IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side).orElse(null); if (handler == null) { if (side != null && tile instanceof ISidedInventory) { handler = new SidedInvWrapper((ISidedInventory) tile, side); @@ -49,11 +48,14 @@ public final class WorldUtils { } public static IFluidHandler getFluidHandler(@Nullable TileEntity tile, Direction side) { - return (tile != null && tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) ? tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side) : null; + if (tile != null) { + return tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side).orElse(null); + } + return null; } public static void sendNoPermissionMessage(PlayerEntity player) { - player.sendMessage(new TextComponentTranslation("misc.refinedstorage:security.no_permission").setStyle(new Style().setColor(TextFormatting.RED))); + player.sendMessage(new TranslationTextComponent("misc.refinedstorage:security.no_permission").setStyle(new Style().setColor(TextFormatting.RED))); } public static void dropInventory(World world, BlockPos pos, IItemHandler handler) {