package net.minecraft.command.server; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.Callable; import net.minecraft.command.CommandResultStats; import net.minecraft.command.ICommandManager; import net.minecraft.command.ICommandSender; import net.minecraft.crash.CrashReport; import net.minecraft.crash.CrashReportCategory; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.server.MinecraftServer; import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; import net.minecraft.util.ReportedException; import net.minecraft.world.World; public abstract class CommandBlockLogic implements ICommandSender { /** The formatting for the timestamp on commands run. */ private static final SimpleDateFormat timestampFormat = new SimpleDateFormat("HH:mm:ss"); /** The number of successful commands run. (used for redstone output) */ private int successCount; private boolean trackOutput = true; /** The previously run command. */ private IChatComponent lastOutput = null; /** The command stored in the command block. */ private String commandStored = ""; /** The custom name of the command block. (defaults to "@") */ private String customName = "@"; private final CommandResultStats field_175575_g = new CommandResultStats(); private static final String __OBFID = "CL_00000128"; /** * returns the successCount int. */ public int getSuccessCount() { return this.successCount; } /** * Returns the lastOutput. */ public IChatComponent getLastOutput() { return this.lastOutput; } /** * Stores data to NBT format. */ public void writeDataToNBT(NBTTagCompound p_145758_1_) { p_145758_1_.setString("Command", this.commandStored); p_145758_1_.setInteger("SuccessCount", this.successCount); p_145758_1_.setString("CustomName", this.customName); p_145758_1_.setBoolean("TrackOutput", this.trackOutput); if (this.lastOutput != null && this.trackOutput) { p_145758_1_.setString("LastOutput", IChatComponent.Serializer.componentToJson(this.lastOutput)); } this.field_175575_g.func_179670_b(p_145758_1_); } /** * Reads NBT formatting and stored data into variables. */ public void readDataFromNBT(NBTTagCompound p_145759_1_) { this.commandStored = p_145759_1_.getString("Command"); this.successCount = p_145759_1_.getInteger("SuccessCount"); if (p_145759_1_.hasKey("CustomName", 8)) { this.customName = p_145759_1_.getString("CustomName"); } if (p_145759_1_.hasKey("TrackOutput", 1)) { this.trackOutput = p_145759_1_.getBoolean("TrackOutput"); } if (p_145759_1_.hasKey("LastOutput", 8) && this.trackOutput) { this.lastOutput = IChatComponent.Serializer.jsonToComponent(p_145759_1_.getString("LastOutput")); } this.field_175575_g.func_179668_a(p_145759_1_); } /** * Returns true if the command sender is allowed to use the given command. */ public boolean canCommandSenderUseCommand(int permissionLevel, String command) { return permissionLevel <= 2; } /** * Sets the command. */ public void setCommand(String p_145752_1_) { this.commandStored = p_145752_1_; this.successCount = 0; } /** * Returns the customName of the command block. */ public String getCustomName() { return this.commandStored; } public void trigger(World worldIn) { if (worldIn.isRemote) { this.successCount = 0; } MinecraftServer var2 = MinecraftServer.getServer(); if (var2 != null && var2.func_175578_N() && var2.isCommandBlockEnabled()) { ICommandManager var3 = var2.getCommandManager(); try { this.lastOutput = null; this.successCount = var3.executeCommand(this, this.commandStored); } catch (Throwable var7) { CrashReport var5 = CrashReport.makeCrashReport(var7, "Executing command block"); CrashReportCategory var6 = var5.makeCategory("Command to be executed"); var6.addCrashSectionCallable("Command", new Callable() { private static final String __OBFID = "CL_00002154"; public String func_180324_a() { return CommandBlockLogic.this.getCustomName(); } public Object call() { return this.func_180324_a(); } }); var6.addCrashSectionCallable("Name", new Callable() { private static final String __OBFID = "CL_00002153"; public String func_180326_a() { return CommandBlockLogic.this.getName(); } public Object call() { return this.func_180326_a(); } }); throw new ReportedException(var5); } } else { this.successCount = 0; } } /** * Gets the name of this command sender (usually username, but possibly "Rcon") */ public String getName() { return this.customName; } public IChatComponent getDisplayName() { return new ChatComponentText(this.getName()); } public void func_145754_b(String p_145754_1_) { this.customName = p_145754_1_; } /** * Notifies this sender of some sort of information. This is for messages intended to display to the user. Used * for typical output (like "you asked for whether or not this game rule is set, so here's your answer"), warnings * (like "I fetched this block for you by ID, but I'd like you to know that every time you do this, I die a little * inside"), and errors (like "it's not called iron_pixacke, silly"). */ public void addChatMessage(IChatComponent message) { if (this.trackOutput && this.getEntityWorld() != null && !this.getEntityWorld().isRemote) { this.lastOutput = (new ChatComponentText("[" + timestampFormat.format(new Date()) + "] ")).appendSibling(message); this.func_145756_e(); } } public boolean sendCommandFeedback() { MinecraftServer var1 = MinecraftServer.getServer(); return var1 == null || !var1.func_175578_N() || var1.worldServers[0].getGameRules().getGameRuleBooleanValue("commandBlockOutput"); } public void func_174794_a(CommandResultStats.Type p_174794_1_, int p_174794_2_) { this.field_175575_g.func_179672_a(this, p_174794_1_, p_174794_2_); } public abstract void func_145756_e(); public void func_145750_b(IChatComponent p_145750_1_) { this.lastOutput = p_145750_1_; } public void func_175573_a(boolean p_175573_1_) { this.trackOutput = p_175573_1_; } public boolean func_175571_m() { return this.trackOutput; } public boolean func_175574_a(EntityPlayer p_175574_1_) { if (!p_175574_1_.capabilities.isCreativeMode) { return false; } else { if (p_175574_1_.getEntityWorld().isRemote) { p_175574_1_.func_146095_a(this); } return true; } } public CommandResultStats func_175572_n() { return this.field_175575_g; } }