├── .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 extends GaeaChunkGenerator> 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
--------------------------------------------------------------------------------