More work on the set-value command

This commit is contained in:
Pahimar 2014-09-11 16:13:39 -04:00
parent 8dc8d63d61
commit 67c704870e
9 changed files with 133 additions and 70 deletions

View file

@ -9,7 +9,7 @@ import java.util.List;
public class CommandEE extends CommandBase
{
private static final CommandEE[] COMMANDS = {new CommandSetEnergyValue(), new CommandSyncEnergyValues()};
private static final CommandEE[] COMMANDS = {new CommandSetValue(), new CommandSyncValues()};
@Override
public String getCommandName()

View file

@ -3,6 +3,8 @@ package com.pahimar.ee3.command;
import com.pahimar.ee3.api.EnergyValue;
import com.pahimar.ee3.exchange.EnergyValueRegistry;
import com.pahimar.ee3.exchange.WrappedStack;
import com.pahimar.ee3.network.PacketHandler;
import com.pahimar.ee3.network.message.MessageSyncEnergyValues;
import com.pahimar.ee3.util.LogHelper;
import net.minecraft.command.ICommandSender;
import net.minecraft.command.WrongUsageException;
@ -14,22 +16,20 @@ import net.minecraft.nbt.NBTTagCompound;
import java.util.List;
public class CommandSetEnergyValue extends CommandEE
public class CommandSetValue extends CommandEE
{
@Override
public String getCommandName()
{
return "set-energy-value";
return "set-value";
}
@Override
public void processCommand(ICommandSender commandSender, String[] args)
{
LogHelper.info(args.length);
if (args.length < 3)
{
throw new WrongUsageException("command.ee3.set-energy-value.usage");
throw new WrongUsageException("command.ee3.set-value.usage");
}
else
{
@ -58,7 +58,7 @@ public class CommandSetEnergyValue extends CommandEE
if (!(nbtBase instanceof NBTTagCompound))
{
func_152373_a(commandSender, this, "command.ee3.set-energy-value.tagError", new Object[]{"Not a valid tag"});
func_152373_a(commandSender, this, "command.ee3.set-value.tagError", new Object[]{"Not a valid tag"});
return;
}
@ -66,12 +66,25 @@ public class CommandSetEnergyValue extends CommandEE
}
catch (Exception exception)
{
func_152373_a(commandSender, this, "command.ee3.set-energy-value.tagError", new Object[]{exception.getMessage()});
func_152373_a(commandSender, this, "command.ee3.set-value.tagError", new Object[]{exception.getMessage()});
return;
}
}
EnergyValueRegistry.getInstance().setEnergyValue(new WrappedStack(itemStack), new EnergyValue(energyValue));
WrappedStack wrappedStack = new WrappedStack(itemStack);
EnergyValue newEnergyValue = new EnergyValue(energyValue);
if (wrappedStack != null && newEnergyValue != null && Float.compare(newEnergyValue.getEnergyValue(), 0) > 0)
{
LogHelper.info(String.format("%s set the EnergyValue of %s to %s", commandSender.getCommandSenderName(), wrappedStack, newEnergyValue));
EnergyValueRegistry.getInstance().setEnergyValue(wrappedStack, newEnergyValue);
PacketHandler.INSTANCE.sendToAll(new MessageSyncEnergyValues(EnergyValueRegistry.getInstance())); //TODO Get MessageSetEnergyValue working so we are only setting new values and not unchanged ones
func_152373_a(commandSender, this, "command.ee3.set-value.success", new Object[]{commandSender.getCommandSenderName(), wrappedStack.toString(), newEnergyValue.toString()});
}
else
{
throw new WrongUsageException("command.ee3.set-value.usage");
}
}
}

View file

