Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -116,4 +116,6 @@ dependencies {
testImplementation("org.lwjgl.lwjgl:lwjgl:2.9.4-nightly-20150209")

compileOnly("mega:fluidlogged-mc1.7.10:0.1.2")

compileOnly("com.cardinalstar.cubicchunks:CubicChunks1710:99.99.99:dev")
}
12 changes: 10 additions & 2 deletions src/main/java/com/gtnewhorizons/angelica/compat/ModStatus.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package com.gtnewhorizons.angelica.compat;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.gtnewhorizons.angelica.compat.backhand.BackhandReflectionCompat;
import com.gtnewhorizons.angelica.compat.cubicchunks.CubicChunksDelegate;
import com.gtnewhorizons.angelica.helpers.LoadControllerHelper;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.versioning.DefaultArtifactVersion;
import mods.battlegear2.Battlegear;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class ModStatus {
public static final Logger LOGGER = LogManager.getLogger("ModCompat");
Expand All @@ -33,6 +35,7 @@ public class ModStatus {
public static boolean isThaumicHorizonsLoaded;
public static boolean isBaublesLoaded;
public static boolean isFluidLoggedLoaded;
public static boolean isCubicChunksLoaded;

public static void preInit(){
isBackhandLoaded = Loader.isModLoaded("backhand");
Expand All @@ -53,6 +56,7 @@ public static void preInit(){
isThaumicHorizonsLoaded = Loader.isModLoaded("ThaumicHorizons");
isBaublesLoaded = Loader.isModLoaded("Baubles");
isFluidLoggedLoaded = Loader.isModLoaded("fluidlogged");
isCubicChunksLoaded = Loader.isModLoaded("cubicchunks");

isHoloInventoryLoaded = Loader.isModLoaded("holoinventory");

Expand All @@ -71,5 +75,9 @@ public static void preInit(){
isNEIDMetadataExtended = true;
}
}

if (isCubicChunksLoaded) {
CubicChunksDelegate.init();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.gtnewhorizons.angelica.compat.cubicchunks;

import net.minecraft.world.World;
import net.minecraft.world.chunk.storage.ExtendedBlockStorage;

import com.cardinalstar.cubicchunks.api.IColumn;
import com.cardinalstar.cubicchunks.api.ICube;
import com.cardinalstar.cubicchunks.world.cube.Cube;
import com.cardinalstar.cubicchunks.world.cube.ICubeProviderInternal;

public class CubicChunksAPI {

public static ExtendedBlockStorage getCubeStorage(World world, int x, int y, int z) {
Cube cube = ((ICubeProviderInternal) world.getChunkProvider()).getLoadedCube(x, y, z);

if (cube == null || cube.isEmpty()) return null;

return cube.getStorage();
}

public static int[] getLoadedCubeLevelsInColumn(World world, int chunkX, int chunkZ) {
IColumn column = (IColumn) world.getChunkFromChunkCoords(chunkX, chunkZ);

return column.getLoadedCubes().stream().mapToInt(ICube::getY).toArray();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.gtnewhorizons.angelica.compat.cubicchunks;

import net.minecraft.client.Minecraft;

import com.cardinalstar.cubicchunks.modcompat.angelica.AngelicaInterop;
import com.cardinalstar.cubicchunks.modcompat.angelica.IAngelicaDelegate;
import me.jellysquid.mods.sodium.client.render.chunk.map.ChunkTrackerHolder;
import me.jellysquid.mods.sodium.client.render.chunk.map.IChunkTracker;

public class CubicChunksDelegate implements IAngelicaDelegate {

public static final CubicChunksDelegate INSTANCE = new CubicChunksDelegate();

public static void init() {
AngelicaInterop.setDelegate(INSTANCE);
}

private static IChunkTracker getTracker() {
return ChunkTrackerHolder.get(Minecraft.getMinecraft().theWorld);
}

@Override
public void onColumnLoaded(int chunkX, int chunkZ) {
getTracker().onChunkAdded(chunkX, chunkZ);
}

@Override
public void onColumnUnloaded(int chunkX, int chunkZ) {
getTracker().onChunkRemoved(chunkX, chunkZ);
}

@Override
public void onCubeLoaded(int cubeX, int cubeY, int cubeZ) {
getTracker().onCubeAdded(cubeX, cubeY, cubeZ);
}

@Override
public void onCubeUnloaded(int cubeX, int cubeY, int cubeZ) {
getTracker().onCubeRemoved(cubeX, cubeY, cubeZ);
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.gtnewhorizons.angelica.compat.mojang;

import net.minecraftforge.common.util.ForgeDirection;

import java.util.BitSet;
import java.util.Set;

import net.minecraftforge.common.util.ForgeDirection;

public class ChunkOcclusionData {
private static final int DIRECTION_COUNT = ForgeDirection.values().length;
private final BitSet visibility;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.gtnewhorizons.angelica.compat.mojang;

import com.gtnewhorizon.gtnhlib.blockpos.BlockPos;
import org.joml.Vector3i;

import com.gtnewhorizon.gtnhlib.blockpos.BlockPos;
import com.gtnewhorizon.gtnhlib.util.CoordinatePacker;

// See if we can merge/mixin/extend ChunkPosition maybe?
public class ChunkSectionPos extends Vector3i {

Expand All @@ -25,11 +27,7 @@ public static ChunkSectionPos from(BlockPos pos) {
}

public static long asLong(int x, int y, int z) {
long l = 0L;
l |= ((long)x & 4194303L) << 42;
l |= ((long)y & 1048575L) << 0;
l |= ((long)z & 4194303L) << 20;
return l;
return CoordinatePacker.pack(x, y, z);
}

public static int getLocalCoord(int coord) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,21 @@
package me.jellysquid.mods.sodium.client.gui;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.I18n;
import net.minecraft.client.settings.GameSettings;

import org.lwjgl.opengl.Display;

import com.cardinalstar.cubicchunks.api.compat.CubicChunksVideoSettings;
import com.google.common.collect.ImmutableList;
import com.gtnewhorizons.angelica.compat.ModStatus;
import com.gtnewhorizons.angelica.config.AngelicaConfig;
import com.gtnewhorizons.angelica.glsm.GLStateManager;
import cpw.mods.fml.common.Optional.Method;
import jss.notfine.core.Settings;
import jss.notfine.core.SettingsManager;
import me.flashyreese.mods.reeses_sodium_options.client.gui.ReeseSodiumVideoOptionsScreen;
Expand All @@ -20,19 +33,12 @@
import me.jellysquid.mods.sodium.client.gui.options.named.LightingQuality;
import me.jellysquid.mods.sodium.client.gui.options.named.ParticleMode;
import me.jellysquid.mods.sodium.client.gui.options.storage.AngelicaOptionsStorage;
import me.jellysquid.mods.sodium.client.gui.options.storage.CubicChunksOptionStorage;
import me.jellysquid.mods.sodium.client.gui.options.storage.MinecraftOptionsStorage;
import me.jellysquid.mods.sodium.client.gui.options.storage.SodiumOptionsStorage;
import me.jellysquid.mods.sodium.client.render.chunk.backends.multidraw.MultidrawChunkRenderBackend;
import net.coderbot.iris.Iris;
import net.coderbot.iris.gui.option.IrisVideoSettings;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.I18n;
import net.minecraft.client.settings.GameSettings;
import org.lwjgl.opengl.Display;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class SodiumGameOptionPages {
private static final SodiumOptionsStorage sodiumOpts = new SodiumOptionsStorage();
Expand All @@ -52,6 +58,10 @@ public static OptionPage general() {
.setFlags(OptionFlag.REQUIRES_RENDERER_RELOAD)
.build());

if (ModStatus.isCubicChunksLoaded) {
firstGroupBuilder.add(getCCVerticalViewDistance());
}

if(AngelicaConfig.enableIris) {
final OptionImpl<GameSettings, Integer> maxShadowDistanceSlider = OptionImpl.createBuilder(int.class, vanillaOpts)
.setName(I18n.format("options.iris.shadowDistance"))
Expand Down Expand Up @@ -455,4 +465,25 @@ public static OptionPage performance() {

return new OptionPage(I18n.format("sodium.options.pages.performance"), ImmutableList.copyOf(groups));
}

@Method(modid = "cubicchunks")
private static OptionImpl<?, ?> getCCVerticalViewDistance() {
CubicChunksOptionStorage storage = new CubicChunksOptionStorage();

return OptionImpl.createBuilder(int.class, storage)
.setName(I18n.format("sodium.options.cc.vertical_view_distance.name"))
.setTooltip(I18n.format("sodium.options.cc.vertical_view_distance.tooltip"))
.setControl(option -> new SliderControl(
option,
CubicChunksVideoSettings.getMinVerticalViewDistance(),
CubicChunksVideoSettings.getMaxVerticalViewDistance(),
1,
ControlValueFormatter.quantity("options.chunks")))
.setBinding(
(options, value) -> options.verticalViewDistance = value,
options -> options.verticalViewDistance)
.setImpact(OptionImpact.HIGH)
.setFlags(OptionFlag.REQUIRES_RENDERER_RELOAD)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package me.jellysquid.mods.sodium.client.gui.options.storage;

import com.cardinalstar.cubicchunks.api.compat.CubicChunksVideoSettings;

public class CubicChunksOptionStorage implements OptionStorage<CubicChunksOptionStorage.CubicChunksOptions> {

public static class CubicChunksOptions {
public int verticalViewDistance = CubicChunksVideoSettings.getVerticalViewDistance();
}

private final CubicChunksOptions options = new CubicChunksOptions();

@Override
public CubicChunksOptions getData() {
return options;
}

@Override
public void save() {
CubicChunksVideoSettings.setVerticalViewDistance(options.verticalViewDistance);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import me.jellysquid.mods.sodium.client.render.chunk.backends.oneshot.ChunkRenderBackendOneshot;
import me.jellysquid.mods.sodium.client.render.chunk.data.ChunkRenderData;
import me.jellysquid.mods.sodium.client.render.chunk.format.DefaultModelVertexFormats;
import me.jellysquid.mods.sodium.client.render.chunk.map.ChunkTracker;
import me.jellysquid.mods.sodium.client.render.chunk.map.ChunkTrackerHolder;
import me.jellysquid.mods.sodium.client.render.chunk.passes.BlockRenderPass;
import me.jellysquid.mods.sodium.client.render.pipeline.context.ChunkRenderCacheShared;
Expand Down Expand Up @@ -266,7 +265,7 @@ public void updateChunks(Camera camera, Frustrum frustum, boolean hasForcedFrust

private void processChunkEvents() {
var tracker = ChunkTrackerHolder.get(this.world);
tracker.forEachEvent(this.chunkRenderManager::onChunkAdded, this.chunkRenderManager::onChunkRemoved);
tracker.forEachEvent(this.chunkRenderManager);
}

/**
Expand Down Expand Up @@ -330,7 +329,8 @@ private void initRenderer() {
this.chunkRenderManager = new ChunkRenderManager<>(this, this.chunkRenderBackend, this.world, this.renderDistance);

var tracker = ChunkTrackerHolder.get(this.world);
ChunkTracker.forEachChunk(tracker.getReadyChunks(), this.chunkRenderManager::onChunkAdded);

tracker.forAllReady(this.chunkRenderManager);
}

private static ChunkRenderBackend<?> createChunkRenderBackend(RenderDevice device, SodiumGameOptions options, ChunkVertexType vertexFormat) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,23 @@
import static com.gtnewhorizon.gtnhlib.client.renderer.cel.model.quad.properties.ModelQuadFacing.NEG_Z;
import static com.gtnewhorizon.gtnhlib.client.renderer.cel.model.quad.properties.ModelQuadFacing.POS_X;
import static com.gtnewhorizon.gtnhlib.client.renderer.cel.model.quad.properties.ModelQuadFacing.POS_Z;

import java.util.Collection;
import net.minecraftforge.common.util.ForgeDirection;

import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import lombok.Getter;

public class ChunkRenderColumn<T extends ChunkGraphicsState> {
@SuppressWarnings("unchecked")
private final ChunkRenderContainer<T>[] renders = new ChunkRenderContainer[16];
private final Int2ObjectMap<ChunkRenderContainer<T>> renders = new Int2ObjectOpenHashMap<>();

@SuppressWarnings("unchecked")
private final ChunkRenderColumn<T>[] adjacent = new ChunkRenderColumn[6];

private final int x, z;
@Getter
private final int x;
@Getter
private final int z;

public ChunkRenderColumn(int x, int z) {
this.x = x;
Expand All @@ -34,22 +40,19 @@ public ChunkRenderColumn<T> getAdjacentColumn(ForgeDirection dir) {
}

public void setRender(int y, ChunkRenderContainer<T> render) {
this.renders[y] = render;
}

public ChunkRenderContainer<T> getRender(int y) {
if (y < 0 || y >= this.renders.length) {
return null;
if (render == null) {
this.renders.remove(y);
} else {
this.renders.put(y, render);
}
return this.renders[y];
}

public int getX() {
return this.x;
public ChunkRenderContainer<T> getRender(int y) {
return this.renders.get(y);
}

public int getZ() {
return this.z;
public Collection<ChunkRenderContainer<T>> getAllRenders() {
return this.renders.values();
}

public boolean areNeighborsPresent() {
Expand Down
Loading