Started on a chat command to help debug machine data
This commit is contained in:
parent
965ec49b16
commit
46f6add9ba
3 changed files with 228 additions and 60 deletions
|
@ -4,77 +4,74 @@ import net.minecraft.nbt.NBTTagCompound;
|
|||
import resonant.lib.utility.nbt.ISaveObj;
|
||||
import resonant.lib.utility.nbt.NBTUtility;
|
||||
|
||||
/**
|
||||
* Used to store arguments in a way that can be easier to read, limit, and understand
|
||||
/** Used to store arguments in a way that can be easier to loaded, saved, and limited without knowing
|
||||
* what the data contains.
|
||||
*
|
||||
* @author DarkGuardsman
|
||||
*/
|
||||
* @author DarkGuardsman */
|
||||
public class ArgumentData implements ISaveObj
|
||||
{
|
||||
protected String name;
|
||||
protected Object currentValue;
|
||||
protected final Object defaultValue;
|
||||
protected String name;
|
||||
protected Object currentValue;
|
||||
protected final Object defaultValue;
|
||||
|
||||
public ArgumentData(String name, Object defaultValue)
|
||||
{
|
||||
this.name = name;
|
||||
this.defaultValue = defaultValue;
|
||||
this.currentValue = defaultValue;
|
||||
}
|
||||
public ArgumentData(String name, Object defaultValue)
|
||||
{
|
||||
this.name = name;
|
||||
this.defaultValue = defaultValue;
|
||||
this.currentValue = defaultValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value
|
||||
*
|
||||
* @return true if the value was accepted
|
||||
*/
|
||||
public boolean setData(Object object)
|
||||
{
|
||||
if (this.isValid(object))
|
||||
{
|
||||
this.currentValue = object;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/** Sets the value
|
||||
*
|
||||
* @return true if the value was accepted */
|
||||
public boolean setData(Object object)
|
||||
{
|
||||
if (this.isValid(object))
|
||||
{
|
||||
this.currentValue = object;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Gets the value of the stored data */
|
||||
public Object getData()
|
||||
{
|
||||
return this.currentValue;
|
||||
}
|
||||
/** Gets the value of the stored data */
|
||||
public Object getData()
|
||||
{
|
||||
return this.currentValue;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return this.name;
|
||||
}
|
||||
public String getName()
|
||||
{
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public boolean isValid(Object object)
|
||||
{
|
||||
return object != null;
|
||||
}
|
||||
public boolean isValid(Object object)
|
||||
{
|
||||
return object != null;
|
||||
}
|
||||
|
||||
/** Is this argument valid. */
|
||||
public boolean isValid()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
/** Is this argument valid. */
|
||||
public boolean isValid()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/** Used by things like a gui to give a warning such as limits of data this can accept */
|
||||
public String warning()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
/** Used by things like a gui to give a warning such as limits of data this can accept */
|
||||
public String warning()
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(NBTTagCompound nbt)
|
||||
{
|
||||
NBTUtility.saveObject(nbt, "ObjectData", this.currentValue);
|
||||
}
|
||||
@Override
|
||||
public void save(NBTTagCompound nbt)
|
||||
{
|
||||
NBTUtility.saveObject(nbt, "ObjectData", this.currentValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load(NBTTagCompound nbt)
|
||||
{
|
||||
this.currentValue = NBTUtility.loadObject(nbt, "ObjectData");
|
||||
@Override
|
||||
public void load(NBTTagCompound nbt)
|
||||
{
|
||||
this.currentValue = NBTUtility.loadObject(nbt, "ObjectData");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
156
src/main/scala/resonantinduction/core/CommandMachine.java
Normal file
156
src/main/scala/resonantinduction/core/CommandMachine.java
Normal file
|
@ -0,0 +1,156 @@
|
|||
package resonantinduction.core;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import net.minecraft.command.CommandBase;
|
||||
import net.minecraft.command.ICommandSender;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ChatMessageComponent;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import resonantinduction.core.interfaces.ICmdMachine;
|
||||
import universalelectricity.api.CompatibilityModule;
|
||||
import universalelectricity.api.vector.VectorWorld;
|
||||
|
||||
/** Command that allows interaction with machines using chat commands
|
||||
*
|
||||
* @author Darkguardsman */
|
||||
public class CommandMachine extends CommandBase
|
||||
{
|
||||
public static HashMap<String, VectorWorld> selection = new HashMap<String, VectorWorld>();
|
||||
|
||||
@Override
|
||||
public String getCommandName()
|
||||
{
|
||||
return "machine";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCommandUsage(ICommandSender user)
|
||||
{
|
||||
return "/machine ?";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processCommand(ICommandSender sender, String[] args)
|
||||
{
|
||||
if (args != null && args.length > 0 && args[0] != null)
|
||||
{
|
||||
if (args[0].equalsIgnoreCase("?"))
|
||||
{
|
||||
sender.sendChatToPlayer(ChatMessageComponent.createFromText("/machine <arguments....>"));
|
||||
sender.sendChatToPlayer(ChatMessageComponent.createFromText("Each machine has unique commands"));
|
||||
}
|
||||
else if (sender instanceof EntityPlayer)
|
||||
{
|
||||
if (args.length > 1 && args[1] != null)
|
||||
{
|
||||
final String command = args[1];
|
||||
final boolean c = args.length > 2 && args[2] != null;
|
||||
final boolean c2 = args.length > 3 && args[3] != null;
|
||||
final boolean c3 = args.length > 3 && args[3] != null;
|
||||
final String subCommand = c ? args[2] : null;
|
||||
final String subCommand2 = c2 ? args[3] : null;
|
||||
final String subCommand3 = c3 ? args[4] : null;
|
||||
|
||||
if (selection.containsKey(((EntityPlayer) sender).username) && selection.get(((EntityPlayer) sender).username) != null)
|
||||
{
|
||||
VectorWorld pos = selection.get(((EntityPlayer) sender).username);
|
||||
TileEntity tile = pos.getTileEntity();
|
||||
if (tile instanceof ICmdMachine)
|
||||
{
|
||||
if (((ICmdMachine) tile).canTakeCommand(sender, args))
|
||||
{
|
||||
((ICmdMachine) tile).processCommand(sender, args);
|
||||
}
|
||||
else
|
||||
{
|
||||
sender.sendChatToPlayer(ChatMessageComponent.createFromText("Machine refuses the command"));
|
||||
}
|
||||
}
|
||||
else if (CompatibilityModule.isHandler(tile))
|
||||
{
|
||||
if (command.equalsIgnoreCase("energy"))
|
||||
{
|
||||
if (!c)
|
||||
{
|
||||
sender.sendChatToPlayer(ChatMessageComponent.createFromText("/Machine energy set <side> <amount>"));
|
||||
sender.sendChatToPlayer(ChatMessageComponent.createFromText("/Machine energy get <side>"));
|
||||
}
|
||||
else if (c2)
|
||||
{
|
||||
ForgeDirection direction = getDirection(subCommand3);
|
||||
if (subCommand2.equalsIgnoreCase("get"))
|
||||
{
|
||||
sender.sendChatToPlayer(ChatMessageComponent.createFromText("Energy: " + CompatibilityModule.getEnergy(tile, direction) + "/" + CompatibilityModule.getMaxEnergy(tile, direction)));
|
||||
}
|
||||
else if (subCommand2.equalsIgnoreCase("set"))
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sender.sendChatToPlayer(ChatMessageComponent.createFromText("Invalid machine selected!"));
|
||||
selection.remove(((EntityPlayer) sender).username);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sender.sendChatToPlayer(ChatMessageComponent.createFromText("Please supply some arguments"));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sender.sendChatToPlayer(ChatMessageComponent.createFromText("Please select the machine first"));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sender.sendChatToPlayer(ChatMessageComponent.createFromText("Console access not supported"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ForgeDirection getDirection(String str)
|
||||
{
|
||||
if (str != null && !str.isEmpty())
|
||||
{
|
||||
//Get side from work input
|
||||
if (str.equalsIgnoreCase("north") || str.equalsIgnoreCase("n"))
|
||||
{
|
||||
return ForgeDirection.NORTH;
|
||||
}
|
||||
else if (str.equalsIgnoreCase("south") || str.equalsIgnoreCase("s"))
|
||||
{
|
||||
return ForgeDirection.SOUTH;
|
||||
}
|
||||
else if (str.equalsIgnoreCase("east") || str.equalsIgnoreCase("e"))
|
||||
{
|
||||
return ForgeDirection.EAST;
|
||||
}
|
||||
else if (str.equalsIgnoreCase("west") || str.equalsIgnoreCase("w"))
|
||||
{
|
||||
return ForgeDirection.WEST;
|
||||
}
|
||||
else if (str.equalsIgnoreCase("up") || str.equalsIgnoreCase("u"))
|
||||
{
|
||||
return ForgeDirection.UP;
|
||||
}
|
||||
else if (str.equalsIgnoreCase("down") || str.equalsIgnoreCase("d"))
|
||||
{
|
||||
return ForgeDirection.DOWN;
|
||||
}
|
||||
|
||||
//Get side from number input
|
||||
int side = Integer.getInteger(str, -3);
|
||||
if (side >= 0 && side < 6)
|
||||
{
|
||||
return ForgeDirection.getOrientation(side);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
package resonantinduction.core.interfaces;
|
||||
|
||||
import net.minecraft.command.ICommandSender;
|
||||
|
||||
/** Used by machines that can be control by chat commands. Mainly for dev debug of the machine.
|
||||
*
|
||||
* @author robert */
|
||||
public interface ICmdMachine
|
||||
{
|
||||
/** Pre-check too see if this machine can even process the command */
|
||||
public boolean canTakeCommand(ICommandSender sender, String[] args);
|
||||
|
||||
/** Processing of the command */
|
||||
public void processCommand(ICommandSender sender, String[] args);
|
||||
}
|
Loading…
Reference in a new issue