@ -2,7 +2,7 @@ package com.pahimar.ee3.command;
import com.pahimar.ee3.exchange.EnergyValueRegistry;
import com.pahimar.ee3.network.PacketHandler;
import com.pahimar.ee3.network.message.MessageEnergyValueSync;
import com.pahimar.ee3.network.message.MessageSyncEnergyValues;
import com.pahimar.ee3.util.LogHelper;
import com.pahimar.ee3.util.PlayerHelper;
import net.minecraft.command.ICommandSender;
@ -13,12 +13,12 @@ import net.minecraft.util.ChatComponentTranslation;
import java.util.List;
public class CommandSyncEnergyValues extends CommandEE
public class CommandSyncValues extends CommandEE
{
@Override
public String getCommandName()
{
return "sync-energy-values";
return "sync-values";
}
@Override
@ -29,23 +29,23 @@ public class CommandSyncEnergyValues extends CommandEE
if (args[1].equalsIgnoreCase("self"))
{
LogHelper.info(String.format("Syncing EnergyValues with player '%s' at their request", commandSender.getCommandSenderName()));
PacketHandler.INSTANCE.sendTo(new MessageEnergyValueSync(EnergyValueRegistry.getInstance()), (EntityPlayerMP) commandSender);
commandSender.addChatMessage(new ChatComponentTranslation("command.ee3.sync-energy-values.self.success"));
PacketHandler.INSTANCE.sendTo(new MessageSyncEnergyValues(EnergyValueRegistry.getInstance()), (EntityPlayerMP) commandSender);
commandSender.addChatMessage(new ChatComponentTranslation("command.ee3.sync-values.self.success"));
}
else if (args[1].equalsIgnoreCase("all") && PlayerHelper.isPlayerOp((EntityPlayer) commandSender))
{
LogHelper.info(String.format("Syncing EnergyValues with all players at %s's request", commandSender.getCommandSenderName()));
PacketHandler.INSTANCE.sendToAll(new MessageEnergyValueSync(EnergyValueRegistry.getInstance()));
func_152373_a(commandSender, this, "command.ee3.sync-energy-values.all.success", new Object[]{commandSender.getCommandSenderName()});
PacketHandler.INSTANCE.sendToAll(new MessageSyncEnergyValues(EnergyValueRegistry.getInstance()));
func_152373_a(commandSender, this, "command.ee3.sync-values.all.success", new Object[]{commandSender.getCommandSenderName()});
}
else
{
throw new WrongUsageException("command.ee3.sync-energy-values.usage");
throw new WrongUsageException("command.ee3.sync-values.usage");
}
}
else
{
throw new WrongUsageException("command.ee3.sync-energy-values.usage");
throw new WrongUsageException("command.ee3.sync-values.usage");
}
}

View file

@ -666,46 +666,49 @@ public class EnergyValueRegistry implements INBTTaggable
public void setEnergyValue(WrappedStack wrappedStack, EnergyValue energyValue)
{
HashMap<WrappedStack, EnergyValue> stackValueMap = new HashMap<WrappedStack, EnergyValue>();
/**
* Read stack value mappings from NBTTagCompound
*/
stackValueMap.putAll(stackMappings);
stackValueMap.put(wrappedStack, energyValue);
ImmutableSortedMap.Builder<WrappedStack, EnergyValue> stackMappingsBuilder = ImmutableSortedMap.naturalOrder();
stackMappingsBuilder.putAll(stackValueMap);
stackMappings = stackMappingsBuilder.build();
/**
* Resolve value stack mappings from the newly loaded stack mappings
*/
SortedMap<EnergyValue, List<WrappedStack>> tempValueMappings = new TreeMap<EnergyValue, List<WrappedStack>>();
for (WrappedStack stack : stackMappings.keySet())
if (wrappedStack != null && energyValue != null && Float.compare(energyValue.getEnergyValue(), 0f) > 0)
{
if (stack != null)
{
EnergyValue value = stackMappings.get(stack);
HashMap<WrappedStack, EnergyValue> stackValueMap = new HashMap<WrappedStack, EnergyValue>();
if (value != null)
/**
* Read stack value mappings from NBTTagCompound
*/
stackValueMap.putAll(stackMappings);
stackValueMap.put(wrappedStack, energyValue);
ImmutableSortedMap.Builder<WrappedStack, EnergyValue> stackMappingsBuilder = ImmutableSortedMap.naturalOrder();
stackMappingsBuilder.putAll(stackValueMap);
stackMappings = stackMappingsBuilder.build();
/**
* Resolve value stack mappings from the newly loaded stack mappings
*/
SortedMap<EnergyValue, List<WrappedStack>> tempValueMappings = new TreeMap<EnergyValue, List<WrappedStack>>();
for (WrappedStack stack : stackMappings.keySet())
{
if (stack != null)
{
if (tempValueMappings.containsKey(value))
EnergyValue value = stackMappings.get(stack);
if (value != null)
{
if (!(tempValueMappings.get(value).contains(stack)))
if (tempValueMappings.containsKey(value))
{
tempValueMappings.get(value).add(stack);
if (!(tempValueMappings.get(value).contains(stack)))
{
tempValueMappings.get(value).add(stack);
}
}
else
{
tempValueMappings.put(value, new ArrayList<WrappedStack>(Arrays.asList(stack)));
}
}
else
{
tempValueMappings.put(value, new ArrayList<WrappedStack>(Arrays.asList(stack)));
}
}
}
}
valueMappings = ImmutableSortedMap.copyOf(tempValueMappings);
valueMappings = ImmutableSortedMap.copyOf(tempValueMappings);
}
}
}

