From e91afc17a327434671f0273a0f957419ffa78c39 Mon Sep 17 00:00:00 2001 From: James Seibel Date: Mon, 1 Jul 2024 19:02:36 -0500 Subject: [PATCH] Fix beacon beams for loaded chunks --- .../transformers/LodDataBuilder.java | 21 ----------------- .../core/level/AbstractDhLevel.java | 7 ++++-- .../renderer/GenericObjectRenderer.java | 5 ---- .../core/sql/repo/BeaconBeamRepo.java | 23 ++++++++++++++++++- .../chunk/IChunkWrapper.java | 2 +- 5 files changed, 28 insertions(+), 30 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/LodDataBuilder.java b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/LodDataBuilder.java index 34bd93883..9cf58eecc 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/LodDataBuilder.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/dataObjects/transformers/LodDataBuilder.java @@ -218,27 +218,6 @@ public class LodDataBuilder biome = newBiome; blockState = newBlockState; - // TODO temp - if (blockState.getSerialString().contains("beacon")) - { - int blockX = chunkWrapper.getChunkPos().x * LodUtil.CHUNK_WIDTH + relBlockX; - int blockZ = chunkWrapper.getChunkPos().z * LodUtil.CHUNK_WIDTH + relBlockZ; - - if (GenericObjectRenderer.INSTANCE.testBeaconPosSet - .add(new DhBlockPos(blockX, y, blockZ))) - { - IDhApiRenderableBoxGroup beaconBeam = GenericObjectRenderer.INSTANCE.createForSingleBox( - new DhApiRenderableBox( - new DhApiVec3f(blockX, y+1, blockZ), - new DhApiVec3f(blockX+1, 5_000, blockZ+1), - Color.WHITE) - ); - beaconBeam.setBlockLight(15); - beaconBeam.setSkyLight(15); - GenericObjectRenderer.INSTANCE.add(beaconBeam); - } - } - mappedId = dataSource.mapping.addIfNotPresentAndGetId(biome, blockState); blockLight = newBlockLight; skyLight = newSkyLight; diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhLevel.java index 6831cb403..d6badae9b 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/AbstractDhLevel.java @@ -35,6 +35,7 @@ import com.seibel.distanthorizons.core.sql.dto.BeaconBeamDTO; import com.seibel.distanthorizons.core.sql.dto.ChunkHashDTO; import com.seibel.distanthorizons.core.sql.repo.BeaconBeamRepo; import com.seibel.distanthorizons.core.sql.repo.ChunkHashRepo; +import com.seibel.distanthorizons.core.util.LodUtil; import com.seibel.distanthorizons.core.wrapperInterfaces.chunk.IChunkWrapper; import com.seibel.distanthorizons.coreapi.DependencyInjection.ApiEventInjector; import org.apache.logging.log4j.Logger; @@ -247,14 +248,16 @@ public abstract class AbstractDhLevel implements IDhLevel new DhApiVec3f(newBeam.pos.x+1, 2_000, newBeam.pos.z+1), newBeam.color )); - beamRenderGroupByPos.put(newBeam.pos, beaconBox); + beaconBox.setBlockLight(LodUtil.MAX_MC_LIGHT); + beaconBox.setSkyLight(LodUtil.MAX_MC_LIGHT); + this.beamRenderGroupByPos.put(newBeam.pos, beaconBox); GenericObjectRenderer.INSTANCE.add(beaconBox); } else if (existingBeam != null && newBeam == null) { // beam no longer exists at position, remove this.beaconBeamRepo.deleteWithKey(beaconPos); - IDhApiRenderableBoxGroup beaconBox = beamRenderGroupByPos.remove(newBeam.pos); + IDhApiRenderableBoxGroup beaconBox = this.beamRenderGroupByPos.remove(existingBeam.pos); if (beaconBox != null) { GenericObjectRenderer.INSTANCE.remove(beaconBox.getId()); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/GenericObjectRenderer.java b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/GenericObjectRenderer.java index 39983e77e..9d4b56d62 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/GenericObjectRenderer.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/render/renderer/GenericObjectRenderer.java @@ -120,11 +120,6 @@ public class GenericObjectRenderer implements IDhApiCustomRenderRegister private final ReentrantLock mapModifyLock = new ReentrantLock(); - // TODO just for testing - @Deprecated - public final HashSet testBeaconPosSet = new HashSet<>(); - - /** A box from 0,0,0 to 1,1,1 */ private static final float[] BOX_VERTICES = { diff --git a/core/src/main/java/com/seibel/distanthorizons/core/sql/repo/BeaconBeamRepo.java b/core/src/main/java/com/seibel/distanthorizons/core/sql/repo/BeaconBeamRepo.java index 5c9767bea..6433ff3e9 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/sql/repo/BeaconBeamRepo.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/sql/repo/BeaconBeamRepo.java @@ -22,6 +22,7 @@ package com.seibel.distanthorizons.core.sql.repo; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.pos.DhBlockPos; import com.seibel.distanthorizons.core.pos.DhBlockPos; +import com.seibel.distanthorizons.core.pos.DhSectionPos; import com.seibel.distanthorizons.core.sql.dto.BeaconBeamDTO; import com.seibel.distanthorizons.core.sql.dto.BeaconBeamDTO; import org.apache.logging.log4j.Logger; @@ -30,6 +31,7 @@ import java.awt.*; import java.io.File; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -145,7 +147,26 @@ public class BeaconBeamRepo extends AbstractDhRepo public List getAllBeamsForSectionPos(long pos) { - return null; + int minBlockX = DhSectionPos.getMinCornerBlockX(pos); + int minBlockZ = DhSectionPos.getMinCornerBlockZ(pos); + int maxBlockX = minBlockX + DhSectionPos.getBlockWidth(pos); + int maxBlockZ = minBlockZ + DhSectionPos.getBlockWidth(pos); + + + List> objectMapList = this.queryDictionary( + "SELECT * " + + "FROM "+this.getTableName()+" " + + "WHERE " + + "BlockPosX >= "+minBlockX+" AND BlockPosX <= "+maxBlockX+" " + + "AND BlockPosZ >= "+minBlockZ+" AND BlockPosX <= "+maxBlockZ); + + ArrayList beamList = new ArrayList<>(); + for (Map objectMap : objectMapList) + { + beamList.add(this.convertDictionaryToDto(objectMap)); + } + + return beamList; } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/chunk/IChunkWrapper.java b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/chunk/IChunkWrapper.java index ca79eb837..52e12c9e8 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/chunk/IChunkWrapper.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/wrapperInterfaces/chunk/IChunkWrapper.java @@ -256,7 +256,7 @@ public interface IChunkWrapper extends IBindable { DhBlockPos pos = blockPosList.get(i).convertToChunkRelativePos(); IBlockStateWrapper block = this.getBlockState(pos); - if (block.getSerialString().equalsIgnoreCase("minecraft:beacon")) + if (block.getSerialString().toLowerCase().contains("minecraft:beacon")) { BeaconBeamDTO beam = new BeaconBeamDTO(pos, Color.WHITE); // TODO beaconPosList.add(beam);