From 9d8fdf116cb860df15528c43ea2221b8580b24ae Mon Sep 17 00:00:00 2001 From: shedaniel Date: Wed, 12 Aug 2020 03:24:42 +0800 Subject: [PATCH] 1.16.2 Signed-off-by: shedaniel --- build.gradle | 21 ++--- fabric/build.gradle | 6 +- .../lightoverlay/fabric/LOModMenuEntry.java | 6 +- .../lightoverlay/fabric/LightOverlay.java | 82 ++++++++++--------- .../fabric/mixin/MixinClientConnection.java | 2 +- .../main/resources/lightoverlay.accesswidener | 2 +- gradle.properties | 16 ++-- settings.gradle | 2 +- 8 files changed, 72 insertions(+), 65 deletions(-) diff --git a/build.gradle b/build.gradle index 718020b..6d70cae 100644 --- a/build.gradle +++ b/build.gradle @@ -47,14 +47,14 @@ idea.project.settings { project = rootProject.project(":fabric") taskNames = Collections.singletonList("runServer") } - "Forge: Minecraft Client"(org.jetbrains.gradle.ext.Gradle) { - project = rootProject.project(":forge") - taskNames = Collections.singletonList("runClient") - } - "Forge: Minecraft Server"(org.jetbrains.gradle.ext.Gradle) { - project = rootProject.project(":forge") - taskNames = Collections.singletonList("runServer") - } +// "Forge: Minecraft Client"(org.jetbrains.gradle.ext.Gradle) { +// project = rootProject.project(":forge") +// taskNames = Collections.singletonList("runClient") +// } +// "Forge: Minecraft Server"(org.jetbrains.gradle.ext.Gradle) { +// project = rootProject.project(":forge") +// taskNames = Collections.singletonList("runServer") +// } } } @@ -128,8 +128,9 @@ task buildMerged { } } -buildMerged.mustRunAfter project(":fabric").tasks.getByName("build") -buildMerged.mustRunAfter project(":forge").tasks.getByName("build") +rootProject.subprojects.forEach { + buildMerged.mustRunAfter it.tasks.getByName("build") +} static def compress(Path sourceDir, File zipFile) { try { diff --git a/fabric/build.gradle b/fabric/build.gradle index c4e979d..d85007d 100755 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "0.4-SNAPSHOT" + id("fabric-loom") version "0.5-SNAPSHOT" } minecraft { @@ -27,7 +27,9 @@ dependencies { modCompile("me.shedaniel.cloth.api:cloth-client-events-v0:${rootProject.cloth_version}") { transitive = false } - modImplementation("me.shedaniel.cloth:config-2:${rootProject.cloth_config_version}") + modImplementation("me.shedaniel.cloth:config-2:${rootProject.cloth_config_version}") { + exclude(group: "net.fabricmc.fabric-api") + } modImplementation("io.github.prospector:modmenu:${rootProject.modmenu_version}") { transitive = false } diff --git a/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/LOModMenuEntry.java b/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/LOModMenuEntry.java index 95cdcf8..c7f4c85 100644 --- a/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/LOModMenuEntry.java +++ b/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/LOModMenuEntry.java @@ -26,10 +26,10 @@ public class LOModMenuEntry implements ModMenuApi { ConfigEntryBuilder eb = builder.entryBuilder(); ConfigCategory general = builder.getOrCreateCategory(new TranslatableText("config.lightoverlay.general")); - general.addEntry(eb.startTextDescription(Text.method_30163("§7" + I18n.translate("description.lightoverlay.caching"))).build()); + general.addEntry(eb.startTextDescription(Text.of("§7" + I18n.translate("description.lightoverlay.caching"))).build()); general.addEntry(eb.startBooleanToggle(new TranslatableText("config.lightoverlay.caching"), LightOverlay.caching).setDefaultValue(false).setSaveConsumer(bool -> LightOverlay.caching = bool).build()); - general.addEntry(eb.startIntSlider(new TranslatableText("config.lightoverlay.reach"), LightOverlay.reach, 1, 64).setDefaultValue(12).setTextGetter(integer -> Text.method_30163("Reach: " + integer + " Blocks")).setSaveConsumer(integer -> LightOverlay.reach = integer).build()); - IntegerSliderEntry crossLevel = eb.startIntSlider(new TranslatableText("config.lightoverlay.crossLevel"), LightOverlay.crossLevel, 0, 15).setDefaultValue(7).setTextGetter(integer -> Text.method_30163("Cross Level: " + integer)).setSaveConsumer(integer -> LightOverlay.crossLevel = integer).build(); + general.addEntry(eb.startIntSlider(new TranslatableText("config.lightoverlay.reach"), LightOverlay.reach, 1, 64).setDefaultValue(12).setTextGetter(integer -> Text.of("Reach: " + integer + " Blocks")).setSaveConsumer(integer -> LightOverlay.reach = integer).build()); + IntegerSliderEntry crossLevel = eb.startIntSlider(new TranslatableText("config.lightoverlay.crossLevel"), LightOverlay.crossLevel, 0, 15).setDefaultValue(7).setTextGetter(integer -> Text.of("Cross Level: " + integer)).setSaveConsumer(integer -> LightOverlay.crossLevel = integer).build(); general.addEntry(crossLevel); general.addEntry(eb.startIntSlider(new TranslatableText("config.lightoverlay.secondaryLevel"), LightOverlay.secondaryLevel, -1, 15) .setErrorSupplier(integer -> { diff --git a/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/LightOverlay.java b/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/LightOverlay.java index d3ea344..dc273c9 100644 --- a/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/LightOverlay.java +++ b/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/LightOverlay.java @@ -4,6 +4,8 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; +import it.unimi.dsi.fastutil.longs.Long2ReferenceMap; +import it.unimi.dsi.fastutil.longs.Long2ReferenceOpenHashMap; import me.shedaniel.cloth.api.client.events.v0.ClothClientHooks; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; @@ -33,7 +35,7 @@ import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.BlockView; import net.minecraft.world.LightType; import net.minecraft.world.World; -import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.SpawnSettings; import net.minecraft.world.chunk.ChunkStatus; import net.minecraft.world.chunk.WorldChunk; import net.minecraft.world.chunk.light.ChunkLightingView; @@ -65,7 +67,7 @@ public class LightOverlay implements ClientModInitializer { static boolean underwater = false; static float lineWidth = 1.0F; static int yellowColor = 0xFFFF00, redColor = 0xFF0000, secondaryColor = 0x0000FF; - static File configFile = new File(FabricLoader.getInstance().getConfigDirectory(), "lightoverlay.properties"); + static File configFile = new File(FabricLoader.getInstance().getConfigDir().toFile(), "lightoverlay.properties"); private static final KeyBinding ENABLE_OVERLAY = createKeyBinding(ENABLE_OVERLAY_KEYBIND, InputUtil.Type.KEYSYM, 296, KEYBIND_CATEGORY); private static boolean enabled = false; private static EntityType testingEntityType; @@ -76,7 +78,7 @@ public class LightOverlay implements ClientModInitializer { return thread; }); private static final List POS = Lists.newCopyOnWriteArrayList(); - private static final Map> CHUNK_MAP = Maps.newConcurrentMap(); + private static final Map> CHUNK_MAP = Maps.newConcurrentMap(); private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); private static long ticks = 0; @@ -100,14 +102,14 @@ public class LightOverlay implements ClientModInitializer { BlockPos.Mutable downPos = new BlockPos.Mutable(); Iterable iterate = BlockPos.iterate(playerPos.getX() - reach, playerPos.getY() - reach, playerPos.getZ() - reach, playerPos.getX() + reach, playerPos.getY() + reach, playerPos.getZ() + reach); - HashMap map = Maps.newHashMap(); + Long2ReferenceMap map = new Long2ReferenceOpenHashMap<>(); CHUNK_MAP.put(new ChunkPos(0, 0), map); for (BlockPos blockPos : iterate) { downPos.set(blockPos.getX(), blockPos.getY() - 1, blockPos.getZ()); if (showNumber) { int level = getCrossLevel(blockPos, downPos, world, block, entityContext); if (level >= 0) { - map.put(blockPos.asLong(), level); + map.put(blockPos.asLong(), Integer.valueOf(level)); } } else { CrossType type = getCrossType(blockPos, downPos, world, block, sky, entityContext); @@ -132,33 +134,34 @@ public class LightOverlay implements ClientModInitializer { } } } - if (!POS.isEmpty()) { - if (playerPos[0] == null) { - playerPos[0] = player.getPos(); - } - ChunkPos pos = POS.stream().min(Comparator.comparingDouble(value -> value.toBlockPos(8, 0, 8).getSquaredDistance(playerPos[0].x, 0, playerPos[0].z, false))).get(); - POS.remove(pos); - EXECUTOR.submit(() -> { - if (MathHelper.abs(pos.x - playerPosX) <= getChunkRange() && MathHelper.abs(pos.z - playerPosZ) <= getChunkRange()) { - calculateChunk(world.getChunkManager().getChunk(pos.x, pos.z, ChunkStatus.FULL, false), world, pos, entityContext); - } else { - CHUNK_MAP.remove(pos); + POS.removeIf(pos -> MathHelper.abs(pos.x - playerPosX) > getChunkRange() || MathHelper.abs(pos.z - playerPosZ) > getChunkRange()); + for (int k = 0; k < 2; k++) { + if (!POS.isEmpty()) { + if (playerPos[0] == null) { + playerPos[0] = player.getPos(); } - }); + ChunkPos pos = POS.stream().min(Comparator.comparingDouble(value -> { + int i = Math.abs(value.x - playerPosX); + int j = Math.abs(value.z - playerPosZ); + return i * i + j * j; + })).get(); + POS.remove(pos); + EXECUTOR.submit(() -> { + try { + calculateChunk(world.getChunkManager().getChunk(pos.x, pos.z, ChunkStatus.FULL, false), world, pos, entityContext); + } catch (Throwable throwable) { + LogManager.getLogger().throwing(throwable); + } + }); + } } if (ticks % 50 == 0) { - Iterator>> chunkMapIterator = CHUNK_MAP.entrySet().iterator(); - while (chunkMapIterator.hasNext()) { - Map.Entry> pos = chunkMapIterator.next(); - if (MathHelper.abs(pos.getKey().x - playerPosX) > getChunkRange() * 2 || MathHelper.abs(pos.getKey().z - playerPosZ) > getChunkRange() * 2) { - chunkMapIterator.remove(); - } - } + CHUNK_MAP.entrySet().removeIf(pos -> MathHelper.abs(pos.getKey().x - playerPosX) > getChunkRange() * 2 || MathHelper.abs(pos.getKey().z - playerPosZ) > getChunkRange() * 2); } } } - } catch (Exception e) { - LogManager.getLogger().throwing(e); + } catch (Throwable throwable) { + LogManager.getLogger().throwing(throwable); } }); } @@ -182,8 +185,8 @@ public class LightOverlay implements ClientModInitializer { } private static void calculateChunk(WorldChunk chunk, World world, ChunkPos chunkPos, EntityContext entityContext) { - Map map = Maps.newHashMap(); - if (world != null) { + if (world != null && chunk != null) { + Long2ReferenceMap map = new Long2ReferenceOpenHashMap<>(); ChunkLightingView block = world.getLightingProvider().get(LightType.BLOCK); ChunkLightingView sky = showNumber ? null : world.getLightingProvider().get(LightType.SKY); for (BlockPos pos : BlockPos.iterate(chunkPos.getStartX(), 0, chunkPos.getStartZ(), chunkPos.getEndX(), 256, chunkPos.getEndZ())) { @@ -191,11 +194,11 @@ public class LightOverlay implements ClientModInitializer { if (showNumber) { int level = LightOverlay.getCrossLevel(pos, down, chunk, block, entityContext); if (level >= 0) { - map.put(pos.asLong(), level); + map.put(pos.asLong(), Integer.valueOf(level)); } } else { - Biome biome = world.getBiomeAccess().getBiome(pos); - if (biome.getMaxSpawnLimit() > 0 && !biome.getEntitySpawnList(EntityCategory.MONSTER).isEmpty()) { + SpawnSettings spawnSettings = world.getBiomeAccess().getBiome(pos).getSpawnSettings(); + if (spawnSettings.getCreatureSpawnProbability() > 0 && !spawnSettings.getSpawnEntry(EntityCategory.MONSTER).isEmpty()) { CrossType type = LightOverlay.getCrossType(pos, down, chunk, block, sky, entityContext); if (type != CrossType.NONE) { map.put(pos.asLong(), type); @@ -203,8 +206,10 @@ public class LightOverlay implements ClientModInitializer { } } } + CHUNK_MAP.put(chunkPos, map); + } else { + CHUNK_MAP.remove(chunkPos); } - CHUNK_MAP.put(chunkPos, map); } public static CrossType getCrossType(BlockPos pos, BlockPos down, BlockView world, ChunkLightingView block, ChunkLightingView sky, EntityContext entityContext) { @@ -432,13 +437,13 @@ public class LightOverlay implements ClientModInitializer { RenderSystem.enableTexture(); RenderSystem.depthMask(true); BlockPos.Mutable mutable = new BlockPos.Mutable(); - for (Map.Entry> entry : CHUNK_MAP.entrySet()) { + for (Map.Entry> entry : CHUNK_MAP.entrySet()) { if (caching && (MathHelper.abs(entry.getKey().x - playerPosX) > getChunkRange() || MathHelper.abs(entry.getKey().z - playerPosZ) > getChunkRange())) { continue; } - for (Map.Entry objectEntry : entry.getValue().entrySet()) { + for (Long2ReferenceMap.Entry objectEntry : entry.getValue().long2ReferenceEntrySet()) { if (objectEntry.getValue() instanceof Integer) { - mutable.set(BlockPos.unpackLongX(objectEntry.getKey()), BlockPos.unpackLongY(objectEntry.getKey()), BlockPos.unpackLongZ(objectEntry.getKey())); + mutable.set(BlockPos.unpackLongX(objectEntry.getLongKey()), BlockPos.unpackLongY(objectEntry.getLongKey()), BlockPos.unpackLongZ(objectEntry.getLongKey())); if (mutable.isWithinDistance(playerPos, reach)) { BlockPos down = mutable.down(); LightOverlay.renderLevel(CLIENT, camera, world, mutable, down, (Integer) objectEntry.getValue(), entityContext); @@ -456,15 +461,14 @@ public class LightOverlay implements ClientModInitializer { GL11.glLineWidth(lineWidth); GL11.glBegin(GL11.GL_LINES); BlockPos.Mutable mutable = new BlockPos.Mutable(); - for (Map.Entry> entry : CHUNK_MAP.entrySet()) { + for (Map.Entry> entry : CHUNK_MAP.entrySet()) { if (caching && (MathHelper.abs(entry.getKey().x - playerPosX) > getChunkRange() || MathHelper.abs(entry.getKey().z - playerPosZ) > getChunkRange())) { continue; } - for (Map.Entry objectEntry : entry.getValue().entrySet()) { + for (Long2ReferenceMap.Entry objectEntry : entry.getValue().long2ReferenceEntrySet()) { if (objectEntry.getValue() instanceof CrossType) { - mutable.set(BlockPos.unpackLongX(objectEntry.getKey()), BlockPos.unpackLongY(objectEntry.getKey()), BlockPos.unpackLongZ(objectEntry.getKey())); + mutable.set(BlockPos.unpackLongX(objectEntry.getLongKey()), BlockPos.unpackLongY(objectEntry.getLongKey()), BlockPos.unpackLongZ(objectEntry.getLongKey())); if (mutable.isWithinDistance(playerPos, reach)) { - BlockPos down = mutable.down(); int color = objectEntry.getValue() == CrossType.RED ? redColor : objectEntry.getValue() == CrossType.YELLOW ? yellowColor : secondaryColor; LightOverlay.renderCross(camera, world, mutable, color, entityContext); } diff --git a/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinClientConnection.java b/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinClientConnection.java index fad16dc..4fed3aa 100644 --- a/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinClientConnection.java +++ b/fabric/src/main/java/me/shedaniel/lightoverlay/fabric/mixin/MixinClientConnection.java @@ -23,7 +23,7 @@ public class MixinClientConnection { } else if (packet instanceof ChunkDataS2CPacket) { LightOverlay.queueChunkAndNear(new ChunkPos(((ChunkDataS2CPacket) packet).getX(), ((ChunkDataS2CPacket) packet).getZ())); } else if (packet instanceof ChunkDeltaUpdateS2CPacket) { - LightOverlay.queueChunkAndNear(new ChunkPos(((ChunkDeltaUpdateS2CPacket) packet).chunkPos.x, ((ChunkDeltaUpdateS2CPacket) packet).chunkPos.z)); + LightOverlay.queueChunkAndNear(new ChunkPos(((ChunkDeltaUpdateS2CPacket) packet).sectionPos.getSectionX(), ((ChunkDeltaUpdateS2CPacket) packet).sectionPos.getSectionZ())); } else if (packet instanceof LightUpdateS2CPacket) { LightOverlay.queueChunk(new ChunkPos(((LightUpdateS2CPacket) packet).getChunkX(), ((LightUpdateS2CPacket) packet).getChunkZ())); } diff --git a/fabric/src/main/resources/lightoverlay.accesswidener b/fabric/src/main/resources/lightoverlay.accesswidener index 5270ef9..860a467 100644 --- a/fabric/src/main/resources/lightoverlay.accesswidener +++ b/fabric/src/main/resources/lightoverlay.accesswidener @@ -1,2 +1,2 @@ accessWidener v1 named -accessible field net/minecraft/network/packet/s2c/play/ChunkDeltaUpdateS2CPacket chunkPos Lnet/minecraft/util/math/ChunkPos; \ No newline at end of file +accessible field net/minecraft/network/packet/s2c/play/ChunkDeltaUpdateS2CPacket sectionPos Lnet/minecraft/util/math/ChunkSectionPos; \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 3032994..d05f45a 100755 --- a/gradle.properties +++ b/gradle.properties @@ -1,16 +1,16 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false -mod_version=5.4.1 +mod_version=5.5.0 # fabric -fabric_minecraft_version=1.16.1 -yarn_build=1.16.1+build.4+legacy.20w09a+build.8 -fabric_loader_version=0.8.8+build.202 -fabric_api_version=0.14.0+build.371-1.16 -cloth_version=1.0.4 -cloth_config_version=4.5.5 -modmenu_version=1.12.2+build.17 +fabric_minecraft_version=1.16.2 +yarn_build=1.16.2+build.1+legacy.20w09a+build.8 +fabric_loader_version=0.9.1+build.205 +fabric_api_version=0.17.2+build.396-1.16 +cloth_version=1.0.8 +cloth_config_version=4.7.0-unstable +modmenu_version=1.14.6+build.31 # forge mcp_snapshot=20200514-1.16 diff --git a/settings.gradle b/settings.gradle index baec76a..2488413 100644 --- a/settings.gradle +++ b/settings.gradle @@ -12,4 +12,4 @@ pluginManagement { rootProject.name="light-overlay" include("fabric") -include("forge") +//include("forge") -- 2.44.0