Cleanup writeItemStack code

This commit is contained in:
raoulvdberge
2017-05-09 12:19:26 +02:00
parent 282d85bf06
commit 4e1579f2f0
5 changed files with 27 additions and 42 deletions

View File

@@ -126,20 +126,10 @@ public final class RSUtils {
} }
public static void writeItemStack(ByteBuf buf, ItemStack stack) { public static void writeItemStack(ByteBuf buf, ItemStack stack) {
writeItemStack(buf, stack, null, false);
}
public static void writeItemStack(ByteBuf buf, ItemStack stack, @Nullable INetworkMaster network, boolean displayCraftText) {
buf.writeInt(Item.getIdFromItem(stack.getItem())); buf.writeInt(Item.getIdFromItem(stack.getItem()));
buf.writeInt(stack.getCount()); buf.writeInt(stack.getCount());
buf.writeInt(stack.getItemDamage()); buf.writeInt(stack.getItemDamage());
ByteBufUtils.writeTag(buf, stack.getItem().getNBTShareTag(stack)); ByteBufUtils.writeTag(buf, stack.getItem().getNBTShareTag(stack));
if (network != null) {
buf.writeInt(API.instance().getItemStackHashCode(stack));
buf.writeBoolean(network.getCraftingManager().hasPattern(stack));
buf.writeBoolean(displayCraftText);
}
} }
public static ItemStack readItemStack(ByteBuf buf) { public static ItemStack readItemStack(ByteBuf buf) {
@@ -148,6 +138,20 @@ public final class RSUtils {
return stack; return stack;
} }
public static void writeItemStack(ByteBuf buf, ItemStack stack, @Nullable INetworkMaster network, boolean displayCraftText) {
writeItemStack(buf, stack);
buf.writeInt(API.instance().getItemStackHashCode(stack));
if (network != null) {
buf.writeBoolean(network.getCraftingManager().hasPattern(stack));
buf.writeBoolean(displayCraftText);
} else {
buf.writeBoolean(false);
buf.writeBoolean(false);
}
}
public static void writeFluidStack(ByteBuf buf, FluidStack stack) { public static void writeFluidStack(ByteBuf buf, FluidStack stack) {
buf.writeInt(API.instance().getFluidStackHashCode(stack)); buf.writeInt(API.instance().getFluidStackHashCode(stack));
ByteBufUtils.writeUTF8String(buf, FluidRegistry.getFluidName(stack.getFluid())); ByteBufUtils.writeUTF8String(buf, FluidRegistry.getFluidName(stack.getFluid()));

View File

@@ -9,14 +9,12 @@ import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.network.MessageGridItemDelta; import com.raoulvdberge.refinedstorage.network.MessageGridItemDelta;
import com.raoulvdberge.refinedstorage.network.MessageGridItemUpdate; import com.raoulvdberge.refinedstorage.network.MessageGridItemUpdate;
import com.raoulvdberge.refinedstorage.tile.grid.PortableGrid; import com.raoulvdberge.refinedstorage.tile.grid.PortableGrid;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.function.Consumer;
public class StorageCacheItemPortable implements IStorageCache<ItemStack> { public class StorageCacheItemPortable implements IStorageCache<ItemStack> {
private PortableGrid portableGrid; private PortableGrid portableGrid;
@@ -34,15 +32,11 @@ public class StorageCacheItemPortable implements IStorageCache<ItemStack> {
portableGrid.getStorage().getStacks().forEach(list::add); portableGrid.getStorage().getStacks().forEach(list::add);
} }
RS.INSTANCE.network.sendTo(new MessageGridItemUpdate((buf) -> { RS.INSTANCE.network.sendTo(new MessageGridItemUpdate(buf -> {
buf.writeInt(list.getStacks().size()); buf.writeInt(list.getStacks().size());
for (ItemStack stack : list.getStacks()) { for (ItemStack stack : list.getStacks()) {
RSUtils.writeItemStack(buf, stack, null, false); RSUtils.writeItemStack(buf, stack, null, false);
buf.writeInt(API.instance().getItemStackHashCode(stack));
buf.writeBoolean(false);
buf.writeBoolean(false);
} }
}, false), (EntityPlayerMP) portableGrid.getPlayer()); }, false), (EntityPlayerMP) portableGrid.getPlayer());
} }
@@ -52,27 +46,17 @@ public class StorageCacheItemPortable implements IStorageCache<ItemStack> {
list.add(stack, size); list.add(stack, size);
if (!rebuilding) { if (!rebuilding) {
RS.INSTANCE.network.sendTo(new MessageGridItemDelta(getSendHandler(stack), size), (EntityPlayerMP) portableGrid.getPlayer()); RS.INSTANCE.network.sendTo(new MessageGridItemDelta(null, stack, size), (EntityPlayerMP) portableGrid.getPlayer());
} }
} }
@Override @Override
public void remove(@Nonnull ItemStack stack, int size) { public void remove(@Nonnull ItemStack stack, int size) {
if (list.remove(stack, size)) { if (list.remove(stack, size)) {
RS.INSTANCE.network.sendTo(new MessageGridItemDelta(getSendHandler(stack), -size), (EntityPlayerMP) portableGrid.getPlayer()); RS.INSTANCE.network.sendTo(new MessageGridItemDelta(null, stack, -size), (EntityPlayerMP) portableGrid.getPlayer());
} }
} }
private Consumer<ByteBuf> getSendHandler(@Nonnull ItemStack stack) {
return buf -> {
RSUtils.writeItemStack(buf, stack, null, false);
buf.writeInt(API.instance().getItemStackHashCode(stack));
buf.writeBoolean(false);
buf.writeBoolean(false);
};
}
@Override @Override
public void sort() { public void sort() {
// NO OP // NO OP

View File

@@ -11,11 +11,12 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import java.util.function.Consumer; import javax.annotation.Nullable;
public class MessageGridItemDelta implements IMessage, IMessageHandler<MessageGridItemDelta, IMessage> { public class MessageGridItemDelta implements IMessage, IMessageHandler<MessageGridItemDelta, IMessage> {
// @todo: we can remove sendHandler if we improve the network == null condition in RSUtils.writeItemStack @Nullable
private Consumer<ByteBuf> sendHandler; private INetworkMaster network;
private ItemStack stack;
private int delta; private int delta;
private GridStackItem clientStack; private GridStackItem clientStack;
@@ -23,13 +24,9 @@ public class MessageGridItemDelta implements IMessage, IMessageHandler<MessageGr
public MessageGridItemDelta() { public MessageGridItemDelta() {
} }
public MessageGridItemDelta(INetworkMaster network, ItemStack stack, int delta) { public MessageGridItemDelta(@Nullable INetworkMaster network, ItemStack stack, int delta) {
this.sendHandler = buf -> RSUtils.writeItemStack(buf, stack, network, false); this.network = network;
this.delta = delta; this.stack = stack;
}
public MessageGridItemDelta(Consumer<ByteBuf> sendHandler, int delta) {
this.sendHandler = sendHandler;
this.delta = delta; this.delta = delta;
} }
@@ -41,7 +38,7 @@ public class MessageGridItemDelta implements IMessage, IMessageHandler<MessageGr
@Override @Override
public void toBytes(ByteBuf buf) { public void toBytes(ByteBuf buf) {
sendHandler.accept(buf); RSUtils.writeItemStack(buf, stack, network, false);
buf.writeInt(delta); buf.writeInt(delta);
} }

View File

@@ -199,6 +199,7 @@ public class ProxyCommon {
registerItem(RSItems.WIRELESS_GRID); registerItem(RSItems.WIRELESS_GRID);
registerItem(RSItems.WIRELESS_FLUID_GRID); registerItem(RSItems.WIRELESS_FLUID_GRID);
registerItem(RSItems.WIRELESS_CRAFTING_MONITOR); registerItem(RSItems.WIRELESS_CRAFTING_MONITOR);
registerItem(RSItems.PORTABLE_GRID);
registerItem(RSItems.PROCESSOR); registerItem(RSItems.PROCESSOR);
registerItem(RSItems.CORE); registerItem(RSItems.CORE);
registerItem(RSItems.SILICON); registerItem(RSItems.SILICON);
@@ -207,7 +208,6 @@ public class ProxyCommon {
registerItem(RSItems.NETWORK_CARD); registerItem(RSItems.NETWORK_CARD);
registerItem(RSItems.WRENCH); registerItem(RSItems.WRENCH);
registerItem(RSItems.SECURITY_CARD); registerItem(RSItems.SECURITY_CARD);
registerItem(RSItems.PORTABLE_GRID);
OreDictionary.registerOre("itemSilicon", RSItems.SILICON); OreDictionary.registerOre("itemSilicon", RSItems.SILICON);

View File

@@ -118,7 +118,7 @@ public class PortableGrid implements IGrid {
} }
public void drainEnergy(int energy) { public void drainEnergy(int energy) {
if (RS.INSTANCE.config.portableGridUsesEnergy) { if (RS.INSTANCE.config.portableGridUsesEnergy && stack.getItemDamage() != ItemPortableGrid.TYPE_CREATIVE) {
stack.getCapability(CapabilityEnergy.ENERGY, null).extractEnergy(energy, false); stack.getCapability(CapabilityEnergy.ENERGY, null).extractEnergy(energy, false);
} }
} }