├── .gitattributes ├── .gitignore ├── .idea ├── misc.xml └── vcs.xml ├── LICENSE ├── README.md ├── build.xml ├── dependency-reduced-pom.xml ├── pom.xml ├── src ├── main │ ├── java │ │ ├── META-INF │ │ │ └── MANIFEST.MF │ │ └── com │ │ │ └── dfsek │ │ │ └── betterend │ │ │ ├── BetterEnd.java │ │ │ ├── EventListener.java │ │ │ ├── Metrics.java │ │ │ ├── UpdateChecker.java │ │ │ ├── command │ │ │ ├── BetterEndCommand.java │ │ │ ├── BiomeCommand.java │ │ │ ├── BiomeTeleportCommand.java │ │ │ ├── ReloadCommand.java │ │ │ ├── VersionCommand.java │ │ │ └── profile │ │ │ │ ├── ProfileCommand.java │ │ │ │ ├── QueryCommand.java │ │ │ │ ├── ResetCommand.java │ │ │ │ ├── StartCommand.java │ │ │ │ └── StopCommand.java │ │ │ ├── config │ │ │ ├── ConfigUtil.java │ │ │ ├── LangUtil.java │ │ │ └── WorldConfig.java │ │ │ ├── event │ │ │ └── BossChestOpenEvent.java │ │ │ ├── population │ │ │ ├── FloraPopulator.java │ │ │ ├── OrePopulator.java │ │ │ ├── SnowPopulator.java │ │ │ ├── TreePopulator.java │ │ │ └── structures │ │ │ │ ├── EndStructure.java │ │ │ │ └── StructurePopulator.java │ │ │ ├── premium │ │ │ ├── AetherFallUtil.java │ │ │ ├── BossTimeoutUtil.java │ │ │ ├── CustomStructuresUtil.java │ │ │ ├── EndAdvancementUtil.java │ │ │ ├── MythicSpawnsUtil.java │ │ │ └── PremiumUtil.java │ │ │ ├── util │ │ │ └── Util.java │ │ │ └── world │ │ │ ├── EndBiome.java │ │ │ ├── EndBiomeGrid.java │ │ │ ├── EndChunkGenerator.java │ │ │ ├── EndProfiler.java │ │ │ ├── decor │ │ │ ├── AetherDecorator.java │ │ │ ├── AetherForestDecorator.java │ │ │ ├── AetherHighlandsDecorator.java │ │ │ ├── AetherHighlandsForestDecorator.java │ │ │ ├── EndDecorator.java │ │ │ ├── MainIslandDecorator.java │ │ │ ├── ShatteredEndDecorator.java │ │ │ ├── ShatteredForestDecorator.java │ │ │ ├── StarfieldDecorator.java │ │ │ └── VoidDecorator.java │ │ │ └── generators │ │ │ ├── biomes │ │ │ ├── AetherGenerator.java │ │ │ ├── AetherHighlandsGenerator.java │ │ │ ├── EndGenerator.java │ │ │ ├── MainIslandGenerator.java │ │ │ ├── ShatteredEndGenerator.java │ │ │ └── VoidGenerator.java │ │ │ └── border │ │ │ ├── AetherHighlandsBorderGenerator.java │ │ │ ├── VoidAetherBorderGenerator.java │ │ │ ├── VoidAetherHighlandsBorderGenerator.java │ │ │ └── VoidEndBorderGenerator.java │ └── resources │ │ ├── config.yml │ │ ├── datapacks │ │ └── bukkit │ │ │ └── data │ │ │ └── betterend │ │ │ └── advancements │ │ │ └── outer_end │ │ │ ├── dizzying_heights.json │ │ │ ├── explore.json │ │ │ ├── gold_dungeon.json │ │ │ ├── into_void.json │ │ │ ├── visit_aether.json │ │ │ ├── visit_aether_forest.json │ │ │ ├── visit_aether_highlands.json │ │ │ ├── visit_aether_highlands_forest.json │ │ │ ├── visit_end.json │ │ │ ├── visit_shattered_end.json │ │ │ ├── visit_shattered_forest.json │ │ │ ├── visit_starfield.json │ │ │ └── visit_void.json │ │ ├── lang │ │ ├── afr_sa.yml │ │ ├── da.yml │ │ ├── deu.yml │ │ ├── en_us.yml │ │ ├── es.yml │ │ ├── fi_fI.yml │ │ ├── fr.yml │ │ ├── ja_jp.yml │ │ ├── pt_br.yml │ │ ├── ru.yml │ │ ├── vi.yml │ │ └── zh_cn.yml │ │ ├── loot │ │ ├── cobble_house.json │ │ ├── end_house.json │ │ ├── end_ship.json │ │ ├── end_tower.json │ │ ├── gold_dungeon.json │ │ ├── gold_dungeon_boss.json │ │ ├── shulker_nest.json │ │ ├── spruce_house.json │ │ ├── stronghold.json │ │ ├── wood_house.json │ │ └── wrecked_end_ship.json │ │ ├── plugin.yml │ │ ├── structures │ │ ├── aether_ruin │ │ │ ├── aether_ruin_0.nbt │ │ │ ├── aether_ruin_1.nbt │ │ │ ├── aether_ruin_10.nbt │ │ │ ├── aether_ruin_11.nbt │ │ │ ├── aether_ruin_12.nbt │ │ │ ├── aether_ruin_13.nbt │ │ │ ├── aether_ruin_14.nbt │ │ │ ├── aether_ruin_15.nbt │ │ │ ├── aether_ruin_16.nbt │ │ │ ├── aether_ruin_17.nbt │ │ │ ├── aether_ruin_2.nbt │ │ │ ├── aether_ruin_3.nbt │ │ │ ├── aether_ruin_4.nbt │ │ │ ├── aether_ruin_5.nbt │ │ │ ├── aether_ruin_6.nbt │ │ │ ├── aether_ruin_7.nbt │ │ │ ├── aether_ruin_8.nbt │ │ │ └── aether_ruin_9.nbt │ │ ├── cobble_house │ │ │ ├── cobble_house_0.nbt │ │ │ ├── cobble_house_1.nbt │ │ │ ├── cobble_house_2.nbt │ │ │ ├── cobble_house_3.nbt │ │ │ └── cobble_house_4.nbt │ │ ├── end_house │ │ │ ├── end_house_0.nbt │ │ │ ├── end_house_1.nbt │ │ │ └── end_house_2.nbt │ │ ├── end_ruin │ │ │ ├── end_ruin_0.nbt │ │ │ ├── end_ruin_1.nbt │ │ │ ├── end_ruin_10.nbt │ │ │ ├── end_ruin_100.nbt │ │ │ ├── end_ruin_101.nbt │ │ │ ├── end_ruin_102.nbt │ │ │ ├── end_ruin_103.nbt │ │ │ ├── end_ruin_104.nbt │ │ │ ├── end_ruin_105.nbt │ │ │ ├── end_ruin_106.nbt │ │ │ ├── end_ruin_107.nbt │ │ │ ├── end_ruin_108.nbt │ │ │ ├── end_ruin_11.nbt │ │ │ ├── end_ruin_12.nbt │ │ │ ├── end_ruin_13.nbt │ │ │ ├── end_ruin_14.nbt │ │ │ ├── end_ruin_15.nbt │ │ │ ├── end_ruin_16.nbt │ │ │ ├── end_ruin_17.nbt │ │ │ ├── end_ruin_18.nbt │ │ │ ├── end_ruin_19.nbt │ │ │ ├── end_ruin_2.nbt │ │ │ ├── end_ruin_20.nbt │ │ │ ├── end_ruin_21.nbt │ │ │ ├── end_ruin_22.nbt │ │ │ ├── end_ruin_23.nbt │ │ │ ├── end_ruin_24.nbt │ │ │ ├── end_ruin_25.nbt │ │ │ ├── end_ruin_26.nbt │ │ │ ├── end_ruin_27.nbt │ │ │ ├── end_ruin_28.nbt │ │ │ ├── end_ruin_29.nbt │ │ │ ├── end_ruin_3.nbt │ │ │ ├── end_ruin_30.nbt │ │ │ ├── end_ruin_31.nbt │ │ │ ├── end_ruin_32.nbt │ │ │ ├── end_ruin_33.nbt │ │ │ ├── end_ruin_34.nbt │ │ │ ├── end_ruin_35.nbt │ │ │ ├── end_ruin_36.nbt │ │ │ ├── end_ruin_37.nbt │ │ │ ├── end_ruin_38.nbt │ │ │ ├── end_ruin_39.nbt │ │ │ ├── end_ruin_4.nbt │ │ │ ├── end_ruin_40.nbt │ │ │ ├── end_ruin_41.nbt │ │ │ ├── end_ruin_42.nbt │ │ │ ├── end_ruin_43.nbt │ │ │ ├── end_ruin_44.nbt │ │ │ ├── end_ruin_45.nbt │ │ │ ├── end_ruin_46.nbt │ │ │ ├── end_ruin_47.nbt │ │ │ ├── end_ruin_48.nbt │ │ │ ├── end_ruin_49.nbt │ │ │ ├── end_ruin_5.nbt │ │ │ ├── end_ruin_50.nbt │ │ │ ├── end_ruin_51.nbt │ │ │ ├── end_ruin_52.nbt │ │ │ ├── end_ruin_53.nbt │ │ │ ├── end_ruin_54.nbt │ │ │ ├── end_ruin_55.nbt │ │ │ ├── end_ruin_56.nbt │ │ │ ├── end_ruin_57.nbt │ │ │ ├── end_ruin_58.nbt │ │ │ ├── end_ruin_59.nbt │ │ │ ├── end_ruin_6.nbt │ │ │ ├── end_ruin_60.nbt │ │ │ ├── end_ruin_61.nbt │ │ │ ├── end_ruin_62.nbt │ │ │ ├── end_ruin_63.nbt │ │ │ ├── end_ruin_64.nbt │ │ │ ├── end_ruin_65.nbt │ │ │ ├── end_ruin_66.nbt │ │ │ ├── end_ruin_67.nbt │ │ │ ├── end_ruin_68.nbt │ │ │ ├── end_ruin_69.nbt │ │ │ ├── end_ruin_7.nbt │ │ │ ├── end_ruin_70.nbt │ │ │ ├── end_ruin_71.nbt │ │ │ ├── end_ruin_72.nbt │ │ │ ├── end_ruin_73.nbt │ │ │ ├── end_ruin_74.nbt │ │ │ ├── end_ruin_75.nbt │ │ │ ├── end_ruin_76.nbt │ │ │ ├── end_ruin_77.nbt │ │ │ ├── end_ruin_78.nbt │ │ │ ├── end_ruin_79.nbt │ │ │ ├── end_ruin_8.nbt │ │ │ ├── end_ruin_80.nbt │ │ │ ├── end_ruin_81.nbt │ │ │ ├── end_ruin_82.nbt │ │ │ ├── end_ruin_83.nbt │ │ │ ├── end_ruin_84.nbt │ │ │ ├── end_ruin_85.nbt │ │ │ ├── end_ruin_86.nbt │ │ │ ├── end_ruin_87.nbt │ │ │ ├── end_ruin_88.nbt │ │ │ ├── end_ruin_89.nbt │ │ │ ├── end_ruin_9.nbt │ │ │ ├── end_ruin_90.nbt │ │ │ ├── end_ruin_91.nbt │ │ │ ├── end_ruin_92.nbt │ │ │ ├── end_ruin_93.nbt │ │ │ ├── end_ruin_94.nbt │ │ │ ├── end_ruin_95.nbt │ │ │ ├── end_ruin_96.nbt │ │ │ ├── end_ruin_97.nbt │ │ │ ├── end_ruin_98.nbt │ │ │ └── end_ruin_99.nbt │ │ ├── end_ship │ │ │ ├── end_ship_0.nbt │ │ │ ├── end_ship_1.nbt │ │ │ ├── end_ship_2.nbt │ │ │ ├── end_ship_3.nbt │ │ │ ├── end_ship_4.nbt │ │ │ ├── end_ship_5.nbt │ │ │ ├── end_ship_6.nbt │ │ │ └── end_ship_7.nbt │ │ ├── end_tower │ │ │ ├── end_tower_0.nbt │ │ │ └── end_tower_1.nbt │ │ ├── gold_dungeon │ │ │ └── gold_dungeon_0.nbt │ │ ├── shulker_nest │ │ │ ├── shulker_nest_0.nbt │ │ │ └── shulker_nest_1.nbt │ │ ├── spruce_house │ │ │ ├── spruce_house_0.nbt │ │ │ ├── spruce_house_1.nbt │ │ │ ├── spruce_house_2.nbt │ │ │ ├── spruce_house_3.nbt │ │ │ └── spruce_house_4.nbt │ │ ├── stronghold │ │ │ └── stronghold_0.nbt │ │ ├── void_star │ │ │ ├── void_star_0.nbt │ │ │ ├── void_star_1.nbt │ │ │ ├── void_star_2.nbt │ │ │ └── void_star_3.nbt │ │ ├── wood_house │ │ │ ├── wood_house_0.nbt │ │ │ ├── wood_house_1.nbt │ │ │ ├── wood_house_10.nbt │ │ │ ├── wood_house_11.nbt │ │ │ ├── wood_house_12.nbt │ │ │ ├── wood_house_13.nbt │ │ │ ├── wood_house_14.nbt │ │ │ ├── wood_house_15.nbt │ │ │ ├── wood_house_16.nbt │ │ │ ├── wood_house_17.nbt │ │ │ ├── wood_house_18.nbt │ │ │ ├── wood_house_19.nbt │ │ │ ├── wood_house_2.nbt │ │ │ ├── wood_house_20.nbt │ │ │ ├── wood_house_21.nbt │ │ │ ├── wood_house_22.nbt │ │ │ ├── wood_house_23.nbt │ │ │ ├── wood_house_24.nbt │ │ │ ├── wood_house_25.nbt │ │ │ ├── wood_house_26.nbt │ │ │ ├── wood_house_27.nbt │ │ │ ├── wood_house_28.nbt │ │ │ ├── wood_house_29.nbt │ │ │ ├── wood_house_3.nbt │ │ │ ├── wood_house_30.nbt │ │ │ ├── wood_house_31.nbt │ │ │ ├── wood_house_32.nbt │ │ │ ├── wood_house_33.nbt │ │ │ ├── wood_house_34.nbt │ │ │ ├── wood_house_35.nbt │ │ │ ├── wood_house_36.nbt │ │ │ ├── wood_house_37.nbt │ │ │ ├── wood_house_38.nbt │ │ │ ├── wood_house_39.nbt │ │ │ ├── wood_house_4.nbt │ │ │ ├── wood_house_40.nbt │ │ │ ├── wood_house_41.nbt │ │ │ ├── wood_house_42.nbt │ │ │ ├── wood_house_43.nbt │ │ │ ├── wood_house_44.nbt │ │ │ ├── wood_house_5.nbt │ │ │ ├── wood_house_6.nbt │ │ │ ├── wood_house_7.nbt │ │ │ ├── wood_house_8.nbt │ │ │ └── wood_house_9.nbt │ │ └── wrecked_end_ship │ │ │ ├── wrecked_end_ship_0.nbt │ │ │ ├── wrecked_end_ship_1.nbt │ │ │ ├── wrecked_end_ship_2.nbt │ │ │ ├── wrecked_end_ship_3.nbt │ │ │ ├── wrecked_end_ship_4.nbt │ │ │ ├── wrecked_end_ship_5.nbt │ │ │ ├── wrecked_end_ship_6.nbt │ │ │ └── wrecked_end_ship_7.nbt │ │ └── world.yml └── test │ └── java │ └── InterpolatorTest.java └── test.sh /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | 4 | # Log file 5 | *.log 6 | 7 | # BlueJ files 8 | *.ctxt 9 | 10 | # Mobile Tools for Java (J2ME) 11 | .mtj.tmp/ 12 | 13 | # Package Files # 14 | *.war 15 | *.nar 16 | *.ear 17 | *.zip 18 | *.tar.gz 19 | *.rar 20 | *.log.gz 21 | target/ 22 | 23 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 24 | hs_err_pid* 25 | 26 | .gradle 27 | .idea 28 | bin 29 | .idea/misc.xml 30 | .idea/modules.xml 31 | .idea/vcs.xml 32 | 33 | .settings/* 34 | .project 35 | .classpath -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BetterEnd 2 | BetterEnd GitHub repository 3 | -------------------------------------------------------------------------------- /build.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /dependency-reduced-pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | com.dfsek 5 | BetterEnd 6 | 1.0-SNAPSHOT 7 | 8 | 9 | 10 | maven-compiler-plugin 11 | 12 | 8 13 | 8 14 | 15 | 16 | 17 | maven-antrun-plugin 18 | 3.0.0 19 | 20 | 21 | deploy-artifact 22 | package 23 | 24 | run 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | maven-shade-plugin 38 | 3.2.4 39 | 40 | 41 | package 42 | 43 | shade 44 | 45 | 46 | 47 | 48 | 49 | 50 | org.polydev.gaea 51 | com.dfsek.betterend.gaea 52 | 53 | 54 | org.apache.commons 55 | com.dfsek.betterend.commons 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | spigotmc-repo 65 | https://hub.spigotmc.org/nexus/content/repositories/snapshots/ 66 | 67 | 68 | nexus 69 | Lumine Releases 70 | https://mvn.lumine.io/repository/maven-public/ 71 | 72 | 73 | gaea.local 74 | gaea 75 | file:/home/dfsek/Documents/Gaea/repo 76 | 77 | 78 | 79 | 80 | org.spigotmc 81 | spigot-api 82 | 1.16.2-R0.1-SNAPSHOT 83 | provided 84 | 85 | 86 | org.jetbrains 87 | annotations 88 | 16.0.1 89 | provided 90 | 91 | 92 | com.googlecode.json-simple 93 | json-simple 94 | 1.1 95 | provided 96 | 97 | 98 | io.lumine.xikage 99 | MythicMobs 100 | 4.9.1 101 | provided 102 | 103 | 104 | javax.vecmath 105 | vecmath 106 | 1.5.2 107 | provided 108 | 109 | 110 | org.apache.maven.plugins 111 | maven-antrun-plugin 112 | 3.0.0 113 | maven-plugin 114 | provided 115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.dfsek 8 | BetterEnd 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | org.apache.maven.plugins 14 | maven-compiler-plugin 15 | 3.8.1 16 | 17 | 8 18 | 8 19 | 20 | 21 | 22 | org.apache.maven.plugins 23 | maven-shade-plugin 24 | 3.2.4 25 | 26 | 27 | 28 | org.apache.commons 29 | com.dfsek.betterend.lib.commons 30 | 31 | 32 | 33 | 34 | 35 | shade-premium 36 | package 37 | 38 | shade 39 | 40 | 41 | target/prod/${project.artifactId}-premium.jar 42 | 43 | 44 | 45 | shade-free 46 | package 47 | 48 | shade 49 | 50 | 51 | target/prod/${project.artifactId}-free.jar 52 | 53 | 54 | com.dfsek:BetterEnd 55 | 56 | com/dfsek/betterend/premium/** 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | spigotmc-repo 71 | https://hub.spigotmc.org/nexus/content/repositories/snapshots/ 72 | 73 | 74 | nexus 75 | Lumine Releases 76 | https://mvn.lumine.io/repository/maven-public/ 77 | 78 | 79 | CodeMC 80 | CodeMC Repository 81 | https://repo.codemc.org/repository/maven-public 82 | 83 | 84 | 85 | 86 | 87 | org.spigotmc 88 | spigot-api 89 | 1.16.2-R0.1-SNAPSHOT 90 | provided 91 | 92 | 93 | org.jetbrains 94 | annotations 95 | 16.0.1 96 | provided 97 | 98 | 99 | io.lumine.xikage 100 | MythicMobs 101 | 4.9.1 102 | provided 103 | 104 | 105 | org.polydev.gaea 106 | Gaea 107 | 1.15.0 108 | provided 109 | 110 | 111 | commons-io 112 | commons-io 113 | 2.4 114 | 115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /src/main/java/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: com.dfsek.betterend.BetterEnd 3 | 4 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/BetterEnd.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend; 2 | 3 | import com.dfsek.betterend.command.BetterEndCommand; 4 | import com.dfsek.betterend.config.ConfigUtil; 5 | import com.dfsek.betterend.config.LangUtil; 6 | import com.dfsek.betterend.config.WorldConfig; 7 | import com.dfsek.betterend.population.structures.EndStructure; 8 | import com.dfsek.betterend.premium.AetherFallUtil; 9 | import com.dfsek.betterend.premium.EndAdvancementUtil; 10 | import com.dfsek.betterend.premium.MythicSpawnsUtil; 11 | import com.dfsek.betterend.premium.PremiumUtil; 12 | import com.dfsek.betterend.util.Util; 13 | import com.dfsek.betterend.world.EndChunkGenerator; 14 | import org.bukkit.Bukkit; 15 | import org.bukkit.command.PluginCommand; 16 | import org.bukkit.configuration.file.FileConfiguration; 17 | import org.jetbrains.annotations.NotNull; 18 | import org.polydev.gaea.GaeaPlugin; 19 | import org.polydev.gaea.generation.GaeaChunkGenerator; 20 | import org.polydev.gaea.lang.Language; 21 | import org.polydev.gaea.structures.NMSStructure; 22 | 23 | import java.util.Objects; 24 | import java.util.logging.Level; 25 | import java.util.logging.Logger; 26 | 27 | public class BetterEnd extends GaeaPlugin { 28 | 29 | private static BetterEnd instance; 30 | public FileConfiguration config = this.getConfig(); 31 | 32 | public static BetterEnd getInstance() { 33 | return instance; 34 | } 35 | 36 | public static boolean isPremium() { 37 | try { 38 | return PremiumUtil.isPremium(); 39 | } catch(NoClassDefFoundError e) { 40 | return false; 41 | } 42 | } 43 | 44 | @Override 45 | public void onEnable() { 46 | instance = this; 47 | final Logger logger = this.getLogger(); 48 | NMSStructure.load(); 49 | 50 | Metrics metrics = new Metrics(this, 7709); 51 | metrics.addCustomChart(new Metrics.SimplePie("premium", () -> isPremium() ? "Yes" : "No")); 52 | 53 | this.getServer().getPluginManager().registerEvents(new EventListener(), this); 54 | this.saveDefaultConfig(); 55 | 56 | ConfigUtil.init(logger, this); 57 | 58 | PluginCommand c = Objects.requireNonNull(getCommand("betterend")); 59 | BetterEndCommand command = new BetterEndCommand(this); 60 | c.setExecutor(command); 61 | c.setTabCompleter(command); 62 | 63 | Bukkit.getScheduler().scheduleAsyncRepeatingTask(this, EndChunkGenerator::saveAll, ConfigUtil.dataSave, ConfigUtil.dataSave); 64 | EndStructure.init(); 65 | try { 66 | MythicSpawnsUtil.startSpawnRoutine(); 67 | if(isPremium() && ConfigUtil.advancements) getServer().getScheduler().scheduleSyncDelayedTask(this, () -> { 68 | logger.info("Enabling advancements..."); 69 | EndAdvancementUtil.enable(instance); 70 | AetherFallUtil.init(this); 71 | }, 60); 72 | } catch(NoClassDefFoundError ignored) { 73 | } 74 | logger.info(" "); 75 | logger.info(" "); 76 | logger.info("|---------------------------------------------------------------------------------|"); 77 | LangUtil.log("enable", Level.INFO); 78 | logger.info("|---------------------------------------------------------------------------------|"); 79 | logger.info(" "); 80 | logger.info(" "); 81 | getServer().getScheduler().scheduleSyncDelayedTask(this, () -> { 82 | if(! isPremium()) LangUtil.log("free-notification", Level.INFO); 83 | if(ConfigUtil.debug) logger.info("Server Implementation Name: " + Bukkit.getServer().getName()); 84 | if("Spigot".equals(Bukkit.getServer().getName()) 85 | || "CraftBukkit".equals(Bukkit.getServer().getName())) 86 | LangUtil.log("paper", Level.WARNING); 87 | else if(! "Paper".equals(Bukkit.getServer().getName())) 88 | LangUtil.log("untested", Level.WARNING); 89 | }, 120); 90 | if(ConfigUtil.doUpdateCheck) { 91 | getServer().getScheduler().scheduleSyncRepeatingTask(this, Util::checkUpdates, 100, 20L * ConfigUtil.updateCheckFrequency); 92 | } 93 | 94 | } 95 | 96 | @Override 97 | public void onDisable() { 98 | EndChunkGenerator.saveAll(); 99 | LangUtil.log("disable", Level.INFO); 100 | } 101 | 102 | @Override 103 | public EndChunkGenerator getDefaultWorldGenerator(@NotNull String worldName, String id) { 104 | new WorldConfig(Objects.requireNonNull(worldName), this); 105 | return new EndChunkGenerator(worldName); 106 | } 107 | 108 | @Override 109 | public boolean isDebug() { 110 | return ConfigUtil.debug; 111 | } 112 | 113 | @Override 114 | public Class getGeneratorClass() { 115 | return EndChunkGenerator.class; 116 | } 117 | 118 | @Override 119 | public Language getLanguage() { 120 | return LangUtil.getLanguage(); 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/command/BetterEndCommand.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.command; 2 | 3 | import com.dfsek.betterend.command.profile.ProfileCommand; 4 | import org.bukkit.command.CommandSender; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.polydev.gaea.GaeaPlugin; 7 | import org.polydev.gaea.command.Command; 8 | 9 | import java.util.Arrays; 10 | import java.util.Collections; 11 | import java.util.List; 12 | 13 | public class BetterEndCommand extends Command { 14 | public BetterEndCommand(GaeaPlugin main) { 15 | super(main); 16 | } 17 | 18 | @Override 19 | public String getName() { 20 | return "be"; 21 | } 22 | 23 | @Override 24 | public List getSubCommands() { 25 | return Arrays.asList(new VersionCommand(this), 26 | new ReloadCommand(this), 27 | new BiomeCommand(this), 28 | new ProfileCommand(this)); 29 | } 30 | 31 | @Override 32 | public boolean execute(@NotNull CommandSender commandSender, org.bukkit.command.@NotNull Command command, @NotNull String s, @NotNull String[] strings) { 33 | return true; 34 | } 35 | 36 | @Override 37 | public int arguments() { 38 | return 0; 39 | } 40 | 41 | @Override 42 | public List getTabCompletions(@NotNull CommandSender commandSender, @NotNull String s, @NotNull String[] strings) { 43 | return Collections.emptyList(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/command/BiomeCommand.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.command; 2 | 3 | import com.dfsek.betterend.config.LangUtil; 4 | import com.dfsek.betterend.world.EndBiomeGrid; 5 | import org.bukkit.World; 6 | import org.bukkit.command.Command; 7 | import org.bukkit.command.CommandSender; 8 | import org.bukkit.entity.Player; 9 | import org.jetbrains.annotations.NotNull; 10 | import org.polydev.gaea.command.WorldCommand; 11 | 12 | import java.util.Collections; 13 | import java.util.List; 14 | 15 | public class BiomeCommand extends WorldCommand { 16 | public BiomeCommand(org.polydev.gaea.command.Command parent) { 17 | super(parent); 18 | } 19 | 20 | @Override 21 | public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String s, @NotNull String[] strings, World world) { 22 | LangUtil.send("commands.biome", sender, EndBiomeGrid.fromWorld(world).getBiome(sender.getLocation()).toString()); 23 | return true; 24 | } 25 | 26 | @Override 27 | public String getName() { 28 | return "biome"; 29 | } 30 | 31 | @Override 32 | public List getSubCommands() { 33 | return Collections.singletonList(new BiomeTeleportCommand(this)); 34 | } 35 | 36 | @Override 37 | public int arguments() { 38 | return 0; 39 | } 40 | 41 | @Override 42 | public List getTabCompletions(@NotNull CommandSender commandSender, @NotNull String s, @NotNull String[] strings) { 43 | return Collections.emptyList(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/command/BiomeTeleportCommand.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.command; 2 | 3 | import com.dfsek.betterend.BetterEnd; 4 | import com.dfsek.betterend.util.Util; 5 | import org.bukkit.World; 6 | import org.bukkit.command.Command; 7 | import org.bukkit.command.CommandSender; 8 | import org.bukkit.entity.Player; 9 | import org.jetbrains.annotations.NotNull; 10 | import org.polydev.gaea.command.WorldCommand; 11 | 12 | import java.util.ArrayList; 13 | import java.util.Arrays; 14 | import java.util.Collections; 15 | import java.util.List; 16 | import java.util.stream.Collectors; 17 | 18 | public class BiomeTeleportCommand extends WorldCommand { 19 | private static List BIOMES = Arrays.asList("AETHER", "END", "SHATTERED_END", "AETHER_HIGHLANDS", "SHATTERED_FOREST", "VOID", "STARFIELD"); 20 | 21 | static { 22 | if(BetterEnd.isPremium()) { 23 | BIOMES = Arrays.asList("AETHER", "END", "SHATTERED_END", "AETHER_HIGHLANDS", "SHATTERED_FOREST", "AETHER_FOREST", "AETHER_HIGHLANDS_FOREST", "VOID", 24 | "STARFIELD"); 25 | } 26 | } 27 | public BiomeTeleportCommand(org.polydev.gaea.command.Command parent) { 28 | super(parent); 29 | } 30 | 31 | @Override 32 | public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String s, @NotNull String[] args, World world) { 33 | return Util.tpBiome(sender, args); 34 | } 35 | 36 | @Override 37 | public String getName() { 38 | return "teleport"; 39 | } 40 | 41 | @Override 42 | public List getSubCommands() { 43 | return Collections.emptyList(); 44 | } 45 | 46 | @Override 47 | public int arguments() { 48 | return 1; 49 | } 50 | 51 | @Override 52 | public List getTabCompletions(@NotNull CommandSender commandSender, @NotNull String s, @NotNull String[] args) { 53 | List argList = new ArrayList<>(); 54 | if(args.length == 1) argList.addAll(BIOMES); 55 | return argList.stream().filter(a -> a.toUpperCase().startsWith(args[args.length - 1].toUpperCase())).collect(Collectors.toList()); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/command/ReloadCommand.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.command; 2 | 3 | import com.dfsek.betterend.config.ConfigUtil; 4 | import com.dfsek.betterend.config.LangUtil; 5 | import org.bukkit.command.CommandSender; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.polydev.gaea.command.Command; 8 | import org.polydev.gaea.command.DebugCommand; 9 | 10 | import java.util.Collections; 11 | import java.util.List; 12 | 13 | public class ReloadCommand extends Command implements DebugCommand { 14 | public ReloadCommand(Command parent) { 15 | super(parent); 16 | } 17 | 18 | @Override 19 | public String getName() { 20 | return "reload"; 21 | } 22 | 23 | @Override 24 | public List getSubCommands() { 25 | return Collections.emptyList(); 26 | } 27 | 28 | @Override 29 | public boolean execute(@NotNull CommandSender sender, org.bukkit.command.@NotNull Command command, @NotNull String s, @NotNull String[] strings) { 30 | LangUtil.send("commands.reload-config", sender); 31 | ConfigUtil.loadConfig(getMain().getLogger(), getMain()); 32 | LangUtil.send("commands.complete-msg", sender); 33 | return true; 34 | } 35 | 36 | @Override 37 | public int arguments() { 38 | return 0; 39 | } 40 | 41 | @Override 42 | public List getTabCompletions(@NotNull CommandSender commandSender, @NotNull String s, @NotNull String[] strings) { 43 | return Collections.emptyList(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/command/VersionCommand.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.command; 2 | 3 | import com.dfsek.betterend.BetterEnd; 4 | import com.dfsek.betterend.config.LangUtil; 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.command.CommandSender; 7 | import org.bukkit.plugin.Plugin; 8 | import org.jetbrains.annotations.NotNull; 9 | import org.polydev.gaea.command.Command; 10 | 11 | import java.util.Collections; 12 | import java.util.List; 13 | import java.util.Objects; 14 | 15 | public class VersionCommand extends Command { 16 | public VersionCommand(Command parent) { 17 | super(parent); 18 | } 19 | 20 | @Override 21 | public String getName() { 22 | return "version"; 23 | } 24 | 25 | @Override 26 | public List getSubCommands() { 27 | return Collections.emptyList(); 28 | } 29 | 30 | @Override 31 | public boolean execute(@NotNull CommandSender sender, org.bukkit.command.@NotNull Command command, @NotNull String s, @NotNull String[] strings) { 32 | Plugin gaea = Objects.requireNonNull(Bukkit.getPluginManager().getPlugin("Gaea")); 33 | String gaeaVersion = gaea.getDescription().getVersion(); 34 | LangUtil.send("commands.version", sender, getMain().getDescription().getVersion() + "-" + (BetterEnd.isPremium() ? "premium" : "free"), gaeaVersion); 35 | return true; 36 | } 37 | 38 | @Override 39 | public int arguments() { 40 | return 0; 41 | } 42 | 43 | @Override 44 | public List getTabCompletions(@NotNull CommandSender commandSender, @NotNull String s, @NotNull String[] strings) { 45 | return Collections.emptyList(); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/command/profile/ProfileCommand.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.command.profile; 2 | 3 | import com.dfsek.betterend.config.LangUtil; 4 | import org.bukkit.World; 5 | import org.bukkit.command.Command; 6 | import org.bukkit.command.CommandSender; 7 | import org.bukkit.entity.Player; 8 | import org.jetbrains.annotations.NotNull; 9 | import org.polydev.gaea.command.WorldCommand; 10 | 11 | import java.util.Arrays; 12 | import java.util.Collections; 13 | import java.util.List; 14 | 15 | public class ProfileCommand extends WorldCommand { 16 | public ProfileCommand(org.polydev.gaea.command.Command parent) { 17 | super(parent); 18 | } 19 | 20 | @Override 21 | public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World w) { 22 | LangUtil.send("command.profile.main-menu", sender); 23 | return true; 24 | } 25 | 26 | @Override 27 | public String getName() { 28 | return "profile"; 29 | } 30 | 31 | @Override 32 | public List getSubCommands() { 33 | return Arrays.asList(new QueryCommand(this), new ResetCommand(this), new StartCommand(this), new StopCommand(this)); 34 | } 35 | 36 | @Override 37 | public int arguments() { 38 | return 1; 39 | } 40 | 41 | @Override 42 | public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) { 43 | return Collections.emptyList(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/command/profile/QueryCommand.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.command.profile; 2 | 3 | import com.dfsek.betterend.world.EndProfiler; 4 | import org.bukkit.World; 5 | import org.bukkit.command.Command; 6 | import org.bukkit.command.CommandSender; 7 | import org.bukkit.entity.Player; 8 | import org.jetbrains.annotations.NotNull; 9 | import org.polydev.gaea.command.WorldCommand; 10 | import org.polydev.gaea.profiler.WorldProfiler; 11 | 12 | import java.util.Collections; 13 | import java.util.List; 14 | 15 | public class QueryCommand extends WorldCommand { 16 | public QueryCommand(org.polydev.gaea.command.Command parent) { 17 | super(parent); 18 | } 19 | 20 | @Override 21 | public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World w) { 22 | WorldProfiler profile = EndProfiler.fromWorld(w); 23 | sender.sendMessage(profile.getResultsFormatted()); 24 | return true; 25 | } 26 | 27 | @Override 28 | public String getName() { 29 | return "query"; 30 | } 31 | 32 | @Override 33 | public List getSubCommands() { 34 | return Collections.emptyList(); 35 | } 36 | 37 | @Override 38 | public int arguments() { 39 | return 0; 40 | } 41 | 42 | @Override 43 | public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) { 44 | return Collections.emptyList(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/command/profile/ResetCommand.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.command.profile; 2 | 3 | import com.dfsek.betterend.config.LangUtil; 4 | import com.dfsek.betterend.world.EndProfiler; 5 | import org.bukkit.World; 6 | import org.bukkit.command.Command; 7 | import org.bukkit.command.CommandSender; 8 | import org.bukkit.entity.Player; 9 | import org.jetbrains.annotations.NotNull; 10 | import org.polydev.gaea.command.WorldCommand; 11 | import org.polydev.gaea.profiler.WorldProfiler; 12 | 13 | import java.util.Collections; 14 | import java.util.List; 15 | 16 | public class ResetCommand extends WorldCommand { 17 | public ResetCommand(org.polydev.gaea.command.Command parent) { 18 | super(parent); 19 | } 20 | 21 | @Override 22 | public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) { 23 | WorldProfiler profile = EndProfiler.fromWorld(world); 24 | profile.reset(); 25 | LangUtil.send("command.profile.reset", sender); 26 | return true; 27 | } 28 | 29 | @Override 30 | public String getName() { 31 | return "reset"; 32 | } 33 | 34 | @Override 35 | public List getSubCommands() { 36 | return Collections.emptyList(); 37 | } 38 | 39 | @Override 40 | public int arguments() { 41 | return 0; 42 | } 43 | 44 | @Override 45 | public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) { 46 | return Collections.emptyList(); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/command/profile/StartCommand.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.command.profile; 2 | 3 | import com.dfsek.betterend.config.LangUtil; 4 | import com.dfsek.betterend.world.EndProfiler; 5 | import org.bukkit.World; 6 | import org.bukkit.command.Command; 7 | import org.bukkit.command.CommandSender; 8 | import org.bukkit.entity.Player; 9 | import org.jetbrains.annotations.NotNull; 10 | import org.polydev.gaea.command.WorldCommand; 11 | import org.polydev.gaea.profiler.WorldProfiler; 12 | 13 | import java.util.Collections; 14 | import java.util.List; 15 | 16 | public class StartCommand extends WorldCommand { 17 | public StartCommand(org.polydev.gaea.command.Command parent) { 18 | super(parent); 19 | } 20 | 21 | @Override 22 | public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) { 23 | WorldProfiler profile = EndProfiler.fromWorld(world); 24 | profile.setProfiling(true); 25 | LangUtil.send("command.profile.start", sender); 26 | return true; 27 | } 28 | 29 | @Override 30 | public String getName() { 31 | return "start"; 32 | } 33 | 34 | @Override 35 | public List getSubCommands() { 36 | return Collections.emptyList(); 37 | } 38 | 39 | @Override 40 | public int arguments() { 41 | return 0; 42 | } 43 | 44 | @Override 45 | public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) { 46 | return Collections.emptyList(); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/command/profile/StopCommand.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.command.profile; 2 | 3 | import com.dfsek.betterend.config.LangUtil; 4 | import com.dfsek.betterend.world.EndProfiler; 5 | import org.bukkit.World; 6 | import org.bukkit.command.Command; 7 | import org.bukkit.command.CommandSender; 8 | import org.bukkit.entity.Player; 9 | import org.jetbrains.annotations.NotNull; 10 | import org.polydev.gaea.command.WorldCommand; 11 | import org.polydev.gaea.profiler.WorldProfiler; 12 | 13 | import java.util.Collections; 14 | import java.util.List; 15 | 16 | public class StopCommand extends WorldCommand { 17 | public StopCommand(org.polydev.gaea.command.Command parent) { 18 | super(parent); 19 | } 20 | 21 | @Override 22 | public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) { 23 | WorldProfiler profile = EndProfiler.fromWorld(world); 24 | profile.setProfiling(false); 25 | LangUtil.send("command.profile.stop", sender); 26 | return true; 27 | } 28 | 29 | @Override 30 | public String getName() { 31 | return "stop"; 32 | } 33 | 34 | @Override 35 | public List getSubCommands() { 36 | return Collections.emptyList(); 37 | } 38 | 39 | @Override 40 | public int arguments() { 41 | return 0; 42 | } 43 | 44 | @Override 45 | public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) { 46 | return Collections.emptyList(); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/config/ConfigUtil.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.config; 2 | 3 | import com.dfsek.betterend.BetterEnd; 4 | import org.bukkit.configuration.file.FileConfiguration; 5 | import org.bukkit.plugin.java.JavaPlugin; 6 | 7 | import java.time.Duration; 8 | import java.util.Objects; 9 | import java.util.logging.Logger; 10 | 11 | public class ConfigUtil { 12 | public static String lang; 13 | public static boolean debug; 14 | public static boolean doUpdateCheck; 15 | public static long updateCheckFrequency; 16 | public static boolean generateBigTreesEverywhere; 17 | public static int treeGrowthMultiplier; 18 | public static boolean parallel; 19 | public static boolean endCities; 20 | public static long dataSave; // Period of population data saving, in ticks. 21 | public static boolean advancements; 22 | 23 | private ConfigUtil() { 24 | } 25 | 26 | public static void loadConfig(Logger logger, JavaPlugin main) { 27 | long start = System.nanoTime(); 28 | logger.info("Loading configuration values..."); 29 | main.reloadConfig(); 30 | FileConfiguration config = main.getConfig(); 31 | 32 | dataSave = Duration.parse(Objects.requireNonNull(config.getString("data-save", "PT6M"))).toMillis()/20L; 33 | 34 | lang = config.getString("lang", "en_us"); 35 | debug = config.getBoolean("debug", false); 36 | doUpdateCheck = config.getBoolean("update-checker.enable", true); 37 | updateCheckFrequency = config.getLong("update-checker.frequency", 21600L); 38 | generateBigTreesEverywhere = config.getBoolean("big-trees-everywhere", false); 39 | treeGrowthMultiplier = config.getInt("tree-sapling-growth-modifier", 8); 40 | parallel = config.getBoolean("parallel", true); 41 | endCities = config.getBoolean("generate-end-cities", false); 42 | advancements = config.getBoolean("advancements", true); 43 | 44 | 45 | LangUtil.loadlang(lang, logger); 46 | 47 | WorldConfig.reloadAll(main); 48 | 49 | logger.info("Complete. Time elapsed: " + ((double) (System.nanoTime() - start)) / 1000000 + "ms"); 50 | } 51 | 52 | public static void init(Logger logger, BetterEnd main) { 53 | loadConfig(logger, main); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/config/LangUtil.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.config; 2 | 3 | import com.dfsek.betterend.BetterEnd; 4 | import com.dfsek.betterend.util.Util; 5 | import org.bukkit.command.CommandSender; 6 | import org.bukkit.configuration.InvalidConfigurationException; 7 | import org.polydev.gaea.lang.Language; 8 | 9 | import java.io.File; 10 | import java.io.IOException; 11 | import java.net.URISyntaxException; 12 | import java.util.jar.JarFile; 13 | import java.util.logging.Level; 14 | import java.util.logging.Logger; 15 | 16 | public class LangUtil { 17 | private static final BetterEnd main = BetterEnd.getInstance(); 18 | private static Language language; 19 | private static Logger logger; 20 | 21 | private LangUtil() { 22 | } 23 | 24 | public static Language getLanguage() { 25 | return language; 26 | } 27 | 28 | public static void loadlang(String id, Logger log) { 29 | File file = new File(main.getDataFolder(), "lang"); 30 | logger = log; 31 | try(JarFile jar = new JarFile(new File(BetterEnd.class.getProtectionDomain().getCodeSource().getLocation().toURI()))) { 32 | Util.copyResourcesToDirectory(jar, "lang", file.toString()); 33 | } catch(IOException | URISyntaxException e) { 34 | e.printStackTrace(); 35 | } 36 | logger.info("Loading language " + id); 37 | 38 | File configFile = new File(main.getDataFolder() + File.separator + "lang" + File.separator + id + ".yml"); 39 | try { 40 | language = new Language(configFile); 41 | } catch(IOException e) { 42 | main.getLogger().severe("Unable to load " + file.toString() + ". Defaulting to language en_us."); 43 | try { 44 | language = new Language(new File(main.getDataFolder() + File.separator + "lang" + File.separator + "en_us.yml")); 45 | } catch(IOException | InvalidConfigurationException e1) { 46 | e1.printStackTrace(); 47 | } 48 | } catch(InvalidConfigurationException e) { 49 | e.printStackTrace(); 50 | } 51 | } 52 | public static void log(String messageID, Level level, String... args) { 53 | language.getMessage(messageID).log(logger, level, args); 54 | } 55 | public static void send(String messageID, CommandSender sender, String... args) { 56 | language.getMessage(messageID).send(sender, args); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/event/BossChestOpenEvent.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.event; 2 | 3 | import org.bukkit.Location; 4 | import org.bukkit.block.Chest; 5 | import org.bukkit.entity.Player; 6 | import org.bukkit.event.Cancellable; 7 | import org.bukkit.event.Event; 8 | import org.bukkit.event.HandlerList; 9 | import org.jetbrains.annotations.NotNull; 10 | 11 | public class BossChestOpenEvent extends Event implements Cancellable { 12 | private static final HandlerList HANDLERS = new HandlerList(); 13 | private final Chest chest; 14 | private final Location spawnLocation; 15 | private final String bossName; 16 | private final Player player; 17 | private boolean cancelled; 18 | 19 | public BossChestOpenEvent(Chest chest, Location spawn, String bossName, Player p) { 20 | this.chest = chest; 21 | this.spawnLocation = spawn; 22 | this.bossName = bossName; 23 | this.player = p; 24 | } 25 | 26 | public static HandlerList getHandlerList() { 27 | return HANDLERS; 28 | } 29 | 30 | public Chest getChest() { 31 | return chest; 32 | } 33 | 34 | public Location getSpawnLocation() { 35 | return spawnLocation; 36 | } 37 | 38 | public Player getPlayer() { 39 | return player; 40 | } 41 | 42 | public String getBossName() { 43 | return bossName; 44 | } 45 | 46 | public @NotNull HandlerList getHandlers() { 47 | return HANDLERS; 48 | } 49 | 50 | @Override 51 | public boolean isCancelled() { 52 | return this.cancelled; 53 | } 54 | 55 | @Override 56 | public void setCancelled(boolean b) { 57 | this.cancelled = b; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/population/FloraPopulator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.population; 2 | 3 | import com.dfsek.betterend.config.WorldConfig; 4 | import com.dfsek.betterend.world.EndBiome; 5 | import com.dfsek.betterend.world.EndBiomeGrid; 6 | import com.dfsek.betterend.world.EndProfiler; 7 | import org.bukkit.Chunk; 8 | import org.bukkit.World; 9 | import org.bukkit.block.Block; 10 | import org.jetbrains.annotations.NotNull; 11 | import org.polydev.gaea.generation.GenerationPhase; 12 | import org.polydev.gaea.math.Range; 13 | import org.polydev.gaea.population.GaeaBlockPopulator; 14 | import org.polydev.gaea.profiler.ProfileFuture; 15 | import org.polydev.gaea.world.Flora; 16 | 17 | import java.util.List; 18 | import java.util.Random; 19 | 20 | public class FloraPopulator extends GaeaBlockPopulator { 21 | 22 | @Override 23 | public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { 24 | try(ProfileFuture ignore = EndProfiler.fromWorld(world).measure("FloraTime")) { 25 | WorldConfig c = WorldConfig.fromWorld(world); 26 | for(int x = 0; x < 16; x++) { 27 | for(int z = 0; z < 16; z++) { 28 | EndBiome biome = EndBiomeGrid.fromWorld(world).getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z, GenerationPhase.POPULATE); 29 | if(biome.getDecorator().getFloraChance() <= 0 || random.nextInt(100) > biome.getDecorator().getFloraChance()) 30 | continue; 31 | Flora Flora = biome.getDecorator().getFlora().get(random); 32 | List at = Flora.getValidSpawnsAt(chunk, x, z, new Range(c.islandHeight - 1, c.islandHeight+ c.islandHeightMultiplierTop)); 33 | if(at.size() == 0) continue; 34 | Block highest = at.get(0); 35 | if(highest != null) Flora.plant(highest.getLocation()); 36 | } 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/population/OrePopulator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.population; 2 | 3 | import com.dfsek.betterend.config.WorldConfig; 4 | import com.dfsek.betterend.world.EndBiomeGrid; 5 | import com.dfsek.betterend.world.EndProfiler; 6 | import org.bukkit.Chunk; 7 | import org.bukkit.Material; 8 | import org.bukkit.World; 9 | import org.bukkit.block.data.BlockData; 10 | import org.jetbrains.annotations.NotNull; 11 | import org.polydev.gaea.generation.GenerationPhase; 12 | import org.polydev.gaea.population.GaeaBlockPopulator; 13 | import org.polydev.gaea.profiler.ProfileFuture; 14 | import org.polydev.gaea.world.Ore; 15 | 16 | import java.util.Random; 17 | 18 | public class OrePopulator extends GaeaBlockPopulator { 19 | @Override 20 | public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { 21 | ProfileFuture oreP = EndProfiler.fromWorld(world).measure("OreTime"); 22 | WorldConfig config = WorldConfig.fromWorld(world); 23 | int x; 24 | int y; 25 | int z; 26 | for(int i = 0; i < config.oreAttempts; i++) { // Number of tries 27 | x = random.nextInt(15); 28 | z = random.nextInt(15); 29 | Ore ore; 30 | try { 31 | ore = config.ores.get(EndBiomeGrid.fromWorld(world).getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z, GenerationPhase.POPULATE)).get(); 32 | } catch(NullPointerException e) { 33 | continue; 34 | } 35 | 36 | y = random.nextInt(Math.max(config.islandHeight - config.islandHeightMultiplierBottom + 1, 1)) + config.islandHeightMultiplierBottom; 37 | if(y > 1) doVein(world, chunk, random, new int[] {x, y, z}, ore.getType(), ore.getContChance()); 38 | } 39 | if(oreP != null) oreP.complete(); 40 | } 41 | 42 | private void doVein(World world, Chunk chunk, Random random, int[] coords, BlockData ore, int continueChance) { 43 | int x = coords[0]; 44 | int y = coords[1]; 45 | int z = coords[2]; 46 | Material current = world.getBlockAt(x + chunk.getX() * 16, y, z + chunk.getZ() * 16).getType(); 47 | if(current == Material.STONE || current == Material.END_STONE) { 48 | boolean isStone = true; 49 | while(isStone) { 50 | world.getBlockAt(x + chunk.getX() * 16, y, z + chunk.getZ() * 16).setBlockData(ore, false); 51 | if(random.nextInt(100) < continueChance) { 52 | switch(random.nextInt(6)) { 53 | case 0: 54 | x++; 55 | break; 56 | case 1: 57 | y++; 58 | break; 59 | case 2: 60 | z++; 61 | break; 62 | case 3: 63 | x--; 64 | break; 65 | case 4: 66 | y--; 67 | break; 68 | case 5: 69 | z--; 70 | break; 71 | default: 72 | } 73 | current = world.getBlockAt(x + chunk.getX() * 16, y, z + chunk.getZ() * 16).getType(); 74 | isStone = (current.equals(Material.STONE) || current.equals(Material.END_STONE) || current.equals(ore.getMaterial())); 75 | } else isStone = false; 76 | } 77 | } 78 | } 79 | 80 | } 81 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/population/SnowPopulator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.population; 2 | 3 | import com.dfsek.betterend.config.ConfigUtil; 4 | import com.dfsek.betterend.world.EndBiomeGrid; 5 | import com.dfsek.betterend.world.EndProfiler; 6 | import org.bukkit.Bukkit; 7 | import org.bukkit.Chunk; 8 | import org.bukkit.Location; 9 | import org.bukkit.Material; 10 | import org.bukkit.World; 11 | import org.bukkit.block.Block; 12 | import org.bukkit.block.data.BlockData; 13 | import org.jetbrains.annotations.NotNull; 14 | import org.polydev.gaea.population.GaeaBlockPopulator; 15 | import org.polydev.gaea.profiler.ProfileFuture; 16 | 17 | import java.util.ArrayList; 18 | import java.util.Random; 19 | 20 | public class SnowPopulator extends GaeaBlockPopulator { 21 | private static final ArrayList blacklistSpawn = new ArrayList<>(); 22 | private static final BlockData snow = Material.SNOW.createBlockData(); 23 | 24 | static { 25 | for(Material m : Material.values()) { 26 | String name = m.toString().toLowerCase(); 27 | if(name.contains("slab") 28 | || name.contains("stair") 29 | || name.contains("wall") 30 | || name.contains("fence") 31 | || name.contains("lantern") 32 | || name.contains("chest") 33 | || name.contains("door") 34 | || name.contains("repeater") 35 | || name.equals("lily_pad") 36 | || name.equals("snow") 37 | || name.equals("pane")) blacklistSpawn.add(m); 38 | } 39 | blacklistSpawn.add(Material.END_STONE); 40 | if(ConfigUtil.debug) 41 | Bukkit.getLogger().info("Added " + blacklistSpawn.size() + " materials to snow blacklist"); 42 | } 43 | 44 | @Override 45 | public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { 46 | ProfileFuture featureFuture = EndProfiler.fromWorld(world).measure("SnowTime"); 47 | for(int x = 0; x < 16; x++) { 48 | for(int z = 0; z < 16; z++) { 49 | Location l = chunk.getBlock(x, 0, z).getLocation(); 50 | if(EndBiomeGrid.fromWorld(world).getBiome(l).shouldGenerateSnow()) { 51 | Block highest = world.getHighestBlockAt(l); 52 | if(highest.getLocation().getBlockY() > 1 && highest.getLocation().add(0, 1, 0).getBlock().isEmpty()) { 53 | if(random.nextInt() < 40 && ! blacklistSpawn.contains(highest.getType())) 54 | highest.getLocation().add(0, 1, 0).getBlock().setBlockData(snow, false); 55 | } 56 | } 57 | } 58 | } 59 | if(featureFuture != null) featureFuture.complete(); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/population/TreePopulator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.population; 2 | 3 | import com.dfsek.betterend.BetterEnd; 4 | import com.dfsek.betterend.world.EndBiome; 5 | import com.dfsek.betterend.world.EndBiomeGrid; 6 | import com.dfsek.betterend.world.EndProfiler; 7 | import org.bukkit.Chunk; 8 | import org.bukkit.Location; 9 | import org.bukkit.World; 10 | import org.jetbrains.annotations.NotNull; 11 | import org.polydev.gaea.population.GaeaBlockPopulator; 12 | import org.polydev.gaea.profiler.ProfileFuture; 13 | import org.polydev.gaea.util.WorldUtil; 14 | 15 | import java.util.Random; 16 | 17 | public class TreePopulator extends GaeaBlockPopulator { 18 | private final BetterEnd main = BetterEnd.getInstance(); 19 | 20 | @Override 21 | public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { 22 | ProfileFuture gen = EndProfiler.fromWorld(world).measure("TreeGenTime"); 23 | int numTrees = 0; 24 | for(int i = 0; i < 10; i++) { 25 | int x = random.nextInt(16); 26 | int z = random.nextInt(16); 27 | int y = WorldUtil.getHighestValidSpawnAt(chunk, x, z); 28 | if(y <= 0) continue; 29 | Location origin = chunk.getBlock(x, y, z).getLocation().add(0, 1, 0); 30 | EndBiome b = EndBiomeGrid.fromWorld(world).getBiome(origin); 31 | numTrees++; 32 | try { 33 | b.getDecorator().getTrees().get(random).plant(origin, random, main); 34 | } catch(NullPointerException ignored) { 35 | } 36 | if(numTrees >= b.getDecorator().getTreeDensity()) return; 37 | } 38 | if(gen != null) gen.complete(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/population/structures/EndStructure.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.population.structures; 2 | 3 | import com.dfsek.betterend.BetterEnd; 4 | import com.dfsek.betterend.config.ConfigUtil; 5 | import com.dfsek.betterend.premium.CustomStructuresUtil; 6 | import org.bukkit.Bukkit; 7 | import org.bukkit.Location; 8 | import org.bukkit.NamespacedKey; 9 | import org.bukkit.entity.EntityType; 10 | import org.polydev.gaea.structures.NMSStructure; 11 | import org.polydev.gaea.structures.Structure; 12 | import org.polydev.gaea.structures.features.EntityFeature; 13 | import org.polydev.gaea.structures.features.Feature; 14 | import org.polydev.gaea.structures.features.LootFeature; 15 | import org.polydev.gaea.structures.features.PersistentDataFeature; 16 | import org.polydev.gaea.structures.spawn.AirSpawn; 17 | import org.polydev.gaea.structures.spawn.GroundSpawn; 18 | import org.polydev.gaea.structures.spawn.StructureSpawnInfo; 19 | import org.polydev.gaea.structures.spawn.UndergroundSpawn; 20 | 21 | import java.io.FileNotFoundException; 22 | import java.io.InputStream; 23 | import java.util.Arrays; 24 | import java.util.Collections; 25 | import java.util.HashMap; 26 | import java.util.List; 27 | import java.util.Map; 28 | import java.util.Random; 29 | 30 | 31 | public enum EndStructure implements Structure { 32 | AETHER_RUIN("aether_ruin", 18, Collections.emptyList(), new GroundSpawn(0)), 33 | COBBLE_HOUSE("cobble_house", 5, Collections.singletonList(new LootFeature(getLoot("cobble_house.json"))), new GroundSpawn(0)), 34 | END_HOUSE("end_house", 3, Collections.singletonList(new LootFeature(getLoot("end_house.json"))), new GroundSpawn(- 5)), 35 | END_RUIN("end_ruin", 109, Collections.emptyList(), new GroundSpawn(0)), 36 | END_SHIP("end_ship", 8, Collections.singletonList(new LootFeature(getLoot("end_ship.json"))), new AirSpawn(128, 32)), 37 | END_TOWER("end_tower", 2, Collections.singletonList(new LootFeature(getLoot("end_tower.json"))), new GroundSpawn(0)), 38 | SHULKER_NEST("shulker_nest", 2, Arrays.asList(new LootFeature(getLoot("shulker_nest.json")), new EntityFeature(2, 6, EntityType.SHULKER)), new GroundSpawn(0)), 39 | SPRUCE_WOOD_HOUSE("spruce_house", 5, Collections.singletonList(new LootFeature(getLoot("spruce_house.json"))), new GroundSpawn(- 1)), 40 | STRONGHOLD("stronghold", 1, Collections.singletonList(new LootFeature(getLoot("stronghold.json"))), new UndergroundSpawn(8)), 41 | VOID_STAR("void_star", 4, Collections.emptyList(), new AirSpawn(128, 250)), 42 | GOLD_DUNGEON("gold_dungeon", 1, Arrays.asList(new LootFeature(getLoot("gold_dungeon.json")), new PersistentDataFeature(new NamespacedKey(BetterEnd.getInstance(), "valkyrie-spawner"))), new AirSpawn(128, 0)), 43 | WOOD_HOUSE("wood_house", 45, Collections.singletonList(new LootFeature(getLoot("wood_house.json"))), new GroundSpawn(- 1)), 44 | WRECKED_END_SHIP("wrecked_end_ship", 8, Collections.singletonList(new LootFeature(getLoot("wrecked_end_ship.json"))), new GroundSpawn(- 5)); 45 | 46 | private final int permutations; 47 | private final String filename; 48 | private final List features; 49 | private final StructureSpawnInfo spawn; 50 | private final Map structures = new HashMap<>(); 51 | 52 | EndStructure(String filename, int permutations, List features, StructureSpawnInfo spawn) { 53 | this.permutations = permutations; 54 | this.filename = filename; 55 | this.features = features; 56 | this.spawn = spawn; 57 | for(int i = 0; i < permutations; i++) { 58 | if(ConfigUtil.debug) Bukkit.getLogger().info("Loading structures to memory: " + filename + i); 59 | long l = System.nanoTime(); 60 | this.structures.put(filename + i, NMSStructure.getAsTag(EndStructure.class.getResourceAsStream("/structures" + "/" + filename + "/" + filename + "_" + i + ".nbt"))); 61 | if(ConfigUtil.debug) Bukkit.getLogger().info("Took " + (double) (System.nanoTime() - l) / 1000000 + "ms"); 62 | } 63 | } 64 | 65 | private static InputStream getLoot(String name) { 66 | try { 67 | return CustomStructuresUtil.getLootTable(name); 68 | } catch(FileNotFoundException | NoClassDefFoundError e) { 69 | return EndStructure.class.getResourceAsStream("/loot/" + name); 70 | } 71 | } 72 | 73 | /** 74 | * Use to load structures at startup. 75 | */ 76 | public static void init() { 77 | } 78 | 79 | @Override 80 | public NMSStructure getInstance(Location origin, Random random) { 81 | return new NMSStructure(origin, structures.get(filename + random.nextInt(permutations))); 82 | } 83 | 84 | @Override 85 | public List getFeatures() { 86 | return features; 87 | } 88 | 89 | @Override 90 | public StructureSpawnInfo getSpawnInfo() { 91 | return this.spawn; 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/population/structures/StructurePopulator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.population.structures; 2 | 3 | import com.dfsek.betterend.config.ConfigUtil; 4 | import com.dfsek.betterend.config.WorldConfig; 5 | import com.dfsek.betterend.world.EndBiome; 6 | import com.dfsek.betterend.world.EndBiomeGrid; 7 | import com.dfsek.betterend.world.EndProfiler; 8 | import org.bukkit.Chunk; 9 | import org.bukkit.Location; 10 | import org.bukkit.World; 11 | import org.jetbrains.annotations.NotNull; 12 | import org.polydev.gaea.generation.GenerationPhase; 13 | import org.polydev.gaea.population.GaeaBlockPopulator; 14 | import org.polydev.gaea.profiler.ProfileFuture; 15 | import org.polydev.gaea.structures.NMSStructure; 16 | import org.polydev.gaea.structures.Structure; 17 | import org.polydev.gaea.structures.features.Feature; 18 | import org.polydev.gaea.util.WorldUtil; 19 | 20 | import java.util.ArrayList; 21 | import java.util.List; 22 | import java.util.Random; 23 | 24 | public class StructurePopulator extends GaeaBlockPopulator { 25 | @Override 26 | public void populate(@NotNull World world, @NotNull Random random, @NotNull Chunk chunk) { 27 | long l = System.nanoTime(); 28 | int x = random.nextInt(16); 29 | int z = random.nextInt(16); 30 | EndBiome biome = EndBiomeGrid.fromWorld(world).getBiome(x + (chunk.getX() << 4), z + (chunk.getZ() << 4), GenerationPhase.POPULATE); 31 | if(WorldConfig.fromWorld(world).structureChancePerChunk > random.nextInt(100) || biome.getDecorator().overrideStructureChance()) { 32 | int y = WorldUtil.getHighestValidSpawnAt(chunk, x, z); 33 | x += (chunk.getX() << 4); 34 | z += (chunk.getZ() << 4); 35 | if(x > 29999984 || z > 29999984) return; 36 | Structure struc = biome.getDecorator().getStructures(world).get(random); 37 | if(struc == null) return; 38 | Location origin = struc.getSpawnInfo().getSpawnLocation(new Location(world, x, y, z), random); 39 | if(origin.getY() <= 0) return; 40 | NMSStructure nms = struc.getInstance(origin, random); 41 | nms.setRotation(random.nextInt(4) * 90); 42 | if(struc.getSpawnInfo().isValidSpawn(nms)) nms.paste(); 43 | else return; 44 | ProfileFuture featureFuture = EndProfiler.fromWorld(world).measure("StructureFeatureTime"); 45 | List features = new ArrayList<>(struc.getFeatures()); 46 | features.addAll(biome.getStructureFeatures()); 47 | for(Feature f : features) { 48 | f.populate(nms, random); 49 | } 50 | if(featureFuture != null) featureFuture.complete(); 51 | if(ConfigUtil.debug) System.out.println("Generated " + struc + " at " + x + " " + origin.getY() + " " + z); 52 | EndProfiler.fromWorld(world).setMeasurement("StructureGenTime", System.nanoTime() - l); 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/premium/AetherFallUtil.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.premium; 2 | 3 | import com.dfsek.betterend.config.WorldConfig; 4 | import com.dfsek.betterend.world.EndBiomeGrid; 5 | import com.dfsek.betterend.world.EndChunkGenerator; 6 | import org.bukkit.Bukkit; 7 | import org.bukkit.Location; 8 | import org.bukkit.entity.Player; 9 | import org.bukkit.plugin.Plugin; 10 | 11 | public class AetherFallUtil { 12 | private AetherFallUtil() { 13 | } 14 | 15 | public static void init(Plugin plugin) { 16 | plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, () -> { 17 | for(Player p : plugin.getServer().getOnlinePlayers()) { 18 | if(p.getWorld().getGenerator() instanceof EndChunkGenerator 19 | && p.getLocation().getY() < 0 && (WorldConfig.fromWorld(p.getWorld()).fallToOverworldEverywhere 20 | || (EndBiomeGrid.fromWorld(p.getWorld()).getBiome(p.getLocation()).isAether() && WorldConfig.fromWorld(p.getWorld()).fallToOverworldAether))) 21 | p.teleport(new Location(Bukkit.getWorlds().get(0), p.getLocation().getX(), p.getWorld().getMaxHeight(), p.getLocation().getZ())); 22 | } 23 | }, 2L, 2L); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/premium/BossTimeoutUtil.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.premium; 2 | 3 | import com.dfsek.betterend.BetterEnd; 4 | import com.dfsek.betterend.config.ConfigUtil; 5 | import com.dfsek.betterend.config.WorldConfig; 6 | import org.bukkit.NamespacedKey; 7 | import org.bukkit.block.Chest; 8 | import org.bukkit.persistence.PersistentDataType; 9 | 10 | import java.util.Date; 11 | 12 | public class BossTimeoutUtil { 13 | private static final BetterEnd main = BetterEnd.getInstance(); 14 | 15 | private BossTimeoutUtil() { 16 | } 17 | 18 | public static boolean timeoutReached(Chest chest) { 19 | NamespacedKey key = new NamespacedKey(main, "dungeon-timeout"); 20 | long time = System.currentTimeMillis(); 21 | try { 22 | if(ConfigUtil.debug) 23 | main.getLogger().info("current time: " + new Date(time).toString() + ", " + "needed time: " 24 | + new Date(chest.getPersistentDataContainer().get(key, PersistentDataType.LONG)).toString()); 25 | } catch(NullPointerException e) { 26 | if(ConfigUtil.debug) 27 | main.getLogger().info("current time: " + new Date(time).toString() + ", Time has not been set."); 28 | } 29 | try { 30 | if(chest.getPersistentDataContainer().get(key, PersistentDataType.LONG) < time) { 31 | if(ConfigUtil.debug) main.getLogger().info("Timeout reached."); 32 | chest.getPersistentDataContainer().set(key, PersistentDataType.LONG, time + WorldConfig.fromWorld(chest.getWorld()).bossRespawnTime); 33 | chest.update(); 34 | return true; 35 | } 36 | } catch(NullPointerException e) { 37 | if(ConfigUtil.debug) main.getLogger().info("Timeout reached."); 38 | chest.getPersistentDataContainer().set(key, PersistentDataType.LONG, time + WorldConfig.fromWorld(chest.getWorld()).bossRespawnTime); 39 | chest.update(); 40 | return true; 41 | } 42 | if(ConfigUtil.debug) main.getLogger().info("Timeout not reached."); 43 | return false; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/premium/PremiumUtil.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.premium; 2 | 3 | public class PremiumUtil { 4 | private PremiumUtil() { 5 | } 6 | 7 | public static boolean isPremium() { 8 | return true; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/EndProfiler.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world; 2 | 3 | import org.bukkit.World; 4 | import org.polydev.gaea.profiler.DataType; 5 | import org.polydev.gaea.profiler.Measurement; 6 | import org.polydev.gaea.profiler.WorldProfiler; 7 | 8 | import java.util.HashMap; 9 | 10 | public class EndProfiler extends WorldProfiler { 11 | private static final HashMap profilers = new HashMap<>(); 12 | 13 | public EndProfiler(World w) { 14 | super(w); 15 | this.addMeasurement(new Measurement(2500000, DataType.PERIOD_MILLISECONDS), "TotalChunkGenTime") 16 | .addMeasurement(new Measurement(2500000, DataType.PERIOD_MILLISECONDS), "ChunkBaseGenTime") 17 | .addMeasurement(new Measurement(2000000, DataType.PERIOD_MILLISECONDS), "BiomeSetTime") 18 | .addMeasurement(new Measurement(25000000, DataType.PERIOD_MILLISECONDS), "TreeGenTime") 19 | .addMeasurement(new Measurement(150000000, DataType.PERIOD_MILLISECONDS), "StructureGenTime") 20 | .addMeasurement(new Measurement(3000000, DataType.PERIOD_MILLISECONDS), "StructureFeatureTime") 21 | .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "SnowTime") 22 | .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "FloraTime") 23 | .addMeasurement(new Measurement(1500000, DataType.PERIOD_MILLISECONDS), "OreTime"); 24 | } 25 | 26 | public static EndProfiler fromWorld(World w) { 27 | if(w.getGenerator() instanceof EndChunkGenerator) { 28 | if(profilers.containsKey(w)) return profilers.get(w); 29 | EndProfiler p = new EndProfiler(w); 30 | profilers.put(w, p); 31 | return p; 32 | } else throw new IllegalArgumentException("Attempted to instantiate/fetch Profiler for non-BetterEnd world!"); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/decor/AetherDecorator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.decor; 2 | 3 | import org.bukkit.block.Biome; 4 | import org.polydev.gaea.biome.Decorator; 5 | import org.polydev.gaea.math.ProbabilityCollection; 6 | import org.polydev.gaea.tree.Tree; 7 | import org.polydev.gaea.tree.TreeType; 8 | import org.polydev.gaea.world.Flora; 9 | import org.polydev.gaea.world.FloraType; 10 | 11 | public class AetherDecorator extends Decorator { 12 | private final ProbabilityCollection Flora = new ProbabilityCollection().add(FloraType.GRASS, 75) 13 | .add(FloraType.TALL_GRASS, 10) 14 | .add(FloraType.FERN, 5) 15 | .add(FloraType.TALL_FERN, 5) 16 | .add(FloraType.POPPY, 5) 17 | .add(FloraType.BLUE_ORCHID, 5); 18 | private final ProbabilityCollection trees = new ProbabilityCollection() 19 | .add(TreeType.OAK, 80) 20 | .add(TreeType.LARGE_OAK, 15) 21 | .add(TreeType.BIRCH, 5); 22 | 23 | @Override 24 | public ProbabilityCollection getTrees() { 25 | return trees; 26 | } 27 | 28 | @Override 29 | public int getTreeDensity() { 30 | return 3; 31 | } 32 | 33 | @Override 34 | public boolean overrideStructureChance() { 35 | return false; 36 | } 37 | 38 | @Override 39 | public Biome getVanillaBiome() { 40 | return Biome.END_HIGHLANDS; 41 | } 42 | 43 | @Override 44 | public ProbabilityCollection getFlora() { 45 | return Flora; 46 | } 47 | 48 | @Override 49 | public int getFloraChance() { 50 | return 60; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/decor/AetherForestDecorator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.decor; 2 | 3 | import org.bukkit.block.Biome; 4 | import org.polydev.gaea.biome.Decorator; 5 | import org.polydev.gaea.math.ProbabilityCollection; 6 | import org.polydev.gaea.tree.Tree; 7 | import org.polydev.gaea.tree.TreeType; 8 | import org.polydev.gaea.world.Flora; 9 | import org.polydev.gaea.world.FloraType; 10 | 11 | public class AetherForestDecorator extends Decorator { 12 | private final ProbabilityCollection Flora = new ProbabilityCollection().add(FloraType.GRASS, 75) 13 | .add(FloraType.TALL_GRASS, 10) 14 | .add(FloraType.FERN, 5) 15 | .add(FloraType.TALL_FERN, 5) 16 | .add(FloraType.POPPY, 5) 17 | .add(FloraType.BLUE_ORCHID, 5); 18 | 19 | private final ProbabilityCollection trees = new ProbabilityCollection() 20 | .add(TreeType.GIANT_OAK, 1); 21 | 22 | @Override 23 | public ProbabilityCollection getTrees() { 24 | return trees; 25 | } 26 | 27 | @Override 28 | public int getTreeDensity() { 29 | return 1; 30 | } 31 | 32 | @Override 33 | public boolean overrideStructureChance() { 34 | return false; 35 | } 36 | 37 | @Override 38 | public Biome getVanillaBiome() { 39 | return Biome.END_HIGHLANDS; 40 | } 41 | 42 | @Override 43 | public ProbabilityCollection getFlora() { 44 | return Flora; 45 | } 46 | 47 | @Override 48 | public int getFloraChance() { 49 | return 60; 50 | } 51 | 52 | 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/decor/AetherHighlandsDecorator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.decor; 2 | 3 | import org.bukkit.block.Biome; 4 | import org.polydev.gaea.biome.Decorator; 5 | import org.polydev.gaea.math.ProbabilityCollection; 6 | import org.polydev.gaea.tree.Tree; 7 | import org.polydev.gaea.tree.TreeType; 8 | import org.polydev.gaea.world.Flora; 9 | import org.polydev.gaea.world.FloraType; 10 | 11 | public class AetherHighlandsDecorator extends Decorator { 12 | private final ProbabilityCollection Flora = new ProbabilityCollection().add(FloraType.GRASS, 40) 13 | .add(FloraType.TALL_GRASS, 5) 14 | .add(FloraType.FERN, 55) 15 | .add(FloraType.TALL_FERN, 10) 16 | .add(FloraType.POPPY, 5) 17 | .add(FloraType.BLUE_ORCHID, 5); 18 | private final ProbabilityCollection trees = new ProbabilityCollection() 19 | .add(TreeType.SPRUCE, 80) 20 | .add(TreeType.LARGE_SPRUCE, 20); 21 | 22 | @Override 23 | public ProbabilityCollection getTrees() { 24 | return trees; 25 | } 26 | 27 | @Override 28 | public int getTreeDensity() { 29 | return 6; 30 | } 31 | 32 | @Override 33 | public boolean overrideStructureChance() { 34 | return false; 35 | } 36 | 37 | @Override 38 | public Biome getVanillaBiome() { 39 | return Biome.END_HIGHLANDS; 40 | } 41 | 42 | @Override 43 | public ProbabilityCollection getFlora() { 44 | return Flora; 45 | } 46 | 47 | @Override 48 | public int getFloraChance() { 49 | return 80; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/decor/AetherHighlandsForestDecorator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.decor; 2 | 3 | import org.bukkit.block.Biome; 4 | import org.polydev.gaea.biome.Decorator; 5 | import org.polydev.gaea.math.ProbabilityCollection; 6 | import org.polydev.gaea.tree.Tree; 7 | import org.polydev.gaea.tree.TreeType; 8 | import org.polydev.gaea.world.Flora; 9 | import org.polydev.gaea.world.FloraType; 10 | 11 | public class AetherHighlandsForestDecorator extends Decorator { 12 | private final ProbabilityCollection Flora = new ProbabilityCollection().add(FloraType.GRASS, 40) 13 | .add(FloraType.TALL_GRASS, 5) 14 | .add(FloraType.FERN, 55) 15 | .add(FloraType.TALL_FERN, 10) 16 | .add(FloraType.POPPY, 5) 17 | .add(FloraType.BLUE_ORCHID, 5); 18 | private final ProbabilityCollection trees = new ProbabilityCollection() 19 | .add(TreeType.GIANT_SPRUCE, 1); 20 | 21 | @Override 22 | public ProbabilityCollection getTrees() { 23 | return trees; 24 | } 25 | 26 | @Override 27 | public int getTreeDensity() { 28 | return 1; 29 | } 30 | 31 | @Override 32 | public boolean overrideStructureChance() { 33 | return false; 34 | } 35 | 36 | @Override 37 | public Biome getVanillaBiome() { 38 | return Biome.END_HIGHLANDS; 39 | } 40 | 41 | @Override 42 | public ProbabilityCollection getFlora() { 43 | return Flora; 44 | } 45 | 46 | @Override 47 | public int getFloraChance() { 48 | return 80; 49 | } 50 | 51 | 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/decor/EndDecorator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.decor; 2 | 3 | import org.bukkit.block.Biome; 4 | import org.polydev.gaea.biome.Decorator; 5 | import org.polydev.gaea.math.ProbabilityCollection; 6 | import org.polydev.gaea.tree.Tree; 7 | import org.polydev.gaea.tree.TreeType; 8 | import org.polydev.gaea.world.Flora; 9 | 10 | public class EndDecorator extends Decorator { 11 | private final ProbabilityCollection trees = new ProbabilityCollection() 12 | .add(TreeType.CHORUS_PLANT, 80); 13 | 14 | @Override 15 | public ProbabilityCollection getTrees() { 16 | return trees; 17 | } 18 | 19 | @Override 20 | public int getTreeDensity() { 21 | return 4; 22 | } 23 | 24 | @Override 25 | public boolean overrideStructureChance() { 26 | return false; 27 | } 28 | 29 | @Override 30 | public Biome getVanillaBiome() { 31 | return Biome.THE_END; 32 | } 33 | 34 | @Override 35 | public ProbabilityCollection getFlora() { 36 | return new ProbabilityCollection<>(); 37 | } 38 | 39 | @Override 40 | public int getFloraChance() { 41 | return 0; 42 | } 43 | 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/decor/MainIslandDecorator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.decor; 2 | 3 | import org.bukkit.block.Biome; 4 | import org.polydev.gaea.biome.Decorator; 5 | import org.polydev.gaea.math.ProbabilityCollection; 6 | import org.polydev.gaea.tree.Tree; 7 | import org.polydev.gaea.world.Flora; 8 | 9 | public class MainIslandDecorator extends Decorator { 10 | @Override 11 | public ProbabilityCollection getTrees() { 12 | return new ProbabilityCollection<>(); 13 | } 14 | 15 | @Override 16 | public int getTreeDensity() { 17 | return 0; 18 | } 19 | 20 | @Override 21 | public boolean overrideStructureChance() { 22 | return false; 23 | } 24 | 25 | @Override 26 | public Biome getVanillaBiome() { 27 | return Biome.THE_END; 28 | } 29 | 30 | @Override 31 | public ProbabilityCollection getFlora() { 32 | return new ProbabilityCollection<>(); 33 | } 34 | 35 | @Override 36 | public int getFloraChance() { 37 | return 0; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/decor/ShatteredEndDecorator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.decor; 2 | 3 | import org.bukkit.block.Biome; 4 | import org.polydev.gaea.biome.Decorator; 5 | import org.polydev.gaea.math.ProbabilityCollection; 6 | import org.polydev.gaea.tree.Tree; 7 | import org.polydev.gaea.tree.TreeType; 8 | import org.polydev.gaea.world.Flora; 9 | 10 | public class ShatteredEndDecorator extends Decorator { 11 | private final ProbabilityCollection trees = new ProbabilityCollection() 12 | .add(TreeType.SMALL_SHATTERED_PILLAR, 60) 13 | .add(TreeType.LARGE_SHATTERED_PILLAR, 40); 14 | 15 | @Override 16 | public ProbabilityCollection getTrees() { 17 | return trees; 18 | } 19 | 20 | @Override 21 | public int getTreeDensity() { 22 | return 4; 23 | } 24 | 25 | @Override 26 | public boolean overrideStructureChance() { 27 | return false; 28 | } 29 | 30 | @Override 31 | public Biome getVanillaBiome() { 32 | return Biome.END_BARRENS; 33 | } 34 | 35 | @Override 36 | public ProbabilityCollection getFlora() { 37 | return new ProbabilityCollection<>(); 38 | } 39 | 40 | @Override 41 | public int getFloraChance() { 42 | return 0; 43 | } 44 | 45 | 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/decor/ShatteredForestDecorator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.decor; 2 | 3 | import org.bukkit.block.Biome; 4 | import org.polydev.gaea.biome.Decorator; 5 | import org.polydev.gaea.math.ProbabilityCollection; 6 | import org.polydev.gaea.tree.Tree; 7 | import org.polydev.gaea.tree.TreeType; 8 | import org.polydev.gaea.world.Flora; 9 | 10 | public class ShatteredForestDecorator extends Decorator { 11 | private final ProbabilityCollection trees = new ProbabilityCollection() 12 | .add(TreeType.SHATTERED_LARGE, 30) 13 | .add(TreeType.SHATTERED_SMALL, 70); 14 | 15 | @Override 16 | public ProbabilityCollection getTrees() { 17 | return trees; 18 | } 19 | 20 | @Override 21 | public int getTreeDensity() { 22 | return 1; 23 | } 24 | 25 | @Override 26 | public boolean overrideStructureChance() { 27 | return false; 28 | } 29 | 30 | @Override 31 | public Biome getVanillaBiome() { 32 | return Biome.END_BARRENS; 33 | } 34 | 35 | @Override 36 | public ProbabilityCollection getFlora() { 37 | return new ProbabilityCollection<>(); 38 | } 39 | 40 | @Override 41 | public int getFloraChance() { 42 | return 0; 43 | } 44 | 45 | 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/decor/StarfieldDecorator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.decor; 2 | 3 | import org.bukkit.block.Biome; 4 | import org.polydev.gaea.biome.Decorator; 5 | import org.polydev.gaea.math.ProbabilityCollection; 6 | import org.polydev.gaea.tree.Tree; 7 | import org.polydev.gaea.world.Flora; 8 | 9 | public class StarfieldDecorator extends Decorator { 10 | private final ProbabilityCollection trees = new ProbabilityCollection<>(); 11 | 12 | @Override 13 | public ProbabilityCollection getTrees() { 14 | return trees; 15 | } 16 | 17 | @Override 18 | public int getTreeDensity() { 19 | return 0; 20 | } 21 | 22 | @Override 23 | public boolean overrideStructureChance() { 24 | return true; 25 | } 26 | 27 | @Override 28 | public Biome getVanillaBiome() { 29 | return Biome.END_MIDLANDS; 30 | } 31 | 32 | @Override 33 | public ProbabilityCollection getFlora() { 34 | return new ProbabilityCollection<>(); 35 | } 36 | 37 | @Override 38 | public int getFloraChance() { 39 | return 0; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/decor/VoidDecorator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.decor; 2 | 3 | import org.bukkit.block.Biome; 4 | import org.polydev.gaea.biome.Decorator; 5 | import org.polydev.gaea.math.ProbabilityCollection; 6 | import org.polydev.gaea.tree.Tree; 7 | import org.polydev.gaea.world.Flora; 8 | 9 | public class VoidDecorator extends Decorator { 10 | private final ProbabilityCollection trees = new ProbabilityCollection<>(); 11 | 12 | @Override 13 | public ProbabilityCollection getTrees() { 14 | return trees; 15 | } 16 | 17 | @Override 18 | public int getTreeDensity() { 19 | return 0; 20 | } 21 | 22 | @Override 23 | public boolean overrideStructureChance() { 24 | return false; 25 | } 26 | 27 | @Override 28 | public Biome getVanillaBiome() { 29 | return Biome.END_MIDLANDS; 30 | } 31 | 32 | @Override 33 | public ProbabilityCollection getFlora() { 34 | return new ProbabilityCollection<>(); 35 | } 36 | 37 | @Override 38 | public int getFloraChance() { 39 | return 0; 40 | } 41 | 42 | 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/generators/biomes/AetherGenerator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.generators.biomes; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.World; 5 | import org.bukkit.block.data.BlockData; 6 | import org.polydev.gaea.biome.Generator; 7 | import org.polydev.gaea.math.FastNoiseLite; 8 | import org.polydev.gaea.world.palette.Palette; 9 | import org.polydev.gaea.world.palette.RandomPalette; 10 | 11 | import java.util.Random; 12 | 13 | 14 | public class AetherGenerator extends Generator { 15 | @Override 16 | public boolean useMinimalInterpolation() { 17 | return true; 18 | } 19 | private final Palette palette; 20 | 21 | public AetherGenerator() { 22 | super(); 23 | this.palette = new RandomPalette(new Random(2403)) 24 | .add(Material.GRASS_BLOCK.createBlockData(), 1) 25 | .add(Material.DIRT.createBlockData(), 2) 26 | .add(Material.STONE.createBlockData(), 1); 27 | } 28 | 29 | @Override 30 | public double getNoise(FastNoiseLite gen, World w, int x, int z) { 31 | return gen.getNoise(x, z) * 1.2; 32 | } 33 | 34 | @Override 35 | public double getNoise(FastNoiseLite fastNoise, World w, int i, int i1, int i2) { 36 | return getNoise(fastNoise, w, i, i2); 37 | } 38 | 39 | @Override 40 | public Palette getPalette(int y) { 41 | return this.palette; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/generators/biomes/AetherHighlandsGenerator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.generators.biomes; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.World; 5 | import org.bukkit.block.data.BlockData; 6 | import org.polydev.gaea.biome.Generator; 7 | import org.polydev.gaea.math.FastNoiseLite; 8 | import org.polydev.gaea.math.ProbabilityCollection; 9 | import org.polydev.gaea.world.palette.Palette; 10 | import org.polydev.gaea.world.palette.RandomPalette; 11 | 12 | import java.util.Random; 13 | 14 | 15 | public class AetherHighlandsGenerator extends Generator { 16 | @Override 17 | public boolean useMinimalInterpolation() { 18 | return true; 19 | } 20 | private final Palette palette; 21 | 22 | public AetherHighlandsGenerator() { 23 | super(); 24 | this.palette = new RandomPalette(new Random(2403)) 25 | .add(new ProbabilityCollection() 26 | .add(Material.GRASS_BLOCK.createBlockData(), 50) 27 | .add(Material.COARSE_DIRT.createBlockData(), 10) 28 | .add(Material.GRAVEL.createBlockData(), 15) 29 | .add(Material.PODZOL.createBlockData(), 25), 1) 30 | .add(Material.DIRT.createBlockData(), 2) 31 | .add(Material.STONE.createBlockData(), 1); 32 | } 33 | 34 | @Override 35 | public double getNoise(FastNoiseLite gen, World w, int x, int z) { 36 | return gen.getNoise(x, z) * 1.2; 37 | } 38 | 39 | @Override 40 | public double getNoise(FastNoiseLite fastNoise, World w, int i, int i1, int i2) { 41 | return getNoise(fastNoise, w, i, i2); 42 | } 43 | 44 | @Override 45 | public Palette getPalette(int y) { 46 | return this.palette; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/generators/biomes/EndGenerator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.generators.biomes; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.World; 5 | import org.bukkit.block.data.BlockData; 6 | import org.polydev.gaea.biome.Generator; 7 | import org.polydev.gaea.math.FastNoiseLite; 8 | import org.polydev.gaea.world.palette.Palette; 9 | import org.polydev.gaea.world.palette.RandomPalette; 10 | 11 | import java.util.Random; 12 | 13 | 14 | public class EndGenerator extends Generator { 15 | @Override 16 | public boolean useMinimalInterpolation() { 17 | return true; 18 | } 19 | private final Palette palette; 20 | 21 | public EndGenerator() { 22 | super(); 23 | this.palette = new RandomPalette(new Random(2403)).add(Material.END_STONE.createBlockData(), 1); 24 | } 25 | 26 | @Override 27 | public double getNoise(FastNoiseLite gen, World w, int x, int z) { 28 | return gen.getNoise(x, z) * 1.2; 29 | } 30 | 31 | @Override 32 | public double getNoise(FastNoiseLite fastNoise, World w, int i, int i1, int i2) { 33 | return getNoise(fastNoise, w, i, i2); 34 | } 35 | 36 | @Override 37 | public Palette getPalette(int y) { 38 | return this.palette; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/generators/biomes/MainIslandGenerator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.generators.biomes; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.World; 5 | import org.bukkit.block.data.BlockData; 6 | import org.polydev.gaea.biome.Generator; 7 | import org.polydev.gaea.math.FastNoiseLite; 8 | import org.polydev.gaea.world.palette.Palette; 9 | import org.polydev.gaea.world.palette.RandomPalette; 10 | 11 | import java.util.Random; 12 | 13 | 14 | public class MainIslandGenerator extends Generator { 15 | @Override 16 | public boolean useMinimalInterpolation() { 17 | return true; 18 | } 19 | private final Palette palette; 20 | 21 | public MainIslandGenerator() { 22 | super(); 23 | this.palette = new RandomPalette(new Random(2403)).add(Material.END_STONE.createBlockData(), 1); 24 | } 25 | 26 | /** 27 | * Gets the 2D noise at a pair of coordinates using the provided FastNoiseLite instance. 28 | * 29 | * @param gen - The FastNoiseLite instance to use. 30 | * @param x - The x coordinate. 31 | * @param z - The z coordinate. 32 | * @return double - Noise value at the specified coordinates. 33 | */ 34 | @Override 35 | public double getNoise(FastNoiseLite gen, World w, int x, int z) { 36 | return ((gen.getNoise(x, z) + 1.1) / 1.25) * (Math.sqrt(- (Math.pow(x, 2) + Math.pow(z, 2)) + 10000)) / 96; 37 | } 38 | 39 | @Override 40 | public double getNoise(FastNoiseLite fastNoise, World w, int i, int i1, int i2) { 41 | return getNoise(fastNoise, w, i, i2); 42 | } 43 | 44 | /** 45 | * Gets the BlocPalette to generate the biome with. 46 | * 47 | * @return BlocPalette - The biome's palette. 48 | */ 49 | @Override 50 | public Palette getPalette(int y) { 51 | return this.palette; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/generators/biomes/ShatteredEndGenerator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.generators.biomes; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.World; 5 | import org.bukkit.block.data.BlockData; 6 | import org.polydev.gaea.biome.Generator; 7 | import org.polydev.gaea.math.FastNoiseLite; 8 | import org.polydev.gaea.world.palette.Palette; 9 | import org.polydev.gaea.world.palette.RandomPalette; 10 | 11 | import java.util.Random; 12 | 13 | 14 | public class ShatteredEndGenerator extends Generator { 15 | private final FastNoiseLite shattered; 16 | private final Palette palette; 17 | public ShatteredEndGenerator() { 18 | super(); 19 | shattered = new FastNoiseLite(); 20 | shattered.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2); 21 | shattered.setFrequency(0.1f); 22 | shattered.setFractalOctaves(3); 23 | this.palette = new RandomPalette(new Random(2403)).add(Material.END_STONE.createBlockData(), 1); 24 | } 25 | 26 | @Override 27 | public boolean useMinimalInterpolation() { 28 | return true; 29 | } 30 | 31 | @Override 32 | public double getNoise(FastNoiseLite gen, World w, int x, int z) { 33 | return gen.getNoise(x, z) * 1.2 + 0.4 * shattered.getNoise(x, z); 34 | } 35 | 36 | @Override 37 | public double getNoise(FastNoiseLite fastNoise, World w, int i, int i1, int i2) { 38 | return getNoise(fastNoise, w, i, i2); 39 | } 40 | 41 | @Override 42 | public Palette getPalette(int y) { 43 | return this.palette; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/generators/biomes/VoidGenerator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.generators.biomes; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.World; 5 | import org.bukkit.block.data.BlockData; 6 | import org.polydev.gaea.biome.Generator; 7 | import org.polydev.gaea.math.FastNoiseLite; 8 | import org.polydev.gaea.world.palette.Palette; 9 | import org.polydev.gaea.world.palette.RandomPalette; 10 | 11 | import java.util.Random; 12 | 13 | 14 | public class VoidGenerator extends Generator { 15 | @Override 16 | public boolean useMinimalInterpolation() { 17 | return true; 18 | } 19 | private final Palette palette; 20 | 21 | public VoidGenerator() { 22 | super(); 23 | this.palette = new RandomPalette(new Random(2403)) 24 | .add(Material.AIR.createBlockData(), 1); 25 | } 26 | 27 | @Override 28 | public double getNoise(FastNoiseLite gen, World w, int x, int z) { 29 | return 0; 30 | } 31 | 32 | @Override 33 | public double getNoise(FastNoiseLite fastNoise, World w, int i, int i1, int i2) { 34 | return getNoise(fastNoise, w, i, i2); 35 | } 36 | 37 | @Override 38 | public Palette getPalette(int y) { 39 | return this.palette; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/generators/border/AetherHighlandsBorderGenerator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.generators.border; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.World; 5 | import org.bukkit.block.data.BlockData; 6 | import org.polydev.gaea.biome.Generator; 7 | import org.polydev.gaea.math.FastNoiseLite; 8 | import org.polydev.gaea.math.ProbabilityCollection; 9 | import org.polydev.gaea.world.palette.Palette; 10 | import org.polydev.gaea.world.palette.RandomPalette; 11 | 12 | import java.util.Random; 13 | 14 | 15 | public class AetherHighlandsBorderGenerator extends Generator { 16 | @Override 17 | public boolean useMinimalInterpolation() { 18 | return true; 19 | } 20 | private final Palette palette; 21 | 22 | public AetherHighlandsBorderGenerator() { 23 | super(); 24 | this.palette = new RandomPalette(new Random(2403)) 25 | .add(new ProbabilityCollection() 26 | .add(Material.GRASS_BLOCK.createBlockData(), 75) 27 | .add(Material.COARSE_DIRT.createBlockData(), 5) 28 | .add(Material.GRAVEL.createBlockData(), 7) 29 | .add(Material.PODZOL.createBlockData(), 13), 1) 30 | .add(Material.DIRT.createBlockData(), 2) 31 | .add(Material.STONE.createBlockData(), 1); 32 | } 33 | 34 | @Override 35 | public double getNoise(FastNoiseLite gen, World w, int x, int z) { 36 | return gen.getNoise(x, z) * 1.2; 37 | } 38 | 39 | @Override 40 | public double getNoise(FastNoiseLite fastNoise, World w, int i, int i1, int i2) { 41 | return getNoise(fastNoise, w, i, i2); 42 | } 43 | 44 | @Override 45 | public Palette getPalette(int y) { 46 | return this.palette; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/generators/border/VoidAetherBorderGenerator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.generators.border; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.World; 5 | import org.bukkit.block.data.BlockData; 6 | import org.polydev.gaea.biome.Generator; 7 | import org.polydev.gaea.math.FastNoiseLite; 8 | import org.polydev.gaea.world.palette.Palette; 9 | import org.polydev.gaea.world.palette.RandomPalette; 10 | 11 | import java.util.Random; 12 | 13 | 14 | public class VoidAetherBorderGenerator extends Generator { 15 | @Override 16 | public boolean useMinimalInterpolation() { 17 | return true; 18 | } 19 | private final Palette palette; 20 | 21 | public VoidAetherBorderGenerator() { 22 | super(); 23 | this.palette = new RandomPalette(new Random(2403)) 24 | .add(Material.GRASS_BLOCK.createBlockData(), 1) 25 | .add(Material.DIRT.createBlockData(), 2) 26 | .add(Material.STONE.createBlockData(), 1); 27 | } 28 | 29 | @Override 30 | public double getNoise(FastNoiseLite gen, World w, int x, int z) { 31 | return gen.getNoise(x, z) * 1.2 * 0.5f; 32 | } 33 | 34 | @Override 35 | public double getNoise(FastNoiseLite fastNoise, World w, int i, int i1, int i2) { 36 | return getNoise(fastNoise, w, i, i2); 37 | } 38 | 39 | @Override 40 | public Palette getPalette(int y) { 41 | return this.palette; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/generators/border/VoidAetherHighlandsBorderGenerator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.generators.border; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.World; 5 | import org.bukkit.block.data.BlockData; 6 | import org.polydev.gaea.biome.Generator; 7 | import org.polydev.gaea.math.FastNoiseLite; 8 | import org.polydev.gaea.math.ProbabilityCollection; 9 | import org.polydev.gaea.world.palette.Palette; 10 | import org.polydev.gaea.world.palette.RandomPalette; 11 | 12 | import java.util.Random; 13 | 14 | 15 | public class VoidAetherHighlandsBorderGenerator extends Generator { 16 | @Override 17 | public boolean useMinimalInterpolation() { 18 | return true; 19 | } 20 | private final Palette palette; 21 | 22 | public VoidAetherHighlandsBorderGenerator() { 23 | super(); 24 | this.palette = new RandomPalette(new Random(2403)) 25 | .add(new ProbabilityCollection() 26 | .add(Material.GRASS_BLOCK.createBlockData(), 50) 27 | .add(Material.COARSE_DIRT.createBlockData(), 10) 28 | .add(Material.GRAVEL.createBlockData(), 15) 29 | .add(Material.PODZOL.createBlockData(), 25), 1) 30 | .add(Material.DIRT.createBlockData(), 2) 31 | .add(Material.STONE.createBlockData(), 1); 32 | } 33 | 34 | @Override 35 | public double getNoise(FastNoiseLite gen, World w, int x, int z) { 36 | return gen.getNoise(x, z) * 1.2 * 0.5f; 37 | } 38 | 39 | @Override 40 | public double getNoise(FastNoiseLite fastNoise, World w, int i, int i1, int i2) { 41 | return getNoise(fastNoise, w, i, i2); 42 | } 43 | 44 | @Override 45 | public Palette getPalette(int y) { 46 | return this.palette; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/dfsek/betterend/world/generators/border/VoidEndBorderGenerator.java: -------------------------------------------------------------------------------- 1 | package com.dfsek.betterend.world.generators.border; 2 | 3 | import org.bukkit.Material; 4 | import org.bukkit.World; 5 | import org.bukkit.block.data.BlockData; 6 | import org.polydev.gaea.biome.Generator; 7 | import org.polydev.gaea.math.FastNoiseLite; 8 | import org.polydev.gaea.world.palette.Palette; 9 | import org.polydev.gaea.world.palette.RandomPalette; 10 | 11 | import java.util.Random; 12 | 13 | 14 | public class VoidEndBorderGenerator extends Generator { 15 | @Override 16 | public boolean useMinimalInterpolation() { 17 | return true; 18 | } 19 | private final Palette palette; 20 | 21 | public VoidEndBorderGenerator() { 22 | super(); 23 | this.palette = new RandomPalette(new Random(2403)).add(Material.END_STONE.createBlockData(), 1); 24 | } 25 | 26 | @Override 27 | public double getNoise(FastNoiseLite gen, World w, int x, int z) { 28 | return gen.getNoise(x, z) * 1.2 * 0.5f; 29 | } 30 | 31 | @Override 32 | public double getNoise(FastNoiseLite fastNoise, World w, int i, int i1, int i2) { 33 | return getNoise(fastNoise, w, i, i2); 34 | } 35 | 36 | @Override 37 | public Palette getPalette(int y) { 38 | return this.palette; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/resources/config.yml: -------------------------------------------------------------------------------- 1 | # BetterEnd Master config file 2 | # WORLD OPTIONS ARE FOUND IN WORLD CONFIGS! 3 | # DO NOT ATTEMPT TO SET WORLD CONFIG OPTIONS IN THIS FILE! 4 | 5 | # A hood classic, do not change this value! 6 | config-version: 1 7 | 8 | # Update Checker settings 9 | update-checker: 10 | # Enable/disable the update checker. 11 | enable: true 12 | # The frequency (in seconds) to check for updates (21600 = 6 hours) 13 | frequency: 21600 14 | 15 | # The language in which to display plugin messages 16 | lang: en_us 17 | 18 | # Enables/disables generation of custom trees in all worlds 19 | big-trees-everywhere: false 20 | 21 | # How much longer should it take to grow a big tree? 22 | tree-sapling-growth-modifier: 8 23 | 24 | # Whether to use parallel generation 25 | parallel: true 26 | 27 | # Whether to generate Vanilla End Cities. It is not recommended to enable this. 28 | generate-end-cities: false 29 | 30 | # Enable/disable debug mode 31 | debug: false 32 | 33 | # How often to save population data. This is done asynchronously, so it has little to no performance impact. 34 | data-save: PT30M 35 | 36 | # Whether to enable advancements (premium only) 37 | advancements: true -------------------------------------------------------------------------------- /src/main/resources/datapacks/bukkit/data/betterend/advancements/outer_end/dizzying_heights.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "betterend:outer_end/visit_void", 3 | "display": { 4 | "icon": { 5 | "item": "minecraft:white_concrete" 6 | }, 7 | "title": { 8 | "text": "Dizzying Heights" 9 | }, 10 | "description": { 11 | "text": "Travel above Y level 5000" 12 | }, 13 | "frame": "task" 14 | }, 15 | "criteria": { 16 | "0": { 17 | "trigger": "minecraft:impossible", 18 | "conditions": {} 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/datapacks/bukkit/data/betterend/advancements/outer_end/explore.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:end/enter_end_gateway", 3 | "display": { 4 | "icon": { 5 | "item": "minecraft:compass" 6 | }, 7 | "title": { 8 | "text": "Ender Explorer" 9 | }, 10 | "description": { 11 | "text": "Find all 9 Outer End biomes" 12 | }, 13 | "frame": "goal" 14 | }, 15 | "criteria": { 16 | "0": { 17 | "trigger": "minecraft:impossible", 18 | "conditions": {} 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/datapacks/bukkit/data/betterend/advancements/outer_end/gold_dungeon.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "betterend:outer_end/visit_aether", 3 | "display": { 4 | "icon": { 5 | "item": "minecraft:chiseled_quartz_block" 6 | }, 7 | "title": { 8 | "text": "I\u0027ve Got a Bad Feeling About This..." 9 | }, 10 | "description": { 11 | "text": "Open a Gold Dungeon Chest. What could go wrong?" 12 | }, 13 | "frame": "task" 14 | }, 15 | "criteria": { 16 | "0": { 17 | "trigger": "minecraft:impossible", 18 | "conditions": {} 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/datapacks/bukkit/data/betterend/advancements/outer_end/into_void.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "betterend:outer_end/visit_void", 3 | "display": { 4 | "icon": { 5 | "item": "minecraft:black_concrete" 6 | }, 7 | "title": { 8 | "text": "Embrace the Void" 9 | }, 10 | "description": { 11 | "text": "Travel below Y level -64" 12 | }, 13 | "frame": "task" 14 | }, 15 | "criteria": { 16 | "0": { 17 | "trigger": "minecraft:impossible", 18 | "conditions": {} 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/datapacks/bukkit/data/betterend/advancements/outer_end/visit_aether.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:end/enter_end_gateway", 3 | "display": { 4 | "icon": { 5 | "item": "minecraft:oak_log" 6 | }, 7 | "title": { 8 | "text": "A Hostile Paradise" 9 | }, 10 | "description": { 11 | "text": "Enter the Aether" 12 | }, 13 | "frame": "task" 14 | }, 15 | "criteria": { 16 | "0": { 17 | "trigger": "minecraft:impossible", 18 | "conditions": {} 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/datapacks/bukkit/data/betterend/advancements/outer_end/visit_aether_forest.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "betterend:outer_end/visit_aether", 3 | "display": { 4 | "icon": { 5 | "item": "minecraft:oak_sapling" 6 | }, 7 | "title": { 8 | "text": "Big Trees" 9 | }, 10 | "description": { 11 | "text": "Enter the Aether Forest" 12 | }, 13 | "frame": "task" 14 | }, 15 | "criteria": { 16 | "0": { 17 | "trigger": "minecraft:impossible", 18 | "conditions": {} 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/datapacks/bukkit/data/betterend/advancements/outer_end/visit_aether_highlands.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "betterend:outer_end/visit_aether", 3 | "display": { 4 | "icon": { 5 | "item": "minecraft:spruce_log" 6 | }, 7 | "title": { 8 | "text": "Game Design" 9 | }, 10 | "description": { 11 | "text": "Enter the Highlands" 12 | }, 13 | "frame": "task" 14 | }, 15 | "criteria": { 16 | "0": { 17 | "trigger": "minecraft:impossible", 18 | "conditions": {} 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/datapacks/bukkit/data/betterend/advancements/outer_end/visit_aether_highlands_forest.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "betterend:outer_end/visit_aether_highlands", 3 | "display": { 4 | "icon": { 5 | "item": "minecraft:spruce_sapling" 6 | }, 7 | "title": { 8 | "text": "Another Forest?" 9 | }, 10 | "description": { 11 | "text": "Enter the Highlands Forest" 12 | }, 13 | "frame": "task" 14 | }, 15 | "criteria": { 16 | "0": { 17 | "trigger": "minecraft:impossible", 18 | "conditions": {} 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/datapacks/bukkit/data/betterend/advancements/outer_end/visit_end.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:end/enter_end_gateway", 3 | "display": { 4 | "icon": { 5 | "item": "minecraft:end_stone" 6 | }, 7 | "title": { 8 | "text": "Finally, Something Familiar" 9 | }, 10 | "description": { 11 | "text": "Enter the End" 12 | }, 13 | "frame": "task" 14 | }, 15 | "criteria": { 16 | "0": { 17 | "trigger": "minecraft:impossible", 18 | "conditions": {} 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/datapacks/bukkit/data/betterend/advancements/outer_end/visit_shattered_end.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:end/enter_end_gateway", 3 | "display": { 4 | "icon": { 5 | "item": "minecraft:black_concrete" 6 | }, 7 | "title": { 8 | "text": "What Happened Here?" 9 | }, 10 | "description": { 11 | "text": "Enter the Shattered End" 12 | }, 13 | "frame": "task" 14 | }, 15 | "criteria": { 16 | "0": { 17 | "trigger": "minecraft:impossible", 18 | "conditions": {} 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/datapacks/bukkit/data/betterend/advancements/outer_end/visit_shattered_forest.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "betterend:outer_end/visit_shattered_end", 3 | "display": { 4 | "icon": { 5 | "item": "minecraft:purple_stained_glass" 6 | }, 7 | "title": { 8 | "text": "Funky Trees" 9 | }, 10 | "description": { 11 | "text": "Enter the Shattered Forest" 12 | }, 13 | "frame": "task" 14 | }, 15 | "criteria": { 16 | "0": { 17 | "trigger": "minecraft:impossible", 18 | "conditions": {} 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/datapacks/bukkit/data/betterend/advancements/outer_end/visit_starfield.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "betterend:outer_end/visit_void", 3 | "display": { 4 | "icon": { 5 | "item": "minecraft:glowstone" 6 | }, 7 | "title": { 8 | "text": "A Field of Stars" 9 | }, 10 | "description": { 11 | "text": "Enter a Starfield Biome" 12 | }, 13 | "frame": "task" 14 | }, 15 | "criteria": { 16 | "0": { 17 | "trigger": "minecraft:impossible", 18 | "conditions": {} 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/datapacks/bukkit/data/betterend/advancements/outer_end/visit_void.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:end/enter_end_gateway", 3 | "display": { 4 | "icon": { 5 | "item": "minecraft:black_concrete" 6 | }, 7 | "title": { 8 | "text": "Don\u0027t Fall" 9 | }, 10 | "description": { 11 | "text": "Enter a Void Biome" 12 | }, 13 | "frame": "task" 14 | }, 15 | "criteria": { 16 | "0": { 17 | "trigger": "minecraft:impossible", 18 | "conditions": {} 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/lang/afr_sa.yml: -------------------------------------------------------------------------------- 1 | enable: 2 | - "&fBetterEnd sou nie moontlik gewees het sonder die ondersteuning van die volgende mense nie:" 3 | - "&fOntwikkelaars: dfsek and Baer" 4 | - "&fBouers: GucciPoochie, sgtmushroom39, Daverono, and Merazmus" 5 | - "&fPatrons: EtherealSquid" 6 | disable: 7 | - "&fDankie dat u BetterEnd gebruik het!" 8 | free-notification: 9 | - "&bU gebruik die gratis weergawe van BetterEnd. Oorweeg dit om die premie weergawe te koop om die inprop te ondersteun en ekstra funksies te verkry!" 10 | - "&bMeer inligting kan hier gevind word: &nhttps://github.com/dfsek/BetterEnd-Public/wiki/Premium" 11 | command-prefix: "&3[BetterEnd] " 12 | update: 13 | new-version: "'N Nuwe weergawe van BetterEnd is beskikbaar: %s " 14 | up-to-date: "U weergawe van BetterEnd (%s) is op datum!" 15 | more-recent: "U weergawe van BetterEnd (%s) is meer onlangs as die publieke beskikbare weergawe." 16 | error: "Kon nie kyk of 'n opdatering beskikbaar is nie. rede: " 17 | command: 18 | world: "&cHierdie wêreld is nie 'n BetterEnd-wêreld nie!" 19 | players-only: "&bHierdie opdrag is slegs vir spelers!" 20 | invalid: "Ongeldige opdrag.(verwag %1$s argumente, argumente gevind is %2$s)." 21 | debug-only: "Hierdie opdrag moet gebruik word as die ontfoutmodus geaktiveer is!" 22 | profile: 23 | main-menu: 24 | - "-------------BetterEnd/profiel-------------" 25 | - "begin - Begin die profiel" 26 | - "stop - stop die profiel" 27 | - "navraag - Haal profiele-data op" 28 | - "reset - Stel profieldata terug" 29 | reset: "Profiler is teruggestel." 30 | start: "Profiler het begin." 31 | stop: "Profiler het opgehou." 32 | commands: 33 | no-permission: "&cU het nie toestemming vir hierdie opdrag nie." 34 | version: "&bThis server is running &3BetterEnd v%s" 35 | reload-config: "&bBetterEnd instel herlaai ..." 36 | complete-msg: "&bvolledige." 37 | biome: "&bJy staan in \"&3%s&b\"" 38 | unable-to-locate: "&bKan nie bioom opspoor nie." 39 | tp: "&btele porten..." 40 | locating-biome: "&bsoek bioom \"&3%s&b\"" 41 | structure-log: "Genereer struktuur \"%1$s\" by %2$s %3$s %4$s. dimensies: X:%5$s, Y:%6$s, Z:%7$s." 42 | custom-structures: 43 | enable: "Initialiseer aangepaste struktuur populator ..." 44 | unable-to-find: "Kan nie customStructures.yml opspoor nie. staak persoonlike struktuur Initialiseering." 45 | file-not-found: "Die aangevraagde aangepaste struktuurlêer kon nie gevind word nie." 46 | error: "'N Fout het voorgekom tydens 'n poging om die aangepaste struktuur te genereer" 47 | log: "Genereer aangepaste struktuur \"%1$s\" by %2$s %3$s %4$s." 48 | invalid-spawn: "%s is 'n ongeldige spawn-ligging. Moet óf GROND óf LUG wees." 49 | mythicmobs: 50 | enable: "Begin MythicMobs-integrasie" 51 | fail-to-spawn: "staak kuit van Mobs. Is MythicMobs geïnstalleer?" 52 | unable-to-find: "Kan nie mythicSpawns.yml opspoor nie. staak MythicMobs ewekansige kuiting." 53 | advancements: 54 | enable: "Aktiveer vooruitgang..." 55 | paper: 56 | - "U gebruik Spigot/Bukkit vir u bediener." 57 | - "Gebruik Paper vir die beste ervaring met BetterEnd en al u plugins, gebruik asseblief Paper!" 58 | - "Paper bevat baie optimalisasies bo-op Spigot's, wat beteken dat u 'n geweldige toename in prestasie sal sien." 59 | - "Paper is 'n vurk van Spigot, wat beteken dat al jou inpropprogramme steeds moet werk op Paper." 60 | - "Vind meer uit op hul webwerf: https://papermc.io/" 61 | untested: 62 | - "U gebruik 'n ander bediener implementering as Spigot of Paper!" 63 | - "BetterEnd is nog nie op hierdie implementering getoets nie, en minimale ondersteuning sal verleen word indien probleme opduik tydens die gebruik daarvan." 64 | - "As u probleme ondervind, moet u dit op Paper toets voordat u dit rapporteer!" 65 | - "As u wil hê dat u implementering amptelik ondersteun moet word Kontak dfsek op die BetterEnd Discord server." 66 | -------------------------------------------------------------------------------- /src/main/resources/lang/da.yml: -------------------------------------------------------------------------------- 1 | enable: 2 | - "&fBetterEnd ville havde ikke været muligt uden støtte fra disse personer:" 3 | - "&fUdviklere: dfsek og Baer" 4 | - "&fByggere: GucciPoochie, sgtmushroom39, Daverono, og Merazmus" 5 | - "&fPatrons: EtherealSquid" 6 | disable: 7 | - "&fTak for at du bruger BetterEnd!" 8 | free-notification: 9 | - "&bDu kører den gratis version af BetterEnd. Overvej venligst at købe den premium versionen for at støtte plugin'et og modtage yderligere funktioner!" 10 | - "&bFlere informationer kan findes her: &nhttps://github.com/dfsek/BetterEnd-Public/wiki/Premium" 11 | command-prefix: "&3[BetterEnd] " 12 | update: 13 | new-version: "En ny version af BetterEnd er tilgængelig: %s " 14 | up-to-date: "Din version af BetterEnd (%s) er ajour!" 15 | more-recent: "Din version af BetterEnd (%s) er nyere end den der er offentligt tilgængelig." 16 | error: "Der opstod en fejl under tjek for en opdatering. Begrundelse: " 17 | command: 18 | world: "&cDenne verden er ikke en BetterEnd verden!" 19 | players-only: "&bDenne kommando er kun til spillere!" 20 | invalid: "Ugyldig kommando. (Forventede %1$s argumenter, fandt %2$s)." 21 | debug-only: "Denne kommando skal bruges med fejlfindingstilstand aktiveret!" 22 | profile: 23 | main-menu: 24 | - "---------------BetterEnd/profiler---------------" 25 | - "start - Starter profiler" 26 | - "stop - Stopper profiler" 27 | - "query - Henter profiler data" 28 | - "reset - Nulstiller profiler data" 29 | reset: "Profiler er blevet nulstillet." 30 | start: "Profiler er startet." 31 | stop: "Profiler er stoppet." 32 | commands: 33 | no-permission: "&cDu har ikke tilladelse til denne kommando." 34 | version: "&bDenne server kører BetterEnd version \"%1$s\", implementerer Gaea version \"%2$s\"" 35 | reload-config: "&bGenindlæser BetterEnd konfiguration..." 36 | complete-msg: "&bUdført." 37 | biome: "&bDu står i \"&3%s&b\"" 38 | unable-to-locate: "&bKan ikke lokalisere biome'en." 39 | tp: "&bTeleportere..." 40 | locating-biome: "&bLokalisere biome'en \"&3%s&b\"" 41 | structure-log: "Genererer strukturen \"%1$s\" ved %2$s %3$s %4$s. Dimensioner: X:%5$s, Y:%6$s, Z:%7$s." 42 | custom-structures: 43 | enable: "Initialiserer Custom Struktur Populator..." 44 | unable-to-find: "Kan ikke finde customStructures.yml. Afbryder custom struktur initialisering." 45 | file-not-found: "Den anmodede custom strukturfil kunne ikke findes." 46 | error: "Der opstod en fejl under forsøg på at generere custom struktur" 47 | log: "Genererer custom struktur \"%1$s\" ved %2$s %3$s %4$s." 48 | invalid-spawn: "%s er en ugyldig spawn placering. Skal enten være GROUND eller AIR." 49 | mythicmobs: 50 | enable: "Starter MythicMobs integration" 51 | fail-to-spawn: "Kunne ikke spawn mobs. Er MythicMobs installeret?" 52 | unable-to-find: "Kan ikke finde mythicSpawns.yml. Afbryder MythicMobs tilfældig spawning." 53 | advancements: 54 | enable: "Aktiverer fremskridt..." 55 | paper: 56 | - "Du bruger Spigot/CraftBukkit til din server." 57 | - "For den bedste oplevelse med BetterEnd, og alle dine plugins, benyt venligst Paper!" 58 | - "Paper indeholder mange optimeringer oven på Spigot's, hvilket betyder at du vil se en stor forøgelse af ydeevnen." 59 | - "Paper er også en fork af Spigot, hvilket betyder at alle dine plugins stadig skulle fungere med Paper." 60 | - "Du kan find ud af mere på deres hjemmeside: https://papermc.io/" 61 | untested: 62 | - "Du bruger en anden serverimplementering end Spigot eller Paper!" 63 | - "BetterEnd er ikke testet på denne implementering, og der ydes minimal support, hvis der opstår problemer når du bruger den." 64 | - "Hvis du oplever problemer, så test på Paper før du rapporterer dem!" 65 | - "Hvis du vil have at din implementering understøttes officielt, så kontakt dfsek på BetterEnd's Discord server." 66 | -------------------------------------------------------------------------------- /src/main/resources/lang/deu.yml: -------------------------------------------------------------------------------- 1 | enable: 2 | - "&fBetterEnd wäre ohne die Unterstützung der folgenden Personen nicht möglich gewesen:" 3 | - "&fEntwickler: dfsek und Baer" 4 | - "&fBauer: GucciPoochie, sgtmushroom39, Daverono und Merazmus" 5 | - "&fPatrons: EtherealSquid" 6 | disable: 7 | - "&fVielen Dank für die Nutzung von BetterEnd!" 8 | free-notification: 9 | - "&bSie betreiben die kostenlose Version von BetterEnd. Bitte ziehen Sie den Kauf der Premium-Version in Betracht, um das Plugin zu unterstützen und zusätzliche Funktionen zu erhalten!" 10 | - "&bWeitere Informationen finden Sie hier: &nhttps://github.com/dfsek/BetterEnd-Public/wiki/Premium" 11 | command-prefix: "&3[BetterEnd] " 12 | update: 13 | new-version: "Eine neue Version von BetterEnd ist verfügbar: %s " 14 | up-to-date: "Ihre Version von BetterEnd (%s) ist auf dem neuesten Stand!" 15 | more-recent: "Ihre Version von BetterEnd (%s) ist aktueller als die öffentlich verfügbare Version." 16 | error: "Bei der Suche nach einer Aktualisierung ist ein Fehler aufgetreten. Ursache: " 17 | commands: 18 | for-players-only: "&bDieser Befehl ist nur für Spieler!" 19 | not-betterend-world: "&cDiese Welt ist keine BetterEnd welt!" 20 | no-permission: "&cSie haben keine Berechtigung für diesen Befehl." 21 | version: "&bDieser Server nutzt &3BetterEnd v%s" 22 | reload-config: "&bDie BetterEnd Konfigurationsdatei wird neugeladen..." 23 | complete-msg: "&bFertig." 24 | biome: "&bSie befinden sich in \"&3%s&b\"" 25 | unable-to-locate: "&bKein Biom wurde gefunden." 26 | tp: "&bTeleportieren..." 27 | locating-biome: "&bDas Biom \"&3%s&b\" wird gesucht" 28 | structure-log: "Erzeuge Struktur \"%1$s\" auf %2$s %3$s %4$s. Größe: X:%5$s, Y:%6$s, Z:%7$s." 29 | custom-structures: 30 | enable: "Initialisiere den Benutzerdefinierten Struktur-Populator..." 31 | unable-to-find: "Die Datei customStructures.yml konnte nicht gefunden werden. Abbruch der Initialisierung von benutzerdefinierten Strukturen." 32 | file-not-found: "Die angeforderte benutzerdefinierte Strukturdatei konnte nicht gefunden werden." 33 | error: "Beim Versuch, eine benutzerdefinierte Struktur zu erzeugen, ist ein Fehler aufgetreten" 34 | log: "Erzeuge eine benutzerdefinierte Struktur \"%1$s\" auf %2$s %3$s %4$s." 35 | invalid-spawn: "%s ist ein ungültiger Spawn-Ort. Muss entweder BODEN oder LUFT sein.." 36 | mythicmobs: 37 | enable: "Beginne die Integration von MythicMobs" 38 | fail-to-spawn: "Das Erzeugen von Mobs ist fehlgeschlagen. Ist MythicMobs installiert?" 39 | unable-to-find: "MythicSpawns.yml konnte nicht gefunden werden. Abbruch des zufälligen Erzeugen von MythicMobs." 40 | advancements: 41 | enable: "Aktiviere Fortschritte..." 42 | paper: 43 | - "Sie benutzen Spigot/CraftBukkit für Ihren Server." 44 | - "Für die beste Erfahrung mit BetterEnd und all Ihren Plugins verwenden Sie bitte Paper!" 45 | - "Paper enthält viele Optimierungen zusätzlich zu Spigot's, was bedeutet, dass Sie eine enorme Leistungssteigerung sehen werden." 46 | - "Paper ist auch eine Abspaltung von Spigot, was bedeutet, dass alle Ihre Plugins weiterhin mit Paper funktionieren sollten." 47 | - "Weitere Informationen finden Sie auf deren Website: https://papermc.io/" 48 | untested: 49 | - "Sie verwenden eine andere Server-Implementierung als Spigot oder Paper!" 50 | - "BetterEnd wurde mit dieser Implementierung nicht getestet, und es wird nur minimaler Support geleistet, falls bei der Verwendung Probleme auftreten sollten." 51 | - "Wenn Sie Probleme haben, testen Sie auf Papier, bevor Sie sie melden!" 52 | - "Wenn Sie möchten, dass Ihre Implementierung offiziell unterstützt wird, wenden Sie sich an dfsek auf dem BetterEnd Discord-Server." -------------------------------------------------------------------------------- /src/main/resources/lang/en_us.yml: -------------------------------------------------------------------------------- 1 | enable: 2 | - "&fBetterEnd would not have been possible without the support of the following people:" 3 | - "&fDevelopers: dfsek and Baer" 4 | - "&fBuilders: GucciPoochie, sgtmushroom39, Daverono, and Merazmus" 5 | - "&fPatrons: EtherealSquid" 6 | disable: 7 | - "&fThank you for using BetterEnd!" 8 | free-notification: 9 | - "&bYou're running the free version of BetterEnd. Please consider purchasing the premium version to support the plugin and gain additional features!" 10 | - "&bMore information can be found here: &nhttps://github.com/dfsek/BetterEnd-Public/wiki/Premium" 11 | command-prefix: "&3[BetterEnd] " 12 | update: 13 | new-version: "A new version of BetterEnd is available: %s " 14 | up-to-date: "Your version of BetterEnd (%s) is up to date!" 15 | more-recent: "Your version of BetterEnd (%s) is more recent than the one publicly available." 16 | error: "An error occurred while checking for an update. Reason: " 17 | command: 18 | world: "&cThis world is not a BetterEnd world!" 19 | players-only: "&bThis command is for players only!" 20 | invalid: "Invalid command. (Expected %1$s arguments, found %2$s)." 21 | debug-only: "This command must be used with debug mode enabled!" 22 | profile: 23 | main-menu: 24 | - "---------------BetterEnd/profile---------------" 25 | - "start - Starts the profiler" 26 | - "stop - Stops the profiler" 27 | - "query - Fetches profiler data" 28 | - "reset - Resets profiler data" 29 | reset: "Profiler has been reset." 30 | start: "Profiler has started." 31 | stop: "Profiler has stopped." 32 | commands: 33 | no-permission: "&cYou do not have permission for this command." 34 | version: "&bThis server is running &3BetterEnd version \"%1$s\", implementing Gaea version \"%2$s\"" 35 | reload-config: "&bReloading BetterEnd Config..." 36 | complete-msg: "&bComplete." 37 | biome: "&bYou are standing in \"&3%s&b\"" 38 | unable-to-locate: "&bUnable to locate biome." 39 | tp: "&bTeleporting..." 40 | locating-biome: "&bLocating biome \"&3%s&b\"" 41 | structure-log: "Generating structure \"%1$s\" at %2$s %3$s %4$s. Dimensions: X:%5$s, Y:%6$s, Z:%7$s." 42 | custom-structures: 43 | enable: "Initializing Custom Structure Populator..." 44 | unable-to-find: "Unable to locate customStructures.yml. Aborting custom structure initialization." 45 | file-not-found: "The requested custom structure file could not be found." 46 | error: "An error occurred whilst attempting to generate custom structure" 47 | log: "Generating custom structure \"%1$s\" at %2$s %3$s %4$s." 48 | invalid-spawn: "%s is an invalid spawn location. Must be either GROUND or AIR." 49 | mythicmobs: 50 | enable: "Starting MythicMobs integration" 51 | fail-to-spawn: "Failed to spawn Mobs. Is MythicMobs installed?" 52 | unable-to-find: "Unable to locate mythicSpawns.yml. Aborting MythicMobs random spawning." 53 | advancements: 54 | enable: "Enabling advancements..." 55 | paper: 56 | - "You are using Spigot/CraftBukkit for your server." 57 | - "For the best experience with BetterEnd, and all your plugins, please use Paper!" 58 | - "Paper contains many optimizations on top of Spigot's, meaning you'll see a huge performance increase." 59 | - "Paper is a fork of Spigot as well, meaning all your plugins should still work with Paper." 60 | - "Find out more at their website: https://papermc.io/" 61 | untested: 62 | - "You are using a server implementation other than Spigot or Paper!" 63 | - "BetterEnd has not been tested on this implementation, and minimal support will be given should issues arise when using it." 64 | - "If you experience issues, test on Paper before reporting them!" 65 | - "If you would like your implementation to be officially supported, contact dfsek on the BetterEnd Discord server." -------------------------------------------------------------------------------- /src/main/resources/lang/es.yml: -------------------------------------------------------------------------------- 1 | enable: 2 | - "&fBetterEnd no podría ser posible sin el apoyo de las siguientes personas:" 3 | - "&fDesarrolladores: dfsek y Baer" 4 | - "&fConstructores: GucciPoochie, sgtmushroom39, Daverono, y Merazmus" 5 | - "&fPatrons: EtherealSquid" 6 | disable: 7 | - "&fGracias por usar BetterEnd!" 8 | free-notification: 9 | - "&bEstás usando la versión gratuita de BetterEnd. Puedes considerar comprar la version premiun para apoyar el plugin, y además obtener nuevas características!" 10 | - "&bPara más información ingresa aquí: &nhttps://github.com/dfsek/BetterEnd-Public/wiki/Premium" 11 | command-prefix: "&3[BetterEnd] " 12 | update: 13 | new-version: "Nueva versión de BetterEnd ya disponible!: %s " 14 | up-to-date: "¡Tu versión de BetterEnd (%s) está actualizada!" 15 | more-recent: "Tu versión de BetterEnd (%s) es más reciente que la que se encuentra publicada oficialmente." 16 | error: "Ha ocurrido un error mientras intentabamos verificar nuevas actualizaciónes. Razón: " 17 | commands: 18 | for-players-only: "&bEste comando es solo para jugadores!" 19 | not-betterend-world: "&cEste mundo no es un mundo BetterEnd!" 20 | no-permission: "&cYNo tienes permiso para ejecutar este comando." 21 | version: "&bEste servidor está usando la versión v%s de &3BetterEnd" 22 | reload-config: "&bRecargando la configuración de BetterEnd..." 23 | complete-msg: "&bRecarga exitosa." 24 | biome: "&bTe encuentras en \"&3%s&b\"" 25 | unable-to-locate: "&bUnable to locate biome." 26 | tp: "&bTeleporting..." 27 | locating-biome: "&bLocating biome \"&3%s&b\"" 28 | structure-log: "Generando estructura \"%1$s\" en %2$s %3$s %4$s. Dimensiones: X:%5$s, Y:%6$s, Z:%7$s." 29 | custom-structures: 30 | enable: "Iniciando el Personalizador de Estructuras..." 31 | unable-to-find: "No fué posible localizar el archivo customStructures.yml. Abortando la ejecución de estructuras personalizadas." 32 | file-not-found: "No se pudo encontrar la estructura personalizada que fué solicitada." 33 | error: "Ha ocurrido un error mientras se intentaba generar la estructura personalizada." 34 | log: "Generando estructura personalizada \"%1$s\" en %2$s %3$s %4$s." 35 | invalid-spawn: "%s es una ubicación de aparición invalida. Solamente puede ser por GROUND (suelo) o AIR (aire)." 36 | mythicmobs: 37 | enable: "Iniciando la integración de MythicMobs" 38 | fail-to-spawn: "Falla al generar mobs. ¿Tendrás el MythicMobs instalado?" 39 | unable-to-find: "No fué posible localizar el archivo mythicSpawns.yml. Abortando la aparición aleatoria del MythicMobs." 40 | advancements: 41 | enable: "Activando Progreso..." 42 | paper: 43 | - "Estás usando Spigot/Bukkit para tu servidor." 44 | - "Para una mejor experiencia con BetterEnd y todos tus plugins, ¡usa Paper!" 45 | - "Paper contiene mejores optimizaciónes que Spigot, esto quiere decir que verás un aumento considerable en el desempeño." 46 | - "Paper es una variante de Spigot, esto quiere decir que todos tus plugins deberían seguir funcionando con Paper." 47 | - "Puedes encontrar más información en este sitio web: https://papermc.io/" 48 | untested: 49 | - "¡Estás usando una implementación distinta aparte de Spigot o Paper!" 50 | - "BetterEnd no ha sido probado con esta implementación, con un soporte mínimo surgirán problemas inesperados cuando lo uses." 51 | - "Si estás experimentando problemas, ¡Prueba el plugin en Paper antes de reportarlo!" 52 | - "Si te gustaría que tu implementación sea oficialmente sustentada, contactate con dfsek en el Discord de BetterEnd!" -------------------------------------------------------------------------------- /src/main/resources/lang/fi_fI.yml: -------------------------------------------------------------------------------- 1 | enable: 2 | - "&fBetterEnd ei olisi ollut mahdollinen ilman seuraavien ihmisten tukea:" 3 | - "&fKehittäjät: dfsek and Baer" 4 | - "&fRakentajat: GucciPoochie, sgtmushroom39, Daverono, and Merazmus" 5 | - "&fPatrons: EtherealSquid" 6 | disable: 7 | - "&fKiitokset BetterEndin ostamisesta!" 8 | free-notification: 9 | - "&bKäytät BetterEndin ilmaista versiota. Harkitse premium-version ostamista tukemaan jotta voit tukea Pluginia, ja saat samalla lisäominaisuuksia!" 10 | - "&bLisää informaatiota löydät seuraavasta linkistä: &nhttps://github.com/dfsek/BetterEnd-Public/wiki/Premium" 11 | command-prefix: "&3[BetterEnd] " 12 | update: 13 | new-version: "BetterEnd:iin julkaistiin uusi versio: %s " 14 | up-to-date: "Sinun BetterEnd (%s) on uusin versio!" 15 | more-recent: "Sinun BetterEnd-versio (%s) on uudempi kuin julkisesti saatavilla oleva." 16 | error: "Tapahtui virhe checkatessa päivityksiä. Syy: " 17 | commands: 18 | for-players-only: "&bTuo komento on vain pelaajille!" 19 | not-betterend-world: "&cTämä maailma ei ole BetterEnd maa." 20 | no-permission: "&cSinulla ei ole oikeuksia tuohon komentoon!" 21 | version: "&bTämä palvelin käyttää &3BetterEndiä (v%s)" 22 | reload-config: "&bLadataan BetterEndin konfiguraatiota uudestaan..." 23 | complete-msg: "&bValmis!" 24 | biome: "&bSeisot biomissa \"&3%s&b\"" 25 | unable-to-locate: "&bBiomia ei löytynyt." 26 | tp: "&bTeleportataan..." 27 | locating-biome: "&bEtsitään biomia \"&3%s&b\"" 28 | structure-log: "Generoidaan rakennetta \"%1$s\" at %2$s %3$s %4$s. Koordinaatit: X:%5$s, Y:%6$s, Z:%7$s." 29 | custom-structures: 30 | enable: "Ladataan mukautettujen rakenteiden populaattoria..." 31 | unable-to-find: "CustomStructures.yml-tiedostoa ei löydetty. Muokatun rakenteen luominen keskeytettiin." 32 | file-not-found: "Etsittyä mukautettua tiedostoa ei löydetty." 33 | error: "Mukautettua rakennetta luodessa tapahtui virhe" 34 | log: "Generouidaan mukautettua rakennetta koordinaatrt \"%1$s\" at %2$s %3$s %4$s." 35 | invalid-spawn: "%s on kelvoton synnytys sijainti. Täytyy olla joko \"GROUND\" tai \"AIR\"." 36 | mythicmobs: 37 | enable: "Ladataan MythicMobs integraatio..." 38 | fail-to-spawn: "Tapahtui virhe luodessa mobia. Onko sinulla MythicMobs asennettuna?" 39 | unable-to-find: "MysicSpawns.yml-tiedostoa ei löydy. MythicMobsin sattumanvaraisen synnyttäminen keskeytetty." 40 | advancements: 41 | enable: "Enabloidaan advancementteja..." 42 | paper: 43 | - "Käytät spigottia tai craftbukkittia palvelimellasi." 44 | - "Käytä Paperia saadaksesi parhaimman kokemuksen BetterEndistä ja kaikista muista lisäosistasi." 45 | - "Paperi sisältää paljon optimointeja Spigotin päälle, joka meinaa, että suorituskyky nousee valtavasti." 46 | - "Paperi on muokattu versio Spigotista, joka meinaa, että kaikkien laajennusten tulisi toimia paperin kanssa." 47 | - "Katso lisää tietoa niiden nettisivuilla: https://papermc.io/" 48 | untested: 49 | - "Käytät muuta palvelinohjelmaa kuin Spigot tai Paper!" 50 | - "BetterEnd-ohjelmaa ei ole testattu tällä implementaatiolla, ja jos sitä käytettäessä lienee ongelmia, sitä tuetaan erittäin vähän." 51 | - "Jos saat ongelmia, testaa niitä ensin Paperilla!" 52 | - "Jos haluat, että toteutustasi tuetaan virallisesti, ota yhteyttä dfsek:iin BetterEndin Discord-palvelimella." -------------------------------------------------------------------------------- /src/main/resources/lang/fr.yml: -------------------------------------------------------------------------------- 1 | enable: 2 | - "&fBetterEnd n'aurrait pas été possible sans le support des personnes suivantes:" 3 | - "&fDevelopeurs: dfsek et Baer" 4 | - "&fConstructeurs: GucciPoochie, sgtmushroom39, Daverono, et Merazmus" 5 | - "&fPatrons: EtherealSquid" 6 | disable: 7 | - "&fMerci d'utiliser BetterEnd!" 8 | free-notification: 9 | - "&bVous utilisez la version gratuite de BetterEnd. S'il vous plait pensez à acheter la version premium pour supporter le plugin et avoir des fonctions supplémentaires!" 10 | - "&bPlus d'informations peuvent etre trouvé ici: &nhttps://github.com/dfsek/BetterEnd-Public/wiki/Premium" 11 | command-prefix: "&3[BetterEnd] " 12 | update: 13 | new-version: "Une nouvelle version de BetterEnd est disponible: %s " 14 | up-to-date: "Votre version de BetterEnd (%s) est à jour!" 15 | more-recent: "Votre version de BetterEnd (%s) est plus recente que celle publiquement disponible." 16 | error: "Une erreur est survenue pendant la verification de mis à jour. Raison: " 17 | command: 18 | world: "&cCe monde n'est pas un monde BetterEnd!" 19 | players-only: "&bCette commande est pour les joueurs seuleument!" 20 | invalid: "Commande invalide. (Arguments attendus %1$s, trouvés %2$s)." 21 | debug-only: "Cette commande doit etre utilisé avec le debug mode activé!" 22 | profile: 23 | main-menu: 24 | - "---------------BetterEnd/profile---------------" 25 | - "start - Démarre le profileur" 26 | - "stop - Arrete le profileur" 27 | - "query - Recherche des données dans le profileur" 28 | - "reset - Réinitialise les données du profileur" 29 | reset: "Le profileur a été réinitialisé." 30 | start: "Le profileur a été démarré." 31 | stop: "Le profileur a été arreté." 32 | commands: 33 | no-permission: "&cVous n'avez pas la permission d'utiliser cette commande." 34 | version: "&bCe serveur utilise &3BetterEnd version \"%1$s\", utilisant Gaea version \"%2$s\"" 35 | reload-config: "&bRechargement de la configuration de BetterEnd..." 36 | complete-msg: "&bCompleté." 37 | biome: "&bVous etes dans \"&3%s&b\"" 38 | unable-to-locate: "&bIncapable de localiser le biome." 39 | tp: "&bTeleportation..." 40 | locating-biome: "&bLocalisation du biome \"&3%s&b\"" 41 | structure-log: "Génération de la structure \"%1$s\" à %2$s %3$s %4$s. Coordonnées: X:%5$s, Y:%6$s, Z:%7$s." 42 | custom-structures: 43 | enable: "Préparation de Custom Structure Populator..." 44 | unable-to-find: "Incapable de localiser customStructures.yml. Avortement de l'initialisation de structure personnalisée." 45 | file-not-found: "Incapable de localisé le fichier de structure personnalisé demandé." 46 | error: "Une erreur est survenue en essayant de genérer des structures personnalisées" 47 | log: "Génération de structure personnalisé \"%1$s\" à %2$s %3$s %4$s." 48 | invalid-spawn: "%s est un emplacement de spawn invalide. Doit etre soit GROUND soit AIR." 49 | mythicmobs: 50 | enable: "Début de l'intégration de MythicMobs" 51 | fail-to-spawn: "Spawn de créature échoué. MythicMobs est-t-il installé?" 52 | unable-to-find: "Incapable de localisé mythicSpawns.yml. Avortement des spawns aléatoires MythicMobs." 53 | advancements: 54 | enable: "Activation des avancements..." 55 | paper: 56 | - "Vous utilisez Spigot/CraftBukkit pour votre serveur." 57 | - "Pour une meilleur experience de BetterEnd, et tous vos plugins, utilisez Paper!" 58 | - "Paper contient plusieurs optimisations en plus de ceux de Spigot, vous allez donc voir de grandes augmentation de performance." 59 | - "De plus,Paper est une branche de Spigot, ce qui veut dire que tous vos plugins devraient fonctionner avec Paper." 60 | - "Apprenez-en plus sur leur site internet: https://papermc.io/" 61 | untested: 62 | - "Vous utilisé a un type de serveur autre que Spigot ou Paper!" 63 | - "BetterEnd n'a pas été testé sur ce type de serveur, et peu de support sera donné quand des erreurs surviendront." 64 | - "Si vous avez des erreurs, essayez Paper avant de les rapportés!" 65 | - "Si vous aimeriez que votre type de serveur sois officialement supporté, contacté dfsek sur le serveur Discord de BetterEnd." 66 | -------------------------------------------------------------------------------- /src/main/resources/lang/ja_jp.yml: -------------------------------------------------------------------------------- 1 | enable: 2 | - "&fBetterEndは下記の方々の支援がなければ実現しなかったでしょう:" 3 | - "&f開発者: dfsek, Baer" 4 | - "&f建築: GucciPoochie, sgtmushroom39, Daverono, Merazmus" 5 | - "&fPatrons: EtherealSquid" 6 | disable: 7 | - "&fBetterEndを使ってくれてありがとう!" 8 | free-notification: 9 | - "&bあなたは無料版のBetterEndを利用しています。プラグインを支援して、追加の機能を得るためにプレミアムバージョンの購入を検討してください!" 10 | - "&b詳細はこちらを御覧ください: &nhttps://github.com/dfsek/BetterEnd-Public/wiki/Premium" 11 | command-prefix: "&3[BetterEnd] " 12 | update: 13 | new-version: "BetterEndの新しいバージョンが利用可能: %s " 14 | up-to-date: "BetterEnd(%s)のバージョンは最新です。" 15 | more-recent: "BetterEnd(%s)のバージョンは公開されているものよりも最新です。" 16 | error: "アップデートのチェック中にエラーが発生しました。理由: " 17 | commands: 18 | for-players-only: "&bこのコマンドはプレイヤーのみが実行できます!" 19 | not-betterend-world: "&cこのワールドはBetterEndのワールドではありません!" 20 | no-permission: "&cこのコマンドを実行する権限を持っていません。" 21 | version: "&bこのサーバーでは&3BetterEnd v%s &bが動作しています。" 22 | reload-config: "&bBetterEndの設定を再読み込み中..." 23 | complete-msg: "&b完了" 24 | biome: "&bあなたは\"&3%s&b\"にいます。" 25 | unable-to-locate: "&bバイオームを見つけられません。" 26 | tp: "&bテレポート中..." 27 | locating-biome: "&bバイオームの場所 \"&3%s&b\"" 28 | structure-log: "建築物の生成 \"%1$s\" %2$s %3$s %4$s ディメンション: X:%5$s, Y:%6$s, Z:%7$s" 29 | custom-structures: 30 | enable: "カスタムストラクチャーの初期化..." 31 | unable-to-find: "customStructures.ymlを見つけることができません。カスタムストラクチャーの初期化を中止します。" 32 | file-not-found: "要求されたカスタムストラクチャーファイルが見つかりませんでした。" 33 | error: "カスタムストラクチャーを生成しようとしたときにエラーが発生しました。" 34 | log: "カスタムストラクチャーの生成 \"%1$s\" %2$s %3$s %4$s" 35 | invalid-spawn: "%sは無効なスポーン場所です。GROUNDまたはAIRのいずれかでなければなりません。" 36 | mythicmobs: 37 | enable: "MythicMobsの連携を開始" 38 | fail-to-spawn: "モブのスポーンに失敗しました。MythicMobsはインストールされていますか?" 39 | unable-to-find: "mythicSpawns.ymlを見つけられません。MythicMobsのランダムなスポーンを中止します。" 40 | advancements: 41 | enable: "実績を有効..." 42 | paper: 43 | - "Spigot/CraftBukkitをサーバーに使用しています。" 44 | - "BetterEndで最高の体験をするためにも、全てのプラグインでPaperをご利用ください。" 45 | - "PaperにはSpigotよりも更に多くの最適化が含まれているため、パフォーマンスが大幅に向上します。" 46 | - "PaperはSpigotのフォークでもあるので、全てのプラグインはPaperで動作するはずです。" 47 | - "詳細はウェブサイトをご確認ください。: https://papermc.io/" 48 | untested: 49 | - "SpigotやPaper以外のサーバーインプリメンテーションを使用しています!" 50 | - "BetterEndはこのインプリメンテーションではテストされておらず、使用時に問題が発生した場合には最小限のサポートが提供されます。" 51 | - "問題が発生した場合、報告する前にPaperでテストしてください!" 52 | - "インプリメンテーションを正式にサポートしてほしい場合は、BetterEnd Discordサーバーのdfsekに連絡してください。" -------------------------------------------------------------------------------- /src/main/resources/lang/pt_br.yml: -------------------------------------------------------------------------------- 1 | enable: 2 | - "&fBetterEnd não seria possivel sem a ajuda das seguintes pessoas:" 3 | - "&fDevelopers: dfsek e Baer" 4 | - "&fBuilders: GucciPoochie, sgtmushroom39, Daverono, and Merazmus" 5 | - "&fPatrons: EtherealSquid" 6 | disable: 7 | - "&fObrigado por usar BetterEnd!" 8 | free-notification: 9 | - "&bVocê esta usando a versão gratuita do BetterEnd. Por favor considere comprar a versão premium para ajudar o desenvolvimento do plugin e ter features adicionais" 10 | - "&bMais informações podem ser encontradas aqui: &nhttps://github.com/dfsek/BetterEnd-Public/wiki/Premium" 11 | command-prefix: "&3[BetterEnd] " 12 | update: 13 | new-version: "Uma nova versão do BetterEnd esta disponível %s " 14 | up-to-date: "Sua versão do BetterEnd (%s) esta atualizada!" 15 | more-recent: "Sua versão do BetterEnd (%s) é mais recente que a disponível publicamente." 16 | error: "Um erro ocorreu enquanto procuravamos por um update, razão: " 17 | commands: 18 | for-players-only: "&bEsse comando é para jogadores apenas!" 19 | not-betterend-world: "&cEsse mundo não é um mundo do BetterEnd!" 20 | no-permission: "&cVoçe não tem permissão para usar esse comando!." 21 | version: "&bEste server esta usando &3BetterEnd v%s" 22 | reload-config: "&bRecarregando configurações do BetterEnd..." 23 | complete-msg: "&bFeito!" 24 | biome: "&bVocê se encontra no bioma \"&3%s&b\"" 25 | unable-to-locate: "&bIncapaz de localizar bioma." 26 | tp: "&bTeleportando..." 27 | locating-biome: "&bLocalizando bioma... \"&3%s&b\"" 28 | structure-log: "Gerando estrutura \"%1$s\" at %2$s %3$s %4$s. Dimensões: X:%5$s, Y:%6$s, Z:%7$s." 29 | custom-structures: 30 | enable: "Inicializando Populador de Estruturas Customizadas..." 31 | unable-to-find: "Incapaz de localizar customStructures.yml. Abortando inicilização das estruturas customizadas" 32 | file-not-found: "O arquivo da estrutura customizada procurado não pode ser localizado." 33 | error: "Um erro fora encontrado durante a tentativa de gerar a estrutura customizada" 34 | log: "Gerando estrutura customizada \"%1$s\" at %2$s %3$s %4$s." 35 | invalid-spawn: "%s é um local de spawn invalido. È necessario que seja no chão ou no ar" 36 | mythicmobs: 37 | enable: "Iniciando integração com MythicMobs" 38 | fail-to-spawn: "Erro ao spawnar mobs. MythicMobs esta realmente instalado?" 39 | unable-to-find: "Incapaz de localizar mythicSpawns.yml. Abortando o spawn aleatorio do MythicMobs." 40 | advancements: 41 | enable: "Ativando conquistas..." 42 | paper: 43 | - "Você está usando Spigot/CraftBukkit no seu server." 44 | - "Para uma experiência melhor com o BetterEnd, e todos os seus plugins, por favor use Paper!" 45 | - "Paper adiciona uma serie de otimizações no Spigot, oque significa que você tera uma serie de melhoras de perfomance." 46 | - "Paper é um fork do Spigot original, oque significa que todos os plugins são compatíveis." 47 | - "Descubra mais no site deles: https://papermc.io/" 48 | untested: 49 | - "Você está usando um server sem Spigot ou Paper!" 50 | - "BetterEnd não foi testado nesse tipo de server, e não podemos ajudar muito se problemas surgirem." 51 | - "Se você esta tendo problemas, tente usar Paper antes de reportar!" 52 | - "Se você deseja que sua implementação seja oficialmente suportada, entre em contato com dfsek no discord do BetterEnd." -------------------------------------------------------------------------------- /src/main/resources/lang/ru.yml: -------------------------------------------------------------------------------- 1 | enable: 2 | - "&fBetterEnd был бы невозможен без поддержки этих людей:" 3 | - "&fРазработчики: dfsek и Baer" 4 | - "&fСтроители: GucciPoochie, sgtmushroom39, Daverono, и Merazmus" 5 | - "&fPatrons: EtherealSquid" 6 | disable: 7 | - "&fСпасибо, что используете BetterEnd!" 8 | free-notification: 9 | - "&bВы используете бесплатную версию BetterEnd. Пожалуйста, подумайте о приобретении премиум-версии для поддержки плагина и получения дополнительных возможностей!" 10 | - "&bДополнительную информацию можно найти здесь: &nhttps://github.com/dfsek/BetterEnd-Public/wiki/Premium" 11 | command-prefix: "&3[BetterEnd] " 12 | update: 13 | new-version: "Доступна новая версия BetterEnd: %s " 14 | up-to-date: "Ваша версия BetterEnd (%s) актуальна!" 15 | more-recent: "Ваша версия BetterEnd (%s) более актуальна, чем общедоступная." 16 | error: "Во время проверки обновления произошла ошибка. Причина: " 17 | commands: 18 | for-players-only: "&bЭта команда только для игроков!" 19 | not-betterend-world: "&cЭтот мир не является миром BetterEnd!" 20 | no-permission: "&cУ вас недостаточно прав для использования этой команды." 21 | version: "&bЭтот сервер использует &3BetterEnd v%s" 22 | reload-config: "&bПерезагрузка файла конфигурации BetterEnd..." 23 | complete-msg: "&bПерезагрузка завершена." 24 | biome: "&bВы находитесь в \"&3%s&b\"" 25 | unable-to-locate: "&bНевозможно определить местоположение биома." 26 | tp: "&bТелепортация..." 27 | locating-biome: "&bИщем биом \"&3%s&b\"" 28 | structure-log: "Генерируем постройку \"%1$s\" на %2$s %3$s %4$s. Размер: X:%5$s, Y:%6$s, Z:%7$s." 29 | custom-structures: 30 | enable: "Инициализация пользовательского заполнителя построек..." 31 | unable-to-find: "Невозможно найти customStructures.yml. Отмена инициализации пользовательской постройки." 32 | file-not-found: "Запрошенный файл пользовательской постройки не был найден." 33 | error: "Поизошка ошибка при попытке создать пользовательскую постройку" 34 | log: "Генерируем пользовательскую постройку \"%1$s\" на %2$s %3$s %4$s." 35 | invalid-spawn: "%s не допустимое место постройки. Нужен ПОЛ или ВОЗДУХ." 36 | mythicmobs: 37 | enable: "Начинаем интеграцию MythicMobs" 38 | fail-to-spawn: "Ошибка при создании монстров. Проверьте, установлен ли MythicMobs." 39 | unable-to-find: "Невозможно найти mythicSpawns.yml. Отключаем случайное создание монстров MythicMobs." 40 | advancements: 41 | enable: "Выключаем достижения..." 42 | paper: 43 | - "Вы используете Spigot/CraftBukkit для вашего сервера." 44 | - "Для наилучшего опыта работы с BetterEnd и всеми вашими плагинами, пожалуйста, используйте Paper!" 45 | - "Paper содержит множество оптимизаций поверх Spigot'а, а это значит, что вы увидите огромный прирост производительности." 46 | - "Paper использует части Spigot, что означает, что все ваши плагины будут по-прежнему работать." 47 | - "Узнайте больше на их сайте: https://papermc.io/" 48 | untested: 49 | - "Вы используете другое ядро, официально не являющиеся частью Spigot или Paper!" 50 | - "BetterEnd не тестировался на этом ядре, и в случае возникновения проблем при использовании будет предоставлена минимальная поддержка". 51 | - "Если у вас возникли проблемы, протестируйте их на Paper, прежде чем сообщать о них!" 52 | - "Если вы хотите, чтобы ваше ядро официально поддерживалось, свяжитесь с dfsek на сервере BetterEnd Discord". -------------------------------------------------------------------------------- /src/main/resources/lang/vi.yml: -------------------------------------------------------------------------------- 1 | enable: 2 | - "&fDự án BetterEnd được thực hiện hóa nhờ vào công sức của:" 3 | - "&fDevelopers: dfsek và Baer" 4 | - "&fBuilders: GucciPoochie, sgtmushroom39, Daverono, and Merazmus" 5 | - "&fPatrons: EtherealSquid" 6 | disable: 7 | - "&fCảm ơn bạn đã sử dụng BetterEnd!" 8 | free-notification: 9 | - "&bBạn đang chạy BetterEnd bản miễn phí. Bạn có thể ủng hộ BetterEnd bằng cách mua nó và sử dụng phần mở rộng dành riêng cho Premium!" 10 | - "&bCác chi tiết về Premium có thể tìm thấy tại: &nhttps://github.com/dfsek/BetterEnd-Public/wiki/Premium" 11 | command-prefix: "&3[BetterEnd]" 12 | update: 13 | new-version: "Phiên bản mới nhất của BetterEnd: %s " 14 | up-to-date: "Phiên bản BetterEnd của bạn đang là mới nhất !: (%s)" 15 | more-recent: "Phiên bản BetterEnd: (%s) đang mới hơn bản cập nhập hiện tại." 16 | error: "Đã có một lỗi xảy ra khi kiểm tra cập nhập. Báo cáo: " 17 | commands: 18 | for-players-only: " &bLệnh này chỉ có thể sử dụng bởi người chơi!" 19 | not-betterend-world: " &cThế giới này không phải BetterEnd!" 20 | no-permission: "&cBạn không có quyền dùng lệnh này." 21 | version: " &bServer này đang sử dụng &3BetterEnd &bphiên bản&3 v%s" 22 | reload-config: " &bReloading BetterEnd Config..." 23 | complete-msg: " &bHoàn tất." 24 | biome: "&bYou are standing in \"&3%s&b\"" 25 | unable-to-locate: "&bUnable to locate biome." 26 | tp: "&bTeleporting..." 27 | locating-biome: "&bLocating biome \"&3%s&b\"" 28 | structure-log: "Generating structure \"%1$s\" at %2$s %3$s %4$s. Dimensions: X:%5$s, Y:%6$s, Z:%7$s." 29 | custom-structures: 30 | enable: "Initializing Custom Structure Populator..." 31 | unable-to-find: "Unable to locate customStructures.yml. Aborting custom structure initialization." 32 | file-not-found: "The requested custom structure file could not be found." 33 | error: "An error occurred whilst attempting to generate custom structure" 34 | log: "Generating custom structure \"%1$s\" at %2$s %3$s %4$s." 35 | invalid-spawn: "%s is an invalid spawn location. Must be either GROUND or AIR." 36 | mythicmobs: 37 | enable: "Starting MythicMobs integration" 38 | fail-to-spawn: "Failed to spawn Mobs. Is MythicMobs installed?" 39 | unable-to-find: "Unable to locate mythicSpawns.yml. Aborting MythicMobs random spawning." 40 | advancements: 41 | enable: "Enabling advancements..." 42 | paper: 43 | - "You are using Spigot/CraftBukkit for your server." 44 | - "For the best experience with BetterEnd, and all your plugins, please use Paper!" 45 | - "Paper contains many optimizations on top of Spigot's, meaning you'll see a huge performance increase." 46 | - "Paper is a fork of Spigot as well, meaning all your plugins should still work with Paper." 47 | - "Find out more at their website: https://papermc.io/" 48 | untested: 49 | - "You are using a server implementation other than Spigot or Paper!" 50 | - "BetterEnd has not been tested on this implementation, and minimal support will be given should issues arise when using it." 51 | - "If you experience issues, test on Paper before reporting them!" 52 | - "If you would like your implementation to be officially supported, contact dfsek on the BetterEnd Discord server." -------------------------------------------------------------------------------- /src/main/resources/lang/zh_cn.yml: -------------------------------------------------------------------------------- 1 | enable: 2 | - "&fBetterEnd的蓬勃发展离不开这些人的贡献:" 3 | - "&f开发者: dfsek和Baer" 4 | - "&f构建者: GucciPoochie、sgtmushroom39、Daverono和Merazmus" 5 | - "&fPatrons: EtherealSquid" 6 | disable: 7 | - "&f感谢使用BetterEnd!" 8 | free-notification: 9 | - "&b你正使用免费版的BetterEnd。如果你想要支持这款插件和获得额外特性的话请考虑购买付费版!" 10 | - "&b更多信息可查看wiki: &nhttps://github.com/dfsek/BetterEnd-Public/wiki/Premium" 11 | command-prefix: "&3[BetterEnd] " 12 | update: 13 | new-version: "有新版本的BetterEnd可用:%s " 14 | up-to-date: "你的BetterEnd版本是最新版!(%s) " 15 | more-recent: "你的BetterEnd版本比公开版本(%s)更新。" 16 | error: "检测更新时出错。原因:" 17 | commands: 18 | for-players-only: "&b这个指令只能由玩家使用!" 19 | not-betterend-world: "&c这个世界不是BetterEnd的世界!" 20 | no-permission: "&c你没有权限使用这个指令。" 21 | version: "&b服务器正使用&3BetterEnd v%s" 22 | reload-config: "&b重载BetterEnd配置中..." 23 | complete-msg: "&b完成。" 24 | biome: "&b你位于 \"&3%s&b\"" 25 | unable-to-locate: "&b无法定位生物群系所在位置。" 26 | tp: "&b传送中..." 27 | locating-biome: "&b定位生物群系中 \"&3%s&b\"" 28 | structure-log: "生成建筑结构 \"%1$s\",位于 %2$s %3$s %4$s。 世界:X:%5$s, Y:%6$s, Z:%7$s。" 29 | custom-structures: 30 | enable: "正在初始化自定义建筑填充器..." 31 | unable-to-find: "无法找到customStructures.yml。正中止自定义建筑初始化。" 32 | file-not-found: "找不到该自定义建筑文件。" 33 | error: "尝试生成自定义建筑时出错" 34 | log: "生成自定义建筑中 \"%1$s\",位于 %2$s %3$s %4$s。" 35 | invalid-spawn: "%s是一个无效的传送点。必须是GROUND|地面或AIR|空气。" 36 | mythicmobs: 37 | enable: "开始关联MythicMobs" 38 | fail-to-spawn: "刷怪失败。你安装了MythicMobs吗?" 39 | unable-to-find: "找不到mythicSpawns.yml。正中止随机生成MythicMobs的怪物。" 40 | advancements: 41 | enable: "启用进度中..." 42 | paper: 43 | - "您正使用Spigot/CraftBukkit。" 44 | - "为了最佳的插件体验,推荐使用Paper端!" 45 | - "Paper基于Spigot有很多优化,使用Paper端可优化服务器性能。" 46 | - "Paper是Spigot的一个分支,大部分在Spigot上可使用的插件也能在Paper使用。" 47 | - "Paper官网:https://papermc.io/" 48 | untested: 49 | - "您正使用Spigot或Paper之外的服务端!" 50 | - "BetterEnd未在其他服务端上测试兼容性,如果你遇到了问题则我们很难解决。" 51 | - "如果你遇到了问题,请先在Paper端上测试该问题是否存在再反馈!" 52 | - "如果你想要插件正式支持该服务端,请在BetterEnd Discord上联系dfsek。" 53 | -------------------------------------------------------------------------------- /src/main/resources/loot/shulker_nest.json: -------------------------------------------------------------------------------- 1 | { 2 | "pools": [ 3 | { 4 | "rolls": { 5 | "min": 1, 6 | "max": 1 7 | }, 8 | "entries": [ 9 | { 10 | "type": "item", 11 | "weight": 1, 12 | "name": "shulker_shell", 13 | "functions": [ 14 | { 15 | "function": "set_count", 16 | "count": { 17 | "min": 1, 18 | "max": 4 19 | } 20 | } 21 | ] 22 | } 23 | ] 24 | }, 25 | { 26 | "rolls": { 27 | "min": 2, 28 | "max": 3 29 | }, 30 | "entries": [ 31 | { 32 | "type": "item", 33 | "weight": 5, 34 | "name": "end_stone_bricks", 35 | "functions": [ 36 | { 37 | "function": "set_count", 38 | "count": { 39 | "min": 8, 40 | "max": 16 41 | } 42 | } 43 | ] 44 | }, 45 | { 46 | "type": "item", 47 | "weight": 3, 48 | "name": "purpur_block", 49 | "functions": [ 50 | { 51 | "function": "set_count", 52 | "count": { 53 | "min": 4, 54 | "max": 8 55 | } 56 | } 57 | ] 58 | }, 59 | { 60 | "type": "item", 61 | "weight": 2, 62 | "name": "purpur_pillar", 63 | "functions": [ 64 | { 65 | "function": "set_count", 66 | "count": { 67 | "min": 4, 68 | "max": 8 69 | } 70 | } 71 | ] 72 | } 73 | ] 74 | }, 75 | { 76 | "rolls": { 77 | "min": 1, 78 | "max": 3 79 | }, 80 | "entries": [ 81 | { 82 | "type": "item", 83 | "weight": 6, 84 | "name": "iron_ingot", 85 | "functions": [ 86 | { 87 | "function": "set_count", 88 | "count": { 89 | "min": 6, 90 | "max": 16 91 | } 92 | } 93 | ] 94 | }, 95 | { 96 | "type": "item", 97 | "weight": 5, 98 | "name": "gold_ingot", 99 | "functions": [ 100 | { 101 | "function": "set_count", 102 | "count": { 103 | "min": 4, 104 | "max": 12 105 | } 106 | } 107 | ] 108 | }, 109 | { 110 | "type": "item", 111 | "weight": 3, 112 | "name": "emerald", 113 | "functions": [ 114 | { 115 | "function": "set_count", 116 | "count": { 117 | "min": 1, 118 | "max": 4 119 | } 120 | } 121 | ] 122 | }, 123 | { 124 | "type": "item", 125 | "weight": 1, 126 | "name": "diamond", 127 | "functions": [ 128 | { 129 | "function": "set_count", 130 | "count": { 131 | "min": 1, 132 | "max": 4 133 | } 134 | } 135 | ] 136 | } 137 | ] 138 | } 139 | ] 140 | } -------------------------------------------------------------------------------- /src/main/resources/plugin.yml: -------------------------------------------------------------------------------- 1 | main: com.dfsek.betterend.BetterEnd 2 | name: BetterEnd 3 | version: 4.4.6 4 | depend: [ "Gaea" ] 5 | author: dfsek 6 | description: Overhauls the End dimension with new biomes, structures, and more! 7 | load: STARTUP 8 | softdepend: [ "MythicMobs" ] 9 | api-version: "1.15" 10 | commands: 11 | betterend: 12 | description: BetterEnd base command 13 | usage: /betterend 14 | aliases: [ "be", "end" ] 15 | permission: betterend.command 16 | permission-message: You don't have permission. -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_0.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_0.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_1.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_1.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_10.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_10.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_11.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_11.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_12.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_12.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_13.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_13.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_14.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_14.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_15.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_15.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_16.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_16.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_17.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_17.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_2.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_2.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_3.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_3.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_4.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_4.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_5.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_5.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_6.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_6.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_7.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_7.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_8.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_8.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/aether_ruin/aether_ruin_9.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/aether_ruin/aether_ruin_9.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/cobble_house/cobble_house_0.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/cobble_house/cobble_house_0.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/cobble_house/cobble_house_1.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/cobble_house/cobble_house_1.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/cobble_house/cobble_house_2.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/cobble_house/cobble_house_2.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/cobble_house/cobble_house_3.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/cobble_house/cobble_house_3.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/cobble_house/cobble_house_4.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/cobble_house/cobble_house_4.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_house/end_house_0.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_house/end_house_0.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_house/end_house_1.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_house/end_house_1.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_house/end_house_2.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_house/end_house_2.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_0.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_0.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_1.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_1.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_10.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_10.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_100.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_100.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_101.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_101.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_102.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_102.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_103.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_103.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_104.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_104.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_105.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_105.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_106.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_106.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_107.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_107.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_108.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_108.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_11.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_11.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_12.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_12.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_13.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_13.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_14.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_14.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_15.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_15.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_16.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_16.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_17.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_17.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_18.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_18.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_19.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_19.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_2.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_2.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_20.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_20.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_21.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_21.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_22.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_22.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_23.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_23.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_24.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_24.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_25.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_25.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_26.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_26.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_27.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_27.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_28.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_28.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_29.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_29.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_3.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_3.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_30.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_30.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_31.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_31.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_32.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_32.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_33.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_33.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_34.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_34.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_35.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_35.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_36.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_36.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_37.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_37.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_38.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_38.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_39.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_39.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_4.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_4.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_40.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_40.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_41.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_41.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_42.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_42.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_43.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_43.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_44.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_44.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_45.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_45.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_46.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_46.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_47.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_47.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_48.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_48.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_49.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_49.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_5.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_5.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_50.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_50.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_51.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_51.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_52.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_52.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_53.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_53.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_54.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_54.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_55.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_55.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_56.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_56.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_57.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_57.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_58.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_58.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_59.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_59.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_6.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_6.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_60.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_60.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_61.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_61.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_62.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_62.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_63.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_63.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_64.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_64.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_65.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_65.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_66.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_66.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_67.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_67.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_68.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_68.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_69.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_69.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_7.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_7.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_70.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_70.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_71.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_71.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_72.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_72.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_73.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_73.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_74.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_74.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_75.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_75.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_76.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_76.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_77.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_77.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_78.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_78.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_79.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_79.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_8.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_8.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_80.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_80.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_81.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_81.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_82.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_82.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_83.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_83.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_84.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_84.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_85.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_85.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_86.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_86.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_87.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_87.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_88.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_88.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_89.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_89.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_9.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_9.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_90.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_90.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_91.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_91.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_92.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_92.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_93.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_93.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_94.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_94.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_95.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_95.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_96.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_96.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_97.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_97.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_98.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_98.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ruin/end_ruin_99.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ruin/end_ruin_99.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ship/end_ship_0.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ship/end_ship_0.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ship/end_ship_1.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ship/end_ship_1.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ship/end_ship_2.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ship/end_ship_2.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ship/end_ship_3.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ship/end_ship_3.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ship/end_ship_4.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ship/end_ship_4.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ship/end_ship_5.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ship/end_ship_5.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ship/end_ship_6.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ship/end_ship_6.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_ship/end_ship_7.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_ship/end_ship_7.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_tower/end_tower_0.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_tower/end_tower_0.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/end_tower/end_tower_1.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/end_tower/end_tower_1.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/gold_dungeon/gold_dungeon_0.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/gold_dungeon/gold_dungeon_0.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/shulker_nest/shulker_nest_0.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/shulker_nest/shulker_nest_0.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/shulker_nest/shulker_nest_1.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/shulker_nest/shulker_nest_1.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/spruce_house/spruce_house_0.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/spruce_house/spruce_house_0.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/spruce_house/spruce_house_1.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/spruce_house/spruce_house_1.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/spruce_house/spruce_house_2.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/spruce_house/spruce_house_2.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/spruce_house/spruce_house_3.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/spruce_house/spruce_house_3.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/spruce_house/spruce_house_4.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/spruce_house/spruce_house_4.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/stronghold/stronghold_0.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/stronghold/stronghold_0.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/void_star/void_star_0.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/void_star/void_star_0.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/void_star/void_star_1.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/void_star/void_star_1.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/void_star/void_star_2.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/void_star/void_star_2.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/void_star/void_star_3.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/void_star/void_star_3.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_0.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_0.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_1.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_1.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_10.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_10.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_11.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_11.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_12.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_12.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_13.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_13.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_14.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_14.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_15.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_15.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_16.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_16.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_17.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_17.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_18.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_18.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_19.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_19.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_2.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_2.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_20.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_20.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_21.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_21.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_22.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_22.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_23.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_23.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_24.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_24.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_25.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_25.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_26.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_26.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_27.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_27.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_28.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_28.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_29.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_29.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_3.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_3.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_30.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_30.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_31.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_31.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_32.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_32.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_33.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_33.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_34.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_34.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_35.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_35.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_36.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_36.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_37.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_37.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_38.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_38.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_39.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_39.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_4.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_4.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_40.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_40.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_41.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_41.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_42.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_42.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_43.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_43.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_44.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_44.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_5.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_5.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_6.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_6.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_7.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_7.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_8.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_8.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wood_house/wood_house_9.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wood_house/wood_house_9.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_0.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_0.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_1.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_1.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_2.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_2.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_3.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_3.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_4.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_4.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_5.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_5.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_6.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_6.nbt -------------------------------------------------------------------------------- /src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_7.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PolyhedralDev/BetterEnd/f22b6c029907a736115b2cd2b057dcd0dfaef9f1/src/main/resources/structures/wrecked_end_ship/wrecked_end_ship_7.nbt -------------------------------------------------------------------------------- /src/test/java/InterpolatorTest.java: -------------------------------------------------------------------------------- 1 | import org.polydev.gaea.math.Interpolator; 2 | 3 | public class InterpolatorTest { 4 | public static void main(String[] args) { 5 | Interpolator i = new Interpolator(0, 0.5, 0.5, 1, Interpolator.Type.LINEAR); 6 | for(byte x = 0; x < 4; x++) { 7 | for(byte z = 0; z < 4; z++) { 8 | System.out.print(i.bilerp((double) x / 3, (double) z / 3) + " "); 9 | } 10 | System.out.println(); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /test.sh: -------------------------------------------------------------------------------- 1 | DIRECTORY=./target 2 | PROJECT=BetterEnd-premium 3 | NAME=BetterEnd 4 | WORLD=world_the_end 5 | REPO=https://github.com/PolyhedralDev/WorldGenTestServer 6 | 7 | 8 | color() { 9 | if [ $2 ]; then 10 | echo -e "\e[$1;$2m" 11 | else 12 | echo -e "\e[$1m" 13 | fi 14 | } 15 | colorend() { 16 | echo -e "\e[m" 17 | } 18 | 19 | if [ ! -d "$DIRECTORY/server" ]; then 20 | echo "$DIRECTORY/server not found. Cloning now." 21 | git clone $REPO $DIRECTORY/server 22 | sed -i "s/\${gen}/$NAME/g" $DIRECTORY/server/bukkit.yml 23 | sed -i "s/\${world}/$WORLD/g" $DIRECTORY/server/bukkit.yml 24 | fi 25 | cp $DIRECTORY/prod/$PROJECT.jar $DIRECTORY/server/plugins/$PROJECT.jar 26 | cd $DIRECTORY/server || exit 27 | if ! test -f "paperclip.jar"; then 28 | echo "Paper not found. Downloading now." 29 | wget https://papermc.io/api/v1/paper/1.16.4/latest/download -O paperclip.jar 30 | fi 31 | if [ -z "$(grep true eula.txt 2>/dev/null)" ]; then 32 | echo 33 | echo "$(color 32) It appears you have not agreed to Mojangs EULA yet! Press $(color 1 33)y$(colorend) $(color 32)to confirm agreement to" 34 | read -p " Mojangs EULA found at:$(color 1 32) https://account.mojang.com/documents/minecraft_eula $(colorend) " -n 1 -r 35 | echo "" 36 | if [[ ! $REPLY =~ ^[Yy]$ ]]; then 37 | echo "$(color 1 31)Aborted$(colorend)" 38 | exit; 39 | fi 40 | echo "eula=true" > eula.txt 41 | fi 42 | 43 | 44 | 45 | java -Xms5G -Xmx5G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC \ 46 | -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 \ 47 | -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 \ 48 | -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true \ 49 | -jar paperclip.jar nogui --------------------------------------------------------------------------------