1
1
package com .irtimaled .bbor ;
2
2
3
3
import net .minecraft .client .Minecraft ;
4
- import net .minecraft .client .gui .ScaledResolution ;
5
4
import net .minecraft .client .renderer .Tessellator ;
6
5
import net .minecraft .client .renderer .WorldRenderer ;
7
6
import net .minecraft .client .settings .KeyBinding ;
8
7
import net .minecraft .entity .player .EntityPlayer ;
9
8
import net .minecraft .nbt .CompressedStreamTools ;
10
9
import net .minecraft .nbt .NBTTagCompound ;
11
10
import net .minecraft .nbt .NBTTagList ;
11
+ import net .minecraft .network .NetworkManager ;
12
12
import net .minecraft .util .AxisAlignedBB ;
13
13
import net .minecraft .util .BlockPos ;
14
14
import net .minecraft .world .ChunkCoordIntPair ;
15
15
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 ;
24
17
import org .lwjgl .input .Keyboard ;
25
18
import org .lwjgl .opengl .GL11 ;
26
19
@@ -47,8 +40,7 @@ public class ClientProxy extends CommonProxy {
47
40
private BoundingBox spawnChunksBoundingBox ;
48
41
private BoundingBox lazySpawnChunksBoundingBox ;
49
42
50
- @ SubscribeEvent
51
- public void onKeyInputEvent (InputEvent .KeyInputEvent evt ) {
43
+ public void keyPressed () {
52
44
if (hotKey .isPressed ()) {
53
45
active = !active ;
54
46
if (active )
@@ -57,37 +49,25 @@ public void onKeyInputEvent(InputEvent.KeyInputEvent evt) {
57
49
}
58
50
59
51
@ 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 );
64
56
}
65
57
66
58
@ 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 ) {
79
60
worldSpawnBoundingBox = null ;
80
61
spawnChunksBoundingBox = null ;
81
62
lazySpawnChunksBoundingBox = null ;
82
- super .setWorldData (seed , spawnX , spawnZ );
63
+ super .setWorldData (worldData );
83
64
}
84
65
85
- @ SubscribeEvent
86
- public void renderWorldLastEvent (RenderWorldLastEvent event ) {
66
+ public void render (float partialTicks ) {
87
67
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 ;
91
71
92
72
if (this .active ) {
93
73
int activeDimensionId = entityPlayer .worldObj .provider .getDimensionId ();
@@ -97,23 +77,23 @@ public void renderWorldLastEvent(RenderWorldLastEvent event) {
97
77
}
98
78
}
99
79
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 ());
108
85
}
109
86
}
110
87
111
88
private void loadLocalStructures (String host , int port ) {
89
+ Logger .info ("Looking for local structures (host:port=%s:%d)" , host , port );
112
90
String path = String .format ("BBOutlineReloaded%s%s" , File .separator , host );
113
91
File localStructuresFolder = new File (configManager .configDir , path );
92
+ Logger .info ("Looking for local structures (folder=%s)" , localStructuresFolder .getAbsolutePath ());
114
93
if (!localStructuresFolder .exists ()) {
115
94
path = String .format ("%s,%d" , path , port );
116
95
localStructuresFolder = new File (configManager .configDir , path );
96
+ Logger .info ("Looking for local structures (folder=%s)" , localStructuresFolder .getAbsolutePath ());
117
97
}
118
98
if (!localStructuresFolder .exists ())
119
99
return ;
@@ -179,12 +159,12 @@ private void loadVillageNbtFile(File localStructuresFolder, BoundingBoxCache cac
179
159
BlockPos center = new BlockPos (village .getInteger ("CX" ), village .getInteger ("CY" ), village .getInteger ("CZ" ));
180
160
int radius = village .getInteger ("Radius" );
181
161
int numVillagers = village .getInteger ("PopSize" );
182
- int numVillageDoors = village .getTagList ("Doors" , Constants . NBT . TAG_COMPOUND ).tagCount ();
162
+ int numVillageDoors = village .getTagList ("Doors" , 10 ).tagCount ();
183
163
BoundingBox boundingBox = BoundingBoxVillage .from (center , radius , numVillagers , numVillageDoors );
184
164
cache .addBoundingBox (boundingBox );
185
165
}
186
166
187
- FMLLog .info ("Loaded %s (%d villages)" , fileName , villages .length );
167
+ Logger .info ("Loaded %s (%d villages)" , fileName , villages .length );
188
168
}
189
169
190
170
private void loadStructureNbtFile (File localStructuresFolder , BoundingBoxCache cache , String fileName , Color color , String id ) {
@@ -207,14 +187,14 @@ private void loadStructureNbtFile(File localStructuresFolder, BoundingBoxCache c
207
187
}
208
188
if (boundingBoxes .size () > 0 )
209
189
++loadedStructureCount ;
210
- cache .addBoundingBox (structure , boundingBoxes );
190
+ cache .addBoundingBoxes (structure , boundingBoxes );
211
191
}
212
192
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 );
214
194
}
215
195
216
196
private NBTTagCompound [] getChildCompoundTags (NBTTagCompound parent , String key ) {
217
- NBTTagList tagList = parent .getTagList (key , Constants . NBT . TAG_COMPOUND );
197
+ NBTTagList tagList = parent .getTagList (key , 10 );
218
198
NBTTagCompound [] result = new NBTTagCompound [tagList .tagCount ()];
219
199
for (int index = 0 ; index < tagList .tagCount (); index ++) {
220
200
result [index ] = tagList .getCompoundTagAt (index );
@@ -229,8 +209,11 @@ private void loadLevelDat(File localStructuresFolder) {
229
209
return ;
230
210
231
211
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 ());
234
217
}
235
218
236
219
private NBTTagCompound loadNbtFile (File file ) {
@@ -243,11 +226,10 @@ private NBTTagCompound loadNbtFile(File file) {
243
226
return null ;
244
227
}
245
228
246
- @ SubscribeEvent
247
- public void clientDisconnectionFromServerEvent (FMLNetworkEvent .ClientDisconnectionFromServerEvent evt ) {
229
+ public void playerDisconnectedFromServer () {
248
230
active = false ;
249
231
if (configManager .keepCacheBetweenSessions .getBoolean ()) return ;
250
- initialized = false ;
232
+ worldData = null ;
251
233
worldSpawnBoundingBox = null ;
252
234
spawnChunksBoundingBox = null ;
253
235
for (BoundingBoxCache cache : boundingBoxCacheMap .values ()) {
@@ -276,21 +258,6 @@ private void renderBoundingBoxes(Map<BoundingBox, Set<BoundingBox>> map) {
276
258
GL11 .glEnable (GL11 .GL_CULL_FACE );
277
259
GL11 .glEnable (GL11 .GL_TEXTURE_2D );
278
260
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
- }
294
261
}
295
262
296
263
private void renderBoundingBoxes (Set <BoundingBox > bbList ) {
@@ -325,7 +292,11 @@ private void renderBoundingBoxes(Set<BoundingBox> bbList) {
325
292
}
326
293
327
294
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 ;
329
300
}
330
301
331
302
private void renderBoundingBox (BoundingBox bb ) {
@@ -544,16 +515,16 @@ private Set<OffsetPoint> buildPoints(BlockPos center, double radius) {
544
515
545
516
private Set <BoundingBox > getClientBoundingBoxes () {
546
517
Set <BoundingBox > boundingBoxes = new HashSet <BoundingBox >();
547
- if (initialized ) {
518
+ if (worldData != null ) {
548
519
World world = Minecraft .getMinecraft ().theWorld ;
549
520
int dimensionId = world .provider .getDimensionId ();
550
521
if (dimensionId == 0 ) {
551
522
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 () ));
554
525
}
555
526
if (configManager .drawLazySpawnChunks .getBoolean ()) ;
556
- boundingBoxes .add (getLazySpawnChunksBoundingBox (spawnX , spawnZ ));
527
+ boundingBoxes .add (getLazySpawnChunksBoundingBox (worldData . getSpawnX (), worldData . getSpawnZ () ));
557
528
558
529
if (configManager .drawSlimeChunks .getBoolean ()) {
559
530
Set <ChunkCoordIntPair > activeChunks = getActiveChunks (world );
@@ -569,7 +540,7 @@ private Set<BoundingBox> getClientBoundingBoxes() {
569
540
}
570
541
571
542
private boolean isSlimeChunk (int chunkX , int chunkZ ) {
572
- Random r = new Random (seed +
543
+ Random r = new Random (worldData . getSeed () +
573
544
(long ) (chunkX * chunkX * 4987142 ) +
574
545
(long ) (chunkX * 5947611 ) +
575
546
(long ) (chunkZ * chunkZ ) * 4392871L +
0 commit comments