aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlkalus <3060479+draknyte1@users.noreply.github.com>2018-10-25 23:57:04 +0100
committerAlkalus <3060479+draknyte1@users.noreply.github.com>2018-10-25 23:57:04 +0100
commit7e09b5381593a23aeff0a0bab03926a8c1e2b87d (patch)
treec815e6de403ede869dde352c9d62eddab73b8551
parente617124ba171bdf0a5aa8165c63715634de3f3c3 (diff)
downloadGT5-Unofficial-7e09b5381593a23aeff0a0bab03926a8c1e2b87d.tar.gz
GT5-Unofficial-7e09b5381593a23aeff0a0bab03926a8c1e2b87d.tar.bz2
GT5-Unofficial-7e09b5381593a23aeff0a0bab03926a8c1e2b87d.zip
+ Added 'DebugChunks' function.
+ Added ASM Config.
-rw-r--r--src/Java/gtPlusPlus/GTplusplus.java2
-rw-r--r--src/Java/gtPlusPlus/core/commands/CommandDebugChunks.java152
-rw-r--r--src/Java/gtPlusPlus/core/commands/CommandMath.java145
-rw-r--r--src/Java/gtPlusPlus/preloader/ChunkDebugger.java8
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/AsmConfig.java83
-rw-r--r--src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java17
6 files changed, 265 insertions, 142 deletions
diff --git a/src/Java/gtPlusPlus/GTplusplus.java b/src/Java/gtPlusPlus/GTplusplus.java
index 28870f3d64..a664555cf2 100644
--- a/src/Java/gtPlusPlus/GTplusplus.java
+++ b/src/Java/gtPlusPlus/GTplusplus.java
@@ -21,6 +21,7 @@ import gregtech.api.util.GT_Recipe.GT_Recipe_Map;
import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.api.objects.data.AutoMap;
import gtPlusPlus.api.objects.data.Pair;
+import gtPlusPlus.core.commands.CommandDebugChunks;
import gtPlusPlus.core.commands.CommandMath;
import gtPlusPlus.core.common.CommonProxy;
import gtPlusPlus.core.config.ConfigHandler;
@@ -175,6 +176,7 @@ public class GTplusplus implements ActionListener {
public synchronized void serverStarting(final FMLServerStartingEvent event) {
mChunkLoading.serverStarting(event);
event.registerServerCommand(new CommandMath());
+ event.registerServerCommand(new CommandDebugChunks());
if (LoadedMods.Thaumcraft) {
event.registerServerCommand(new CommandDumpAspects());
}
diff --git a/src/Java/gtPlusPlus/core/commands/CommandDebugChunks.java b/src/Java/gtPlusPlus/core/commands/CommandDebugChunks.java
new file mode 100644
index 0000000000..8e86bcdcd6
--- /dev/null
+++ b/src/Java/gtPlusPlus/core/commands/CommandDebugChunks.java
@@ -0,0 +1,152 @@
+package gtPlusPlus.core.commands;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import net.minecraft.command.ICommand;
+import net.minecraft.command.ICommandSender;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.world.World;
+
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.Pair;
+import gtPlusPlus.core.util.minecraft.PlayerUtils;
+import gtPlusPlus.preloader.ChunkDebugger;
+import gtPlusPlus.preloader.asm.AsmConfig;
+
+
+public class CommandDebugChunks implements ICommand
+{
+ private final List<String> aliases;
+
+ protected String fullEntityName;
+ protected Entity conjuredEntity;
+
+ public CommandDebugChunks(){
+ this.aliases = new ArrayList<>();
+ aliases.add("debugchunks");
+ aliases.add("DC");
+ }
+
+ @Override
+ public int compareTo(final Object o){
+ return 0;
+
+ }
+
+ @Override
+ public String getCommandName(){
+ return "DebugChunks";
+
+ }
+
+ @Override
+ public String getCommandUsage(final ICommandSender var1){
+ return "/DebugChunks";
+
+ }
+
+ @Override
+ public List<String> getCommandAliases(){
+ return this.aliases;
+
+ }
+
+ @Override
+ public void processCommand(final ICommandSender S, final String[] argString){
+ Logger.INFO("Debug Command");
+
+ final World W = S.getEntityWorld();
+ final EntityPlayer P = CommandUtils.getPlayer(S);
+
+ if (!AsmConfig.enableChunkDebugging) {
+ PlayerUtils.messagePlayer(P, "Chunk Debugging is disabled.");
+ return;
+ }
+
+
+ Map<String, Integer> aTicketCounter = new LinkedHashMap<String, Integer>();
+ for (Pair<String, String> f : ChunkDebugger.mChunkTicketsMap.values()) {
+ String aMod = f.getKey();
+ String aDim = f.getValue();
+ if (aMod != null) {
+ if (aTicketCounter.containsKey(aMod)) {
+ int aModTicketCount = aTicketCounter.get(aMod);
+ aModTicketCount++;
+ aTicketCounter.put(aMod, aModTicketCount);
+ }
+ else {
+ aTicketCounter.put(aMod, 1);
+ }
+ }
+ }
+ if (aTicketCounter.isEmpty()) {
+ PlayerUtils.messagePlayer(P, "No forced chunk tickets active.");
+ }
+ for (String x : aTicketCounter.keySet()) {
+ PlayerUtils.messagePlayer(P, x+" has "+aTicketCounter.get(x)+" tickets active.");
+ }
+
+
+ Map<String, Integer> aChunkCounter = new LinkedHashMap<String, Integer>();
+ for (Pair<String, String> f : ChunkDebugger.mChunksLoadedByModsMap.values()) {
+ String aMod = f.getKey();
+ String aDim = f.getValue();
+ if (aMod == null) {
+ aMod = "Bad ModId";
+ }
+
+ if (aMod != null) {
+ //PlayerUtils.messagePlayer(P, aMod+" has "+aDim+" active.");
+ if (aChunkCounter.containsKey(aMod)) {
+ int aModTicketCount = aChunkCounter.get(aMod);
+ aModTicketCount = aModTicketCount + 1;
+ aChunkCounter.put(aMod, aModTicketCount);
+ Logger.INFO("Counting +1 for "+aMod+", total of "+aModTicketCount);
+ }
+ else {
+ aChunkCounter.put(aMod, 1);
+ Logger.INFO("Counting +1 for "+aMod);
+ }
+ }
+ }
+ if (aChunkCounter.isEmpty()) {
+ PlayerUtils.messagePlayer(P, "No chunks force loaded.");
+ }
+ for (String x : aChunkCounter.keySet()) {
+ PlayerUtils.messagePlayer(P, x+" has "+aChunkCounter.get(x)+" chunks active.");
+ }
+
+ }
+
+ @Override
+ public boolean canCommandSenderUseCommand(final ICommandSender var1){
+ final EntityPlayer P = CommandUtils.getPlayer(var1);
+ if (P == null){
+ return false;
+ }
+ if (PlayerUtils.isPlayerOP(P)) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public List<?> addTabCompletionOptions(final ICommandSender var1, final String[] var2){
+ return new ArrayList<>();
+ }
+
+ @Override
+ public boolean isUsernameIndex(final String[] var1, final int var2){
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public boolean playerUsesCommand(final World W, final EntityPlayer P, final int cost){
+ return true;
+ }
+
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/core/commands/CommandMath.java b/src/Java/gtPlusPlus/core/commands/CommandMath.java
index 8772af641b..5ccfb3397f 100644
--- a/src/Java/gtPlusPlus/core/commands/CommandMath.java
+++ b/src/Java/gtPlusPlus/core/commands/CommandMath.java
@@ -1,7 +1,9 @@
package gtPlusPlus.core.commands;
import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
import net.minecraft.command.ICommand;
import net.minecraft.command.ICommandSender;
@@ -10,7 +12,11 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.api.objects.data.Pair;
+import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.util.minecraft.MiningUtils;
+import gtPlusPlus.core.util.minecraft.PlayerUtils;
+import gtPlusPlus.preloader.ChunkDebugger;
public class CommandMath implements ICommand
@@ -52,147 +58,14 @@ public class CommandMath implements ICommand
@Override
public void processCommand(final ICommandSender S, final String[] argString){
+ Logger.INFO("Debug Command");
final World W = S.getEntityWorld();
final EntityPlayer P = CommandUtils.getPlayer(S);
if (P.getDisplayName().equalsIgnoreCase("draknyte1")) {
Logger.INFO("[Bedrock Miner] OreType Scan");
MiningUtils.iterateAllOreTypes();
- }
+ }
- /*if (!W.isRemote && P != null){
- if (P.getDisplayName().toLowerCase().equals("draknyte1") || P.getCommandSenderName().toLowerCase().equals("draknyte1")) {
- String[] prefixes = new String[] {
- "ingot",
- "plate",
- "dust",
- "gearGt",
- "block",
- "ore"
- };
- String[] loots = new String[] {
- "Iron",
- "Iron",
- "Iron",
- "Copper",
- "Copper",
- "Copper",
- "Tin",
- "Mica",
- "Steel",
- "Steel",
- "Steel",
- "Invar",
- "Titanium",
- "Gold",
- "Silver",
- "Lead",
- "Aluminium"
- };
- AutoMap<EntityItem> itemEntities = new AutoMap<EntityItem>();
- for (String g : prefixes) {
- for (String s : loots) {
- itemEntities.put(new EntityItem(W, P.posX, P.posY, P.posZ, ItemUtils.getItemStackOfAmountFromOreDictNoBroken(g+s, 64)));
- }}
- for (EntityItem e : itemEntities.values()) {
- e.lifespan = 30000;
- }
-
- }
- }*/
-
- /*else
-
- {
-
- System.out.println("Processing on Server side - Home Teleport engaged by: "+P.getDisplayName());
-
- final int XP_TOTAL = P.experienceTotal;
- Logger.WARNING("Total Xp:" + XP_TOTAL);
- final ChunkCoordinates X = P.getPlayerCoordinates();
- Logger.WARNING("Player Location: "+X);
- ChunkCoordinates Y = null;
- Logger.WARNING("Bed Location: "+Y);
- try {
- if (P.getBedLocation(0) == null){
- Y = W.getSpawnPoint();
- Logger.WARNING("Spawn Location: "+Y);
- }
- else if (P.getBedLocation(0) != null){
- Y = P.getBedLocation(0);
- Logger.WARNING("Bed Location: "+Y);
- }
- else {
- Y = W.getSpawnPoint();
- Logger.WARNING("Spawn Location: "+Y);
- }
- }
- catch(final NullPointerException e) {
- PlayerUtils.messagePlayer(P, "You do not have a spawn, so...");
- }
- if (Y == null) {
- Y = W.getSpawnPoint();
- Logger.WARNING("Spawn Location: "+Y);
- }
-
- final int x1 = X.posX;
- Logger.WARNING("X1: "+x1);
- final int x2 = Y.posX;
- Logger.WARNING("X2: "+x2);
- final int y1 = X.posY;
- Logger.WARNING("Y1: "+y1);
- final int y2 = Y.posY;
- Logger.WARNING("Y2: "+y2);
- final int z1 = X.posZ;
- Logger.WARNING("Z1: "+z1);
- final int z2 = Y.posZ;
- Logger.WARNING("Z2: "+z2);
-
-
- final double d = Math.sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1))+((z2-z1)*(z2-z1)));
- final String xpCost = String.valueOf((int)(d*0.15));
-
- Logger.WARNING("d:" + d);
- Logger.WARNING("-----------------------------------------");
- Logger.WARNING("Actual math formulae");
- Logger.WARNING(String.valueOf(d));
- Logger.WARNING("-----------------------------------------");
- Logger.WARNING("Xp Cost based on answer B.");
- Logger.WARNING(String.valueOf(d*0.15) + " | " + String.valueOf(xpCost));
- Logger.WARNING("-----------------------------------------");
- Logger.WARNING("Xp Total");
- Logger.WARNING(String.valueOf(XP_TOTAL));
- Logger.WARNING("-----------------------------------------");
-
-
-
- if ((XP_TOTAL-Float.valueOf(xpCost)) > 0){
- final EntityXPOrb E = new EntityXPOrb(W, P.posX, (P.posY + 1.62D) - P.yOffset, P.posZ, 1);
- //E.moveTowards((double) Y.posX + 0.5D, (int) Y.posY + 3, (double) Y.posZ + 0.5D);
- E.setVelocity(Y.posX + 0.5D, Y.posY + 0.1, Y.posZ + 0.5D);
- W.spawnEntityInWorld(E);
- W.playAuxSFXAtEntity((EntityPlayer) null, 1002, (int) P.posX, (int) P.posY, (int) P.posZ, 0);
- P.setPositionAndUpdate(x2, y2+1, z2);
-
- //gregtech.api.util.GT_Utility.sendChatToPlayer(P, "Movement | X:"+x2+" | Y:"+y2+" | Z:"+z2);
- gregtech.api.util.GT_Utility.sendChatToPlayer(P, "Distance Traveled | "+String.valueOf((int)(d)) + " Blocks & " + xpCost + "xp");
- gregtech.api.util.GT_Utility.sendChatToPlayer(P, "You suddenly feel at home.");
- P.experienceTotal = (int) (XP_TOTAL-Float.valueOf(xpCost));
- if (!xpCost.equals("0") && (Float.valueOf(xpCost) > 0)){
- gregtech.api.util.GT_Utility.sendChatToPlayer(P, "...At the loss of "+xpCost+" xp.");
- }
- else if (xpCost.equals("0")){
- gregtech.api.util.GT_Utility.sendChatToPlayer(P, "...At the loss of very little xp.");
- }
- else {
- gregtech.api.util.GT_Utility.sendChatToPlayer(P, "Something went wrong with the math, have this one on the house. :)");
- }
- }
-
- else {
- gregtech.api.util.GT_Utility.sendChatToPlayer(P, "You don't feel you're able to do this yet.");
- }
-
- }*/
}
@Override
@@ -201,7 +74,7 @@ public class CommandMath implements ICommand
if (P == null){
return false;
}
- if (P.getDisplayName().toLowerCase().equals("draknyte1") || P.getCommandSenderName().toLowerCase().equals("draknyte1")) {
+ if (P.getDisplayName().toLowerCase().equals("draknyte1") || P.getCommandSenderName().toLowerCase().equals("draknyte1") || CORE.DEVENV) {
return true;
}
return false;
diff --git a/src/Java/gtPlusPlus/preloader/ChunkDebugger.java b/src/Java/gtPlusPlus/preloader/ChunkDebugger.java
index 565617a4aa..06964d31fa 100644
--- a/src/Java/gtPlusPlus/preloader/ChunkDebugger.java
+++ b/src/Java/gtPlusPlus/preloader/ChunkDebugger.java
@@ -27,7 +27,11 @@ public class ChunkDebugger {
public static void removeTicketFromCache(Ticket aTicket) {
Pair<String, String> aPair = mChunkTicketsMap.get(aTicket.hashCode());
- Logger.REFLECTION("Ticket released by "+aTicket.getModId()+" for dimension "+aPair.getValue());
+ String aKey = aPair.getKey();
+ if (aKey == null) {
+ aKey = "Invalid ModId";
+ }
+ Logger.REFLECTION("Ticket released by "+aKey+" for dimension "+aTicket.world.provider.dimensionId);
mChunkTicketsMap.remove(aTicket.hashCode());
}
@@ -42,7 +46,7 @@ public class ChunkDebugger {
String aKey = aPair.getKey();
String aValue = aPair.getValue();
if (aKey != null && aValue != null) {
- Logger.REFLECTION("Chunk Loaded by "+aKey+" at position "+aChunk.toString()+" for dimension "+aValue);
+ Logger.REFLECTION("Chunk Unloaded by "+aKey+" at position "+aChunk.toString()+"");
}
mChunksLoadedByModsMap.remove(aChunk.toString());
}
diff --git a/src/Java/gtPlusPlus/preloader/asm/AsmConfig.java b/src/Java/gtPlusPlus/preloader/asm/AsmConfig.java
new file mode 100644
index 0000000000..81ebbd1309
--- /dev/null
+++ b/src/Java/gtPlusPlus/preloader/asm/AsmConfig.java
@@ -0,0 +1,83 @@
+package gtPlusPlus.preloader.asm;
+
+import cpw.mods.fml.common.FMLLog;
+import java.io.File;
+import java.util.ArrayList;
+import net.minecraftforge.common.config.Configuration;
+import net.minecraftforge.common.config.Property;
+import org.apache.logging.log4j.Level;
+
+public class AsmConfig {
+
+ public static boolean loaded;
+ public static Configuration config;
+
+ public static boolean enableTiConFluidLighting;
+ public static boolean enableGtTooltipFix;
+ public static boolean enableGtNbtFix;
+ public static boolean enableChunkDebugging;
+
+ public AsmConfig(File file) {
+ if (!loaded) {
+ config = new Configuration(file);
+ syncConfig(true);
+ }
+
+ }
+
+ public static void syncConfig(boolean load) {
+ ArrayList<String> propOrder = new ArrayList<String>();
+ ArrayList<String> propOrderDebug = new ArrayList<String>();
+
+ try {
+ if (!config.isChild && load) {
+ config.load();
+ }
+
+ Property prop;
+
+ //Debug
+ prop = config.get("debug", "enableChunkDebugging", false);
+ prop.comment = "Enable/Disable Chunk Debugging Features, Must Be enabled on Client and Server.";
+ prop.setLanguageKey("gtpp.enableChunkDebugging").setRequiresMcRestart(true);
+ enableChunkDebugging = prop.getBoolean(true);
+ propOrderDebug.add(prop.getName());
+
+ prop = config.get("debug", "enableGtNbtFix", true);
+ prop.comment = "Enable/Disable GT NBT Persistency Fix";
+ prop.setLanguageKey("gtpp.enableGtNbtFix").setRequiresMcRestart(true);
+ enableGtNbtFix = prop.getBoolean(true);
+ propOrderDebug.add(prop.getName());
+
+
+ //General Features
+ prop = config.get("general", "enableTiConFluidLighting", true);
+ prop.comment = "Enable/Disable Brightness Visuals for Tinkers Fluids, only required on the Client.";
+ prop.setLanguageKey("gtpp.enableTiConFluidLighting").setRequiresMcRestart(true);
+ enableTiConFluidLighting = prop.getBoolean(true);
+ propOrder.add(prop.getName());
+
+ prop = config.get("general", "enableGtTooltipFix", true);
+ prop.comment = "Enable/Disable Custom GT Tooltips";
+ prop.setLanguageKey("gtpp.enableGtTooltipFix").setRequiresMcRestart(true);
+ enableGtTooltipFix = prop.getBoolean(true);
+ propOrder.add(prop.getName());
+
+
+ config.setCategoryPropertyOrder("general", propOrder);
+ config.setCategoryPropertyOrder("debug", propOrderDebug);
+ if (config.hasChanged()) {
+ config.save();
+ }
+
+ System.out.println("[GT++ ASM] Chunk Debugging - Enabled: "+enableChunkDebugging);
+ System.out.println("[GT++ ASM] Gt Nbt Fix - Enabled: "+enableGtNbtFix);
+ System.out.println("[GT++ ASM] TiCon Fluid Lighting - Enabled: "+enableTiConFluidLighting);
+ System.out.println("[GT++ ASM] Gt Tooltip Fix - Enabled: "+enableGtTooltipFix);
+
+ } catch (Exception var3) {
+ FMLLog.log(Level.ERROR, var3, "GT++ ASM has a problem loading it's config", new Object[0]);
+ }
+
+ }
+} \ No newline at end of file
diff --git a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
index 1400d0d49b..6954e286ae 100644
--- a/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
+++ b/src/Java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java
@@ -1,5 +1,6 @@
package gtPlusPlus.preloader.asm.transformers;
+import java.io.File;
import java.io.IOException;
import org.apache.logging.log4j.Level;
import org.objectweb.asm.ClassReader;
@@ -8,13 +9,21 @@ import org.objectweb.asm.ClassWriter;
import cpw.mods.fml.relauncher.CoreModManager;
import cpw.mods.fml.relauncher.FMLRelaunchLog;
import cpw.mods.fml.relauncher.ReflectionHelper;
+import galaxyspace.SolarSystem.core.configs.GSConfigDimensions;
import net.minecraft.launchwrapper.IClassTransformer;
import net.minecraft.launchwrapper.Launch;
+import gtPlusPlus.core.util.Utils;
+import gtPlusPlus.preloader.asm.AsmConfig;
import gtPlusPlus.preloader.asm.transformers.Preloader_ClassTransformer.OreDictionaryVisitor;
public class Preloader_Transformer_Handler implements IClassTransformer {
private final boolean mEnabled = false;
+ public static final AsmConfig mConfig;
+ static {
+ mConfig = new AsmConfig(new File("config/GTplusplus/asm.cfg"));
+ System.out.println("Asm Config Location: "+mConfig.config.getConfigFile().getAbsolutePath());
+ }
public byte[] transform(String name, String transformedName, byte[] basicClass) {
@@ -40,7 +49,7 @@ public class Preloader_Transformer_Handler implements IClassTransformer {
}
//Enable mapping of Tickets and loaded chunks. - Forge
- if (transformedName.equals("net.minecraftforge.common.ForgeChunkManager")) {
+ if (transformedName.equals("net.minecraftforge.common.ForgeChunkManager") && mConfig.enableChunkDebugging) {
FMLRelaunchLog.log("[GT++ ASM] Chunkloading Patch", Level.INFO, "Transforming %s", transformedName);
return new ClassTransformer_Forge_ChunkLoading(basicClass, obfuscated).getWriter().toByteArray();
}
@@ -59,7 +68,7 @@ public class Preloader_Transformer_Handler implements IClassTransformer {
}
// Fix Tinkers Fluids
- if (transformedName.equals("tconstruct.smeltery.blocks.TConstructFluid")) {
+ if (transformedName.equals("tconstruct.smeltery.blocks.TConstructFluid") && mConfig.enableTiConFluidLighting) {
FMLRelaunchLog.log("[GT++ ASM] Bright Fluids", Level.INFO, "Transforming %s", transformedName);
return new ClassTransformer_TiConFluids("getLightValue", obfuscated, basicClass).getWriter().toByteArray();
}
@@ -79,12 +88,12 @@ public class Preloader_Transformer_Handler implements IClassTransformer {
}
//Fix GT NBT Persistency issue
- if (transformedName.equals("gregtech.common.blocks.GT_Block_Machines")) {
+ if (transformedName.equals("gregtech.common.blocks.GT_Block_Machines") && mConfig.enableGtNbtFix) {
FMLRelaunchLog.log("[GT++ ASM] Gregtech NBT Persistency Patch", Level.INFO, "Transforming %s", transformedName);
return new ClassTransformer_GT_BlockMachines_NBT(basicClass, obfuscated).getWriter().toByteArray();
}
//Patching Meta Tile Tooltips
- if (transformedName.equals("gregtech.common.blocks.GT_Item_Machines")) {
+ if (transformedName.equals("gregtech.common.blocks.GT_Item_Machines") && mConfig.enableGtTooltipFix) {
FMLRelaunchLog.log("[GT++ ASM] Gregtech Tooltip Patch", Level.INFO, "Transforming %s", transformedName);
return new ClassTransformer_GT_ItemMachines_Tooltip(basicClass, obfuscated).getWriter().toByteArray();
}