base mod created
This commit is contained in:
@@ -0,0 +1,319 @@
|
||||
package net.minecraft.command;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.scoreboard.Score;
|
||||
import net.minecraft.scoreboard.ScoreObjective;
|
||||
import net.minecraft.scoreboard.Scoreboard;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class CommandResultStats
|
||||
{
|
||||
/** The number of result command result types that are possible. */
|
||||
private static final int NUM_RESULT_TYPES = CommandResultStats.Type.values().length;
|
||||
private static final String[] STRING_RESULT_TYPES = new String[NUM_RESULT_TYPES];
|
||||
/** List of entityID who set a stat, username for a player, UUID for all entities */
|
||||
private String[] entitiesID;
|
||||
/** List of all the Objectives names */
|
||||
private String[] objectives;
|
||||
|
||||
public CommandResultStats()
|
||||
{
|
||||
this.entitiesID = STRING_RESULT_TYPES;
|
||||
this.objectives = STRING_RESULT_TYPES;
|
||||
}
|
||||
|
||||
public void setCommandStatForSender(MinecraftServer server, final ICommandSender sender, CommandResultStats.Type typeIn, int p_184932_4_)
|
||||
{
|
||||
String s = this.entitiesID[typeIn.getTypeID()];
|
||||
|
||||
if (s != null)
|
||||
{
|
||||
ICommandSender icommandsender = new ICommandSender()
|
||||
{
|
||||
/**
|
||||
* Get the name of this object. For players this returns their username
|
||||
*/
|
||||
public String getName()
|
||||
{
|
||||
return sender.getName();
|
||||
}
|
||||
/**
|
||||
* Get the formatted ChatComponent that will be used for the sender's username in chat
|
||||
*/
|
||||
public ITextComponent getDisplayName()
|
||||
{
|
||||
return sender.getDisplayName();
|
||||
}
|
||||
/**
|
||||
* Send a chat message to the CommandSender
|
||||
*/
|
||||
public void sendMessage(ITextComponent component)
|
||||
{
|
||||
sender.sendMessage(component);
|
||||
}
|
||||
/**
|
||||
* Returns {@code true} if the CommandSender is allowed to execute the command, {@code false} if not
|
||||
*/
|
||||
public boolean canUseCommand(int permLevel, String commandName)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* Get the position in the world. <b>{@code null} is not allowed!</b> If you are not an entity in the
|
||||
* world, return the coordinates 0, 0, 0
|
||||
*/
|
||||
public BlockPos getPosition()
|
||||
{
|
||||
return sender.getPosition();
|
||||
}
|
||||
/**
|
||||
* Get the position vector. <b>{@code null} is not allowed!</b> If you are not an entity in the world,
|
||||
* return 0.0D, 0.0D, 0.0D
|
||||
*/
|
||||
public Vec3d getPositionVector()
|
||||
{
|
||||
return sender.getPositionVector();
|
||||
}
|
||||
/**
|
||||
* Get the world, if available. <b>{@code null} is not allowed!</b> If you are not an entity in the
|
||||
* world, return the overworld
|
||||
*/
|
||||
public World getEntityWorld()
|
||||
{
|
||||
return sender.getEntityWorld();
|
||||
}
|
||||
/**
|
||||
* Returns the entity associated with the command sender. MAY BE NULL!
|
||||
*/
|
||||
public Entity getCommandSenderEntity()
|
||||
{
|
||||
return sender.getCommandSenderEntity();
|
||||
}
|
||||
/**
|
||||
* Returns true if the command sender should be sent feedback about executed commands
|
||||
*/
|
||||
public boolean sendCommandFeedback()
|
||||
{
|
||||
return sender.sendCommandFeedback();
|
||||
}
|
||||
public void setCommandStat(CommandResultStats.Type type, int amount)
|
||||
{
|
||||
sender.setCommandStat(type, amount);
|
||||
}
|
||||
/**
|
||||
* Get the Minecraft server instance
|
||||
*/
|
||||
public MinecraftServer getServer()
|
||||
{
|
||||
return sender.getServer();
|
||||
}
|
||||
};
|
||||
String s1;
|
||||
|
||||
try
|
||||
{
|
||||
s1 = CommandBase.getEntityName(server, icommandsender, s);
|
||||
}
|
||||
catch (CommandException var12)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
String s2 = this.objectives[typeIn.getTypeID()];
|
||||
|
||||
if (s2 != null)
|
||||
{
|
||||
Scoreboard scoreboard = sender.getEntityWorld().getScoreboard();
|
||||
ScoreObjective scoreobjective = scoreboard.getObjective(s2);
|
||||
|
||||
if (scoreobjective != null)
|
||||
{
|
||||
if (scoreboard.entityHasObjective(s1, scoreobjective))
|
||||
{
|
||||
Score score = scoreboard.getOrCreateScore(s1, scoreobjective);
|
||||
score.setScorePoints(p_184932_4_);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void readStatsFromNBT(NBTTagCompound tagcompound)
|
||||
{
|
||||
if (tagcompound.hasKey("CommandStats", 10))
|
||||
{
|
||||
NBTTagCompound nbttagcompound = tagcompound.getCompoundTag("CommandStats");
|
||||
|
||||
for (CommandResultStats.Type commandresultstats$type : CommandResultStats.Type.values())
|
||||
{
|
||||
String s = commandresultstats$type.getTypeName() + "Name";
|
||||
String s1 = commandresultstats$type.getTypeName() + "Objective";
|
||||
|
||||
if (nbttagcompound.hasKey(s, 8) && nbttagcompound.hasKey(s1, 8))
|
||||
{
|
||||
String s2 = nbttagcompound.getString(s);
|
||||
String s3 = nbttagcompound.getString(s1);
|
||||
setScoreBoardStat(this, commandresultstats$type, s2, s3);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void writeStatsToNBT(NBTTagCompound tagcompound)
|
||||
{
|
||||
NBTTagCompound nbttagcompound = new NBTTagCompound();
|
||||
|
||||
for (CommandResultStats.Type commandresultstats$type : CommandResultStats.Type.values())
|
||||
{
|
||||
String s = this.entitiesID[commandresultstats$type.getTypeID()];
|
||||
String s1 = this.objectives[commandresultstats$type.getTypeID()];
|
||||
|
||||
if (s != null && s1 != null)
|
||||
{
|
||||
nbttagcompound.setString(commandresultstats$type.getTypeName() + "Name", s);
|
||||
nbttagcompound.setString(commandresultstats$type.getTypeName() + "Objective", s1);
|
||||
}
|
||||
}
|
||||
|
||||
if (!nbttagcompound.hasNoTags())
|
||||
{
|
||||
tagcompound.setTag("CommandStats", nbttagcompound);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a stat in the scoreboard
|
||||
*/
|
||||
public static void setScoreBoardStat(CommandResultStats stats, CommandResultStats.Type resultType, @Nullable String entityID, @Nullable String objectiveName)
|
||||
{
|
||||
if (entityID != null && !entityID.isEmpty() && objectiveName != null && !objectiveName.isEmpty())
|
||||
{
|
||||
if (stats.entitiesID == STRING_RESULT_TYPES || stats.objectives == STRING_RESULT_TYPES)
|
||||
{
|
||||
stats.entitiesID = new String[NUM_RESULT_TYPES];
|
||||
stats.objectives = new String[NUM_RESULT_TYPES];
|
||||
}
|
||||
|
||||
stats.entitiesID[resultType.getTypeID()] = entityID;
|
||||
stats.objectives[resultType.getTypeID()] = objectiveName;
|
||||
}
|
||||
else
|
||||
{
|
||||
removeScoreBoardStat(stats, resultType);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a stat from the scoreboard
|
||||
*/
|
||||
private static void removeScoreBoardStat(CommandResultStats resultStatsIn, CommandResultStats.Type resultTypeIn)
|
||||
{
|
||||
if (resultStatsIn.entitiesID != STRING_RESULT_TYPES && resultStatsIn.objectives != STRING_RESULT_TYPES)
|
||||
{
|
||||
resultStatsIn.entitiesID[resultTypeIn.getTypeID()] = null;
|
||||
resultStatsIn.objectives[resultTypeIn.getTypeID()] = null;
|
||||
boolean flag = true;
|
||||
|
||||
for (CommandResultStats.Type commandresultstats$type : CommandResultStats.Type.values())
|
||||
{
|
||||
if (resultStatsIn.entitiesID[commandresultstats$type.getTypeID()] != null && resultStatsIn.objectives[commandresultstats$type.getTypeID()] != null)
|
||||
{
|
||||
flag = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (flag)
|
||||
{
|
||||
resultStatsIn.entitiesID = STRING_RESULT_TYPES;
|
||||
resultStatsIn.objectives = STRING_RESULT_TYPES;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add all stats in the CommandResultStats
|
||||
*/
|
||||
public void addAllStats(CommandResultStats resultStatsIn)
|
||||
{
|
||||
for (CommandResultStats.Type commandresultstats$type : CommandResultStats.Type.values())
|
||||
{
|
||||
setScoreBoardStat(this, commandresultstats$type, resultStatsIn.entitiesID[commandresultstats$type.getTypeID()], resultStatsIn.objectives[commandresultstats$type.getTypeID()]);
|
||||
}
|
||||
}
|
||||
|
||||
public static enum Type
|
||||
{
|
||||
SUCCESS_COUNT(0, "SuccessCount"),
|
||||
AFFECTED_BLOCKS(1, "AffectedBlocks"),
|
||||
AFFECTED_ENTITIES(2, "AffectedEntities"),
|
||||
AFFECTED_ITEMS(3, "AffectedItems"),
|
||||
QUERY_RESULT(4, "QueryResult");
|
||||
|
||||
/** The integer ID of the Result Type. */
|
||||
final int typeID;
|
||||
/** The string representation of the type. */
|
||||
final String typeName;
|
||||
|
||||
private Type(int id, String name)
|
||||
{
|
||||
this.typeID = id;
|
||||
this.typeName = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the integer ID of the result type.
|
||||
*/
|
||||
public int getTypeID()
|
||||
{
|
||||
return this.typeID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the name of the type.
|
||||
*/
|
||||
public String getTypeName()
|
||||
{
|
||||
return this.typeName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the names of all possible Result Types.
|
||||
*/
|
||||
public static String[] getTypeNames()
|
||||
{
|
||||
String[] astring = new String[values().length];
|
||||
int i = 0;
|
||||
|
||||
for (CommandResultStats.Type commandresultstats$type : values())
|
||||
{
|
||||
astring[i++] = commandresultstats$type.getTypeName();
|
||||
}
|
||||
|
||||
return astring;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the Type indicated by the supplied name string.
|
||||
*/
|
||||
@Nullable
|
||||
public static CommandResultStats.Type getTypeByName(String name)
|
||||
{
|
||||
for (CommandResultStats.Type commandresultstats$type : values())
|
||||
{
|
||||
if (commandresultstats$type.getTypeName().equals(name))
|
||||
{
|
||||
return commandresultstats$type;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user