mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-06-19 07:11:02 +00:00
+1
-1
@@ -24,7 +24,7 @@ plugins {
|
|||||||
id "de.undercouch.download" version "5.0.1"
|
id "de.undercouch.download" version "5.0.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
version '2.2.2-1.19' // Needs to be version specific
|
version '2.2.3-1.19' // Needs to be version specific
|
||||||
def nmsVersion = "1.19"
|
def nmsVersion = "1.19"
|
||||||
def apiVersion = '1.19'
|
def apiVersion = '1.19'
|
||||||
def spigotJarVersion = '1.19-R0.1-SNAPSHOT'
|
def spigotJarVersion = '1.19-R0.1-SNAPSHOT'
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import com.volmit.iris.util.format.C;
|
|||||||
import com.volmit.iris.util.io.IO;
|
import com.volmit.iris.util.io.IO;
|
||||||
import com.volmit.iris.util.plugin.VolmitSender;
|
import com.volmit.iris.util.plugin.VolmitSender;
|
||||||
import com.volmit.iris.util.scheduling.J;
|
import com.volmit.iris.util.scheduling.J;
|
||||||
|
import com.volmit.iris.util.scheduling.Queue;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.configuration.InvalidConfigurationException;
|
import org.bukkit.configuration.InvalidConfigurationException;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
@@ -38,6 +39,7 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class ServerConfigurator {
|
public class ServerConfigurator {
|
||||||
@@ -82,41 +84,19 @@ public class ServerConfigurator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static File getDatapacksFolder() {
|
private static List<File> getDatapacksFolder() {
|
||||||
if(!IrisSettings.get().getGeneral().forceMainWorld.isEmpty()) {
|
if(!IrisSettings.get().getGeneral().forceMainWorld.isEmpty()) {
|
||||||
return new File(IrisSettings.get().getGeneral().forceMainWorld + "/datapacks");
|
return new KList<File>().qadd(new File(IrisSettings.get().getGeneral().forceMainWorld + "/datapacks"));
|
||||||
|
}
|
||||||
|
KList<File> worlds = new KList<>();
|
||||||
|
Bukkit.getServer().getWorlds().forEach(w -> worlds.add(new File(w.getWorldFolder(), "datapacks")));
|
||||||
|
return worlds;
|
||||||
}
|
}
|
||||||
|
|
||||||
File props = new File("server.properties");
|
|
||||||
|
|
||||||
if(props.exists()) {
|
|
||||||
try {
|
|
||||||
KList<String> m = new KList<>(IO.readAll(props).split("\\Q\n\\E"));
|
|
||||||
|
|
||||||
for(String i : m) {
|
|
||||||
if(i.trim().startsWith("level-name=")) {
|
|
||||||
return new File(i.trim().split("\\Q=\\E")[1] + "/datapacks");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch(IOException e) {
|
|
||||||
Iris.reportError(e);
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void installDataPacks(boolean fullInstall) {
|
public static void installDataPacks(boolean fullInstall) {
|
||||||
Iris.info("Checking Data Packs...");
|
Iris.info("Checking Data Packs...");
|
||||||
boolean reboot = false;
|
|
||||||
File packs = new File("plugins/Iris/packs");
|
File packs = new File("plugins/Iris/packs");
|
||||||
File dpacks = getDatapacksFolder();
|
|
||||||
|
|
||||||
if(dpacks == null) {
|
|
||||||
Iris.error("Cannot find the datapacks folder! Please try generating a default world first maybe? Is this a new server?");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(packs.exists()) {
|
if(packs.exists()) {
|
||||||
for(File i : packs.listFiles()) {
|
for(File i : packs.listFiles()) {
|
||||||
@@ -135,8 +115,8 @@ public class ServerConfigurator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Iris.verbose(" Checking Dimension " + dim.getLoadFile().getPath());
|
Iris.verbose(" Checking Dimension " + dim.getLoadFile().getPath());
|
||||||
if(dim.installDataPack(() -> data, dpacks)) {
|
for(File dpack : getDatapacksFolder()) {
|
||||||
reboot = true;
|
dim.installDataPack(() -> data, dpack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -147,19 +127,12 @@ public class ServerConfigurator {
|
|||||||
|
|
||||||
Iris.info("Data Packs Setup!");
|
Iris.info("Data Packs Setup!");
|
||||||
|
|
||||||
if(fullInstall) {
|
if(fullInstall)
|
||||||
verifyDataPacksPost(IrisSettings.get().getAutoConfiguration().isAutoRestartOnCustomBiomeInstall());
|
verifyDataPacksPost(IrisSettings.get().getAutoConfiguration().isAutoRestartOnCustomBiomeInstall());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private static void verifyDataPacksPost(boolean allowRestarting) {
|
private static void verifyDataPacksPost(boolean allowRestarting) {
|
||||||
File packs = new File("plugins/Iris/packs");
|
File packs = new File("plugins/Iris/packs");
|
||||||
File dpacks = getDatapacksFolder();
|
|
||||||
|
|
||||||
if(dpacks == null) {
|
|
||||||
Iris.error("Cannot find the datapacks folder! Please try generating a default world first maybe? Is this a new server?");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean bad = false;
|
boolean bad = false;
|
||||||
if(packs.exists()) {
|
if(packs.exists()) {
|
||||||
|
|||||||
@@ -344,44 +344,12 @@ public class NMSBinding19_1 implements INMSBinding {
|
|||||||
ChunkAccess s = (ChunkAccess) getFieldForBiomeStorage(chunk).get(chunk);
|
ChunkAccess s = (ChunkAccess) getFieldForBiomeStorage(chunk).get(chunk);
|
||||||
Holder<net.minecraft.world.level.biome.Biome> biome = (Holder<net.minecraft.world.level.biome.Biome>) somethingVeryDirty;
|
Holder<net.minecraft.world.level.biome.Biome> biome = (Holder<net.minecraft.world.level.biome.Biome>) somethingVeryDirty;
|
||||||
s.setBiome(x, y, z, biome);
|
s.setBiome(x, y, z, biome);
|
||||||
/*int l = QuartPos.fromBlock(s.getMinBuildHeight());
|
|
||||||
int i1 = l + QuartPos.fromBlock(s.getHeight()) - 1;
|
|
||||||
PalettedContainer<Holder<net.minecraft.world.level.biome.Biome>> palette = getPalette(s, s.getSectionIndex(QuartPos.toBlock(Mth.clamp(y, l, i1))));
|
|
||||||
int index = getPaletteIndex(x, y, z, s, palette);
|
|
||||||
int data = getPaletteDataId(palette, biome);
|
|
||||||
setPaletteData(palette, index, data);*/
|
|
||||||
} catch(IllegalAccessException e) {
|
} catch(IllegalAccessException e) {
|
||||||
Iris.reportError(e);
|
Iris.reportError(e);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private PalettedContainer<Holder<net.minecraft.world.level.biome.Biome>> getPalette(ChunkAccess ca, int index) {
|
|
||||||
LevelChunkSection[] sections = fieldForClass(LevelChunkSection[].class, ChunkAccess.class, ca);
|
|
||||||
return fieldForClass(PalettedContainer.class, LevelChunkSection.class, sections[index]);
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getPaletteIndex(int x, int y, int z, ChunkAccess s, PalettedContainer<?> palette) {
|
|
||||||
int l = QuartPos.fromBlock(s.getMinBuildHeight());
|
|
||||||
int i1 = l + QuartPos.fromBlock(s.getHeight()) - 1;
|
|
||||||
int j1 = Mth.clamp(y, l, i1);
|
|
||||||
return fieldForClass(PalettedContainer.Strategy.class, PalettedContainer.class, palette).getIndex(x & 3, j1 & 3, z & 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
private <T extends Holder<?>> int getPaletteDataId(PalettedContainer<T> palette, T data) throws ClassNotFoundException {
|
|
||||||
Class<?> dataType = getClassType(PalettedContainer.class, 1);
|
|
||||||
Object paletteData = fieldFor(dataType, palette);
|
|
||||||
Palette<T> fuckinFinally = fieldForClass(Palette.class,dataType, paletteData);
|
|
||||||
return fuckinFinally.idFor(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setPaletteData(PalettedContainer<?> palette, int index, int data) throws ClassNotFoundException {
|
|
||||||
Class<?> dataType = getClassType(PalettedContainer.class, 1);
|
|
||||||
Object paletteData = fieldFor(dataType, palette);
|
|
||||||
BitStorage storage = fieldForClass(BitStorage.class, dataType, paletteData);
|
|
||||||
storage.set(index, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Field getFieldForBiomeStorage(Object storage) {
|
private Field getFieldForBiomeStorage(Object storage) {
|
||||||
Field f = biomeStorageCache;
|
Field f = biomeStorageCache;
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import com.volmit.iris.engine.object.IrisBiome;
|
|||||||
import com.volmit.iris.engine.object.IrisBiomeCustom;
|
import com.volmit.iris.engine.object.IrisBiomeCustom;
|
||||||
import com.volmit.iris.util.documentation.BlockCoordinates;
|
import com.volmit.iris.util.documentation.BlockCoordinates;
|
||||||
import com.volmit.iris.util.hunk.Hunk;
|
import com.volmit.iris.util.hunk.Hunk;
|
||||||
|
import com.volmit.iris.util.hunk.view.BiomeGridHunkHolder;
|
||||||
import com.volmit.iris.util.hunk.view.BiomeGridHunkView;
|
import com.volmit.iris.util.hunk.view.BiomeGridHunkView;
|
||||||
import com.volmit.iris.util.math.RNG;
|
import com.volmit.iris.util.math.RNG;
|
||||||
import com.volmit.iris.util.parallel.BurstExecutor;
|
import com.volmit.iris.util.parallel.BurstExecutor;
|
||||||
@@ -56,6 +57,14 @@ public class IrisBiomeActuator extends EngineAssignedActuator<Biome> {
|
|||||||
hh.forceBiomeBaseInto(x, y, z, bb);
|
hh.forceBiomeBaseInto(x, y, z, bb);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
} else if(h instanceof BiomeGridHunkHolder hh) {
|
||||||
|
ChunkGenerator.BiomeGrid g = hh.getChunk();
|
||||||
|
if(g instanceof TerrainChunk) {
|
||||||
|
((TerrainChunk) g).getBiomeBaseInjector().setBiome(x, y, z, bb);
|
||||||
|
} else {
|
||||||
|
hh.forceBiomeBaseInto(x, y, z, bb);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
} catch(Throwable e) {
|
} catch(Throwable e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
Reference in New Issue
Block a user