diff options
author | Alkalus <3060479+draknyte1@users.noreply.github.com> | 2018-10-25 23:57:04 +0100 |
---|---|---|
committer | Alkalus <3060479+draknyte1@users.noreply.github.com> | 2018-10-25 23:57:04 +0100 |
commit | 7e09b5381593a23aeff0a0bab03926a8c1e2b87d (patch) | |
tree | c815e6de403ede869dde352c9d62eddab73b8551 | |
parent | e617124ba171bdf0a5aa8165c63715634de3f3c3 (diff) | |
download | GT5-Unofficial-7e09b5381593a23aeff0a0bab03926a8c1e2b87d.tar.gz GT5-Unofficial-7e09b5381593a23aeff0a0bab03926a8c1e2b87d.tar.bz2 GT5-Unofficial-7e09b5381593a23aeff0a0bab03926a8c1e2b87d.zip |
+ Added 'DebugChunks' function.
+ Added ASM Config.
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(); } |