Skip to content

Commit b27808d

Browse files
Merge remote-tracking branch 'origin/1.14.4-forge' into 1.15.2-forge
2 parents f63c01e + 7f4156f commit b27808d

6 files changed

Lines changed: 47 additions & 21 deletions

File tree

src/main/java/cam72cam/mod/event/CommonEvents.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ public static void onEntityTransfer(EntityEvent.EnteringChunk event) {
110110
ModdedEntity modded = (ModdedEntity) event.getEntity();
111111
cam72cam.mod.world.World.get(modded.world).tracker
112112
.move(modded,
113+
//Don't calculate Y in 1.16- as no corresponding event posted
113114
ChunkPos.asLong(event.getOldChunkX(), 0, event.getOldChunkZ()),
114115
ChunkPos.asLong(event.getNewChunkX(), 0, event.getNewChunkZ()));
115116
}

src/main/java/cam72cam/mod/gui/screen/IScreen.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,19 @@
44
import cam72cam.mod.input.Keyboard;
55
import cam72cam.mod.render.opengl.RenderState;
66

7+
import javax.annotation.Nullable;
8+
79
public interface IScreen {
810
/** Called when screen is initially constructed */
911
void init(IScreenBuilder screen);
1012

1113
@Deprecated
1214
default void onEnterKey(IScreenBuilder builder) { }
13-
/** Called when any key is pressed outside textfield */
14-
default void onKeyType(IScreenBuilder builder, Keyboard.KeyCode keyCode){
15+
/**
16+
* Called when any key is pressed outside textfield
17+
* @param keyCode The typed key's code, or null if not recognizable
18+
* */
19+
default void onKeyType(IScreenBuilder builder, @Nullable Keyboard.KeyCode keyCode){
1520
if (keyCode == Keyboard.KeyCode.NUMPADENTER || keyCode == Keyboard.KeyCode.RETURN) {
1621
onEnterKey(builder);
1722
}

src/main/java/cam72cam/mod/input/Keyboard.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@
99
import net.minecraftforge.fml.client.registry.ClientRegistry;
1010
import org.lwjgl.glfw.GLFW;
1111

12+
import javax.annotation.Nullable;
13+
1214
public class Keyboard {
15+
private static final Int2ObjectArrayMap<KeyCode> keycodes = new Int2ObjectArrayMap<>();
16+
1317
public enum KeyCode {
1418
ESCAPE(GLFW.GLFW_KEY_ESCAPE),
1519
NUM1(GLFW.GLFW_KEY_1),
@@ -127,15 +131,13 @@ public enum KeyCode {
127131
keycodes.put(code, this);
128132
}
129133

130-
public static KeyCode of(int code) {
134+
public static @Nullable KeyCode of(int code) {
131135
return keycodes.get(code);
132136
}
133137
}
134138

135-
private static final Int2ObjectArrayMap<KeyCode> keycodes = new Int2ObjectArrayMap<>();
136-
137-
@OnlyIn(Dist.CLIENT)
138139
/** Registers a keybind */
140+
@OnlyIn(Dist.CLIENT)
139141
public static void registerKey(String name, KeyCode keyCode, String category, Runnable handler) {
140142
if (Minecraft.getInstance() == null) {
141143
System.out.println("Shake hands with danger!");

src/main/java/cam72cam/mod/mixin/feat/large_entity_collision/MixinVanillaWorld.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ public void injectEntitySearch0(Entity entityIn, AxisAlignedBB aabb, java.util.f
3232
CallbackInfoReturnable<List<Entity>> cir) {
3333
List<Entity> result = cir.getReturnValue();
3434
cam72cam.mod.world.World world = cam72cam.mod.world.World.get((World) (Object) this);
35+
//We don't handle Y coordinate in 1.16-
3536
Set<Long> collection = world.tracker.queryPotentialPackedChunkPos(
36-
ChunkPos.asLong(new Vec3d((aabb.minX + aabb.maxX) / 2, (aabb.minY + aabb.maxY) / 2, (aabb.minZ + aabb.maxZ) / 2)));
37+
ChunkPos.asLongExcludeY(new Vec3d((aabb.minX + aabb.maxX) / 2, (aabb.minY + aabb.maxY) / 2, (aabb.minZ + aabb.maxZ) / 2)));
3738
if (!collection.isEmpty()) {
3839
for (long packed : collection) {
3940
int x = ChunkPos.x(packed);
@@ -63,8 +64,9 @@ public void injectEntitySearch1(Class<? extends Entity> clazz, AxisAlignedBB aab
6364

6465
List<Entity> result = cir.getReturnValue();
6566
cam72cam.mod.world.World world = cam72cam.mod.world.World.get((World) (Object) this);
67+
//We don't handle Y coordinate in 1.16-
6668
Set<Long> collection = world.tracker.queryPotentialPackedChunkPos(
67-
ChunkPos.asLong(new Vec3d((aabb.minX + aabb.maxX) / 2, (aabb.minY + aabb.maxY) / 2, (aabb.minZ + aabb.maxZ) / 2)));
69+
ChunkPos.asLongExcludeY(new Vec3d((aabb.minX + aabb.maxX) / 2, (aabb.minY + aabb.maxY) / 2, (aabb.minZ + aabb.maxZ) / 2)));
6870
if (!collection.isEmpty()) {
6971
for (long packed : collection) {
7072
int x = ChunkPos.x(packed);

src/main/java/cam72cam/mod/world/ChunkPos.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,19 @@ public static long asLong(int x, int y, int z) {
3939
return i;
4040
}
4141

42+
//For 1.16- It turned out processing Y will take much more unnecessary effort...
43+
public static long asLongExcludeY(BlockPos pos) {
44+
return asLong(new BlockPos(pos.getX(), 0, pos.getZ()));
45+
}
46+
4247
public static long asLong(BlockPos pos) {
4348
return asLong(MathHelper.floor(pos.getX()/16d), MathHelper.floor(pos.getY()/16d), MathHelper.floor(pos.getZ()/16d));
4449
}
4550

51+
public static long asLongExcludeY(Vec3d pos) {
52+
return asLong(new Vec3d(pos.x, 0, pos.z));
53+
}
54+
4655
public static long asLong(Vec3d pos) {
4756
return asLong(MathHelper.floor(pos.x/16d), MathHelper.floor(pos.y/16d), MathHelper.floor(pos.z/16d));
4857
}

src/main/java/cam72cam/mod/world/WorldEntityTracker.java

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import it.unimi.dsi.fastutil.longs.LongArraySet;
66
import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
77
import it.unimi.dsi.fastutil.objects.ObjectArraySet;
8-
import net.minecraft.util.math.BlockPos;
98

109
import java.util.Collection;
1110
import java.util.Map;
@@ -33,7 +32,7 @@ public class WorldEntityTracker {
3332
public WorldEntityTracker() {}
3433

3534
public void join(ModdedEntity entity) {
36-
long chunk = ChunkPos.asLong(entity.getPosition());
35+
long chunk = ChunkPos.asLongExcludeY(entity.getPosition());
3736
int x = ChunkPos.x(chunk);
3837
int y = ChunkPos.y(chunk);
3938
int z = ChunkPos.z(chunk);
@@ -47,9 +46,11 @@ public void join(ModdedEntity entity) {
4746

4847
for (int i = x - HORIZONTAL_SEARCH_RADIUS_CHUNKS; i <= x + HORIZONTAL_SEARCH_RADIUS_CHUNKS; i++) {
4948
for (int j = z - HORIZONTAL_SEARCH_RADIUS_CHUNKS; j <= z + HORIZONTAL_SEARCH_RADIUS_CHUNKS; j++) {
50-
for (int k = y - VERTICAL_SEARCH_RADIUS_CHUNKS; k <= y + VERTICAL_SEARCH_RADIUS_CHUNKS; k++) {
49+
// for (int k = y - VERTICAL_SEARCH_RADIUS_CHUNKS; k <= y + VERTICAL_SEARCH_RADIUS_CHUNKS; k++) {
50+
//Handle Y below 1.17 is likely to cause more bug
51+
int k = 0;
5152
scanningRange.put(chunk, ChunkPos.asLong(i, k, j));
52-
}
53+
// }
5354
}
5455
}
5556
}
@@ -60,20 +61,19 @@ public void join(ModdedEntity entity) {
6061
}
6162

6263
public void leave(ModdedEntity entity) {
63-
BlockPos pos = entity.getPosition();
64-
long sec = ChunkPos.asLong(pos);
64+
long chunk = ChunkPos.asLongExcludeY(entity.getPosition());
6565

6666
lock.writeLock().lock();
6767
try {
68-
if (!umcEntities.containsKey(sec)) {
68+
if (!umcEntities.containsKey(chunk)) {
6969
return;
7070
}
71-
Collection<ModdedEntity> moddedEntities = umcEntities.get(sec);
71+
Collection<ModdedEntity> moddedEntities = umcEntities.get(chunk);
7272
moddedEntities.remove(entity);
7373

7474
if (moddedEntities.isEmpty()) {
75-
umcEntities.remove(sec);
76-
scanningRange.removeKey(sec);
75+
umcEntities.remove(chunk);
76+
scanningRange.removeKey(chunk);
7777
}
7878
} finally {
7979
lock.writeLock().unlock();
@@ -83,6 +83,12 @@ public void leave(ModdedEntity entity) {
8383
public void move(ModdedEntity entity, long oldSection, long newSection) {
8484
lock.writeLock().lock();
8585
try {
86+
if (!umcEntities.containsKey(oldSection)) {
87+
//Newly added, no need to process here
88+
//Let join handle it
89+
return;
90+
}
91+
8692
// remove from old section
8793
Set<ModdedEntity> moddedEntities = umcEntities.get(oldSection);
8894
if (moddedEntities != null) {
@@ -93,7 +99,7 @@ public void move(ModdedEntity entity, long oldSection, long newSection) {
9399
}
94100
}
95101

96-
long chunk = ChunkPos.asLong(entity.getPosition());
102+
long chunk = ChunkPos.asLongExcludeY(entity.getPosition());
97103
int x = ChunkPos.x(chunk);
98104
int y = ChunkPos.y(chunk);
99105
int z = ChunkPos.z(chunk);
@@ -105,9 +111,10 @@ public void move(ModdedEntity entity, long oldSection, long newSection) {
105111

106112
for (int i = x - HORIZONTAL_SEARCH_RADIUS_CHUNKS; i <= x + HORIZONTAL_SEARCH_RADIUS_CHUNKS; i++) {
107113
for (int j = z - HORIZONTAL_SEARCH_RADIUS_CHUNKS; j <= z + HORIZONTAL_SEARCH_RADIUS_CHUNKS; j++) {
108-
for (int k = y - VERTICAL_SEARCH_RADIUS_CHUNKS; k <= y + VERTICAL_SEARCH_RADIUS_CHUNKS; k++) {
114+
// for (int k = y - VERTICAL_SEARCH_RADIUS_CHUNKS; k <= y + VERTICAL_SEARCH_RADIUS_CHUNKS; k++) {
115+
int k = 0;
109116
scanningRange.put(newSection, ChunkPos.asLong(i, k, j));
110-
}
117+
// }
111118
}
112119
}
113120
}

0 commit comments

Comments
 (0)