View file

@ -2,7 +2,7 @@ package com.pahimar.ee3.handler;
import com.pahimar.ee3.exchange.EnergyValueRegistry;
import com.pahimar.ee3.network.PacketHandler;
import com.pahimar.ee3.network.message.MessageEnergyValueSync;
import com.pahimar.ee3.network.message.MessageSyncEnergyValues;
import com.pahimar.ee3.reference.Reference;
import com.pahimar.ee3.util.LogHelper;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
@ -55,6 +55,6 @@ public class PlayerEventHandler
@SubscribeEvent
public void onPlayerLoggedInEvent(cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent event)
{
PacketHandler.INSTANCE.sendTo(new MessageEnergyValueSync(EnergyValueRegistry.getInstance()), (EntityPlayerMP) event.player);
PacketHandler.INSTANCE.sendTo(new MessageSyncEnergyValues(EnergyValueRegistry.getInstance()), (EntityPlayerMP) event.player);
}
}

View file

@ -18,6 +18,6 @@ public class PacketHandler
INSTANCE.registerMessage(MessageTileEntityGlassBell.class, MessageTileEntityGlassBell.class, 3, Side.CLIENT);
INSTANCE.registerMessage(MessageKeyPressed.class, MessageKeyPressed.class, 4, Side.SERVER);
INSTANCE.registerMessage(MessageSoundEvent.class, MessageSoundEvent.class, 5, Side.CLIENT);
INSTANCE.registerMessage(MessageEnergyValueSync.class, MessageEnergyValueSync.class, 6, Side.CLIENT);
INSTANCE.registerMessage(MessageSyncEnergyValues.class, MessageSyncEnergyValues.class, 6, Side.CLIENT);
}
}

View file

