diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RS.java b/src/main/java/com/raoulvdberge/refinedstorage/RS.java index a2e779c6a..fc1281eda 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RS.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RS.java @@ -123,16 +123,6 @@ public final class RS { PROXY.preInit(e); } - @EventHandler - public void init(FMLInitializationEvent e) { - PROXY.init(e); - } - - @EventHandler - public void postInit(FMLPostInitializationEvent e) { - PROXY.postInit(e); - } - @EventHandler public void onServerStarting(FMLServerStartingEvent e) { e.registerServerCommand(new CommandCreateDisk()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java index 7dc3b5904..fb153a42d 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java @@ -37,43 +37,41 @@ public class FluidGridHandler implements IFluidGridHandler { return; } - if (StackUtils.hasFluidBucket(stack)) { - ItemStack bucket = null; + ItemStack bucket = ItemStack.EMPTY; - for (int i = 0; i < player.inventory.getSizeInventory(); ++i) { - ItemStack slot = player.inventory.getStackInSlot(i); + for (int i = 0; i < player.inventory.getSizeInventory(); ++i) { + ItemStack slot = player.inventory.getStackInSlot(i); - if (API.instance().getComparer().isEqualNoQuantity(StackUtils.EMPTY_BUCKET, slot)) { - bucket = StackUtils.EMPTY_BUCKET.copy(); + if (API.instance().getComparer().isEqualNoQuantity(StackUtils.EMPTY_BUCKET, slot)) { + bucket = StackUtils.EMPTY_BUCKET.copy(); - player.inventory.decrStackSize(i, 1); + player.inventory.decrStackSize(i, 1); - break; - } + break; } + } - if (bucket == null) { - bucket = network.extractItem(StackUtils.EMPTY_BUCKET, 1, Action.PERFORM); - } + if (bucket.isEmpty()) { + bucket = network.extractItem(StackUtils.EMPTY_BUCKET, 1, Action.PERFORM); + } - if (bucket != null) { - bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null).ifPresent(fluidHandler -> { - network.getFluidStorageTracker().changed(player, stack.copy()); + if (!bucket.isEmpty()) { + bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null).ifPresent(fluidHandler -> { + network.getFluidStorageTracker().changed(player, stack.copy()); - fluidHandler.fill(network.extractFluid(stack, FluidAttributes.BUCKET_VOLUME, Action.PERFORM), IFluidHandler.FluidAction.EXECUTE); + fluidHandler.fill(network.extractFluid(stack, FluidAttributes.BUCKET_VOLUME, Action.PERFORM), IFluidHandler.FluidAction.EXECUTE); - if (shift) { - if (!player.inventory.addItemStackToInventory(fluidHandler.getContainer().copy())) { - InventoryHelper.spawnItemStack(player.getEntityWorld(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), fluidHandler.getContainer()); - } - } else { - player.inventory.setItemStack(fluidHandler.getContainer()); - player.updateHeldItem(); + if (shift) { + if (!player.inventory.addItemStackToInventory(fluidHandler.getContainer().copy())) { + InventoryHelper.spawnItemStack(player.getEntityWorld(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), fluidHandler.getContainer()); } + } else { + player.inventory.setItemStack(fluidHandler.getContainer()); + player.updateHeldItem(); + } - network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessFluidGridExtractUsage); - }); - } + network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessFluidGridExtractUsage); + }); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandlerPortable.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandlerPortable.java index 2d8726e92..07fdef004 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandlerPortable.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandlerPortable.java @@ -33,39 +33,37 @@ public class FluidGridHandlerPortable implements IFluidGridHandler { return; } - if (StackUtils.hasFluidBucket(stack)) { - ItemStack bucket = null; + ItemStack bucket = ItemStack.EMPTY; - for (int i = 0; i < player.inventory.getSizeInventory(); ++i) { - ItemStack slot = player.inventory.getStackInSlot(i); + for (int i = 0; i < player.inventory.getSizeInventory(); ++i) { + ItemStack slot = player.inventory.getStackInSlot(i); - if (API.instance().getComparer().isEqualNoQuantity(StackUtils.EMPTY_BUCKET, slot)) { - bucket = StackUtils.EMPTY_BUCKET.copy(); + if (API.instance().getComparer().isEqualNoQuantity(StackUtils.EMPTY_BUCKET, slot)) { + bucket = StackUtils.EMPTY_BUCKET.copy(); - player.inventory.decrStackSize(i, 1); + player.inventory.decrStackSize(i, 1); - break; - } + break; } + } - if (bucket != null) { - bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null).ifPresent(fluidHandler -> { - portableGrid.getFluidStorageTracker().changed(player, stack.copy()); + if (!bucket.isEmpty()) { + bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null).ifPresent(fluidHandler -> { + portableGrid.getFluidStorageTracker().changed(player, stack.copy()); - fluidHandler.fill(portableGrid.getFluidStorage().extract(stack, FluidAttributes.BUCKET_VOLUME, IComparer.COMPARE_NBT, Action.PERFORM), IFluidHandler.FluidAction.EXECUTE); + fluidHandler.fill(portableGrid.getFluidStorage().extract(stack, FluidAttributes.BUCKET_VOLUME, IComparer.COMPARE_NBT, Action.PERFORM), IFluidHandler.FluidAction.EXECUTE); - if (shift) { - if (!player.inventory.addItemStackToInventory(fluidHandler.getContainer().copy())) { - InventoryHelper.spawnItemStack(player.getEntityWorld(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), fluidHandler.getContainer()); - } - } else { - player.inventory.setItemStack(fluidHandler.getContainer()); - player.updateHeldItem(); + if (shift) { + if (!player.inventory.addItemStackToInventory(fluidHandler.getContainer().copy())) { + InventoryHelper.spawnItemStack(player.getEntityWorld(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), fluidHandler.getContainer()); } + } else { + player.inventory.setItemStack(fluidHandler.getContainer()); + player.updateHeldItem(); + } - portableGrid.drainEnergy(RS.INSTANCE.config.portableGridExtractUsage); - }); - } + portableGrid.drainEnergy(RS.INSTANCE.config.portableGridExtractUsage); + }); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/GridStackItem.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/GridStackItem.java index ad857aa5c..8dace35d4 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/GridStackItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/GridStackItem.java @@ -2,12 +2,9 @@ package com.raoulvdberge.refinedstorage.gui.grid.stack; import com.raoulvdberge.refinedstorage.api.storage.IStorageTracker; import com.raoulvdberge.refinedstorage.apiimpl.API; -import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageTrackerEntry; import com.raoulvdberge.refinedstorage.gui.GuiBase; -import com.raoulvdberge.refinedstorage.util.StackUtils; import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; -import net.minecraft.network.PacketBuffer; import javax.annotation.Nullable; @@ -28,16 +25,12 @@ public class GridStackItem implements IGridStack { this.stack = stack; } - public GridStackItem(PacketBuffer buf) { - this.stack = StackUtils.readItemStack(buf); - this.hash = buf.readInt(); - this.craftable = buf.readBoolean(); - - setDisplayCraftText(buf.readBoolean()); - - if (buf.readBoolean()) { - this.entry = new StorageTrackerEntry(buf); - } + public GridStackItem(int hash, ItemStack stack, boolean craftable, boolean displayCraftText, IStorageTracker.IStorageTrackerEntry entry) { + this.hash = hash; + this.stack = stack; + this.craftable = craftable; + this.displayCraftText = displayCraftText; + this.entry = entry; } @Nullable diff --git a/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java index f6d5a3443..05c38e605 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java @@ -1,9 +1,13 @@ package com.raoulvdberge.refinedstorage.util; import com.raoulvdberge.refinedstorage.api.network.INetwork; +import com.raoulvdberge.refinedstorage.api.storage.IStorageTracker; import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk; import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskProvider; import com.raoulvdberge.refinedstorage.apiimpl.API; +import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageTrackerEntry; +import com.raoulvdberge.refinedstorage.gui.grid.stack.GridStackFluid; +import com.raoulvdberge.refinedstorage.gui.grid.stack.GridStackItem; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -21,7 +25,6 @@ import net.minecraftforge.fluids.capability.IFluidHandlerItem; 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,21 +37,45 @@ public final class StackUtils { private static final String NBT_INVENTORY = "Inventory_%d"; private static final String NBT_SLOT = "Slot"; - // TODO: can we remove this? - public static void writeItemStack(PacketBuffer buf, ItemStack stack) { - buf.writeInt(Item.getIdFromItem(stack.getItem())); - buf.writeInt(stack.getCount()); - buf.writeCompoundTag(stack.getItem().getShareTag(stack)); + // @Volatile: from PacketBuffer#writeItemStack, with some tweaks to allow int stack counts + public static void writeItemStack(PacketBuffer buf, @Nonnull ItemStack stack) { + if (stack.isEmpty()) { + buf.writeBoolean(false); + } else { + buf.writeBoolean(true); + + Item item = stack.getItem(); + + buf.writeVarInt(Item.getIdFromItem(item)); + buf.writeByte(stack.getCount()); + + CompoundNBT tag = null; + + if (item.isDamageable() || item.shouldSyncTag()) { + tag = stack.getTag(); + } + + buf.writeCompoundTag(tag); + } } - // TODO: Removal + // @Volatile: from PacketBuffer#readItemStack, with some tweaks to allow int stack counts public static ItemStack readItemStack(PacketBuffer buf) { - ItemStack stack = new ItemStack(Item.getItemById(buf.readInt()), buf.readInt()); - stack.setTag(buf.readCompoundTag()); - return stack; + if (!buf.readBoolean()) { + return ItemStack.EMPTY; + } else { + int id = buf.readVarInt(); + int count = buf.readByte(); + + ItemStack stack = new ItemStack(Item.getItemById(id), count); + + stack.readShareTag(buf.readCompoundTag()); + + return stack; + } } - public static void writeItemStack(PacketBuffer buf, ItemStack stack, @Nullable INetwork network, boolean displayCraftText) { + public static void writeItemGridStack(PacketBuffer buf, ItemStack stack, @Nullable INetwork network, boolean displayCraftText, @Nullable IStorageTracker.IStorageTrackerEntry entry) { writeItemStack(buf, stack); buf.writeInt(API.instance().getItemStackHashCode(stack)); @@ -60,28 +87,66 @@ public final class StackUtils { buf.writeBoolean(false); buf.writeBoolean(false); } + + if (entry == null) { + buf.writeBoolean(false); + } else { + buf.writeBoolean(true); + + buf.writeLong(entry.getTime()); + buf.writeString(entry.getName()); + } } - public static void writeFluidStackAndHash(PacketBuffer buf, FluidStack stack) { + public static GridStackItem readItemGridStack(PacketBuffer buf) { + ItemStack stack = readItemStack(buf); + int hash = buf.readInt(); + boolean craftable = buf.readBoolean(); + boolean displayCraftText = buf.readBoolean(); + + IStorageTracker.IStorageTrackerEntry entry = null; + if (buf.readBoolean()) { + entry = new StorageTrackerEntry(buf.readLong(), buf.readString()); + } + + return new GridStackItem(hash, stack, craftable, displayCraftText, entry); + } + + public static void writeFluidGridStack(PacketBuffer buf, FluidStack stack, @Nullable INetwork network, boolean displayCraftText, @Nullable IStorageTracker.IStorageTrackerEntry entry) { + stack.writeToPacket(buf); + buf.writeInt(API.instance().getFluidStackHashCode(stack)); - writeFluidStack(buf, stack); + if (network != null) { + buf.writeBoolean(network.getCraftingManager().getPattern(stack) != null); + buf.writeBoolean(displayCraftText); + } else { + buf.writeBoolean(false); + buf.writeBoolean(false); + } + + if (entry == null) { + buf.writeBoolean(false); + } else { + buf.writeBoolean(true); + + buf.writeLong(entry.getTime()); + buf.writeString(entry.getName()); + } } - // 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 GridStackFluid readFluidGridStack(PacketBuffer buf) { + FluidStack stack = FluidStack.readFromPacket(buf); + int hash = buf.readInt(); + boolean craftable = buf.readBoolean(); + boolean displayCraftText = buf.readBoolean(); - // TODO: Removal - public static FluidStack readFluidStack(PacketBuffer buf) { - return new FluidStack(ForgeRegistries.FLUIDS.getValue(buf.readResourceLocation()), buf.readInt(), buf.readCompoundTag()); - } + IStorageTracker.IStorageTrackerEntry entry = null; + if (buf.readBoolean()) { + entry = new StorageTrackerEntry(buf.readLong(), buf.readString()); + } - public static Pair readFluidStackAndHash(PacketBuffer buf) { - return Pair.of(buf.readInt(), readFluidStack(buf)); + return new GridStackFluid(hash, stack, entry, craftable, displayCraftText); } public static ItemStack nullToEmpty(@Nullable ItemStack stack) { @@ -195,14 +260,6 @@ public final class StackUtils { } } - public static boolean hasFluidBucket(FluidStack stack) { - 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) { FluidStack copy = stack.copy(); copy.setAmount(size); @@ -249,7 +306,6 @@ public final class StackUtils { itemTag.put(NBT_ITEM_NBT, stack.getTag()); } - // TODO: Better way now? stack.write(dummy); if (dummy.contains("ForgeCaps")) {