From 7e9cea94f32e661c4d46fb015af3245324fd6d30 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Tue, 7 Jan 2020 07:47:42 -0500 Subject: [PATCH] Biome Systems --- .../java/ninja/bytecode/iris/CommandIris.java | 77 ++- src/main/java/ninja/bytecode/iris/Iris.java | 80 ++- .../java/ninja/bytecode/iris/Settings.java | 11 +- .../iris/generator/IrisGenerator.java | 99 +-- .../iris/generator/biome/IrisBiome.java | 566 ------------------ .../iris/generator/layer/GenLayerBiome.java | 66 +- .../generator/layer/GenLayerLayeredNoise.java | 2 +- .../iris/generator/layer/GenLayerOreCoal.java | 2 +- .../generator/layer/GenLayerOreDiamond.java | 2 +- .../generator/layer/GenLayerOreEmerald.java | 2 +- .../iris/generator/layer/GenLayerOreGold.java | 2 +- .../iris/generator/layer/GenLayerOreIron.java | 2 +- .../generator/layer/GenLayerOreLapis.java | 2 +- .../BiomeBiasSchematicPopulator.java | 2 +- .../bytecode/iris/schematic/Schematic.java | 10 + .../ninja/bytecode/iris/spec/IrisBiome.java | 431 +++++++++++++ .../bytecode/iris/spec/IrisDimension.java | 95 +++ .../ninja/bytecode/iris/spec/IrisPack.java | 86 +++ .../ninja/bytecode/iris/util/ChunkPlan.java | 2 +- .../bytecode/iris/util/IrisInterpolation.java | 68 ++- .../java/ninja/bytecode/iris/util/MB.java | 45 ++ .../bytecode/iris/util/MaxingGenerator.java | 18 +- src/main/resources/pack/biomes/desert.json | 13 + .../resources/pack/biomes/desert_hills.json | 13 + .../resources/pack/biomes/desert_red.json | 13 + src/main/resources/pack/biomes/jungle.json | 8 + .../resources/pack/biomes/jungle_hills.json | 8 + src/main/resources/pack/biomes/mesa.json | 16 + src/main/resources/pack/biomes/plains.json | 8 + src/main/resources/pack/biomes/savanna.json | 7 + .../resources/pack/biomes/savanna_hills.json | 7 + src/main/resources/pack/biomes/swamp.json | 8 + src/main/resources/pack/biomes/temp.json | 17 + .../resources/pack/dimensions/overworld.json | 16 + src/main/resources/pack/manifest.json | 5 + .../objects/boulder/stone/medium/boulder1.ish | Bin .../boulder/stone/medium/boulder10.ish | Bin .../boulder/stone/medium/boulder11.ish | Bin .../boulder/stone/medium/boulder12.ish | Bin .../boulder/stone/medium/boulder13.ish | Bin .../boulder/stone/medium/boulder14.ish | Bin .../boulder/stone/medium/boulder15.ish | Bin .../objects/boulder/stone/medium/boulder2.ish | Bin .../objects/boulder/stone/medium/boulder3.ish | Bin .../objects/boulder/stone/medium/boulder4.ish | Bin .../objects/boulder/stone/medium/boulder5.ish | Bin .../objects/boulder/stone/medium/boulder6.ish | Bin .../objects/boulder/stone/medium/boulder7.ish | Bin .../objects/boulder/stone/medium/boulder8.ish | Bin .../objects/boulder/stone/medium/boulder9.ish | Bin .../objects/bush/oak/medium/bush1.ish | Bin .../objects/bush/oak/medium/bush2.ish | Bin .../objects/bush/oak/medium/bush3.ish | Bin .../objects/bush/oak/medium/bush4.ish | Bin .../objects/log/oak/medium/log1.ish | Bin .../objects/log/oak/medium/log2.ish | Bin .../objects/log/oak/medium/log3.ish | Bin .../objects/log/oak/medium/log4.ish | Bin .../objects/stump/dark/medium/stump3.ish | Bin .../objects/stump/spruce/medium/stump1.ish | Bin .../objects/stump/spruce/medium/stump2.ish | Bin .../objects/tree/birch/medium/birch1.ish | Bin .../objects/tree/birch/medium/birch2.ish | Bin .../objects/tree/birch/medium/birch3.ish | Bin .../objects/tree/birch/medium/birch4.ish | Bin .../objects/tree/birch/small/birch1.ish | Bin .../objects/tree/birch/small/birch10.ish | Bin .../objects/tree/birch/small/birch11.ish | Bin .../objects/tree/birch/small/birch12.ish | Bin .../objects/tree/birch/small/birch13.ish | Bin .../objects/tree/birch/small/birch14.ish | Bin .../objects/tree/birch/small/birch15.ish | Bin .../objects/tree/birch/small/birch2.ish | Bin .../objects/tree/birch/small/birch3.ish | Bin .../objects/tree/birch/small/birch4.ish | Bin .../objects/tree/birch/small/birch5.ish | Bin .../objects/tree/birch/small/birch6.ish | Bin .../objects/tree/birch/small/birch7.ish | Bin .../objects/tree/birch/small/birch8.ish | Bin .../objects/tree/birch/small/birch9.ish | Bin .../objects/tree/oak/medium/oak1.ish | Bin .../objects/tree/oak/medium/oak2.ish | Bin .../objects/tree/oak/medium/oak3.ish | Bin .../objects/tree/oak/medium/oak4.ish | Bin .../objects/tree/oak/medium/oak5.ish | Bin .../objects/tree/oak/small/oak1.ish | Bin .../objects/tree/oak/small/oak10.ish | Bin .../objects/tree/oak/small/oak11.ish | Bin .../objects/tree/oak/small/oak12.ish | Bin .../objects/tree/oak/small/oak13.ish | Bin .../objects/tree/oak/small/oak14.ish | Bin .../objects/tree/oak/small/oak15.ish | Bin .../objects/tree/oak/small/oak2.ish | Bin .../objects/tree/oak/small/oak3.ish | Bin .../objects/tree/oak/small/oak4.ish | Bin .../objects/tree/oak/small/oak5.ish | Bin .../objects/tree/oak/small/oak6.ish | Bin .../objects/tree/oak/small/oak7.ish | Bin .../objects/tree/oak/small/oak8.ish | Bin .../objects/tree/oak/small/oak9.ish | Bin .../objects/tree/palm/medium/palm1.ish | Bin .../objects/tree/palm/medium/palm2.ish | Bin .../objects/tree/palm/small/palm1.ish | Bin .../objects/tree/palm/small/palm2.ish | Bin .../objects/tree/palm/small/palm3.ish | Bin .../objects/tree/palm/small/palm4.ish | Bin .../objects/tree/palm/small/palm5.ish | Bin .../tree/spruce/dead/medium/spruce_dead1.ish | Bin .../tree/spruce/dead/medium/spruce_dead2.ish | Bin .../tree/spruce/dead/medium/spruce_dead3.ish | Bin .../objects/tree/spruce/medium/spruce1.ish | Bin .../objects/tree/spruce/medium/spruce10.ish | Bin .../objects/tree/spruce/medium/spruce11.ish | Bin .../objects/tree/spruce/medium/spruce12.ish | Bin .../objects/tree/spruce/medium/spruce13.ish | Bin .../objects/tree/spruce/medium/spruce14.ish | Bin .../objects/tree/spruce/medium/spruce15.ish | Bin .../objects/tree/spruce/medium/spruce16.ish | Bin .../objects/tree/spruce/medium/spruce17.ish | Bin .../objects/tree/spruce/medium/spruce18.ish | Bin .../objects/tree/spruce/medium/spruce19.ish | Bin .../objects/tree/spruce/medium/spruce2.ish | Bin .../objects/tree/spruce/medium/spruce20.ish | Bin .../objects/tree/spruce/medium/spruce21.ish | Bin .../objects/tree/spruce/medium/spruce22.ish | Bin .../objects/tree/spruce/medium/spruce23.ish | Bin .../objects/tree/spruce/medium/spruce24.ish | Bin .../objects/tree/spruce/medium/spruce25.ish | Bin .../objects/tree/spruce/medium/spruce26.ish | Bin .../objects/tree/spruce/medium/spruce27.ish | Bin .../objects/tree/spruce/medium/spruce28.ish | Bin .../objects/tree/spruce/medium/spruce29.ish | Bin .../objects/tree/spruce/medium/spruce3.ish | Bin .../objects/tree/spruce/medium/spruce30.ish | Bin .../objects/tree/spruce/medium/spruce31.ish | Bin .../objects/tree/spruce/medium/spruce32.ish | Bin .../objects/tree/spruce/medium/spruce33.ish | Bin .../objects/tree/spruce/medium/spruce34.ish | Bin .../objects/tree/spruce/medium/spruce35.ish | Bin .../objects/tree/spruce/medium/spruce36.ish | Bin .../objects/tree/spruce/medium/spruce37.ish | Bin .../objects/tree/spruce/medium/spruce38.ish | Bin .../objects/tree/spruce/medium/spruce39.ish | Bin .../objects/tree/spruce/medium/spruce4.ish | Bin .../objects/tree/spruce/medium/spruce40.ish | Bin .../objects/tree/spruce/medium/spruce41.ish | Bin .../objects/tree/spruce/medium/spruce42.ish | Bin .../objects/tree/spruce/medium/spruce43.ish | Bin .../objects/tree/spruce/medium/spruce5.ish | Bin .../objects/tree/spruce/medium/spruce6.ish | Bin .../objects/tree/spruce/medium/spruce7.ish | Bin .../objects/tree/spruce/medium/spruce8.ish | Bin .../objects/tree/spruce/medium/spruce9.ish | Bin .../objects/tree/spruce/small/spruce1.ish | Bin .../objects/tree/spruce/small/spruce10.ish | Bin .../objects/tree/spruce/small/spruce11.ish | Bin .../objects/tree/spruce/small/spruce12.ish | Bin .../objects/tree/spruce/small/spruce13.ish | Bin .../objects/tree/spruce/small/spruce2.ish | Bin .../objects/tree/spruce/small/spruce3.ish | Bin .../objects/tree/spruce/small/spruce4.ish | Bin .../objects/tree/spruce/small/spruce5.ish | Bin .../objects/tree/spruce/small/spruce6.ish | Bin .../objects/tree/spruce/small/spruce7.ish | Bin .../objects/tree/spruce/small/spruce8.ish | Bin .../objects/tree/spruce/small/spruce9.ish | Bin 166 files changed, 1128 insertions(+), 681 deletions(-) delete mode 100644 src/main/java/ninja/bytecode/iris/generator/biome/IrisBiome.java create mode 100644 src/main/java/ninja/bytecode/iris/spec/IrisBiome.java create mode 100644 src/main/java/ninja/bytecode/iris/spec/IrisDimension.java create mode 100644 src/main/java/ninja/bytecode/iris/spec/IrisPack.java create mode 100644 src/main/resources/pack/biomes/desert.json create mode 100644 src/main/resources/pack/biomes/desert_hills.json create mode 100644 src/main/resources/pack/biomes/desert_red.json create mode 100644 src/main/resources/pack/biomes/jungle.json create mode 100644 src/main/resources/pack/biomes/jungle_hills.json create mode 100644 src/main/resources/pack/biomes/mesa.json create mode 100644 src/main/resources/pack/biomes/plains.json create mode 100644 src/main/resources/pack/biomes/savanna.json create mode 100644 src/main/resources/pack/biomes/savanna_hills.json create mode 100644 src/main/resources/pack/biomes/swamp.json create mode 100644 src/main/resources/pack/biomes/temp.json create mode 100644 src/main/resources/pack/dimensions/overworld.json create mode 100644 src/main/resources/pack/manifest.json rename src/main/resources/{ => pack}/objects/boulder/stone/medium/boulder1.ish (100%) rename src/main/resources/{ => pack}/objects/boulder/stone/medium/boulder10.ish (100%) rename src/main/resources/{ => pack}/objects/boulder/stone/medium/boulder11.ish (100%) rename src/main/resources/{ => pack}/objects/boulder/stone/medium/boulder12.ish (100%) rename src/main/resources/{ => pack}/objects/boulder/stone/medium/boulder13.ish (100%) rename src/main/resources/{ => pack}/objects/boulder/stone/medium/boulder14.ish (100%) rename src/main/resources/{ => pack}/objects/boulder/stone/medium/boulder15.ish (100%) rename src/main/resources/{ => pack}/objects/boulder/stone/medium/boulder2.ish (100%) rename src/main/resources/{ => pack}/objects/boulder/stone/medium/boulder3.ish (100%) rename src/main/resources/{ => pack}/objects/boulder/stone/medium/boulder4.ish (100%) rename src/main/resources/{ => pack}/objects/boulder/stone/medium/boulder5.ish (100%) rename src/main/resources/{ => pack}/objects/boulder/stone/medium/boulder6.ish (100%) rename src/main/resources/{ => pack}/objects/boulder/stone/medium/boulder7.ish (100%) rename src/main/resources/{ => pack}/objects/boulder/stone/medium/boulder8.ish (100%) rename src/main/resources/{ => pack}/objects/boulder/stone/medium/boulder9.ish (100%) rename src/main/resources/{ => pack}/objects/bush/oak/medium/bush1.ish (100%) rename src/main/resources/{ => pack}/objects/bush/oak/medium/bush2.ish (100%) rename src/main/resources/{ => pack}/objects/bush/oak/medium/bush3.ish (100%) rename src/main/resources/{ => pack}/objects/bush/oak/medium/bush4.ish (100%) rename src/main/resources/{ => pack}/objects/log/oak/medium/log1.ish (100%) rename src/main/resources/{ => pack}/objects/log/oak/medium/log2.ish (100%) rename src/main/resources/{ => pack}/objects/log/oak/medium/log3.ish (100%) rename src/main/resources/{ => pack}/objects/log/oak/medium/log4.ish (100%) rename src/main/resources/{ => pack}/objects/stump/dark/medium/stump3.ish (100%) rename src/main/resources/{ => pack}/objects/stump/spruce/medium/stump1.ish (100%) rename src/main/resources/{ => pack}/objects/stump/spruce/medium/stump2.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/medium/birch1.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/medium/birch2.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/medium/birch3.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/medium/birch4.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/small/birch1.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/small/birch10.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/small/birch11.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/small/birch12.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/small/birch13.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/small/birch14.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/small/birch15.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/small/birch2.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/small/birch3.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/small/birch4.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/small/birch5.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/small/birch6.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/small/birch7.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/small/birch8.ish (100%) rename src/main/resources/{ => pack}/objects/tree/birch/small/birch9.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/medium/oak1.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/medium/oak2.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/medium/oak3.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/medium/oak4.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/medium/oak5.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/small/oak1.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/small/oak10.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/small/oak11.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/small/oak12.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/small/oak13.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/small/oak14.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/small/oak15.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/small/oak2.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/small/oak3.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/small/oak4.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/small/oak5.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/small/oak6.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/small/oak7.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/small/oak8.ish (100%) rename src/main/resources/{ => pack}/objects/tree/oak/small/oak9.ish (100%) rename src/main/resources/{ => pack}/objects/tree/palm/medium/palm1.ish (100%) rename src/main/resources/{ => pack}/objects/tree/palm/medium/palm2.ish (100%) rename src/main/resources/{ => pack}/objects/tree/palm/small/palm1.ish (100%) rename src/main/resources/{ => pack}/objects/tree/palm/small/palm2.ish (100%) rename src/main/resources/{ => pack}/objects/tree/palm/small/palm3.ish (100%) rename src/main/resources/{ => pack}/objects/tree/palm/small/palm4.ish (100%) rename src/main/resources/{ => pack}/objects/tree/palm/small/palm5.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/dead/medium/spruce_dead1.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/dead/medium/spruce_dead2.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/dead/medium/spruce_dead3.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce1.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce10.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce11.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce12.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce13.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce14.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce15.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce16.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce17.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce18.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce19.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce2.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce20.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce21.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce22.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce23.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce24.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce25.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce26.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce27.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce28.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce29.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce3.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce30.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce31.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce32.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce33.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce34.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce35.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce36.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce37.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce38.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce39.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce4.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce40.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce41.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce42.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce43.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce5.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce6.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce7.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce8.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/medium/spruce9.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/small/spruce1.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/small/spruce10.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/small/spruce11.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/small/spruce12.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/small/spruce13.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/small/spruce2.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/small/spruce3.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/small/spruce4.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/small/spruce5.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/small/spruce6.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/small/spruce7.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/small/spruce8.ish (100%) rename src/main/resources/{ => pack}/objects/tree/spruce/small/spruce9.ish (100%) diff --git a/src/main/java/ninja/bytecode/iris/CommandIris.java b/src/main/java/ninja/bytecode/iris/CommandIris.java index 097ca4441..c1e6908b1 100644 --- a/src/main/java/ninja/bytecode/iris/CommandIris.java +++ b/src/main/java/ninja/bytecode/iris/CommandIris.java @@ -10,6 +10,9 @@ import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import ninja.bytecode.iris.generator.IrisGenerator; +import ninja.bytecode.iris.spec.IrisBiome; + public class CommandIris implements CommandExecutor { public void msg(CommandSender s, String msg) @@ -22,25 +25,87 @@ public class CommandIris implements CommandExecutor { if(args.length == 0) { + msg(sender, "/iris rtp [biome] - RTP to a biome"); msg(sender, "/iris gen - Gen a new Iris World"); msg(sender, "/ish - Iris Schematic Commands"); } - + if(args.length > 0) { + if(args[0].equalsIgnoreCase("rtp")) + { + if(sender instanceof Player) + { + Player p = (Player) sender; + World w = p.getWorld(); + + if(w.getGenerator() instanceof IrisGenerator) + { + if(args.length > 1) + { + IrisGenerator g = (IrisGenerator) w.getGenerator(); + IrisBiome b = null; + for(IrisBiome i : IrisBiome.getBiomes()) + { + if(args[1].toLowerCase().equals(i.getName().toLowerCase().replaceAll("\\Q \\E", "_"))) + { + b = i; + break; + } + } + + if(b == null) + { + msg(sender, "Unknown Biome: " + args[1]); + } + + else + { + msg(sender, "Looking for " + b.getName() + "..."); + boolean f = false; + for(int i = 0; i < 10000; i++) + { + int x = (int) ((int) (29999983 / 1.2) * Math.random()); + int z = (int) ((int) (29999983 / 1.2) * Math.random()); + + if(g.getBiome(x, z).equals(b)) + { + f = true; + p.teleport(w.getHighestBlockAt(x, z).getLocation()); + break; + } + } + + if(!f) + { + msg(sender, "Looked for " + b.getName() + " in 10,000 different locations and could not find it. Try again!"); + } + } + } + + else + { + int x = (int) ((int) (29999983 / 1.2) * Math.random()); + int z = (int) ((int) (29999983 / 1.2) * Math.random()); + p.teleport(w.getHighestBlockAt(x, z).getLocation()); + } + } + } + } + if(args[0].equalsIgnoreCase("gen")) { if(sender instanceof Player) { - World wold = ((Player)sender).getWorld(); + World wold = ((Player) sender).getWorld(); World w = Iris.instance.createIrisWorld(); - ((Player)sender).teleport(new Location(w, 0, 256, 0)); - ((Player)sender).setFlying(true); - ((Player)sender).setGameMode(GameMode.CREATIVE); + ((Player) sender).teleport(new Location(w, 0, 256, 0)); + ((Player) sender).setFlying(true); + ((Player) sender).setGameMode(GameMode.CREATIVE); wold.setAutoSave(false); Bukkit.unloadWorld(wold, false); } - + else { Iris.instance.createIrisWorld(); diff --git a/src/main/java/ninja/bytecode/iris/Iris.java b/src/main/java/ninja/bytecode/iris/Iris.java index bf3a96e87..e36317c46 100644 --- a/src/main/java/ninja/bytecode/iris/Iris.java +++ b/src/main/java/ninja/bytecode/iris/Iris.java @@ -1,5 +1,7 @@ package ninja.bytecode.iris; +import java.io.IOException; +import java.io.InputStream; import java.util.UUID; import java.util.function.Function; @@ -18,12 +20,20 @@ import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.util.Vector; import ninja.bytecode.iris.generator.IrisGenerator; -import ninja.bytecode.iris.generator.biome.IrisBiome; +import ninja.bytecode.iris.schematic.Schematic; +import ninja.bytecode.iris.schematic.SchematicGroup; +import ninja.bytecode.iris.spec.IrisBiome; +import ninja.bytecode.iris.spec.IrisDimension; +import ninja.bytecode.iris.spec.IrisPack; import ninja.bytecode.iris.util.Direction; import ninja.bytecode.shuriken.bench.Profiler; import ninja.bytecode.shuriken.collections.GMap; import ninja.bytecode.shuriken.collections.GSet; import ninja.bytecode.shuriken.execution.TaskExecutor; +import ninja.bytecode.shuriken.io.IO; +import ninja.bytecode.shuriken.json.JSONException; +import ninja.bytecode.shuriken.json.JSONObject; +import ninja.bytecode.shuriken.logging.L; public class Iris extends JavaPlugin implements Listener { @@ -34,14 +44,21 @@ public class Iris extends JavaPlugin implements Listener public static Settings settings; public static Iris instance; public static GMap>> values; + public static GMap dimensions; + public static GMap biomes; + public static GMap schematics; public void onEnable() { Direction.calculatePermutations(); + dimensions = new GMap<>(); + biomes = new GMap<>(); + schematics = new GMap<>(); profiler = new Profiler(512); values = new GMap<>(); instance = this; settings = new Settings(); + loadContent(); gen = new IrisGenerator(); genPool = new TaskExecutor(getTC(), settings.performance.threadPriority, "Iris Generator"); getServer().getPluginManager().registerEvents((Listener) this, this); @@ -70,20 +87,27 @@ public class Iris extends JavaPlugin implements Listener Bukkit.unloadWorld(i, false); } } + } + + private void loadContent() + { + L.i("Loading Content"); - Bukkit.getScheduler().scheduleSyncRepeatingTask(this, () -> { - for(World i : Bukkit.getWorlds()) - { - if(i.getGenerator() instanceof IrisGenerator) - { - for(Player j : i.getPlayers()) - { - IrisBiome biome = IrisBiome.findByBiome(j.getLocation().getBlock().getBiome()); - biome.applyEffects(j); - } - } - } - }, 0, 15); + try + { + IrisPack master = new IrisPack(loadJSON("pack/manifest.json")); + master.load(); + } + + catch(Throwable e) + { + e.printStackTrace(); + } + + L.i("Dimensions: " + dimensions.size()); + L.i("Biomes: " + biomes.size()); + L.i("Schematic Groups: " + schematics.size()); + L.flush(); } private int getTC() @@ -138,4 +162,32 @@ public class Iris extends JavaPlugin implements Listener values.get(w).put(t, d); } + + public static IrisDimension loadDimension(String s) throws JSONException, IOException + { + L.i("Loading Iris Dimension " + s); + return new IrisDimension(loadJSON("pack/dimensions/" + s + ".json")); + } + + public static IrisBiome loadBiome(String s) throws JSONException, IOException + { + L.i("Loading Iris Biome " + s); + return new IrisBiome(loadJSON("pack/biomes/" + s + ".json")); + } + + public static Schematic loadSchematic(String s) throws IOException + { + L.i("Loading Iris Object " + s); + return Schematic.load(loadResource("pack/objects/" + s + ".ish")); + } + + public static JSONObject loadJSON(String s) throws JSONException, IOException + { + return new JSONObject(IO.readAll(loadResource(s))); + } + + public static InputStream loadResource(String string) + { + return Iris.class.getResourceAsStream("/" + string); + } } diff --git a/src/main/java/ninja/bytecode/iris/Settings.java b/src/main/java/ninja/bytecode/iris/Settings.java index 50cce7019..4d1df5cce 100644 --- a/src/main/java/ninja/bytecode/iris/Settings.java +++ b/src/main/java/ninja/bytecode/iris/Settings.java @@ -12,22 +12,25 @@ public class Settings public PerformanceMode performanceMode = PerformanceMode.UNLIMITED; public int threadCount = 12; public int threadPriority = Thread.MAX_PRIORITY; - public boolean loadonstart = false; + public boolean loadonstart = true; } public static class GeneratorSettings { - public double horizontalZoom = 0.525; // 0.525 + public double horizontalZoom = 1; // 0.525 public double heightFracture = 155; + public double landScale = 0.125; + public double landChance = 0.529; + public double roughness = 1.333; public double heightMultiplier = 0.806; public double heightExponentBase = 1; public double heightExponentMultiplier = 1.41; - public double heightScale = 1; + public double heightScale = 0.56; public double superHeightScale = 0.95; public double baseHeight = 0.165; public int seaLevel = 63; public double caveDensity = 1; - public double biomeScale = 2.46; + public double biomeScale = 2.5; public boolean flatBedrock = false; public boolean doSchematics = true; } diff --git a/src/main/java/ninja/bytecode/iris/generator/IrisGenerator.java b/src/main/java/ninja/bytecode/iris/generator/IrisGenerator.java index 352b15813..d6bb4f4b8 100644 --- a/src/main/java/ninja/bytecode/iris/generator/IrisGenerator.java +++ b/src/main/java/ninja/bytecode/iris/generator/IrisGenerator.java @@ -5,15 +5,12 @@ import java.io.IOException; import java.util.List; import java.util.Random; -import org.bukkit.Bukkit; -import org.bukkit.Chunk; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Biome; import org.bukkit.generator.BlockPopulator; import ninja.bytecode.iris.Iris; -import ninja.bytecode.iris.generator.biome.IrisBiome; import ninja.bytecode.iris.generator.layer.GenLayerBase; import ninja.bytecode.iris.generator.layer.GenLayerBiome; import ninja.bytecode.iris.generator.layer.GenLayerCaves; @@ -28,6 +25,8 @@ import ninja.bytecode.iris.generator.layer.GenLayerRidge; import ninja.bytecode.iris.generator.populator.BiomeBiasSchematicPopulator; import ninja.bytecode.iris.schematic.Schematic; import ninja.bytecode.iris.schematic.SchematicGroup; +import ninja.bytecode.iris.spec.IrisBiome; +import ninja.bytecode.iris.spec.IrisDimension; import ninja.bytecode.iris.util.AtomicChunkData; import ninja.bytecode.iris.util.ChunkPlan; import ninja.bytecode.iris.util.IrisInterpolation; @@ -75,9 +74,21 @@ public class IrisGenerator extends ParallelChunkGenerator private GenLayerOreEmerald glOreEmerald; private GenLayerOreDiamond glOreDiamond; private RNG rTerrain; + private IrisDimension dim; private World world; private GMap schematicCache = new GMap<>(); + public IrisGenerator() + { + this(Iris.dimensions.get("overworld")); + } + + public IrisGenerator(IrisDimension dim) + { + this.dim = dim; + L.i("Preparing Dimension: " + dim.getName() + " With " + dim.getBiomes().size() + " Biomes..."); + } + @Override public void onInit(World world, Random random) { @@ -86,7 +97,7 @@ public class IrisGenerator extends ParallelChunkGenerator glBase = new GenLayerBase(this, world, random, rTerrain.nextParallelRNG(1)); glLNoise = new GenLayerLayeredNoise(this, world, random, rTerrain.nextParallelRNG(2)); glRidge = new GenLayerRidge(this, world, random, rTerrain.nextParallelRNG(3)); - glBiome = new GenLayerBiome(this, world, random, rTerrain.nextParallelRNG(4)); + glBiome = new GenLayerBiome(this, world, random, rTerrain.nextParallelRNG(4), dim.getBiomes()); glCaves = new GenLayerCaves(this, world, random, rTerrain.nextParallelRNG(-1)); glOreIron = new GenLayerOreIron(this, world, random, rTerrain.nextParallelRNG(-500), 10); glOreLapis = new GenLayerOreLapis(this, world, random, rTerrain.nextParallelRNG(-501), 15); @@ -102,20 +113,55 @@ public class IrisGenerator extends ParallelChunkGenerator return new ChunkPlan(); } + public IrisBiome getBiome(int wxx, int wzx) + { + double wx = Math.round((double) wxx * Iris.settings.gen.horizontalZoom); + double wz = Math.round((double) wzx * Iris.settings.gen.horizontalZoom); + return glBiome.getBiome(wx * Iris.settings.gen.biomeScale, wz * Iris.settings.gen.biomeScale); + } + @Override public Biome genColumn(int wxx, int wzx, int x, int z, ChunkPlan plan) { int seaLevel = Iris.settings.gen.seaLevel; double wx = Math.round((double) wxx * Iris.settings.gen.horizontalZoom); double wz = Math.round((double) wzx * Iris.settings.gen.horizontalZoom); - IrisBiome biome = glBiome.getBiome(wx * Iris.settings.gen.biomeScale, wz * Iris.settings.gen.biomeScale); + IrisBiome biome = getBiome(wxx, wzx); double hv = IrisInterpolation.getBicubicNoise(wxx, wzx, (xf, zf) -> getBiomedHeight((int) Math.round(xf), (int) Math.round(zf), plan)); - hv += glLNoise.generateLayer(hv, wxx, wzx); + hv += glLNoise.generateLayer(hv * Iris.settings.gen.roughness * 215, wxx * Iris.settings.gen.roughness * 0.82, wzx * Iris.settings.gen.roughness * 0.82) * (1.6918 * (hv * 2.35)); hv -= glRidge.generateLayer(hv, wxx, wzx); int height = (int) Math.round(M.clip(hv, 0D, 1D) * 253); int max = Math.max(height, seaLevel); IrisBiome override = null; + if(height > 61 && height < 65) + { + override = IrisBiome.BEACH; + } + + else if(height < 63) + { + if(height < 36) + { + override = IrisBiome.DEEP_OCEAN; + } + + else if(height < 50) + { + override = IrisBiome.OCEAN; + } + + else + { + override = IrisBiome.LAKE; + } + } + + if(override != null) + { + biome = override; + } + for(int i = 0; i < max; i++) { MB mb = ROCK.get(glBase.scatterInt(wzx, i, wxx, ROCK.size())); @@ -134,34 +180,6 @@ public class IrisGenerator extends ParallelChunkGenerator if(i == height - 1) { - if(height > 61 && height < glBase.scatterInt(x, i, z, 4) + 65) - { - override = IrisBiome.BEACH; - } - - else if(height < 63) - { - if(i < 36) - { - override = IrisBiome.DEEP_OCEAN; - } - - else if(i < 50) - { - override = IrisBiome.OCEAN; - } - - else - { - override = IrisBiome.LAKE; - } - } - - if(override != null) - { - biome = override; - } - mb = biome.getSurface(wx, wz, rTerrain); MB mbx = biome.getScatterChanceSingle(); @@ -192,11 +210,6 @@ public class IrisGenerator extends ParallelChunkGenerator glOreEmerald.genOre(wxx, wzx, x, z, height, this, biome); glOreDiamond.genOre(wxx, wzx, x, z, height, this, biome); - if(override != null) - { - return override.getRealBiome(); - } - return biome.getRealBiome(); } @@ -221,7 +234,7 @@ public class IrisGenerator extends ParallelChunkGenerator { int b = 0; int sch = 0; - for(IrisBiome i : IrisBiome.getAllBiomes()) + for(IrisBiome i : IrisBiome.getAllBiomes().copy().add(dim.getBiomes())) { b++; L.i("Processing Populators for Biome " + i.getName()); @@ -233,7 +246,7 @@ public class IrisGenerator extends ParallelChunkGenerator p.add(new BiomeBiasSchematicPopulator(i.getSchematicGroups().get(j), i, gs.getSchematics().toArray(new Schematic[gs.size()]))); } } - + L.i("Initialized " + b + " Biomes with " + p.size() + " Populators using " + sch + " Schematics"); } @@ -306,7 +319,7 @@ public class IrisGenerator extends ParallelChunkGenerator J.attempt(() -> g.setPriority(Integer.valueOf(i.split("\\Q=\\E")[1]).intValue())); } } - + schematicCache.put(folder, g); return g; } @@ -319,7 +332,7 @@ public class IrisGenerator extends ParallelChunkGenerator int wz = (int) Math.round((double) z * Iris.settings.gen.horizontalZoom); IrisBiome biome = glBiome.getBiome(wx * Iris.settings.gen.biomeScale, wz * Iris.settings.gen.biomeScale); double h = Iris.settings.gen.baseHeight + biome.getHeight(); - h += (glBase.getHeight(wx, wz) * biome.getAmp()) - (0.33 * biome.getAmp()); + h += (glBase.getHeight(wx, wz) * 0.5) - (0.33 * 0.5); return h; }); diff --git a/src/main/java/ninja/bytecode/iris/generator/biome/IrisBiome.java b/src/main/java/ninja/bytecode/iris/generator/biome/IrisBiome.java deleted file mode 100644 index e816c2a88..000000000 --- a/src/main/java/ninja/bytecode/iris/generator/biome/IrisBiome.java +++ /dev/null @@ -1,566 +0,0 @@ -package ninja.bytecode.iris.generator.biome; - -import java.lang.reflect.Field; - -import org.bukkit.Material; -import org.bukkit.block.Biome; -import org.bukkit.entity.Player; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; - -import ninja.bytecode.iris.util.MB; -import ninja.bytecode.iris.util.PolygonGenerator; -import ninja.bytecode.shuriken.collections.GList; -import ninja.bytecode.shuriken.collections.GMap; -import ninja.bytecode.shuriken.execution.J; -import ninja.bytecode.shuriken.math.CNG; -import ninja.bytecode.shuriken.math.M; -import ninja.bytecode.shuriken.math.RNG; - -public class IrisBiome -{ - //@builder - public static final IrisBiome RIVER = new IrisBiome("River", Biome.RIVER) - .surface(MB.of(Material.SAND)); - public static final IrisBiome BEACH = new IrisBiome("Beach", Biome.BEACHES) - .surface(MB.of(Material.SAND)) - .schematic("boulder/sandy", 0.009) - .height(0.12) - .schematic("tree/palm", 0.83); - public static final IrisBiome ROAD_GRAVEL = new IrisBiome("Gravel Road", Biome.PLAINS) - .surface(MB.of(Material.GRAVEL), MB.of(Material.COBBLESTONE)) - .schematic("boulder/smooth", 0.001) - .scatter(MB.of(Material.TORCH), 0.05); - public static final IrisBiome ROAD_GRASSY = new IrisBiome("Grass Path", Biome.PLAINS) - .surface(MB.of(Material.GRASS_PATH)) - .scatter(MB.of(Material.TORCH), 0.05); - public static final IrisBiome OCEAN = new IrisBiome("Ocean", Biome.OCEAN) - .surface(MB.of(Material.SAND), MB.of(Material.SAND), MB.of(Material.SAND), MB.of(Material.CLAY), MB.of(Material.GRAVEL)) - .simplexSurface() - .height(-0.03); - public static final IrisBiome LAKE = new IrisBiome("Lake", Biome.OCEAN) - .surface(MB.of(Material.SAND), MB.of(Material.SAND), MB.of(Material.SAND), MB.of(Material.GRAVEL), MB.of(Material.CLAY), MB.of(Material.GRAVEL)) - .simplexSurface() - .height(-0.03); - public static final IrisBiome DEEP_OCEAN = new IrisBiome("Deep Ocean", Biome.DEEP_OCEAN) - .surface(MB.of(Material.SAND), MB.of(Material.CLAY), MB.of(Material.GRAVEL)) - .simplexSurface() - .height(-0.07); - public static final IrisBiome DESERT = new IrisBiome("Desert", Biome.DESERT) - .surface(MB.of(Material.SAND)) - .schematic("boulder/sandy", 0.023) - .schematic("tree/deadwood", 0.03) - .scatter(MB.of(Material.DEAD_BUSH, 0), 0.008) - .dirt(MB.of(Material.SANDSTONE)); - public static final IrisBiome DESERT_RED = new IrisBiome("Red Desert", Biome.DESERT) - .surface(MB.of(Material.SAND, 1)) - .schematic("tree/deadwood", 0.045) - .scatter(MB.of(Material.DEAD_BUSH, 0), 0.008) - .dirt(MB.of(Material.RED_SANDSTONE)); - public static final IrisBiome DESERT_COMBINED = new IrisBiome("Combined Desert", Biome.DESERT) - .surface(MB.of(Material.SAND), MB.of(Material.SAND, 1)) - .scatter(MB.of(Material.DEAD_BUSH, 0), 0.008) - .schematic("tree/deadwood", 0.0443) - .dirt(MB.of(Material.SANDSTONE), MB.of(Material.RED_SANDSTONE)) - .simplexSurface(); - public static final IrisBiome DESERT_HILLS = new IrisBiome("Desert Hills", Biome.DESERT_HILLS) - .surface(MB.of(Material.SAND)) - .amp(0.75) - .height(0.137) - .schematic("tree/deadwood", 0.03) - .schematic("boulder/sandy", 0.015) - .scatter(MB.of(Material.DEAD_BUSH, 0), 0.08) - .dirt(MB.of(Material.SANDSTONE)); - public static final IrisBiome MESA = new IrisBiome("Mesa", Biome.MESA) - .surface(MB.of(Material.HARD_CLAY), MB.of(Material.STAINED_CLAY, 1), MB.of(Material.STAINED_CLAY, 8), MB.of(Material.STAINED_CLAY, 12)) - .dirt(MB.of(Material.CLAY), MB.of(Material.SAND), MB.of(Material.SAND, 1)) - .schematic("boulder/sandy", 0.02) - .simplexSurface(); - public static final IrisBiome SAVANNA = new IrisBiome("Savanna", Biome.SAVANNA) - .schematic("tree/deadwood", 0.03) - .schematic("boulder/sandy", 0.02) - .schematic("boulder", 0.02) - .scatter(MB.of(Material.LONG_GRASS, 1), 0.18); - public static final IrisBiome SAVANNA_HILLS = new IrisBiome("Savanna Hills", Biome.SAVANNA_ROCK) - .scatter(MB.of(Material.LONG_GRASS, 1), 0.18) - .schematic("tree/deadwood", 0.01) - .schematic("boulder", 0.02) - .schematic("boulder/sandy", 0.02) - .height(0.13) - .amp(0.75); - public static final IrisBiome JUNGLE = new IrisBiome("Jungle", Biome.JUNGLE) - .scatter(MB.of(Material.LONG_GRASS, 1), 0.058) - .schematic("boulder/smooth", 0.02) - .schematic("tree/oak/massive", 0.045) - .scatter(MB.of(Material.LONG_GRASS, 2), 0.013); - public static final IrisBiome JUNGLE_HILLS = new IrisBiome("Jungle Hills", Biome.JUNGLE_HILLS) - .scatter(MB.of(Material.LONG_GRASS, 1), 0.081) - .schematic("boulder/smooth", 0.02) - .schematic("tree/oak/massive", 0.045) - .amp(1.75) - .height(0.13) - .scatter(MB.of(Material.LONG_GRASS, 2), 0.02); - public static final IrisBiome SWAMP = new IrisBiome("Swamp", Biome.SWAMPLAND) - .scatter(MB.of(Material.LONG_GRASS, 1), 0.04) - .schematic("tree/willow", 2.5) - .schematic("tree/god/willow", 0.01) - .schematic("boulder", 0.02) - .scatter(MB.of(Material.LONG_GRASS, 2), 0.03); - public static final IrisBiome PLAINS = new IrisBiome("Plains", Biome.PLAINS) - .scatter(MB.of(Material.LONG_GRASS, 1), 0.38) - .schematic("tree/oak/bush", 0.25) - .schematic("boulder", 0.02) - .amp(0.4) - .scatter(MB.of(Material.LONG_GRASS, 2), 0.03); - public static final IrisBiome DECAYING_PLAINS = new IrisBiome("Decaying Plains", Biome.PLAINS) - .surface(MB.of(Material.GRASS_PATH), MB.of(Material.GRASS)) - .scatter(MB.of(Material.LONG_GRASS, 1), 0.04) - .schematic("tree/deadwood", 0.03) - .schematic("boulder/sandy", 0.01) - .simplexSurface(); - public static final IrisBiome FOREST = new IrisBiome("Forest", Biome.FOREST) - .scatter(MB.of(Material.LONG_GRASS, 1), 0.23) - .schematic("tree/oak", 2.31) - .schematic("boulder", 0.02) - .schematic("boulder/smooth", 0.01) - .schematic("tree/oak/cracked", 0.03) - .schematic("tree/oak/large", 1.41) - .schematic("tree/oak/massive", 0.045) - .scatter(MB.of(Material.LONG_GRASS, 2), 0.13); - public static final IrisBiome FOREST_HILLS = new IrisBiome("Forest Hills", Biome.FOREST_HILLS) - .scatter(MB.of(Material.LONG_GRASS, 1), 0.23) - .schematic("tree/oak", 2.31) - .schematic("boulder", 0.02) - .schematic("boulder/smooth", 0.01) - .schematic("tree/oak/cracked", 0.03) - .schematic("tree/oak/massive", 0.045) - .schematic("tree/oak/large", 0.31) - .amp(0.75) - .height(0.13) - .scatter(MB.of(Material.LONG_GRASS, 2), 0.13); - public static final IrisBiome FOREST_MOUNTAINS = new IrisBiome("Forest Mountains", Biome.MUTATED_EXTREME_HILLS_WITH_TREES) - .scatter(MB.of(Material.LONG_GRASS, 1), 0.13) - .amp(2.25) - .schematic("tree/pine", 2.31) - .schematic("boulder", 0.04) - .schematic("boulder/smooth", 0.01) - .schematic("tree/redwood", 1.11) - .schematic("tree/redwood/tall", 2.51) - .height(0.365) - .scatter(MB.of(Material.LONG_GRASS, 2), 0.13); - public static final IrisBiome HAUNTED_FOREST = new IrisBiome("Haunted Forest", Biome.MUTATED_SWAMPLAND) - .scatter(MB.of(Material.LONG_GRASS, 1), 0.13) - .scatter(MB.of(Material.LONG_GRASS, 2), 0.13) - .schematic("tree/willow", 1.21) - .schematic("tree/god/willow", 0.04) - .schematic("tree/oak", 0.71) - .schematic("boulder", 0.01) - .schematic("boulder/smooth", 0.02) - .schematic("tree/oak/cracked", 0.03) - .schematic("tree/oak/massive", 0.4) - .schematic("tree/oak/bush", 1.83) - .schematic("structure/magical", 0.002) - .addEffect(new PotionEffect(PotionEffectType.SLOW_DIGGING, 100, 0)) - .addEffect(new PotionEffect(PotionEffectType.SLOW, 100, 0)) - .addEffect(new PotionEffect(PotionEffectType.HUNGER, 100, 0)) - .surface(MB.of(Material.GRASS), MB.of(Material.GRASS), MB.of(Material.GRASS), MB.of(Material.GRASS), MB.of(Material.SOUL_SAND), MB.of(Material.DIRT), MB.of(Material.DIRT, 1), MB.of(Material.DIRT, 2)) - .scatterSurface(); - public static final IrisBiome BIRCH_FOREST = new IrisBiome("Birch Forest", Biome.BIRCH_FOREST) - .scatter(MB.of(Material.LONG_GRASS, 1), 0.23) - .schematic("tree/birch", 2.51) - .schematic("boulder", 0.02) - .schematic("boulder/smooth", 0.01) - .schematic("tree/birch/small", 3.25) - .scatter(MB.of(Material.LONG_GRASS, 2), 0.13); - public static final IrisBiome BIRCH_FOREST_HILLS = new IrisBiome("Birch Forest Hills", Biome.BIRCH_FOREST_HILLS) - .scatter(MB.of(Material.LONG_GRASS, 1), 0.23) - .schematic("tree/birch", 2.51) - .schematic("boulder/smooth", 0.01) - .schematic("boulder", 0.02) - .schematic("tree/birch/small", 3.25) - .amp(0.75) - .height(0.13) - .scatter(MB.of(Material.LONG_GRASS, 2), 0.13); - public static final IrisBiome ROOFED_FOREST = new IrisBiome("Roofed Forest", Biome.ROOFED_FOREST) - .scatter(MB.of(Material.LONG_GRASS, 1), 0.23) - .schematic("boulder", 0.02) - .schematic("tree/oak/massive", 0.02) - .schematic("tree/oak/roofed", 0.78) - .schematic("boulder/smooth", 0.01) - .schematic("structure/magical", 0.009) - .scatter(MB.of(Material.LONG_GRASS, 2), 0.13); - public static final IrisBiome TAIGA = new IrisBiome("Taiga", Biome.TAIGA) - .schematic("tree/pine/cracked", 0.03) - .schematic("tree/pine", 2.51) - .schematic("boulder", 0.02) - .scatter(MB.of(Material.LONG_GRASS, 2), 0.07); - public static final IrisBiome EXTREME_HILLS = new IrisBiome("Extreme Hills", Biome.EXTREME_HILLS) - .scatter(MB.of(Material.LONG_GRASS, 2), 0.04) - .amp(1.565) - .schematic("boulder/smooth", 0.01) - .height(0.342); - public static final IrisBiome EXTREME_HILLS_TREES = new IrisBiome("Extreme Hills +", Biome.EXTREME_HILLS_WITH_TREES) - .scatter(MB.of(Material.LONG_GRASS, 2), 0.09) - .schematic("boulder", 0.02) - .schematic("tree/pine", 1.02) - .schematic("boulder/smooth", 0.01) - .schematic("tree/redwood/tall", 3.02) - .amp(1.525) - .height(0.352); - public static final IrisBiome TAIGA_COLD = new IrisBiome("Taiga Cold", Biome.TAIGA_COLD) - .scatter(MB.of(Material.LONG_GRASS, 2), 0.04) - .schematic("tree/pine", 2.51) - .schematic("boulder/snowy", 0.02) - .schematic("tree/pine/cracked", 0.03); - public static final IrisBiome TAIGA_COLD_HILLS = new IrisBiome("Taiga Cold Hills", Biome.TAIGA_COLD_HILLS) - .schematic("tree/pine", 2.51) - .schematic("boulder/snowy", 0.02) - .schematic("tree/pine/cracked", 0.03); - public static final IrisBiome ICE_FLATS = new IrisBiome("Ice Flats", Biome.ICE_FLATS) - .schematic("boulder/snowy", 0.03); - public static final IrisBiome ICE_MOUNTAINS = new IrisBiome("Ice Mountains", Biome.ICE_MOUNTAINS) - .schematic("boulder/snowy", 0.03) - .amp(1.45); - public static final IrisBiome REDWOOD_TAIGA = new IrisBiome("Redwood Taiga", Biome.REDWOOD_TAIGA) - .surface(MB.of(Material.DIRT, 2), MB.of(Material.DIRT, 1)) - .schematic("tree/redwood/large", 0.87) - .schematic("tree/redwood/massive", 0.2) - .schematic("tree/pine/cracked", 0.03) - .schematic("boulder", 0.02) - .schematic("tree/redwood", 3.5) - .simplexSurface(); - public static final IrisBiome REDWOOD_TAIGA_HILLS = new IrisBiome("Redwood Taiga Hills", Biome.REDWOOD_TAIGA_HILLS) - .surface(MB.of(Material.DIRT, 2), MB.of(Material.DIRT, 1)) - .schematic("tree/redwood/large", 0.87) - .schematic("tree/pine/cracked", 0.03) - .schematic("boulder", 0.02) - .schematic("tree/redwood", 3.5) - .amp(0.75) - .height(0.167) - .simplexSurface(); - - //@done - private static final GMap map = build(); - private String name; - private Biome realBiome; - private double height; - private double amp; - private GList effects; - private GList surface; - private GList dirt; - private GMap scatterChance; - private boolean scatterSurface; - private boolean simplexScatter; - private GMap schematicGroups; - private PolygonGenerator.EnumPolygonGenerator poly; - - public IrisBiome(String name, Biome realBiome) - { - this.name = name; - effects = new GList<>(); - this.realBiome = realBiome; - this.height = 0.125; - this.amp = 0.5; - scatterChance = new GMap<>(); - schematicGroups = new GMap<>(); - surface(new MB(Material.GRASS)).dirt(new MB(Material.DIRT), new MB(Material.DIRT, 1)); - } - - private static GMap build() - { - GMap g = new GMap(); - - for(Field i : IrisBiome.class.getDeclaredFields()) - { - J.attempt(() -> - { - i.setAccessible(true); - - IrisBiome bb = (IrisBiome) i.get(null); - - if(!g.containsKey(bb.realBiome)) - { - g.put(bb.realBiome, bb); - } - }); - } - - return g; - } - - public IrisBiome scatter(MB mb, Double chance) - { - scatterChance.put(mb, chance); - - return this; - } - - public IrisBiome schematic(String t, double chance) - { - schematicGroups.put(t, chance); - - return this; - } - - public IrisBiome simplexSurface() - { - simplexScatter = true; - return this; - } - - public IrisBiome scatterSurface() - { - scatterSurface = true; - return this; - } - - public IrisBiome surface(MB... mbs) - { - surface = new GList<>(mbs); - return this; - } - - public IrisBiome dirt(MB... mbs) - { - dirt = new GList<>(mbs); - return this; - } - - public IrisBiome height(double height) - { - this.height = height; - return this; - } - - public IrisBiome amp(double amp) - { - this.amp = amp; - return this; - } - - public String getName() - { - return name; - } - - public Biome getRealBiome() - { - return realBiome; - } - - public double getHeight() - { - return height; - } - - public double getAmp() - { - return amp; - } - - public GList getSurface() - { - return surface; - } - - public GList getDirt() - { - return dirt; - } - - public MB getSurface(double x, double z, RNG rng) - { - double wx = x + 1000D; - double wz = z + 1000D; - if(simplexScatter) - { - if(poly == null) - { - poly = new PolygonGenerator.EnumPolygonGenerator(rng, 0.25, 2, getSurface().toArray(new MB[getSurface().size()]), (g) -> - { - return g.fractureWith(new CNG(rng.nextParallelRNG(56), 1D, 2).scale(0.0155), 242); - }); - } - - return poly.getChoice(wx * 0.2D, wz * 0.2D); - } - - if(scatterSurface) - { - if(poly == null) - { - poly = new PolygonGenerator.EnumPolygonGenerator(rng, 15.05, 2, getSurface().toArray(new MB[getSurface().size()]), (g) -> - { - return g.fractureWith(new CNG(rng.nextParallelRNG(55), 1D, 2).scale(0.0155), 224); - }); - } - - return poly.getChoice(wx * 0.2D, wz * 0.2D); - } - - return getSurface().getRandom(); - } - - public MB getDirtRNG() - { - return getDirt().getRandom(); - } - - public GMap getScatterChance() - { - return scatterChance; - } - - public IrisBiome addEffect(PotionEffect effect) - { - effects.add(effect); - return this; - } - - public MB getScatterChanceSingle() - { - for(MB i : getScatterChance().keySet()) - { - if(M.r(getScatterChance().get(i))) - { - return i; - } - } - - return MB.of(Material.AIR); - } - - public static GList getBiomes() - { - return map.v().remove(IrisBiome.ROAD_GRASSY, IrisBiome.ROAD_GRAVEL, IrisBiome.BEACH, IrisBiome.LAKE, IrisBiome.RIVER); - } - - public static GList getAllBiomes() - { - return map.v(); - } - - public static IrisBiome findByBiome(Biome biome) - { - if(map.containsKey(biome)) - { - return map.get(biome); - } - - return IrisBiome.PLAINS; - } - - public GMap getSchematicGroups() - { - return schematicGroups; - } - - public void applyEffects(Player j) - { - if(j.getLocation().getY() < 63) - { - return; - } - - for(PotionEffect i : effects) - { - j.getPlayer().removePotionEffect(i.getType()); - j.addPotionEffect(i); - } - } - - @Override - public int hashCode() - { - final int prime = 31; - int result = 1; - long temp; - temp = Double.doubleToLongBits(amp); - result = prime * result + (int) (temp ^ (temp >>> 32)); - result = prime * result + ((dirt == null) ? 0 : dirt.hashCode()); - result = prime * result + ((effects == null) ? 0 : effects.hashCode()); - temp = Double.doubleToLongBits(height); - result = prime * result + (int) (temp ^ (temp >>> 32)); - result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + ((poly == null) ? 0 : poly.hashCode()); - result = prime * result + ((realBiome == null) ? 0 : realBiome.hashCode()); - result = prime * result + ((scatterChance == null) ? 0 : scatterChance.hashCode()); - result = prime * result + (scatterSurface ? 1231 : 1237); - result = prime * result + ((schematicGroups == null) ? 0 : schematicGroups.hashCode()); - result = prime * result + (simplexScatter ? 1231 : 1237); - result = prime * result + ((surface == null) ? 0 : surface.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) - { - if(this == obj) - return true; - if(obj == null) - return false; - if(getClass() != obj.getClass()) - return false; - IrisBiome other = (IrisBiome) obj; - if(Double.doubleToLongBits(amp) != Double.doubleToLongBits(other.amp)) - return false; - if(dirt == null) - { - if(other.dirt != null) - return false; - } - else if(!dirt.equals(other.dirt)) - return false; - if(effects == null) - { - if(other.effects != null) - return false; - } - else if(!effects.equals(other.effects)) - return false; - if(Double.doubleToLongBits(height) != Double.doubleToLongBits(other.height)) - return false; - if(name == null) - { - if(other.name != null) - return false; - } - else if(!name.equals(other.name)) - return false; - if(poly == null) - { - if(other.poly != null) - return false; - } - else if(!poly.equals(other.poly)) - return false; - if(realBiome != other.realBiome) - return false; - if(scatterChance == null) - { - if(other.scatterChance != null) - return false; - } - else if(!scatterChance.equals(other.scatterChance)) - return false; - if(scatterSurface != other.scatterSurface) - return false; - if(schematicGroups == null) - { - if(other.schematicGroups != null) - return false; - } - else if(!schematicGroups.equals(other.schematicGroups)) - return false; - if(simplexScatter != other.simplexScatter) - return false; - if(surface == null) - { - if(other.surface != null) - return false; - } - else if(!surface.equals(other.surface)) - return false; - return true; - } -} diff --git a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerBiome.java b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerBiome.java index b4b9ef3ca..c35e2cfab 100644 --- a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerBiome.java +++ b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerBiome.java @@ -8,11 +8,13 @@ import org.bukkit.World; import ninja.bytecode.iris.Iris; import ninja.bytecode.iris.generator.IrisGenerator; -import ninja.bytecode.iris.generator.biome.IrisBiome; +import ninja.bytecode.iris.spec.IrisBiome; import ninja.bytecode.iris.util.GenLayer; import ninja.bytecode.iris.util.MaxingGenerator; import ninja.bytecode.iris.util.MaxingGenerator.EnumMaxingGenerator; +import ninja.bytecode.shuriken.collections.GList; import ninja.bytecode.shuriken.math.CNG; +import ninja.bytecode.shuriken.math.M; import ninja.bytecode.shuriken.math.RNG; public class GenLayerBiome extends GenLayer @@ -23,17 +25,19 @@ public class GenLayerBiome extends GenLayer private CNG pathCheck; private CNG riverCheck; private CNG fracture; + private CNG island; - public GenLayerBiome(IrisGenerator iris, World world, Random random, RNG rng) + public GenLayerBiome(IrisGenerator iris, World world, Random random, RNG rng, GList biomes) { //@builder super(iris, world, random, rng); + island = new CNG(rng.nextParallelRNG(10334), 1D, 3).scale(0.003 * Iris.settings.gen.landScale).fractureWith(new CNG(rng.nextParallelRNG(34), 1D, 12).scale(0.6), 180); fracture = new CNG(rng.nextParallelRNG(28), 1D, 24).scale(0.0021).fractureWith(new CNG(rng.nextParallelRNG(34), 1D, 12).scale(0.01), 12250); factory = (g) -> g.fractureWith(new CNG(rng.nextParallelRNG(29), 1D, 4).scale(0.02), 56); riverCheck = new CNG(rng.nextParallelRNG(30), 1D, 2).scale(0.00096); pathCheck = new CNG(rng.nextParallelRNG(31), 1D, 1).scale(0.00096); roads = new MaxingGenerator(rng.nextParallelRNG(32), 5, 0.00055, 8, factory); - biomeGenerator = new EnumMaxingGenerator(rng.nextParallelRNG(33), 0.00755 * Iris.settings.gen.biomeScale, 1, IrisBiome.getBiomes().toArray(new IrisBiome[IrisBiome.getBiomes().size()]), factory); + biomeGenerator = new EnumMaxingGenerator(rng.nextParallelRNG(33), 0.00755 * Iris.settings.gen.biomeScale, 1, biomes.toArray(new IrisBiome[biomes.size()]), factory); //@done } @@ -41,32 +45,48 @@ public class GenLayerBiome extends GenLayer { double x = xx + (fracture.noise(zz, xx) * 1550D); double z = zz - (fracture.noise(xx, zz) * 1550D); - - if(riverCheck.noise(x, z) > 0.75) + IrisBiome cbi = IrisBiome.OCEAN; + double land = island.noise(x, z); + double landChance = 1D - M.clip(Iris.settings.gen.landChance, 0D, 1D); + + if(land > landChance && land < landChance + 0.0175) { - if(biomeGenerator.hasBorder(3, 3 + Math.pow(riverCheck.noise(x, z), 1.25) * 16, x, z)) + cbi = IrisBiome.BEACH; + } + + else if(land > landChance + 0.0175) + { + if(riverCheck.noise(x, z) > 0.75) { - return IrisBiome.RIVER; + if(biomeGenerator.hasBorder(3, 3 + Math.pow(riverCheck.noise(x, z), 1.25) * 16, x, z)) + { + return IrisBiome.RIVER; + } + } + + cbi = biomeGenerator.getChoice(x, z); + + if(pathCheck.noise(x, z) > 0.33) + { + IrisBiome road = IrisBiome.ROAD_GRAVEL; + + if(cbi.getSurface().get(0).material.equals(Material.GRASS)) + { + road = IrisBiome.ROAD_GRASSY; + } + + if(Math.abs(road.getHeight() - cbi.getHeight()) < 0.0001 && roads.hasBorder(4, 3, xx, zz)) + { + return road; + } } } - - IrisBiome cbi = biomeGenerator.getChoice(x, z); - - if(pathCheck.noise(x, z) > 0.33) + + else if(land < 0.3) { - IrisBiome road = IrisBiome.ROAD_GRAVEL; - - if(cbi.getSurface().get(0).material.equals(Material.GRASS)) - { - road = IrisBiome.ROAD_GRASSY; - } - - if(Math.abs(road.getHeight() - cbi.getHeight()) < 0.0001 && roads.hasBorder(4, 3, xx, zz)) - { - return road; - } + cbi = IrisBiome.DEEP_OCEAN; } - + return cbi; } diff --git a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerLayeredNoise.java b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerLayeredNoise.java index 54ed3aa6a..2bf5b8ba2 100644 --- a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerLayeredNoise.java +++ b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerLayeredNoise.java @@ -39,6 +39,6 @@ public class GenLayerLayeredNoise extends GenLayer @Override public double generateLayer(double gnoise, double dx, double dz) { - return 0.65* gen.noise(gnoise, dx + (fract.noise(gnoise, dx, dz) * 333), dz - (fract.noise(dz, dx, gnoise) * 333)); + return 0.65 * gen.noise(gnoise, dx + (fract.noise(gnoise, dx, dz) * 333), dz - (fract.noise(dz, dx, gnoise) * 333)); } } diff --git a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreCoal.java b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreCoal.java index ac0b71386..844037e24 100644 --- a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreCoal.java +++ b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreCoal.java @@ -6,7 +6,7 @@ import org.bukkit.Material; import org.bukkit.World; import ninja.bytecode.iris.generator.IrisGenerator; -import ninja.bytecode.iris.generator.biome.IrisBiome; +import ninja.bytecode.iris.spec.IrisBiome; import ninja.bytecode.iris.util.GenLayer; import ninja.bytecode.iris.util.MB; import ninja.bytecode.shuriken.math.CNG; diff --git a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreDiamond.java b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreDiamond.java index 2d82f7a3b..552926e34 100644 --- a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreDiamond.java +++ b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreDiamond.java @@ -6,7 +6,7 @@ import org.bukkit.Material; import org.bukkit.World; import ninja.bytecode.iris.generator.IrisGenerator; -import ninja.bytecode.iris.generator.biome.IrisBiome; +import ninja.bytecode.iris.spec.IrisBiome; import ninja.bytecode.iris.util.GenLayer; import ninja.bytecode.iris.util.MB; import ninja.bytecode.shuriken.math.CNG; diff --git a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreEmerald.java b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreEmerald.java index 2f106db6e..b14df475a 100644 --- a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreEmerald.java +++ b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreEmerald.java @@ -6,7 +6,7 @@ import org.bukkit.Material; import org.bukkit.World; import ninja.bytecode.iris.generator.IrisGenerator; -import ninja.bytecode.iris.generator.biome.IrisBiome; +import ninja.bytecode.iris.spec.IrisBiome; import ninja.bytecode.iris.util.GenLayer; import ninja.bytecode.iris.util.MB; import ninja.bytecode.shuriken.math.CNG; diff --git a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreGold.java b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreGold.java index 4e4c6bbd7..3df835432 100644 --- a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreGold.java +++ b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreGold.java @@ -6,7 +6,7 @@ import org.bukkit.Material; import org.bukkit.World; import ninja.bytecode.iris.generator.IrisGenerator; -import ninja.bytecode.iris.generator.biome.IrisBiome; +import ninja.bytecode.iris.spec.IrisBiome; import ninja.bytecode.iris.util.GenLayer; import ninja.bytecode.iris.util.MB; import ninja.bytecode.shuriken.math.CNG; diff --git a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreIron.java b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreIron.java index 0d7aab0ed..642dcb2ee 100644 --- a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreIron.java +++ b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreIron.java @@ -6,7 +6,7 @@ import org.bukkit.Material; import org.bukkit.World; import ninja.bytecode.iris.generator.IrisGenerator; -import ninja.bytecode.iris.generator.biome.IrisBiome; +import ninja.bytecode.iris.spec.IrisBiome; import ninja.bytecode.iris.util.GenLayer; import ninja.bytecode.iris.util.MB; import ninja.bytecode.shuriken.math.CNG; diff --git a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreLapis.java b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreLapis.java index c9a0412fa..94b6e3dd6 100644 --- a/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreLapis.java +++ b/src/main/java/ninja/bytecode/iris/generator/layer/GenLayerOreLapis.java @@ -6,7 +6,7 @@ import org.bukkit.Material; import org.bukkit.World; import ninja.bytecode.iris.generator.IrisGenerator; -import ninja.bytecode.iris.generator.biome.IrisBiome; +import ninja.bytecode.iris.spec.IrisBiome; import ninja.bytecode.iris.util.GenLayer; import ninja.bytecode.iris.util.MB; import ninja.bytecode.shuriken.math.CNG; diff --git a/src/main/java/ninja/bytecode/iris/generator/populator/BiomeBiasSchematicPopulator.java b/src/main/java/ninja/bytecode/iris/generator/populator/BiomeBiasSchematicPopulator.java index 5c466e037..b01e552e9 100644 --- a/src/main/java/ninja/bytecode/iris/generator/populator/BiomeBiasSchematicPopulator.java +++ b/src/main/java/ninja/bytecode/iris/generator/populator/BiomeBiasSchematicPopulator.java @@ -5,8 +5,8 @@ import java.util.Random; import org.bukkit.Chunk; import org.bukkit.World; -import ninja.bytecode.iris.generator.biome.IrisBiome; import ninja.bytecode.iris.schematic.Schematic; +import ninja.bytecode.iris.spec.IrisBiome; import ninja.bytecode.iris.util.MB; public class BiomeBiasSchematicPopulator extends SurfaceBiasSchematicPopulator diff --git a/src/main/java/ninja/bytecode/iris/schematic/Schematic.java b/src/main/java/ninja/bytecode/iris/schematic/Schematic.java index 16675c756..3319573c6 100644 --- a/src/main/java/ninja/bytecode/iris/schematic/Schematic.java +++ b/src/main/java/ninja/bytecode/iris/schematic/Schematic.java @@ -170,12 +170,22 @@ public class Schematic } } } + + public static Schematic load(InputStream in) throws IOException + { + Schematic s = new Schematic(1, 1, 1); + s.read(in); + + L.i("Loaded Internal Schematic: " + s.getSchematic().size()); + return s; + } public static Schematic load(File f) throws IOException { Schematic s = new Schematic(1, 1, 1); FileInputStream fin = new FileInputStream(f); s.read(fin); + L.i("Loaded Schematic: " + f.getPath() + " Size: " + s.getSchematic().size()); return s; diff --git a/src/main/java/ninja/bytecode/iris/spec/IrisBiome.java b/src/main/java/ninja/bytecode/iris/spec/IrisBiome.java new file mode 100644 index 000000000..ab19bea1f --- /dev/null +++ b/src/main/java/ninja/bytecode/iris/spec/IrisBiome.java @@ -0,0 +1,431 @@ +package ninja.bytecode.iris.spec; + +import java.lang.reflect.Field; + +import org.bukkit.Material; +import org.bukkit.block.Biome; + +import ninja.bytecode.iris.util.MB; +import ninja.bytecode.iris.util.PolygonGenerator; +import ninja.bytecode.shuriken.collections.GList; +import ninja.bytecode.shuriken.collections.GMap; +import ninja.bytecode.shuriken.execution.J; +import ninja.bytecode.shuriken.json.JSONArray; +import ninja.bytecode.shuriken.json.JSONObject; +import ninja.bytecode.shuriken.math.CNG; +import ninja.bytecode.shuriken.math.M; +import ninja.bytecode.shuriken.math.RNG; + +public class IrisBiome +{ + public static final double MAX_HEIGHT = 0.77768; + public static final double IDEAL_HEIGHT = 0.1127; + public static final double MIN_HEIGHT = -0.0218; + + //@builder + public static final IrisBiome RIVER = new IrisBiome("River", Biome.RIVER) + .surface(MB.of(Material.SAND)) + .coreBiome(); + public static final IrisBiome BEACH = new IrisBiome("Beach", Biome.BEACHES) + .height(-0.078) + .coreBiome() + .surface(MB.of(Material.SAND)); + public static final IrisBiome ROAD_GRAVEL = new IrisBiome("Gravel Road", Biome.PLAINS) + .surface(MB.of(Material.GRAVEL), MB.of(Material.COBBLESTONE)) + .coreBiome() + .scatter(MB.of(Material.TORCH), 0.05); + public static final IrisBiome ROAD_GRASSY = new IrisBiome("Grass Path", Biome.PLAINS) + .surface(MB.of(Material.GRASS_PATH)) + .coreBiome() + .scatter(MB.of(Material.TORCH), 0.05); + public static final IrisBiome OCEAN = new IrisBiome("Ocean", Biome.OCEAN) + .height(-0.5) + .coreBiome() + .surface(MB.of(Material.SAND), MB.of(Material.SAND), MB.of(Material.SAND), MB.of(Material.CLAY), MB.of(Material.GRAVEL)) + .simplexSurface(); + public static final IrisBiome LAKE = new IrisBiome("Lake", Biome.DESERT) + .height(-0.38) + .coreBiome() + .surface(MB.of(Material.SAND), MB.of(Material.SAND), MB.of(Material.SAND), MB.of(Material.GRAVEL), MB.of(Material.CLAY), MB.of(Material.GRAVEL)) + .simplexSurface(); + public static final IrisBiome DEEP_OCEAN = new IrisBiome("Deep Ocean", Biome.DEEP_OCEAN) + .height(-0.88) + .coreBiome() + .surface(MB.of(Material.SAND), MB.of(Material.CLAY), MB.of(Material.GRAVEL)) + .simplexSurface(); + +// public static final IrisBiome FOREST = new IrisBiome("Forest", Biome.FOREST) +// .scatter(MB.of(Material.LONG_GRASS, 1), 0.23) +// .scatter(MB.of(Material.LONG_GRASS, 2), 0.13); +// public static final IrisBiome FOREST_HILLS = new IrisBiome("Forest Hills", Biome.FOREST_HILLS) +// .scatter(MB.of(Material.LONG_GRASS, 1), 0.23) +// .scatter(MB.of(Material.LONG_GRASS, 2), 0.13); +// public static final IrisBiome FOREST_MOUNTAINS = new IrisBiome("Forest Mountains", Biome.MUTATED_EXTREME_HILLS_WITH_TREES) +// .scatter(MB.of(Material.LONG_GRASS, 1), 0.13) +// .scatter(MB.of(Material.LONG_GRASS, 2), 0.13); +// public static final IrisBiome HAUNTED_FOREST = new IrisBiome("Haunted Forest", Biome.MUTATED_SWAMPLAND) +// .scatter(MB.of(Material.LONG_GRASS, 1), 0.13) +// .scatter(MB.of(Material.LONG_GRASS, 2), 0.13) +// .surface(MB.of(Material.GRASS), MB.of(Material.GRASS), MB.of(Material.GRASS), MB.of(Material.GRASS), MB.of(Material.SOUL_SAND), MB.of(Material.DIRT), MB.of(Material.DIRT, 1), MB.of(Material.DIRT, 2)) +// .scatterSurface(); +// public static final IrisBiome BIRCH_FOREST = new IrisBiome("Birch Forest", Biome.BIRCH_FOREST) +// .scatter(MB.of(Material.LONG_GRASS, 1), 0.23) +// .scatter(MB.of(Material.LONG_GRASS, 2), 0.13); +// public static final IrisBiome BIRCH_FOREST_HILLS = new IrisBiome("Birch Forest Hills", Biome.BIRCH_FOREST_HILLS) +// .scatter(MB.of(Material.LONG_GRASS, 1), 0.23) +// .scatter(MB.of(Material.LONG_GRASS, 2), 0.13); +// public static final IrisBiome ROOFED_FOREST = new IrisBiome("Roofed Forest", Biome.ROOFED_FOREST) +// .scatter(MB.of(Material.LONG_GRASS, 1), 0.23) +// .scatter(MB.of(Material.LONG_GRASS, 2), 0.13); +// public static final IrisBiome TAIGA = new IrisBiome("Taiga", Biome.TAIGA) +// .scatter(MB.of(Material.LONG_GRASS, 2), 0.07); +// public static final IrisBiome EXTREME_HILLS = new IrisBiome("Extreme Hills", Biome.EXTREME_HILLS) +// .scatter(MB.of(Material.LONG_GRASS, 2), 0.04) +// .height(0.28); +// public static final IrisBiome EXTREME_HILLS_TREES = new IrisBiome("Extreme Hills +", Biome.EXTREME_HILLS_WITH_TREES) +// .scatter(MB.of(Material.LONG_GRASS, 2), 0.09); +// public static final IrisBiome TAIGA_COLD = new IrisBiome("Taiga Cold", Biome.TAIGA_COLD) +// .scatter(MB.of(Material.LONG_GRASS, 2), 0.04); +// public static final IrisBiome TAIGA_COLD_HILLS = new IrisBiome("Taiga Cold Hills", Biome.TAIGA_COLD_HILLS); +// public static final IrisBiome ICE_FLATS = new IrisBiome("Ice Flats", Biome.ICE_FLATS); +// public static final IrisBiome ICE_MOUNTAINS = new IrisBiome("Ice Mountains", Biome.ICE_MOUNTAINS); +// public static final IrisBiome REDWOOD_TAIGA = new IrisBiome("Redwood Taiga", Biome.REDWOOD_TAIGA) +// .surface(MB.of(Material.DIRT, 2), MB.of(Material.DIRT, 1)) +// .simplexSurface(); +// public static final IrisBiome REDWOOD_TAIGA_HILLS = new IrisBiome("Redwood Taiga Hills", Biome.REDWOOD_TAIGA_HILLS) +// .surface(MB.of(Material.DIRT, 2), MB.of(Material.DIRT, 1)) +// .simplexSurface(); + + //@done + private static final GMap map = build(); + private String name; + private Biome realBiome; + private double height; + private double amp; + private GList surface; + private GList dirt; + private GMap scatterChance; + private boolean scatterSurface; + private boolean core; + private boolean simplexScatter; + private GMap schematicGroups; + private PolygonGenerator.EnumPolygonGenerator poly; + + public IrisBiome(JSONObject json) + { + this("Loading", Biome.OCEAN); + fromJSON(json); + } + + public IrisBiome(String name, Biome realBiome) + { + this.core = false; + this.name = name; + this.realBiome = realBiome; + this.height = IDEAL_HEIGHT; + this.amp = 0.31; + scatterChance = new GMap<>(); + schematicGroups = new GMap<>(); + surface(new MB(Material.GRASS)).dirt(new MB(Material.DIRT), new MB(Material.DIRT, 1)); + } + + public void fromJSON(JSONObject o) + { + name = o.getString("name"); + realBiome = Biome.valueOf(o.getString("derivative").toUpperCase().replaceAll(" ", "_")); + J.attempt(() -> height = o.getDouble("height")); + J.attempt(() -> surface = mbListFromJSON(o.getJSONArray("surface"))); + J.attempt(() -> dirt = mbListFromJSON(o.getJSONArray("dirt"))); + J.attempt(() -> scatterChance = scatterFromJSON(o.getJSONArray("scatter"))); + J.attempt(() -> simplexScatter = o.getString("surfaceType").equalsIgnoreCase("simplex")); + J.attempt(() -> scatterSurface = o.getString("surfaceType").equalsIgnoreCase("scatter")); + J.attempt(() -> schematicGroups = strFromJSON(o.getJSONArray("schematics"))); + } + + public JSONObject toJSON() + { + JSONObject j = new JSONObject(); + j.put("name", name); + J.attempt(() -> j.put("derivative", realBiome.name().toLowerCase().replaceAll("_", " "))); + J.attempt(() -> j.put("height", height)); + J.attempt(() -> j.put("surface", mbListToJSON(surface))); + J.attempt(() -> j.put("dirt", mbListToJSON(dirt))); + J.attempt(() -> j.put("scatter", scatterToJson(scatterChance))); + J.attempt(() -> j.put("surfaceType", simplexScatter ? "simplex" : scatterSurface ? "scatter" : "na")); + J.attempt(() -> j.put("schematics", strToJson(schematicGroups))); + + return j; + } + + private GList mbListFromJSON(JSONArray ja) + { + GList mb = new GList<>(); + + for(int i = 0; i < ja.length(); i++) + { + mb.add(MB.of(ja.getString(i))); + } + + return mb; + } + + private JSONArray mbListToJSON(GList mbs) + { + JSONArray ja = new JSONArray(); + + for(MB i : mbs) + { + ja.put(i.toString()); + } + + return ja; + } + + public IrisBiome coreBiome() + { + this.core = true; + return this; + } + + private GMap scatterFromJSON(JSONArray ja) + { + GMap mb = new GMap(); + + for(int i = 0; i < ja.length(); i++) + { + String s = ja.getString(i); + mb.put(MB.of(s.split("\\Q=\\E")[0]), Double.valueOf(s.split("\\Q=\\E")[1])); + } + + return mb; + } + + private JSONArray scatterToJson(GMap mbs) + { + JSONArray ja = new JSONArray(); + + for(MB i : mbs.k()) + { + ja.put(i.toString() + "=" + mbs.get(i)); + } + + return ja; + } + + private GMap strFromJSON(JSONArray ja) + { + GMap mb = new GMap(); + + for(int i = 0; i < ja.length(); i++) + { + String s = ja.getString(i); + mb.put(s.split("\\Q=\\E")[0], Double.valueOf(s.split("\\Q=\\E")[1])); + } + + return mb; + } + + private JSONArray strToJson(GMap mbs) + { + JSONArray ja = new JSONArray(); + + for(String i : mbs.k()) + { + ja.put(i.toString() + "=" + mbs.get(i)); + } + + return ja; + } + + private static GMap build() + { + GMap g = new GMap(); + + for(Field i : IrisBiome.class.getDeclaredFields()) + { + J.attempt(() -> + { + i.setAccessible(true); + + IrisBiome bb = (IrisBiome) i.get(null); + + if(!g.containsKey(bb.realBiome)) + { + g.put(bb.realBiome, bb); + } + }); + } + + return g; + } + + public IrisBiome scatter(MB mb, Double chance) + { + scatterChance.put(mb, chance); + + return this; + } + + public IrisBiome schematic(String t, double chance) + { + schematicGroups.put(t, chance); + + return this; + } + + public IrisBiome simplexSurface() + { + simplexScatter = true; + return this; + } + + public IrisBiome scatterSurface() + { + scatterSurface = true; + return this; + } + + public IrisBiome surface(MB... mbs) + { + surface = new GList<>(mbs); + return this; + } + + public IrisBiome dirt(MB... mbs) + { + dirt = new GList<>(mbs); + return this; + } + + public IrisBiome height(double height) + { + if(height >= 0) + { + this.height = M.lerp(IDEAL_HEIGHT, MAX_HEIGHT, M.clip(height, 0D, 1D)); + } + + else + { + this.height = M.lerp(MIN_HEIGHT, IDEAL_HEIGHT, M.clip(height, -1D, 0D)); + } + + return this; + } + + public IrisBiome amp(double amp) + { + this.amp = amp; + return this; + } + + public String getName() + { + return name; + } + + public Biome getRealBiome() + { + return realBiome; + } + + public double getHeight() + { + return height; + } + + public double getAmp() + { + return amp; + } + + public GList getSurface() + { + return surface; + } + + public GList getDirt() + { + return dirt; + } + + public MB getSurface(double x, double z, RNG rng) + { + double wx = x + 1000D; + double wz = z + 1000D; + if(simplexScatter) + { + if(poly == null) + { + poly = new PolygonGenerator.EnumPolygonGenerator(rng, 0.125, 2, getSurface().toArray(new MB[getSurface().size()]), (g) -> + { + return g.scale(0.05).fractureWith(new CNG(rng.nextParallelRNG(56), 1D, 2).scale(0.0955), 55); + }); + } + + return poly.getChoice(wx / 3, wz /3); + } + + if(scatterSurface) + { + if(poly == null) + { + poly = new PolygonGenerator.EnumPolygonGenerator(rng, 15.05, 2, getSurface().toArray(new MB[getSurface().size()]), (g) -> + { + return g.fractureWith(new CNG(rng.nextParallelRNG(55), 1D, 2).scale(0.0155), 224); + }); + } + + return poly.getChoice(wx * 0.2D, wz * 0.2D); + } + + return getSurface().getRandom(); + } + + public MB getDirtRNG() + { + return getDirt().getRandom(); + } + + public GMap getScatterChance() + { + return scatterChance; + } + + public MB getScatterChanceSingle() + { + for(MB i : getScatterChance().keySet()) + { + if(M.r(getScatterChance().get(i))) + { + return i; + } + } + + return MB.of(Material.AIR); + } + + public static GList getBiomes() + { + return map.v().remove(IrisBiome.BEACH, IrisBiome.OCEAN, IrisBiome.DEEP_OCEAN, IrisBiome.LAKE, IrisBiome.ROAD_GRASSY, IrisBiome.ROAD_GRAVEL, IrisBiome.BEACH, IrisBiome.LAKE, IrisBiome.RIVER); + } + + public static GList getAllBiomes() + { + return map.v(); + } + + public static IrisBiome findByBiome(Biome biome) + { + if(map.containsKey(biome)) + { + return map.get(biome); + } + + return IrisBiome.OCEAN; + } + + public GMap getSchematicGroups() + { + return schematicGroups; + } +} diff --git a/src/main/java/ninja/bytecode/iris/spec/IrisDimension.java b/src/main/java/ninja/bytecode/iris/spec/IrisDimension.java new file mode 100644 index 000000000..ec7a3bc1b --- /dev/null +++ b/src/main/java/ninja/bytecode/iris/spec/IrisDimension.java @@ -0,0 +1,95 @@ +package ninja.bytecode.iris.spec; + +import java.io.IOException; + +import org.bukkit.World.Environment; +import org.bukkit.block.Biome; + +import ninja.bytecode.iris.Iris; +import ninja.bytecode.shuriken.collections.GList; +import ninja.bytecode.shuriken.execution.J; +import ninja.bytecode.shuriken.json.JSONArray; +import ninja.bytecode.shuriken.json.JSONException; +import ninja.bytecode.shuriken.json.JSONObject; + +public class IrisDimension +{ + private String name; + private Environment environment; + GList biomes; + + public IrisDimension(JSONObject o) throws JSONException, IOException + { + this(); + fromJSON(o); + } + + public IrisDimension() + { + biomes = new GList(); + environment = Environment.NORMAL; + } + + public void fromJSON(JSONObject o) throws JSONException, IOException + { + name = o.getString("name"); + J.attempt(() -> environment = Environment.valueOf(o.getString("environment").toUpperCase().replaceAll(" ", "_"))); + + try + { + biomes = biomesFromArray(o.getJSONArray("biomes")); + } + + catch(Throwable e) + { + e.printStackTrace(); + } + } + + public JSONObject toJSON() + { + JSONObject o = new JSONObject(); + + o.put("name", name); + o.put("environment", environment.name().toLowerCase().replaceAll("_", " ")); + o.put("biomes", biomesToArray(biomes)); + + return o; + } + + private GList biomesFromArray(JSONArray a) throws JSONException, IOException + { + GList b = new GList<>(); + + for(int i = 0; i < a.length(); i++) + { + IrisBiome bb = Iris.loadBiome(a.getString(i)); + Iris.biomes.put(a.getString(i), bb); + b.add(bb); + } + + return b; + } + + private JSONArray biomesToArray(GList b) + { + JSONArray a = new JSONArray(); + + for(IrisBiome i : b) + { + a.put(i.getName().toLowerCase().replaceAll(" ", "_")); + } + + return a; + } + + public GList getBiomes() + { + return biomes; + } + + public String getName() + { + return name; + } +} diff --git a/src/main/java/ninja/bytecode/iris/spec/IrisPack.java b/src/main/java/ninja/bytecode/iris/spec/IrisPack.java new file mode 100644 index 000000000..a91552db3 --- /dev/null +++ b/src/main/java/ninja/bytecode/iris/spec/IrisPack.java @@ -0,0 +1,86 @@ +package ninja.bytecode.iris.spec; + +import java.io.IOException; + +import ninja.bytecode.iris.Iris; +import ninja.bytecode.shuriken.collections.GList; +import ninja.bytecode.shuriken.execution.J; +import ninja.bytecode.shuriken.json.JSONArray; +import ninja.bytecode.shuriken.json.JSONException; +import ninja.bytecode.shuriken.json.JSONObject; + +public class IrisPack +{ + private GList dimensions; + private GList biomes; + private GList objects; + + public IrisPack() + { + this.dimensions = new GList<>(); + this.biomes = new GList<>(); + this.objects = new GList<>(); + } + + public IrisPack(JSONObject o) + { + this(); + fromJSON(o); + } + + public void fromJSON(JSONObject o) + { + J.attempt(() -> dimensions = fromArray(o.getJSONArray("dimensions"))); + J.attempt(() -> biomes = fromArray(o.getJSONArray("biomes"))); + J.attempt(() -> objects = fromArray(o.getJSONArray("objects"))); + } + + public JSONObject toJSON() + { + JSONObject o = new JSONObject(); + o.put("dimensions", toArray(dimensions)); + o.put("biomes", toArray(biomes)); + o.put("objects", toArray(objects)); + + return o; + } + + public GList fromArray(JSONArray ja) + { + GList g = new GList<>(); + + for(int i = 0; i < ja.length(); i++) + { + g.add(ja.getString(i)); + } + + return g; + } + + public JSONArray toArray(GList s) + { + JSONArray ja = new JSONArray(); + + for(String i : s) + { + ja.put(i); + } + + return ja; + } + + public void load() throws JSONException, IOException + { + for(String i : dimensions) + { + IrisDimension d = Iris.loadDimension(i); + Iris.dimensions.put(i, d); + } + } + + public void loadBiome(String s) throws JSONException, IOException + { + IrisBiome b = Iris.loadBiome(s); + Iris.biomes.put(s, b); + } +} diff --git a/src/main/java/ninja/bytecode/iris/util/ChunkPlan.java b/src/main/java/ninja/bytecode/iris/util/ChunkPlan.java index e07f4c415..92f257858 100644 --- a/src/main/java/ninja/bytecode/iris/util/ChunkPlan.java +++ b/src/main/java/ninja/bytecode/iris/util/ChunkPlan.java @@ -4,8 +4,8 @@ import java.util.function.Supplier; import org.bukkit.util.BlockVector; -import ninja.bytecode.iris.generator.biome.IrisBiome; import ninja.bytecode.iris.schematic.Schematic; +import ninja.bytecode.iris.spec.IrisBiome; import ninja.bytecode.shuriken.collections.GMap; public class ChunkPlan diff --git a/src/main/java/ninja/bytecode/iris/util/IrisInterpolation.java b/src/main/java/ninja/bytecode/iris/util/IrisInterpolation.java index 29d7809fe..39fe7ddc4 100644 --- a/src/main/java/ninja/bytecode/iris/util/IrisInterpolation.java +++ b/src/main/java/ninja/bytecode/iris/util/IrisInterpolation.java @@ -4,25 +4,54 @@ import ninja.bytecode.shuriken.math.M; public class IrisInterpolation { + public static double bezier(double t) + { + return t * t * (3.0d - 2.0d * t); + } + + public static double parametric(double t, double alpha) + { + double sqt = Math.pow(t, alpha); + return sqt / (alpha * (sqt - Math.pow(t, alpha - 1)) + 1.0d); + } + public static double lerp(double a, double b, double f) { return a + (f * (b - a)); } + public static double lerpBezier(double a, double b, double f) + { + return a + (bezier(f) * (b - a)); + } + + public static double lerpParametric(double a, double b, double f, double v) + { + return a + (parametric(f, v) * (b - a)); + } + public static double blerp(double a, double b, double c, double d, double tx, double ty) { return lerp(lerp(a, b, tx), lerp(c, d, tx), ty); } - public static double getBilinearNoise(int x, int z, NoiseProvider n) + public static double blerpBezier(double a, double b, double c, double d, double tx, double ty) { - int h = 3; - int fx = x >> h; - int fz = z >> h; - int xa = (fx << h) - 2; - int za = (fz << h) - 2; - int xb = ((fx + 1) << h) + 2; - int zb = ((fz + 1) << h) + 2; + return lerpBezier(lerpBezier(a, b, tx), lerpBezier(c, d, tx), ty); + } + + public static double blerpParametric(double a, double b, double c, double d, double tx, double ty, double v) + { + return lerpParametric(lerpParametric(a, b, tx, v), lerpParametric(c, d, tx, v), ty, v); + } + + public static double getLinearNoise(int x, int z, NoiseProvider n) + { + int h = 29; + int xa = x - h; + int za = z - h; + int xb = x + h; + int zb = z + h; double na = n.noise(xa, za); double nb = n.noise(xa, zb); double nc = n.noise(xb, za); @@ -30,7 +59,26 @@ public class IrisInterpolation double px = M.rangeScale(0, 1, xa, xb, x); double pz = M.rangeScale(0, 1, za, zb, z); - return blerp(na, nc, nb, nd, px, pz); + return blerpBezier(na, nc, nb, nd, px, pz); + } + + public static double getBilinearNoise(int x, int z, NoiseProvider n) + { + int h = 1; + int fx = x >> h; + int fz = z >> h; + int xa = (fx << h) - 15; + int za = (fz << h) - 15; + int xb = ((fx + 1) << h) + 15; + int zb = ((fz + 1) << h) + 15; + double na = getLinearNoise(xa, za, n); + double nb = getLinearNoise(xa, zb, n); + double nc = getLinearNoise(xb, za, n); + double nd = getLinearNoise(xb, zb, n); + double px = M.rangeScale(0, 1, xa, xb, x); + double pz = M.rangeScale(0, 1, za, zb, z); + + return blerpBezier(na, nc, nb, nd, px, pz); } public static double getBicubicNoise(int x, int z, NoiseProvider n) @@ -49,6 +97,6 @@ public class IrisInterpolation double px = M.rangeScale(0, 1, xa, xb, x); double pz = M.rangeScale(0, 1, za, zb, z); - return blerp(na, nc, nb, nd, px, pz); + return blerpBezier(na, nc, nb, nd, px, pz); } } diff --git a/src/main/java/ninja/bytecode/iris/util/MB.java b/src/main/java/ninja/bytecode/iris/util/MB.java index d5e90e189..a5e4254d2 100644 --- a/src/main/java/ninja/bytecode/iris/util/MB.java +++ b/src/main/java/ninja/bytecode/iris/util/MB.java @@ -7,6 +7,51 @@ public class MB public final Material material; public final byte data; + @SuppressWarnings("deprecation") + public static MB of(String dat) + { + String material = dat; + byte data = 0; + + if(dat.contains(":")) + { + material = dat.split("\\Q:\\E")[0]; + data = Integer.valueOf(dat.split("\\Q:\\E")[1]).byteValue(); + } + + try + { + return new MB(Material.getMaterial(Integer.valueOf(material)), data); + } + + catch(Throwable e) + { + + } + + try + { + return new MB(Material.getMaterial(material), data); + } + + catch(Throwable e) + { + + } + + return MB.of(Material.AIR); + } + + public String toString() + { + if(data == 0) + { + return material.name(); + } + + return material.name() + ":" + data; + } + public MB(Material material, int data) { this.material = material; diff --git a/src/main/java/ninja/bytecode/iris/util/MaxingGenerator.java b/src/main/java/ninja/bytecode/iris/util/MaxingGenerator.java index b9ab6dfe4..c4251dc75 100644 --- a/src/main/java/ninja/bytecode/iris/util/MaxingGenerator.java +++ b/src/main/java/ninja/bytecode/iris/util/MaxingGenerator.java @@ -21,7 +21,7 @@ public class MaxingGenerator gen[i] = factory.apply(gen[i]); } } - + public double getEdge(double... dim) { double b = 0; @@ -61,8 +61,8 @@ public class MaxingGenerator public boolean hasBorder(int checks, double distance, double... dims) { int current = getIndex(dims); - double ajump = 360D / (double)checks; - + double ajump = 360D / (double) checks; + if(dims.length == 2) { for(int i = 0; i < checks; i++) @@ -75,7 +75,7 @@ public class MaxingGenerator } } } - + if(dims.length == 3) { for(int i = 0; i < checks; i++) @@ -89,10 +89,10 @@ public class MaxingGenerator } } } - + return false; } - + public static class EnumMaxingGenerator extends MaxingGenerator { private T[] choices; @@ -100,6 +100,12 @@ public class MaxingGenerator public EnumMaxingGenerator(RNG rng, double scale, int octaves, T[] choices, Function factory) { super(rng, choices.length, scale / (double) choices.length, octaves, factory); + + if(choices.length == 0) + { + throw new RuntimeException("Must contain more than 0 choices!"); + } + this.choices = choices; } diff --git a/src/main/resources/pack/biomes/desert.json b/src/main/resources/pack/biomes/desert.json new file mode 100644 index 000000000..cdf67b0de --- /dev/null +++ b/src/main/resources/pack/biomes/desert.json @@ -0,0 +1,13 @@ +{ + "name": "Desert", + "derivative": "DESERT", + "surface": [ + "SAND" + ], + "dirt": [ + "SANDSTONE" + ], + "scatter":[ + "DEAD_BUSH=0.008" + ] +} \ No newline at end of file diff --git a/src/main/resources/pack/biomes/desert_hills.json b/src/main/resources/pack/biomes/desert_hills.json new file mode 100644 index 000000000..0d64b3b96 --- /dev/null +++ b/src/main/resources/pack/biomes/desert_hills.json @@ -0,0 +1,13 @@ +{ + "name": "Desert Hills", + "derivative": "DESERT_HILLS", + "surface": [ + "SAND" + ], + "dirt": [ + "SANDSTONE" + ], + "scatter":[ + "DEAD_BUSH=0.005" + ] +} \ No newline at end of file diff --git a/src/main/resources/pack/biomes/desert_red.json b/src/main/resources/pack/biomes/desert_red.json new file mode 100644 index 000000000..f4617e56b --- /dev/null +++ b/src/main/resources/pack/biomes/desert_red.json @@ -0,0 +1,13 @@ +{ + "name": "Desert Red", + "derivative": "MUTATED_DESERT", + "surface": [ + "SAND:1" + ], + "dirt": [ + "RED_SANDSTONE" + ], + "scatter":[ + "DEAD_BUSH=0.008" + ] +} \ No newline at end of file diff --git a/src/main/resources/pack/biomes/jungle.json b/src/main/resources/pack/biomes/jungle.json new file mode 100644 index 000000000..cf68e89a8 --- /dev/null +++ b/src/main/resources/pack/biomes/jungle.json @@ -0,0 +1,8 @@ +{ + "name": "Jungle", + "derivative": "JUNGLE", + "scatter":[ + "LONG_GRASS:1=0.58", + "LONG_GRASS:2=0.13" + ] +} \ No newline at end of file diff --git a/src/main/resources/pack/biomes/jungle_hills.json b/src/main/resources/pack/biomes/jungle_hills.json new file mode 100644 index 000000000..b0d93d117 --- /dev/null +++ b/src/main/resources/pack/biomes/jungle_hills.json @@ -0,0 +1,8 @@ +{ + "name": "Jungle Hills", + "derivative": "JUNGLE_HILLS", + "scatter":[ + "LONG_GRASS:1=0.33", + "LONG_GRASS:2=0.02" + ] +} \ No newline at end of file diff --git a/src/main/resources/pack/biomes/mesa.json b/src/main/resources/pack/biomes/mesa.json new file mode 100644 index 000000000..4c7c714ae --- /dev/null +++ b/src/main/resources/pack/biomes/mesa.json @@ -0,0 +1,16 @@ +{ + "name": "Mesa", + "derivative": "Mesa", + "surface": [ + "HARD_CLAY", + "STAINED_CLAY:1", + "STAINED_CLAY:8", + "STAINED_CLAY:12" + ], + "dirt": [ + "CLAY", + "SAND:1", + "SAND" + ], + "surfaceType": "simplex" +} \ No newline at end of file diff --git a/src/main/resources/pack/biomes/plains.json b/src/main/resources/pack/biomes/plains.json new file mode 100644 index 000000000..95089e3d5 --- /dev/null +++ b/src/main/resources/pack/biomes/plains.json @@ -0,0 +1,8 @@ +{ + "name": "Plains", + "derivative": "PLAINS", + "scatter":[ + "LONG_GRASS:1=0.37", + "LONG_GRASS:2=0.09" + ] +} \ No newline at end of file diff --git a/src/main/resources/pack/biomes/savanna.json b/src/main/resources/pack/biomes/savanna.json new file mode 100644 index 000000000..1910257fd --- /dev/null +++ b/src/main/resources/pack/biomes/savanna.json @@ -0,0 +1,7 @@ +{ + "name": "Savanna", + "derivative": "SAVANNA", + "scatter":[ + "LONG_GRASS:1=0.18" + ] +} \ No newline at end of file diff --git a/src/main/resources/pack/biomes/savanna_hills.json b/src/main/resources/pack/biomes/savanna_hills.json new file mode 100644 index 000000000..dc4359d5a --- /dev/null +++ b/src/main/resources/pack/biomes/savanna_hills.json @@ -0,0 +1,7 @@ +{ + "name": "Savanna Hills", + "derivative": "SAVANNA_ROCK", + "scatter":[ + "LONG_GRASS:1=0.18" + ] +} \ No newline at end of file diff --git a/src/main/resources/pack/biomes/swamp.json b/src/main/resources/pack/biomes/swamp.json new file mode 100644 index 000000000..b3c35021b --- /dev/null +++ b/src/main/resources/pack/biomes/swamp.json @@ -0,0 +1,8 @@ +{ + "name": "Swamp", + "derivative": "SWAMPLAND", + "scatter":[ + "LONG_GRASS:1=0.04", + "LONG_GRASS:2=0.03" + ] +} \ No newline at end of file diff --git a/src/main/resources/pack/biomes/temp.json b/src/main/resources/pack/biomes/temp.json new file mode 100644 index 000000000..1c3d28071 --- /dev/null +++ b/src/main/resources/pack/biomes/temp.json @@ -0,0 +1,17 @@ +{ + "name": "Biome Name", + "derivative": "PLAINS", + "height": 0, + "surface": [ + "GRASS" + ], + "dirt": [ + "DIRT", + "DIRT:1" + ], + "scatter":[ + "LONG_GRASS:1=0.13" + ], + "surfaceType": "na", + "schematics": [] +} \ No newline at end of file diff --git a/src/main/resources/pack/dimensions/overworld.json b/src/main/resources/pack/dimensions/overworld.json new file mode 100644 index 000000000..940f8d138 --- /dev/null +++ b/src/main/resources/pack/dimensions/overworld.json @@ -0,0 +1,16 @@ +{ + "name": "Overworld", + "environment": "normal", + "biomes": [ + "desert", + "desert_red", + "desert_hills", + "mesa", + "savanna", + "savanna_hills", + "jungle", + "jungle_hills", + "swamp", + "plains" + ] +} \ No newline at end of file diff --git a/src/main/resources/pack/manifest.json b/src/main/resources/pack/manifest.json new file mode 100644 index 000000000..fc231a108 --- /dev/null +++ b/src/main/resources/pack/manifest.json @@ -0,0 +1,5 @@ +{ + "dimensions":[ + "overworld" + ] +} \ No newline at end of file diff --git a/src/main/resources/objects/boulder/stone/medium/boulder1.ish b/src/main/resources/pack/objects/boulder/stone/medium/boulder1.ish similarity index 100% rename from src/main/resources/objects/boulder/stone/medium/boulder1.ish rename to src/main/resources/pack/objects/boulder/stone/medium/boulder1.ish diff --git a/src/main/resources/objects/boulder/stone/medium/boulder10.ish b/src/main/resources/pack/objects/boulder/stone/medium/boulder10.ish similarity index 100% rename from src/main/resources/objects/boulder/stone/medium/boulder10.ish rename to src/main/resources/pack/objects/boulder/stone/medium/boulder10.ish diff --git a/src/main/resources/objects/boulder/stone/medium/boulder11.ish b/src/main/resources/pack/objects/boulder/stone/medium/boulder11.ish similarity index 100% rename from src/main/resources/objects/boulder/stone/medium/boulder11.ish rename to src/main/resources/pack/objects/boulder/stone/medium/boulder11.ish diff --git a/src/main/resources/objects/boulder/stone/medium/boulder12.ish b/src/main/resources/pack/objects/boulder/stone/medium/boulder12.ish similarity index 100% rename from src/main/resources/objects/boulder/stone/medium/boulder12.ish rename to src/main/resources/pack/objects/boulder/stone/medium/boulder12.ish diff --git a/src/main/resources/objects/boulder/stone/medium/boulder13.ish b/src/main/resources/pack/objects/boulder/stone/medium/boulder13.ish similarity index 100% rename from src/main/resources/objects/boulder/stone/medium/boulder13.ish rename to src/main/resources/pack/objects/boulder/stone/medium/boulder13.ish diff --git a/src/main/resources/objects/boulder/stone/medium/boulder14.ish b/src/main/resources/pack/objects/boulder/stone/medium/boulder14.ish similarity index 100% rename from src/main/resources/objects/boulder/stone/medium/boulder14.ish rename to src/main/resources/pack/objects/boulder/stone/medium/boulder14.ish diff --git a/src/main/resources/objects/boulder/stone/medium/boulder15.ish b/src/main/resources/pack/objects/boulder/stone/medium/boulder15.ish similarity index 100% rename from src/main/resources/objects/boulder/stone/medium/boulder15.ish rename to src/main/resources/pack/objects/boulder/stone/medium/boulder15.ish diff --git a/src/main/resources/objects/boulder/stone/medium/boulder2.ish b/src/main/resources/pack/objects/boulder/stone/medium/boulder2.ish similarity index 100% rename from src/main/resources/objects/boulder/stone/medium/boulder2.ish rename to src/main/resources/pack/objects/boulder/stone/medium/boulder2.ish diff --git a/src/main/resources/objects/boulder/stone/medium/boulder3.ish b/src/main/resources/pack/objects/boulder/stone/medium/boulder3.ish similarity index 100% rename from src/main/resources/objects/boulder/stone/medium/boulder3.ish rename to src/main/resources/pack/objects/boulder/stone/medium/boulder3.ish diff --git a/src/main/resources/objects/boulder/stone/medium/boulder4.ish b/src/main/resources/pack/objects/boulder/stone/medium/boulder4.ish similarity index 100% rename from src/main/resources/objects/boulder/stone/medium/boulder4.ish rename to src/main/resources/pack/objects/boulder/stone/medium/boulder4.ish diff --git a/src/main/resources/objects/boulder/stone/medium/boulder5.ish b/src/main/resources/pack/objects/boulder/stone/medium/boulder5.ish similarity index 100% rename from src/main/resources/objects/boulder/stone/medium/boulder5.ish rename to src/main/resources/pack/objects/boulder/stone/medium/boulder5.ish diff --git a/src/main/resources/objects/boulder/stone/medium/boulder6.ish b/src/main/resources/pack/objects/boulder/stone/medium/boulder6.ish similarity index 100% rename from src/main/resources/objects/boulder/stone/medium/boulder6.ish rename to src/main/resources/pack/objects/boulder/stone/medium/boulder6.ish diff --git a/src/main/resources/objects/boulder/stone/medium/boulder7.ish b/src/main/resources/pack/objects/boulder/stone/medium/boulder7.ish similarity index 100% rename from src/main/resources/objects/boulder/stone/medium/boulder7.ish rename to src/main/resources/pack/objects/boulder/stone/medium/boulder7.ish diff --git a/src/main/resources/objects/boulder/stone/medium/boulder8.ish b/src/main/resources/pack/objects/boulder/stone/medium/boulder8.ish similarity index 100% rename from src/main/resources/objects/boulder/stone/medium/boulder8.ish rename to src/main/resources/pack/objects/boulder/stone/medium/boulder8.ish diff --git a/src/main/resources/objects/boulder/stone/medium/boulder9.ish b/src/main/resources/pack/objects/boulder/stone/medium/boulder9.ish similarity index 100% rename from src/main/resources/objects/boulder/stone/medium/boulder9.ish rename to src/main/resources/pack/objects/boulder/stone/medium/boulder9.ish diff --git a/src/main/resources/objects/bush/oak/medium/bush1.ish b/src/main/resources/pack/objects/bush/oak/medium/bush1.ish similarity index 100% rename from src/main/resources/objects/bush/oak/medium/bush1.ish rename to src/main/resources/pack/objects/bush/oak/medium/bush1.ish diff --git a/src/main/resources/objects/bush/oak/medium/bush2.ish b/src/main/resources/pack/objects/bush/oak/medium/bush2.ish similarity index 100% rename from src/main/resources/objects/bush/oak/medium/bush2.ish rename to src/main/resources/pack/objects/bush/oak/medium/bush2.ish diff --git a/src/main/resources/objects/bush/oak/medium/bush3.ish b/src/main/resources/pack/objects/bush/oak/medium/bush3.ish similarity index 100% rename from src/main/resources/objects/bush/oak/medium/bush3.ish rename to src/main/resources/pack/objects/bush/oak/medium/bush3.ish diff --git a/src/main/resources/objects/bush/oak/medium/bush4.ish b/src/main/resources/pack/objects/bush/oak/medium/bush4.ish similarity index 100% rename from src/main/resources/objects/bush/oak/medium/bush4.ish rename to src/main/resources/pack/objects/bush/oak/medium/bush4.ish diff --git a/src/main/resources/objects/log/oak/medium/log1.ish b/src/main/resources/pack/objects/log/oak/medium/log1.ish similarity index 100% rename from src/main/resources/objects/log/oak/medium/log1.ish rename to src/main/resources/pack/objects/log/oak/medium/log1.ish diff --git a/src/main/resources/objects/log/oak/medium/log2.ish b/src/main/resources/pack/objects/log/oak/medium/log2.ish similarity index 100% rename from src/main/resources/objects/log/oak/medium/log2.ish rename to src/main/resources/pack/objects/log/oak/medium/log2.ish diff --git a/src/main/resources/objects/log/oak/medium/log3.ish b/src/main/resources/pack/objects/log/oak/medium/log3.ish similarity index 100% rename from src/main/resources/objects/log/oak/medium/log3.ish rename to src/main/resources/pack/objects/log/oak/medium/log3.ish diff --git a/src/main/resources/objects/log/oak/medium/log4.ish b/src/main/resources/pack/objects/log/oak/medium/log4.ish similarity index 100% rename from src/main/resources/objects/log/oak/medium/log4.ish rename to src/main/resources/pack/objects/log/oak/medium/log4.ish diff --git a/src/main/resources/objects/stump/dark/medium/stump3.ish b/src/main/resources/pack/objects/stump/dark/medium/stump3.ish similarity index 100% rename from src/main/resources/objects/stump/dark/medium/stump3.ish rename to src/main/resources/pack/objects/stump/dark/medium/stump3.ish diff --git a/src/main/resources/objects/stump/spruce/medium/stump1.ish b/src/main/resources/pack/objects/stump/spruce/medium/stump1.ish similarity index 100% rename from src/main/resources/objects/stump/spruce/medium/stump1.ish rename to src/main/resources/pack/objects/stump/spruce/medium/stump1.ish diff --git a/src/main/resources/objects/stump/spruce/medium/stump2.ish b/src/main/resources/pack/objects/stump/spruce/medium/stump2.ish similarity index 100% rename from src/main/resources/objects/stump/spruce/medium/stump2.ish rename to src/main/resources/pack/objects/stump/spruce/medium/stump2.ish diff --git a/src/main/resources/objects/tree/birch/medium/birch1.ish b/src/main/resources/pack/objects/tree/birch/medium/birch1.ish similarity index 100% rename from src/main/resources/objects/tree/birch/medium/birch1.ish rename to src/main/resources/pack/objects/tree/birch/medium/birch1.ish diff --git a/src/main/resources/objects/tree/birch/medium/birch2.ish b/src/main/resources/pack/objects/tree/birch/medium/birch2.ish similarity index 100% rename from src/main/resources/objects/tree/birch/medium/birch2.ish rename to src/main/resources/pack/objects/tree/birch/medium/birch2.ish diff --git a/src/main/resources/objects/tree/birch/medium/birch3.ish b/src/main/resources/pack/objects/tree/birch/medium/birch3.ish similarity index 100% rename from src/main/resources/objects/tree/birch/medium/birch3.ish rename to src/main/resources/pack/objects/tree/birch/medium/birch3.ish diff --git a/src/main/resources/objects/tree/birch/medium/birch4.ish b/src/main/resources/pack/objects/tree/birch/medium/birch4.ish similarity index 100% rename from src/main/resources/objects/tree/birch/medium/birch4.ish rename to src/main/resources/pack/objects/tree/birch/medium/birch4.ish diff --git a/src/main/resources/objects/tree/birch/small/birch1.ish b/src/main/resources/pack/objects/tree/birch/small/birch1.ish similarity index 100% rename from src/main/resources/objects/tree/birch/small/birch1.ish rename to src/main/resources/pack/objects/tree/birch/small/birch1.ish diff --git a/src/main/resources/objects/tree/birch/small/birch10.ish b/src/main/resources/pack/objects/tree/birch/small/birch10.ish similarity index 100% rename from src/main/resources/objects/tree/birch/small/birch10.ish rename to src/main/resources/pack/objects/tree/birch/small/birch10.ish diff --git a/src/main/resources/objects/tree/birch/small/birch11.ish b/src/main/resources/pack/objects/tree/birch/small/birch11.ish similarity index 100% rename from src/main/resources/objects/tree/birch/small/birch11.ish rename to src/main/resources/pack/objects/tree/birch/small/birch11.ish diff --git a/src/main/resources/objects/tree/birch/small/birch12.ish b/src/main/resources/pack/objects/tree/birch/small/birch12.ish similarity index 100% rename from src/main/resources/objects/tree/birch/small/birch12.ish rename to src/main/resources/pack/objects/tree/birch/small/birch12.ish diff --git a/src/main/resources/objects/tree/birch/small/birch13.ish b/src/main/resources/pack/objects/tree/birch/small/birch13.ish similarity index 100% rename from src/main/resources/objects/tree/birch/small/birch13.ish rename to src/main/resources/pack/objects/tree/birch/small/birch13.ish diff --git a/src/main/resources/objects/tree/birch/small/birch14.ish b/src/main/resources/pack/objects/tree/birch/small/birch14.ish similarity index 100% rename from src/main/resources/objects/tree/birch/small/birch14.ish rename to src/main/resources/pack/objects/tree/birch/small/birch14.ish diff --git a/src/main/resources/objects/tree/birch/small/birch15.ish b/src/main/resources/pack/objects/tree/birch/small/birch15.ish similarity index 100% rename from src/main/resources/objects/tree/birch/small/birch15.ish rename to src/main/resources/pack/objects/tree/birch/small/birch15.ish diff --git a/src/main/resources/objects/tree/birch/small/birch2.ish b/src/main/resources/pack/objects/tree/birch/small/birch2.ish similarity index 100% rename from src/main/resources/objects/tree/birch/small/birch2.ish rename to src/main/resources/pack/objects/tree/birch/small/birch2.ish diff --git a/src/main/resources/objects/tree/birch/small/birch3.ish b/src/main/resources/pack/objects/tree/birch/small/birch3.ish similarity index 100% rename from src/main/resources/objects/tree/birch/small/birch3.ish rename to src/main/resources/pack/objects/tree/birch/small/birch3.ish diff --git a/src/main/resources/objects/tree/birch/small/birch4.ish b/src/main/resources/pack/objects/tree/birch/small/birch4.ish similarity index 100% rename from src/main/resources/objects/tree/birch/small/birch4.ish rename to src/main/resources/pack/objects/tree/birch/small/birch4.ish diff --git a/src/main/resources/objects/tree/birch/small/birch5.ish b/src/main/resources/pack/objects/tree/birch/small/birch5.ish similarity index 100% rename from src/main/resources/objects/tree/birch/small/birch5.ish rename to src/main/resources/pack/objects/tree/birch/small/birch5.ish diff --git a/src/main/resources/objects/tree/birch/small/birch6.ish b/src/main/resources/pack/objects/tree/birch/small/birch6.ish similarity index 100% rename from src/main/resources/objects/tree/birch/small/birch6.ish rename to src/main/resources/pack/objects/tree/birch/small/birch6.ish diff --git a/src/main/resources/objects/tree/birch/small/birch7.ish b/src/main/resources/pack/objects/tree/birch/small/birch7.ish similarity index 100% rename from src/main/resources/objects/tree/birch/small/birch7.ish rename to src/main/resources/pack/objects/tree/birch/small/birch7.ish diff --git a/src/main/resources/objects/tree/birch/small/birch8.ish b/src/main/resources/pack/objects/tree/birch/small/birch8.ish similarity index 100% rename from src/main/resources/objects/tree/birch/small/birch8.ish rename to src/main/resources/pack/objects/tree/birch/small/birch8.ish diff --git a/src/main/resources/objects/tree/birch/small/birch9.ish b/src/main/resources/pack/objects/tree/birch/small/birch9.ish similarity index 100% rename from src/main/resources/objects/tree/birch/small/birch9.ish rename to src/main/resources/pack/objects/tree/birch/small/birch9.ish diff --git a/src/main/resources/objects/tree/oak/medium/oak1.ish b/src/main/resources/pack/objects/tree/oak/medium/oak1.ish similarity index 100% rename from src/main/resources/objects/tree/oak/medium/oak1.ish rename to src/main/resources/pack/objects/tree/oak/medium/oak1.ish diff --git a/src/main/resources/objects/tree/oak/medium/oak2.ish b/src/main/resources/pack/objects/tree/oak/medium/oak2.ish similarity index 100% rename from src/main/resources/objects/tree/oak/medium/oak2.ish rename to src/main/resources/pack/objects/tree/oak/medium/oak2.ish diff --git a/src/main/resources/objects/tree/oak/medium/oak3.ish b/src/main/resources/pack/objects/tree/oak/medium/oak3.ish similarity index 100% rename from src/main/resources/objects/tree/oak/medium/oak3.ish rename to src/main/resources/pack/objects/tree/oak/medium/oak3.ish diff --git a/src/main/resources/objects/tree/oak/medium/oak4.ish b/src/main/resources/pack/objects/tree/oak/medium/oak4.ish similarity index 100% rename from src/main/resources/objects/tree/oak/medium/oak4.ish rename to src/main/resources/pack/objects/tree/oak/medium/oak4.ish diff --git a/src/main/resources/objects/tree/oak/medium/oak5.ish b/src/main/resources/pack/objects/tree/oak/medium/oak5.ish similarity index 100% rename from src/main/resources/objects/tree/oak/medium/oak5.ish rename to src/main/resources/pack/objects/tree/oak/medium/oak5.ish diff --git a/src/main/resources/objects/tree/oak/small/oak1.ish b/src/main/resources/pack/objects/tree/oak/small/oak1.ish similarity index 100% rename from src/main/resources/objects/tree/oak/small/oak1.ish rename to src/main/resources/pack/objects/tree/oak/small/oak1.ish diff --git a/src/main/resources/objects/tree/oak/small/oak10.ish b/src/main/resources/pack/objects/tree/oak/small/oak10.ish similarity index 100% rename from src/main/resources/objects/tree/oak/small/oak10.ish rename to src/main/resources/pack/objects/tree/oak/small/oak10.ish diff --git a/src/main/resources/objects/tree/oak/small/oak11.ish b/src/main/resources/pack/objects/tree/oak/small/oak11.ish similarity index 100% rename from src/main/resources/objects/tree/oak/small/oak11.ish rename to src/main/resources/pack/objects/tree/oak/small/oak11.ish diff --git a/src/main/resources/objects/tree/oak/small/oak12.ish b/src/main/resources/pack/objects/tree/oak/small/oak12.ish similarity index 100% rename from src/main/resources/objects/tree/oak/small/oak12.ish rename to src/main/resources/pack/objects/tree/oak/small/oak12.ish diff --git a/src/main/resources/objects/tree/oak/small/oak13.ish b/src/main/resources/pack/objects/tree/oak/small/oak13.ish similarity index 100% rename from src/main/resources/objects/tree/oak/small/oak13.ish rename to src/main/resources/pack/objects/tree/oak/small/oak13.ish diff --git a/src/main/resources/objects/tree/oak/small/oak14.ish b/src/main/resources/pack/objects/tree/oak/small/oak14.ish similarity index 100% rename from src/main/resources/objects/tree/oak/small/oak14.ish rename to src/main/resources/pack/objects/tree/oak/small/oak14.ish diff --git a/src/main/resources/objects/tree/oak/small/oak15.ish b/src/main/resources/pack/objects/tree/oak/small/oak15.ish similarity index 100% rename from src/main/resources/objects/tree/oak/small/oak15.ish rename to src/main/resources/pack/objects/tree/oak/small/oak15.ish diff --git a/src/main/resources/objects/tree/oak/small/oak2.ish b/src/main/resources/pack/objects/tree/oak/small/oak2.ish similarity index 100% rename from src/main/resources/objects/tree/oak/small/oak2.ish rename to src/main/resources/pack/objects/tree/oak/small/oak2.ish diff --git a/src/main/resources/objects/tree/oak/small/oak3.ish b/src/main/resources/pack/objects/tree/oak/small/oak3.ish similarity index 100% rename from src/main/resources/objects/tree/oak/small/oak3.ish rename to src/main/resources/pack/objects/tree/oak/small/oak3.ish diff --git a/src/main/resources/objects/tree/oak/small/oak4.ish b/src/main/resources/pack/objects/tree/oak/small/oak4.ish similarity index 100% rename from src/main/resources/objects/tree/oak/small/oak4.ish rename to src/main/resources/pack/objects/tree/oak/small/oak4.ish diff --git a/src/main/resources/objects/tree/oak/small/oak5.ish b/src/main/resources/pack/objects/tree/oak/small/oak5.ish similarity index 100% rename from src/main/resources/objects/tree/oak/small/oak5.ish rename to src/main/resources/pack/objects/tree/oak/small/oak5.ish diff --git a/src/main/resources/objects/tree/oak/small/oak6.ish b/src/main/resources/pack/objects/tree/oak/small/oak6.ish similarity index 100% rename from src/main/resources/objects/tree/oak/small/oak6.ish rename to src/main/resources/pack/objects/tree/oak/small/oak6.ish diff --git a/src/main/resources/objects/tree/oak/small/oak7.ish b/src/main/resources/pack/objects/tree/oak/small/oak7.ish similarity index 100% rename from src/main/resources/objects/tree/oak/small/oak7.ish rename to src/main/resources/pack/objects/tree/oak/small/oak7.ish diff --git a/src/main/resources/objects/tree/oak/small/oak8.ish b/src/main/resources/pack/objects/tree/oak/small/oak8.ish similarity index 100% rename from src/main/resources/objects/tree/oak/small/oak8.ish rename to src/main/resources/pack/objects/tree/oak/small/oak8.ish diff --git a/src/main/resources/objects/tree/oak/small/oak9.ish b/src/main/resources/pack/objects/tree/oak/small/oak9.ish similarity index 100% rename from src/main/resources/objects/tree/oak/small/oak9.ish rename to src/main/resources/pack/objects/tree/oak/small/oak9.ish diff --git a/src/main/resources/objects/tree/palm/medium/palm1.ish b/src/main/resources/pack/objects/tree/palm/medium/palm1.ish similarity index 100% rename from src/main/resources/objects/tree/palm/medium/palm1.ish rename to src/main/resources/pack/objects/tree/palm/medium/palm1.ish diff --git a/src/main/resources/objects/tree/palm/medium/palm2.ish b/src/main/resources/pack/objects/tree/palm/medium/palm2.ish similarity index 100% rename from src/main/resources/objects/tree/palm/medium/palm2.ish rename to src/main/resources/pack/objects/tree/palm/medium/palm2.ish diff --git a/src/main/resources/objects/tree/palm/small/palm1.ish b/src/main/resources/pack/objects/tree/palm/small/palm1.ish similarity index 100% rename from src/main/resources/objects/tree/palm/small/palm1.ish rename to src/main/resources/pack/objects/tree/palm/small/palm1.ish diff --git a/src/main/resources/objects/tree/palm/small/palm2.ish b/src/main/resources/pack/objects/tree/palm/small/palm2.ish similarity index 100% rename from src/main/resources/objects/tree/palm/small/palm2.ish rename to src/main/resources/pack/objects/tree/palm/small/palm2.ish diff --git a/src/main/resources/objects/tree/palm/small/palm3.ish b/src/main/resources/pack/objects/tree/palm/small/palm3.ish similarity index 100% rename from src/main/resources/objects/tree/palm/small/palm3.ish rename to src/main/resources/pack/objects/tree/palm/small/palm3.ish diff --git a/src/main/resources/objects/tree/palm/small/palm4.ish b/src/main/resources/pack/objects/tree/palm/small/palm4.ish similarity index 100% rename from src/main/resources/objects/tree/palm/small/palm4.ish rename to src/main/resources/pack/objects/tree/palm/small/palm4.ish diff --git a/src/main/resources/objects/tree/palm/small/palm5.ish b/src/main/resources/pack/objects/tree/palm/small/palm5.ish similarity index 100% rename from src/main/resources/objects/tree/palm/small/palm5.ish rename to src/main/resources/pack/objects/tree/palm/small/palm5.ish diff --git a/src/main/resources/objects/tree/spruce/dead/medium/spruce_dead1.ish b/src/main/resources/pack/objects/tree/spruce/dead/medium/spruce_dead1.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/dead/medium/spruce_dead1.ish rename to src/main/resources/pack/objects/tree/spruce/dead/medium/spruce_dead1.ish diff --git a/src/main/resources/objects/tree/spruce/dead/medium/spruce_dead2.ish b/src/main/resources/pack/objects/tree/spruce/dead/medium/spruce_dead2.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/dead/medium/spruce_dead2.ish rename to src/main/resources/pack/objects/tree/spruce/dead/medium/spruce_dead2.ish diff --git a/src/main/resources/objects/tree/spruce/dead/medium/spruce_dead3.ish b/src/main/resources/pack/objects/tree/spruce/dead/medium/spruce_dead3.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/dead/medium/spruce_dead3.ish rename to src/main/resources/pack/objects/tree/spruce/dead/medium/spruce_dead3.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce1.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce1.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce1.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce1.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce10.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce10.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce10.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce10.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce11.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce11.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce11.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce11.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce12.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce12.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce12.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce12.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce13.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce13.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce13.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce13.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce14.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce14.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce14.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce14.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce15.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce15.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce15.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce15.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce16.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce16.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce16.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce16.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce17.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce17.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce17.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce17.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce18.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce18.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce18.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce18.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce19.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce19.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce19.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce19.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce2.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce2.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce2.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce2.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce20.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce20.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce20.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce20.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce21.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce21.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce21.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce21.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce22.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce22.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce22.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce22.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce23.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce23.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce23.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce23.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce24.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce24.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce24.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce24.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce25.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce25.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce25.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce25.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce26.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce26.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce26.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce26.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce27.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce27.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce27.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce27.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce28.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce28.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce28.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce28.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce29.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce29.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce29.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce29.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce3.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce3.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce3.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce3.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce30.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce30.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce30.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce30.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce31.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce31.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce31.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce31.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce32.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce32.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce32.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce32.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce33.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce33.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce33.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce33.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce34.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce34.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce34.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce34.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce35.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce35.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce35.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce35.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce36.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce36.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce36.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce36.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce37.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce37.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce37.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce37.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce38.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce38.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce38.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce38.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce39.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce39.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce39.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce39.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce4.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce4.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce4.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce4.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce40.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce40.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce40.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce40.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce41.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce41.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce41.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce41.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce42.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce42.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce42.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce42.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce43.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce43.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce43.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce43.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce5.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce5.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce5.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce5.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce6.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce6.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce6.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce6.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce7.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce7.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce7.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce7.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce8.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce8.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce8.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce8.ish diff --git a/src/main/resources/objects/tree/spruce/medium/spruce9.ish b/src/main/resources/pack/objects/tree/spruce/medium/spruce9.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/medium/spruce9.ish rename to src/main/resources/pack/objects/tree/spruce/medium/spruce9.ish diff --git a/src/main/resources/objects/tree/spruce/small/spruce1.ish b/src/main/resources/pack/objects/tree/spruce/small/spruce1.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/small/spruce1.ish rename to src/main/resources/pack/objects/tree/spruce/small/spruce1.ish diff --git a/src/main/resources/objects/tree/spruce/small/spruce10.ish b/src/main/resources/pack/objects/tree/spruce/small/spruce10.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/small/spruce10.ish rename to src/main/resources/pack/objects/tree/spruce/small/spruce10.ish diff --git a/src/main/resources/objects/tree/spruce/small/spruce11.ish b/src/main/resources/pack/objects/tree/spruce/small/spruce11.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/small/spruce11.ish rename to src/main/resources/pack/objects/tree/spruce/small/spruce11.ish diff --git a/src/main/resources/objects/tree/spruce/small/spruce12.ish b/src/main/resources/pack/objects/tree/spruce/small/spruce12.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/small/spruce12.ish rename to src/main/resources/pack/objects/tree/spruce/small/spruce12.ish diff --git a/src/main/resources/objects/tree/spruce/small/spruce13.ish b/src/main/resources/pack/objects/tree/spruce/small/spruce13.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/small/spruce13.ish rename to src/main/resources/pack/objects/tree/spruce/small/spruce13.ish diff --git a/src/main/resources/objects/tree/spruce/small/spruce2.ish b/src/main/resources/pack/objects/tree/spruce/small/spruce2.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/small/spruce2.ish rename to src/main/resources/pack/objects/tree/spruce/small/spruce2.ish diff --git a/src/main/resources/objects/tree/spruce/small/spruce3.ish b/src/main/resources/pack/objects/tree/spruce/small/spruce3.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/small/spruce3.ish rename to src/main/resources/pack/objects/tree/spruce/small/spruce3.ish diff --git a/src/main/resources/objects/tree/spruce/small/spruce4.ish b/src/main/resources/pack/objects/tree/spruce/small/spruce4.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/small/spruce4.ish rename to src/main/resources/pack/objects/tree/spruce/small/spruce4.ish diff --git a/src/main/resources/objects/tree/spruce/small/spruce5.ish b/src/main/resources/pack/objects/tree/spruce/small/spruce5.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/small/spruce5.ish rename to src/main/resources/pack/objects/tree/spruce/small/spruce5.ish diff --git a/src/main/resources/objects/tree/spruce/small/spruce6.ish b/src/main/resources/pack/objects/tree/spruce/small/spruce6.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/small/spruce6.ish rename to src/main/resources/pack/objects/tree/spruce/small/spruce6.ish diff --git a/src/main/resources/objects/tree/spruce/small/spruce7.ish b/src/main/resources/pack/objects/tree/spruce/small/spruce7.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/small/spruce7.ish rename to src/main/resources/pack/objects/tree/spruce/small/spruce7.ish diff --git a/src/main/resources/objects/tree/spruce/small/spruce8.ish b/src/main/resources/pack/objects/tree/spruce/small/spruce8.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/small/spruce8.ish rename to src/main/resources/pack/objects/tree/spruce/small/spruce8.ish diff --git a/src/main/resources/objects/tree/spruce/small/spruce9.ish b/src/main/resources/pack/objects/tree/spruce/small/spruce9.ish similarity index 100% rename from src/main/resources/objects/tree/spruce/small/spruce9.ish rename to src/main/resources/pack/objects/tree/spruce/small/spruce9.ish