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) {
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(stack.getCount());
buf.writeInt(stack.getItemDamage());
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) {
@@ -148,6 +138,20 @@ public final class RSUtils {
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) {
buf.writeInt(API.instance().getFluidStackHashCode(stack));
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.MessageGridItemUpdate;
import com.raoulvdberge.refinedstorage.tile.grid.PortableGrid;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import javax.annotation.Nonnull;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;
public class StorageCacheItemPortable implements IStorageCache<ItemStack> {
private PortableGrid portableGrid;
@@ -34,15 +32,11 @@ public class StorageCacheItemPortable implements IStorageCache<ItemStack> {
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());
for (ItemStack stack : list.getStacks()) {
RSUtils.writeItemStack(buf, stack, null, false);
buf.writeInt(API.instance().getItemStackHashCode(stack));
buf.writeBoolean(false);
buf.writeBoolean(false);
}
}, false), (EntityPlayerMP) portableGrid.getPlayer());
}
@@ -52,27 +46,17 @@ public class StorageCacheItemPortable implements IStorageCache<ItemStack> {
list.add(stack, size);
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
public void remove(@Nonnull ItemStack stack, int 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
public void sort() {
// 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.MessageContext;
import java.util.function.Consumer;
import javax.annotation.Nullable;
public class MessageGridItemDelta implements IMessage, IMessageHandler<MessageGridItemDelta, IMessage> {
// @todo: we can remove sendHandler if we improve the network == null condition in RSUtils.writeItemStack
private Consumer<ByteBuf> sendHandler;
@Nullable
private INetworkMaster network;
private ItemStack stack;
private int delta;
private GridStackItem clientStack;
@@ -23,13 +24,9 @@ public class MessageGridItemDelta implements IMessage, IMessageHandler<MessageGr
public MessageGridItemDelta() {
}
public MessageGridItemDelta(INetworkMaster network, ItemStack stack, int delta) {
this.sendHandler = buf -> RSUtils.writeItemStack(buf, stack, network, false);
this.delta = delta;
}
public MessageGridItemDelta(Consumer<ByteBuf> sendHandler, int delta) {
this.sendHandler = sendHandler;
public MessageGridItemDelta(@Nullable INetworkMaster network, ItemStack stack, int delta) {
this.network = network;
this.stack = stack;
this.delta = delta;
}
@@ -41,7 +38,7 @@ public class MessageGridItemDelta implements IMessage, IMessageHandler<MessageGr
@Override
public void toBytes(ByteBuf buf) {
sendHandler.accept(buf);
RSUtils.writeItemStack(buf, stack, network, false);
buf.writeInt(delta);
}

View File

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

View File

@@ -118,7 +118,7 @@ public class PortableGrid implements IGrid {
}
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);
}
}