@ -1,19 +1,22 @@
package com.pahimar.ee3.network.message;
import com.pahimar.ee3.api.EnergyValue;
import com.pahimar.ee3.exchange.EnergyValueRegistry;
import com.pahimar.ee3.exchange.WrappedStack;
import com.pahimar.ee3.util.LogHelper;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import java.io.ByteArrayInputStream;
import java.io.IOException;
public class MessageSetEnergyValue implements IMessage, IMessageHandler<MessageSetEnergyValue, IMessage>
{
public NBTTagCompound energyValueMappingNBT;
public WrappedStack wrappedStack;
public EnergyValue energyValue;
public MessageSetEnergyValue()
{
@ -21,33 +24,66 @@ public class MessageSetEnergyValue implements IMessage, IMessageHandler<MessageS
public MessageSetEnergyValue(WrappedStack wrappedStack, EnergyValue energyValue)
{
this.wrappedStack = wrappedStack;
this.energyValue = energyValue;
}
@Override
public void fromBytes(ByteBuf buf)
{
byte[] compressedWrappedStack = null;
int wrappedStackByteCount = buf.readInt();
if (wrappedStackByteCount > 0)
{
compressedWrappedStack = buf.readBytes(wrappedStackByteCount).array();
}
byte[] compressedEnergyValue = null;
int energyValueByteCount = buf.readInt();
if (energyValueByteCount > 0)
{
compressedEnergyValue = buf.readBytes(energyValueByteCount).array();
}
if (compressedWrappedStack != null && compressedEnergyValue != null)
{
try
{
this.wrappedStack = WrappedStack.fromNBTTagCompound(CompressedStreamTools.readCompressed(new ByteArrayInputStream(compressedWrappedStack)));
this.energyValue = EnergyValue.loadEnergyValueFromNBT(CompressedStreamTools.readCompressed(new ByteArrayInputStream(compressedWrappedStack)));
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
@Override
public void toBytes(ByteBuf buf)
{
byte[] compressedNBT = null;
byte[] compressedWrappedStack = null;
byte[] compressedEnergyValue = null;
try
{
compressedNBT = CompressedStreamTools.compress(energyValueMappingNBT);
compressedWrappedStack = CompressedStreamTools.compress(WrappedStack.toNBTTagCompound(wrappedStack));
compressedEnergyValue = CompressedStreamTools.compress(EnergyValue.writeEnergyValueToNBT(energyValue));
}
catch (IOException e)
{
e.printStackTrace();
}
if (compressedNBT != null)
if (compressedWrappedStack != null && compressedEnergyValue != null)
{
buf.writeInt(compressedNBT.length);
buf.writeBytes(compressedNBT);
buf.writeInt(compressedWrappedStack.length);
buf.writeBytes(compressedWrappedStack);
buf.writeInt(compressedEnergyValue.length);
buf.writeBytes(compressedEnergyValue);
}
else
{
@ -58,6 +94,16 @@ public class MessageSetEnergyValue implements IMessage, IMessageHandler<MessageS
@Override
public IMessage onMessage(MessageSetEnergyValue message, MessageContext ctx)
{
if (message.wrappedStack != null && message.energyValue != null)
{
EnergyValueRegistry.getInstance().setEnergyValue(message.wrappedStack, message.energyValue);
LogHelper.info(String.format("Client successfully received new EnergyValue '%s' for object '%s'", message.energyValue, message.wrappedStack));
}
else
{
LogHelper.info("Client failed to receive new EnergyValue from server");
}
return null;
}
}

View file

@ -12,15 +12,15 @@ import net.minecraft.nbt.NBTTagCompound;
import java.io.ByteArrayInputStream;
import java.io.IOException;
public class MessageEnergyValueSync implements IMessage, IMessageHandler<MessageEnergyValueSync, IMessage>
public class MessageSyncEnergyValues implements IMessage, IMessageHandler<MessageSyncEnergyValues, IMessage>
{
public NBTTagCompound energyValueRegistryNBT;
public MessageEnergyValueSync()
public MessageSyncEnergyValues()
{
}
public MessageEnergyValueSync(EnergyValueRegistry energyValueRegistry)
public MessageSyncEnergyValues(EnergyValueRegistry energyValueRegistry)
{
energyValueRegistryNBT = new NBTTagCompound();
energyValueRegistry.writeToNBT(energyValueRegistryNBT);
@ -94,7 +94,7 @@ public class MessageEnergyValueSync implements IMessage, IMessageHandler<Message
* @return an optional return message
*/
@Override
public IMessage onMessage(MessageEnergyValueSync message, MessageContext ctx)
public IMessage onMessage(MessageSyncEnergyValues message, MessageContext ctx)
{
if (message.energyValueRegistryNBT != null)
{

View file

@ -101,12 +101,13 @@ container.ee3:alchemicalTome=Tome of Alchemical Knowledge [WIP]
container.ee3:transmutationSquare=Transmutation Square [WIP]
# Commands
command.ee3.usage=/ee3 <set-energy-value|sync-energy-values>
command.ee3.set-energy-value.usage=/ee3 set-energy-value <item> <value> [data] [dataTag]
command.ee3.set-energy-value.tagError=Data tag parsing failed: %s
command.ee3.sync-energy-values.usage=/ee3 sync-energy-values <self|all>
command.ee3.sync-energy-values.self.success=Successfully synchronized EnergyValues with the server
command.ee3.sync-energy-values.all.success=%s synchronized all EnergyValues with all players on the server
command.ee3.usage=/ee3 <set-value|sync-values>
command.ee3.set-value.usage=/ee3 set-value <item> <value> [data] [dataTag]
command.ee3.set-value.success=%s set the EnergyValue of %s to %s
command.ee3.set-value.tagError=Data tag parsing failed: %s
command.ee3.sync-values.usage=/ee3 sync-values <self|all>
command.ee3.sync-values.self.success=Successfully synchronized EnergyValues with the server
command.ee3.sync-values.all.success=%s synchronized all EnergyValues with all players on the server
# Tooltips
tooltip.ee3:upgradesPrefix=Upgrades (Alchemical) Chests