Skip to content

Commit 9ee86bc

Browse files
committed
Prepare to allow JAR editting mod
1 parent 73ec5ad commit 9ee86bc

28 files changed

+726
-412
lines changed

java/com/irtimaled/bbor/BoundingBoxCache.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
public class BoundingBoxCache {
99

10-
protected ConcurrentHashMap<BoundingBox, Set<BoundingBox>> cache = new ConcurrentHashMap<BoundingBox, Set<BoundingBox>>();
10+
private Map<BoundingBox, Set<BoundingBox>> cache = new ConcurrentHashMap<BoundingBox, Set<BoundingBox>>();
1111

1212
public Map<BoundingBox, Set<BoundingBox>> getBoundingBoxes() {
1313
return cache;
@@ -20,19 +20,23 @@ public void close() {
2020
cache.clear();
2121
}
2222

23-
public void addBoundingBox(BoundingBox key, Set<BoundingBox> boundingBoxes) {
23+
public boolean isCached(BoundingBox key) {
24+
return cache.containsKey(key);
25+
}
26+
27+
public void addBoundingBoxes(BoundingBox key, Set<BoundingBox> boundingBoxes) {
2428
cache.put(key, boundingBoxes);
2529
}
2630

2731
public void addBoundingBox(BoundingBox key) {
2832
Set<BoundingBox> boundingBoxes = new HashSet<BoundingBox>();
2933
boundingBoxes.add(key);
30-
addBoundingBox(key, boundingBoxes);
34+
addBoundingBoxes(key, boundingBoxes);
3135
}
3236

3337
public void removeBoundingBox(BoundingBox key) {
3438
if (cache.containsKey(key)) {
3539
cache.remove(key);
3640
}
3741
}
38-
}
42+
}
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,44 @@
11
package com.irtimaled.bbor;
22

3-
import net.minecraftforge.common.MinecraftForge;
4-
import net.minecraftforge.fml.common.FMLCommonHandler;
5-
import net.minecraftforge.fml.common.Mod;
6-
import net.minecraftforge.fml.common.Mod.EventHandler;
7-
import net.minecraftforge.fml.common.SidedProxy;
8-
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
9-
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
10-
import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper;
3+
import net.minecraft.client.Minecraft;
4+
import net.minecraft.network.NetworkManager;
5+
import net.minecraft.world.World;
6+
import net.minecraft.world.chunk.Chunk;
117

8+
import java.io.File;
129

13-
@Mod(modid = BoundingBoxOutlineReloaded.MODID, name = BoundingBoxOutlineReloaded.NAME, version = BoundingBoxOutlineReloaded.VERSION)
1410
public class BoundingBoxOutlineReloaded {
1511

16-
public static final String MODID = "bbor";
17-
public static final String NAME = "Bounding Box Outline Reloaded";
18-
public static final String VERSION = "1.0.0-beta7";
12+
public static ClientProxy proxy;
1913

20-
private ConfigManager configManager;
21-
22-
public SimpleNetworkWrapper network;
14+
public static void init() {
15+
proxy = new ClientProxy();
16+
proxy.init(new ConfigManager(new File(Minecraft.getMinecraft().mcDataDir, "config")));
17+
}
2318

24-
@Mod.Instance()
25-
public static BoundingBoxOutlineReloaded instance;
19+
public static void chunkLoaded(Chunk chunk) {
20+
proxy.chunkLoaded(chunk);
21+
}
2622

27-
@SidedProxy(clientSide = "com.irtimaled.bbor.ClientProxy", serverSide = "com.irtimaled.bbor.CommonProxy")
28-
public static CommonProxy proxy;
23+
public static void worldLoaded(World world) {
24+
proxy.worldLoaded(world);
25+
}
2926

27+
public static void keyPressed() {
28+
proxy.keyPressed();
29+
}
3030

31-
@EventHandler
32-
public void preInit(FMLPreInitializationEvent evt) {
33-
configManager = new ConfigManager(evt.getModConfigurationDirectory());
31+
public static void render(float partialTicks) {
32+
proxy.render(partialTicks);
3433
}
3534

36-
@EventHandler
37-
public void load(FMLInitializationEvent evt) {
38-
MinecraftForge.EVENT_BUS.register(proxy);
39-
FMLCommonHandler.instance().bus().register(proxy);
35+
public static void playerConnectedToServer(NetworkManager networkManager) {
36+
proxy.playerConnectedToServer(networkManager);
37+
}
4038

41-
proxy.configManager = configManager;
42-
proxy.init();
39+
public static void playerDisconnectedFromServer() {
40+
proxy.playerDisconnectedFromServer();
4341
}
4442
}
4543

44+

java/com/irtimaled/bbor/ClientProxy.java

+43-72
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,19 @@
11
package com.irtimaled.bbor;
22

33
import net.minecraft.client.Minecraft;
4-
import net.minecraft.client.gui.ScaledResolution;
54
import net.minecraft.client.renderer.Tessellator;
65
import net.minecraft.client.renderer.WorldRenderer;
76
import net.minecraft.client.settings.KeyBinding;
87
import net.minecraft.entity.player.EntityPlayer;
98
import net.minecraft.nbt.CompressedStreamTools;
109
import net.minecraft.nbt.NBTTagCompound;
1110
import net.minecraft.nbt.NBTTagList;
11+
import net.minecraft.network.NetworkManager;
1212
import net.minecraft.util.AxisAlignedBB;
1313
import net.minecraft.util.BlockPos;
1414
import net.minecraft.world.ChunkCoordIntPair;
1515
import net.minecraft.world.World;
16-
import net.minecraftforge.client.event.RenderWorldLastEvent;
17-
import net.minecraftforge.common.util.Constants;
18-
import net.minecraftforge.fml.client.registry.ClientRegistry;
19-
import net.minecraftforge.fml.common.FMLLog;
20-
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
21-
import net.minecraftforge.fml.common.gameevent.InputEvent;
22-
import net.minecraftforge.fml.common.network.FMLNetworkEvent;
23-
import net.minecraftforge.fml.relauncher.ReflectionHelper;
16+
import org.apache.commons.lang3.ArrayUtils;
2417
import org.lwjgl.input.Keyboard;
2518
import org.lwjgl.opengl.GL11;
2619

@@ -47,8 +40,7 @@ public class ClientProxy extends CommonProxy {
4740
private BoundingBox spawnChunksBoundingBox;
4841
private BoundingBox lazySpawnChunksBoundingBox;
4942

50-
@SubscribeEvent
51-
public void onKeyInputEvent(InputEvent.KeyInputEvent evt) {
43+
public void keyPressed() {
5244
if (hotKey.isPressed()) {
5345
active = !active;
5446
if (active)
@@ -57,37 +49,25 @@ public void onKeyInputEvent(InputEvent.KeyInputEvent evt) {
5749
}
5850

5951
@Override
60-
public void init() {
61-
super.init();
62-
hotKey = new KeyBinding("key.bbor.hotKey", Keyboard.KEY_B, "key.categories.bbor");
63-
ClientRegistry.registerKeyBinding(hotKey);
52+
public void init(ConfigManager configManager) {
53+
super.init(configManager);
54+
hotKey = new KeyBinding("Toggle On/Off", Keyboard.KEY_B, "Bounding Box Outline Reloaded");
55+
Minecraft.getMinecraft().gameSettings.keyBindings = ArrayUtils.add(Minecraft.getMinecraft().gameSettings.keyBindings, hotKey);
6456
}
6557

6658
@Override
67-
protected boolean isRemotePlayer(EntityPlayer player) {
68-
if (Minecraft.getMinecraft().isSingleplayer()) {
69-
EntityPlayer singlePlayer = Minecraft.getMinecraft().thePlayer;
70-
if (singlePlayer == null)
71-
return false;
72-
return player.getGameProfile() != singlePlayer.getGameProfile();
73-
}
74-
return true;
75-
}
76-
77-
@Override
78-
public void setWorldData(long seed, int spawnX, int spawnZ) {
59+
public void setWorldData(WorldData worldData) {
7960
worldSpawnBoundingBox = null;
8061
spawnChunksBoundingBox = null;
8162
lazySpawnChunksBoundingBox = null;
82-
super.setWorldData(seed, spawnX, spawnZ);
63+
super.setWorldData(worldData);
8364
}
8465

85-
@SubscribeEvent
86-
public void renderWorldLastEvent(RenderWorldLastEvent event) {
66+
public void render(float partialTicks) {
8767
EntityPlayer entityPlayer = Minecraft.getMinecraft().thePlayer;
88-
playerX = entityPlayer.lastTickPosX + (entityPlayer.posX - entityPlayer.lastTickPosX) * (double) event.partialTicks;
89-
playerY = entityPlayer.lastTickPosY + (entityPlayer.posY - entityPlayer.lastTickPosY) * (double) event.partialTicks;
90-
playerZ = entityPlayer.lastTickPosZ + (entityPlayer.posZ - entityPlayer.lastTickPosZ) * (double) event.partialTicks;
68+
playerX = entityPlayer.lastTickPosX + (entityPlayer.posX - entityPlayer.lastTickPosX) * (double) partialTicks;
69+
playerY = entityPlayer.lastTickPosY + (entityPlayer.posY - entityPlayer.lastTickPosY) * (double) partialTicks;
70+
playerZ = entityPlayer.lastTickPosZ + (entityPlayer.posZ - entityPlayer.lastTickPosZ) * (double) partialTicks;
9171

9272
if (this.active) {
9373
int activeDimensionId = entityPlayer.worldObj.provider.getDimensionId();
@@ -97,23 +77,23 @@ public void renderWorldLastEvent(RenderWorldLastEvent event) {
9777
}
9878
}
9979

100-
@SubscribeEvent
101-
public void clientConnectionToServerEvent(FMLNetworkEvent.ClientConnectedToServerEvent evt) {
102-
if (!evt.isLocal) {
103-
SocketAddress remoteAddress = evt.manager.getRemoteAddress();
104-
if (remoteAddress instanceof InetSocketAddress) {
105-
InetSocketAddress socketAddress = (InetSocketAddress) remoteAddress;
106-
loadLocalStructures(socketAddress.getHostString(), socketAddress.getPort());
107-
}
80+
public void playerConnectedToServer(NetworkManager networkManager) {
81+
SocketAddress remoteAddress = networkManager.getRemoteAddress();
82+
if (remoteAddress instanceof InetSocketAddress) {
83+
InetSocketAddress socketAddress = (InetSocketAddress) remoteAddress;
84+
loadLocalStructures(socketAddress.getHostName(), socketAddress.getPort());
10885
}
10986
}
11087

11188
private void loadLocalStructures(String host, int port) {
89+
Logger.info("Looking for local structures (host:port=%s:%d)", host, port);
11290
String path = String.format("BBOutlineReloaded%s%s", File.separator, host);
11391
File localStructuresFolder = new File(configManager.configDir, path);
92+
Logger.info("Looking for local structures (folder=%s)", localStructuresFolder.getAbsolutePath());
11493
if (!localStructuresFolder.exists()) {
11594
path = String.format("%s,%d", path, port);
11695
localStructuresFolder = new File(configManager.configDir, path);
96+
Logger.info("Looking for local structures (folder=%s)", localStructuresFolder.getAbsolutePath());
11797
}
11898
if (!localStructuresFolder.exists())
11999
return;
@@ -179,12 +159,12 @@ private void loadVillageNbtFile(File localStructuresFolder, BoundingBoxCache cac
179159
BlockPos center = new BlockPos(village.getInteger("CX"), village.getInteger("CY"), village.getInteger("CZ"));
180160
int radius = village.getInteger("Radius");
181161
int numVillagers = village.getInteger("PopSize");
182-
int numVillageDoors = village.getTagList("Doors", Constants.NBT.TAG_COMPOUND).tagCount();
162+
int numVillageDoors = village.getTagList("Doors", 10).tagCount();
183163
BoundingBox boundingBox = BoundingBoxVillage.from(center, radius, numVillagers, numVillageDoors);
184164
cache.addBoundingBox(boundingBox);
185165
}
186166

187-
FMLLog.info("Loaded %s (%d villages)", fileName, villages.length);
167+
Logger.info("Loaded %s (%d villages)", fileName, villages.length);
188168
}
189169

190170
private void loadStructureNbtFile(File localStructuresFolder, BoundingBoxCache cache, String fileName, Color color, String id) {
@@ -207,14 +187,14 @@ private void loadStructureNbtFile(File localStructuresFolder, BoundingBoxCache c
207187
}
208188
if (boundingBoxes.size() > 0)
209189
++loadedStructureCount;
210-
cache.addBoundingBox(structure, boundingBoxes);
190+
cache.addBoundingBoxes(structure, boundingBoxes);
211191
}
212192

213-
FMLLog.info("Loaded %s (%d structures with type %s)", fileName, loadedStructureCount, id);
193+
Logger.info("Loaded %s (%d structures with type %s)", fileName, loadedStructureCount, id);
214194
}
215195

216196
private NBTTagCompound[] getChildCompoundTags(NBTTagCompound parent, String key) {
217-
NBTTagList tagList = parent.getTagList(key, Constants.NBT.TAG_COMPOUND);
197+
NBTTagList tagList = parent.getTagList(key, 10);
218198
NBTTagCompound[] result = new NBTTagCompound[tagList.tagCount()];
219199
for (int index = 0; index < tagList.tagCount(); index++) {
220200
result[index] = tagList.getCompoundTagAt(index);
@@ -229,8 +209,11 @@ private void loadLevelDat(File localStructuresFolder) {
229209
return;
230210

231211
NBTTagCompound data = nbt.getCompoundTag("Data");
232-
setWorldData(data.getLong("RandomSeed"), data.getInteger("SpawnX"), data.getInteger("SpawnZ"));
233-
FMLLog.info("Loaded level.dat (seed: %d, spawn: %d,%d)", seed, spawnX, spawnZ);
212+
long seed = data.getLong("RandomSeed");
213+
int spawnX = data.getInteger("SpawnX");
214+
int spawnZ = data.getInteger("SpawnZ");
215+
setWorldData(new WorldData(seed, spawnX, spawnZ));
216+
Logger.info("Loaded level.dat (seed: %d, spawn: %d,%d)", worldData.getSeed(), worldData.getSpawnX(), worldData.getSpawnZ());
234217
}
235218

236219
private NBTTagCompound loadNbtFile(File file) {
@@ -243,11 +226,10 @@ private NBTTagCompound loadNbtFile(File file) {
243226
return null;
244227
}
245228

246-
@SubscribeEvent
247-
public void clientDisconnectionFromServerEvent(FMLNetworkEvent.ClientDisconnectionFromServerEvent evt) {
229+
public void playerDisconnectedFromServer() {
248230
active = false;
249231
if (configManager.keepCacheBetweenSessions.getBoolean()) return;
250-
initialized = false;
232+
worldData = null;
251233
worldSpawnBoundingBox = null;
252234
spawnChunksBoundingBox = null;
253235
for (BoundingBoxCache cache : boundingBoxCacheMap.values()) {
@@ -276,21 +258,6 @@ private void renderBoundingBoxes(Map<BoundingBox, Set<BoundingBox>> map) {
276258
GL11.glEnable(GL11.GL_CULL_FACE);
277259
GL11.glEnable(GL11.GL_TEXTURE_2D);
278260
GL11.glDisable(GL11.GL_BLEND);
279-
280-
if (configManager.showDebugInfo.getBoolean()) {
281-
Minecraft mc = Minecraft.getMinecraft();
282-
ScaledResolution var5 = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
283-
int screenWidth = var5.getScaledWidth();
284-
mc.entityRenderer.setupOverlayRendering();
285-
int count = 0;
286-
for (BoundingBox bb : map.keySet()) {
287-
count += map.get(bb).size();
288-
}
289-
String debug = String.format("%d/%d", map.keySet().size(), count);
290-
int width = screenWidth - mc.fontRendererObj.getStringWidth(debug);
291-
292-
mc.fontRendererObj.drawStringWithShadow(debug, width - 2, 2, 16777215);
293-
}
294261
}
295262

296263
private void renderBoundingBoxes(Set<BoundingBox> bbList) {
@@ -325,7 +292,11 @@ private void renderBoundingBoxes(Set<BoundingBox> bbList) {
325292
}
326293

327294
private Set getActiveChunks(World world) {
328-
return ReflectionHelper.getPrivateValue(World.class, world, 33);
295+
Set result = ReflectionHelper.getPrivateValue(World.class, world, 32, Set.class);
296+
if (result == null) {
297+
result = ReflectionHelper.getPrivateValue(World.class, world, 33, Set.class);
298+
}
299+
return result;
329300
}
330301

331302
private void renderBoundingBox(BoundingBox bb) {
@@ -544,16 +515,16 @@ private Set<OffsetPoint> buildPoints(BlockPos center, double radius) {
544515

545516
private Set<BoundingBox> getClientBoundingBoxes() {
546517
Set<BoundingBox> boundingBoxes = new HashSet<BoundingBox>();
547-
if (initialized) {
518+
if (worldData != null) {
548519
World world = Minecraft.getMinecraft().theWorld;
549520
int dimensionId = world.provider.getDimensionId();
550521
if (dimensionId == 0) {
551522
if (configManager.drawWorldSpawn.getBoolean()) {
552-
boundingBoxes.add(getWorldSpawnBoundingBox(spawnX, spawnZ));
553-
boundingBoxes.add(getSpawnChunksBoundingBox(spawnX, spawnZ));
523+
boundingBoxes.add(getWorldSpawnBoundingBox(worldData.getSpawnX(), worldData.getSpawnZ()));
524+
boundingBoxes.add(getSpawnChunksBoundingBox(worldData.getSpawnX(), worldData.getSpawnZ()));
554525
}
555526
if (configManager.drawLazySpawnChunks.getBoolean()) ;
556-
boundingBoxes.add(getLazySpawnChunksBoundingBox(spawnX, spawnZ));
527+
boundingBoxes.add(getLazySpawnChunksBoundingBox(worldData.getSpawnX(), worldData.getSpawnZ()));
557528

558529
if (configManager.drawSlimeChunks.getBoolean()) {
559530
Set<ChunkCoordIntPair> activeChunks = getActiveChunks(world);
@@ -569,7 +540,7 @@ private Set<BoundingBox> getClientBoundingBoxes() {
569540
}
570541

571542
private boolean isSlimeChunk(int chunkX, int chunkZ) {
572-
Random r = new Random(seed +
543+
Random r = new Random(worldData.getSeed() +
573544
(long) (chunkX * chunkX * 4987142) +
574545
(long) (chunkX * 5947611) +
575546
(long) (chunkZ * chunkZ) * 4392871L +

0 commit comments

Comments
 (0)