base mod created

This commit is contained in:
Mohammad-Ali Minaie
2018-10-08 09:07:47 -04:00
parent 0a7700c356
commit b86dedad2f
7848 changed files with 584664 additions and 1 deletions

View File

@@ -0,0 +1,202 @@
package net.minecraft.stats;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonParser;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.network.play.server.SPacketStatistics;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.IJsonSerializable;
import net.minecraft.util.TupleIntJsonSerializable;
import org.apache.commons.io.FileUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class StatisticsManagerServer extends StatisticsManager
{
private static final Logger LOGGER = LogManager.getLogger();
private final MinecraftServer mcServer;
private final File statsFile;
private final Set<StatBase> dirty = Sets.<StatBase>newHashSet();
private int lastStatRequest = -300;
public StatisticsManagerServer(MinecraftServer serverIn, File statsFileIn)
{
this.mcServer = serverIn;
this.statsFile = statsFileIn;
}
public void readStatFile()
{
if (this.statsFile.isFile())
{
try
{
this.statsData.clear();
this.statsData.putAll(this.parseJson(FileUtils.readFileToString(this.statsFile)));
}
catch (IOException ioexception)
{
LOGGER.error("Couldn't read statistics file {}", this.statsFile, ioexception);
}
catch (JsonParseException jsonparseexception)
{
LOGGER.error("Couldn't parse statistics file {}", this.statsFile, jsonparseexception);
}
}
}
public void saveStatFile()
{
try
{
FileUtils.writeStringToFile(this.statsFile, dumpJson(this.statsData));
}
catch (IOException ioexception)
{
LOGGER.error("Couldn't save stats", (Throwable)ioexception);
}
}
/**
* Triggers the logging of an achievement and attempts to announce to server
*/
public void unlockAchievement(EntityPlayer playerIn, StatBase statIn, int p_150873_3_)
{
super.unlockAchievement(playerIn, statIn, p_150873_3_);
this.dirty.add(statIn);
}
private Set<StatBase> getDirty()
{
Set<StatBase> set = Sets.newHashSet(this.dirty);
this.dirty.clear();
return set;
}
public Map<StatBase, TupleIntJsonSerializable> parseJson(String p_150881_1_)
{
JsonElement jsonelement = (new JsonParser()).parse(p_150881_1_);
if (!jsonelement.isJsonObject())
{
return Maps.<StatBase, TupleIntJsonSerializable>newHashMap();
}
else
{
JsonObject jsonobject = jsonelement.getAsJsonObject();
Map<StatBase, TupleIntJsonSerializable> map = Maps.<StatBase, TupleIntJsonSerializable>newHashMap();
for (Entry<String, JsonElement> entry : jsonobject.entrySet())
{
StatBase statbase = StatList.getOneShotStat(entry.getKey());
if (statbase != null)
{
TupleIntJsonSerializable tupleintjsonserializable = new TupleIntJsonSerializable();
if (((JsonElement)entry.getValue()).isJsonPrimitive() && ((JsonElement)entry.getValue()).getAsJsonPrimitive().isNumber())
{
tupleintjsonserializable.setIntegerValue(((JsonElement)entry.getValue()).getAsInt());
}
else if (((JsonElement)entry.getValue()).isJsonObject())
{
JsonObject jsonobject1 = ((JsonElement)entry.getValue()).getAsJsonObject();
if (jsonobject1.has("value") && jsonobject1.get("value").isJsonPrimitive() && jsonobject1.get("value").getAsJsonPrimitive().isNumber())
{
tupleintjsonserializable.setIntegerValue(jsonobject1.getAsJsonPrimitive("value").getAsInt());
}
if (jsonobject1.has("progress") && statbase.getSerializableClazz() != null)
{
try
{
Constructor <? extends IJsonSerializable > constructor = statbase.getSerializableClazz().getConstructor();
IJsonSerializable ijsonserializable = constructor.newInstance();
ijsonserializable.fromJson(jsonobject1.get("progress"));
tupleintjsonserializable.setJsonSerializableValue(ijsonserializable);
}
catch (Throwable throwable)
{
LOGGER.warn("Invalid statistic progress in {}", this.statsFile, throwable);
}
}
}
map.put(statbase, tupleintjsonserializable);
}
else
{
LOGGER.warn("Invalid statistic in {}: Don't know what {} is", this.statsFile, entry.getKey());
}
}
return map;
}
}
public static String dumpJson(Map<StatBase, TupleIntJsonSerializable> p_150880_0_)
{
JsonObject jsonobject = new JsonObject();
for (Entry<StatBase, TupleIntJsonSerializable> entry : p_150880_0_.entrySet())
{
if (((TupleIntJsonSerializable)entry.getValue()).getJsonSerializableValue() != null)
{
JsonObject jsonobject1 = new JsonObject();
jsonobject1.addProperty("value", Integer.valueOf(((TupleIntJsonSerializable)entry.getValue()).getIntegerValue()));
try
{
jsonobject1.add("progress", ((TupleIntJsonSerializable)entry.getValue()).getJsonSerializableValue().getSerializableElement());
}
catch (Throwable throwable)
{
LOGGER.warn("Couldn't save statistic {}: error serializing progress", ((StatBase)entry.getKey()).getStatName(), throwable);
}
jsonobject.add((entry.getKey()).statId, jsonobject1);
}
else
{
jsonobject.addProperty((entry.getKey()).statId, Integer.valueOf(((TupleIntJsonSerializable)entry.getValue()).getIntegerValue()));
}
}
return jsonobject.toString();
}
public void markAllDirty()
{
this.dirty.addAll(this.statsData.keySet());
}
public void sendStats(EntityPlayerMP player)
{
int i = this.mcServer.getTickCounter();
Map<StatBase, Integer> map = Maps.<StatBase, Integer>newHashMap();
if (i - this.lastStatRequest > 300)
{
this.lastStatRequest = i;
for (StatBase statbase : this.getDirty())
{
map.put(statbase, Integer.valueOf(this.readStat(statbase)));
}
}
player.connection.sendPacket(new SPacketStatistics(map));
}
}