1
0
mirror of https://github.com/chylex/Hardcore-Ender-Expansion-2.git synced 2025-09-16 08:24:48 +02:00

22 Commits

Author SHA1 Message Date
126935e942 WIP Territory profiling 2021-08-29 17:19:18 +02:00
c2f6f7f44d WIP Optimize segmented world generation w/ multi-state segment implementation 2021-08-29 17:19:05 +02:00
a1ea963423 WIP 2D noise renaming and territory stuff 2021-08-29 17:14:19 +02:00
9803c68cbe WIP 3D noise 2021-08-29 17:13:38 +02:00
7565443e38 Fix styles and click events in /help command 2021-08-20 04:25:36 +02:00
f659e5e1c7 Add language datagen 2021-08-20 04:25:15 +02:00
cf752e2bb3 Include block/item overrides in datagen 2021-08-01 19:54:41 +02:00
cb05067529 Add custom entity type interface for automatic property registrations 2021-07-27 01:10:41 +02:00
567cf03403 Add custom tile entity type interface for automatic property registrations 2021-07-25 20:29:43 +02:00
3b4ca6c0b7 Add custom block/item interfaces for automatic property registrations and datagen (properties) 2021-07-24 14:31:45 +02:00
b03a40690e Add custom block/item interfaces for automatic property registrations and datagen (tags) 2021-07-24 14:07:09 +02:00
bb13594c4f Add custom block/item interfaces for automatic property registrations and datagen (block drops) 2021-07-23 19:44:00 +02:00
322b6ba900 Add custom block/item interfaces for automatic property registrations and datagen (block models) 2021-07-23 14:51:36 +02:00
498bf5bbd2 Add custom block/item interfaces for automatic property registrations and datagen (item models) 2021-07-23 10:40:53 +02:00
ea48d98008 Add custom block/item interfaces for automatic property registrations and datagen (render layer) 2021-07-23 10:40:53 +02:00
a0ea885997 Add custom block/item interfaces for automatic property registrations and datagen (colors) 2021-07-23 10:40:53 +02:00
ec103b67d7 Add util module and reorganize classes and packages 2021-07-18 15:57:29 +02:00
082ebb9fe0 Add hook for resource pack order for overriding vanilla resources 2021-07-18 11:59:33 +02:00
65fc2d8aeb Fix overworld features not generating 2021-07-18 11:59:13 +02:00
158efbbf70 Fix dedicated server crashes 2021-07-18 11:57:47 +02:00
de395eb168 Fix Tile Entity update tag logic after 1.16 update 2021-07-18 11:44:15 +02:00
fceff2cd9e Port to 1.16.5 2021-07-07 10:11:28 +02:00
1066 changed files with 16872 additions and 13262 deletions

3
.idea/gradle.xml generated
View File

@@ -12,7 +12,8 @@
<set> <set>
<option value="$PROJECT_DIR$" /> <option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/data" /> <option value="$PROJECT_DIR$/data" />
<option value="$PROJECT_DIR$/src/system" /> <option value="$PROJECT_DIR$/modules/system" />
<option value="$PROJECT_DIR$/modules/util" />
</set> </set>
</option> </option>
</GradleProjectSettings> </GradleProjectSettings>

View File

@@ -2,12 +2,20 @@ ext {
mc_version = "1.16.5" mc_version = "1.16.5"
forge_version = "36.1.32" forge_version = "36.1.32"
mixin_version = "0.8.2" mixin_version = "0.8.2"
mapping_version = "20210309-1.16.5"
kotlin_mod_version = "1.13.0" kotlin_mod_version = "1.13.0"
mapping_version = "20210309-1.16.5"
access_transformers = [
new File(rootProject.projectDir, "src/main/resources/META-INF/accesstransformer_main.cfg"),
new File(project(":system").projectDir, "src/main/resources/META-INF/accesstransformer_system.cfg"),
new File(project(":util").projectDir, "src/main/resources/META-INF/accesstransformer_util.cfg"),
]
} }
buildscript { buildscript {
ext { ext {
forge_gradle_version = "4.1.+"
mixin_gradle_version = "0.7-SNAPSHOT"
kotlin_version = "1.5.20" kotlin_version = "1.5.20"
} }
@@ -18,8 +26,8 @@ buildscript {
} }
dependencies { dependencies {
classpath group: "net.minecraftforge.gradle", name: "ForgeGradle", version: "4.1.+", changing: true classpath group: "net.minecraftforge.gradle", name: "ForgeGradle", version: forge_gradle_version, changing: true
classpath group: "org.spongepowered", name: "mixingradle", version: "0.7-SNAPSHOT" classpath group: "org.spongepowered", name: "mixingradle", version: mixin_gradle_version
classpath group: "org.jetbrains.kotlin", name: "kotlin-gradle-plugin", version: kotlin_version classpath group: "org.jetbrains.kotlin", name: "kotlin-gradle-plugin", version: kotlin_version
} }
} }
@@ -29,7 +37,7 @@ apply plugin: "org.spongepowered.mixin"
apply plugin: "eclipse" apply plugin: "eclipse"
apply plugin: "idea" apply plugin: "idea"
if (file("run/mods_deobf.gradle").exists()){ if (file("run/mods_deobf.gradle").exists()) {
apply from: "run/mods_deobf.gradle" apply from: "run/mods_deobf.gradle"
} }
@@ -46,12 +54,14 @@ archivesBaseName = metaName.replaceAll("\\s", "")
idea { idea {
module { module {
[".idea", ".settings", ".gradle", "build", "gradle", "out", "run", "src/main/kotlin", "src/test/kotlin"].each { [".idea", ".settings", ".gradle", "build", "gradle", "run"].each {
excludeDirs += file(it) excludeDirs += file(it)
} }
["out", "src/main/kotlin", "src/test/kotlin"].each { ["out", "src/main/kotlin", "src/test/kotlin"].each {
excludeDirs += file("src/system/" + it) excludeDirs += file(it)
excludeDirs += file("modules/system/" + it)
excludeDirs += file("modules/util/" + it)
} }
["src/main/kotlin", "src/test/kotlin"].each { ["src/main/kotlin", "src/test/kotlin"].each {
@@ -87,10 +97,9 @@ allprojects {
} }
repositories { repositories {
maven { mavenCentral()
name = "kotlinforforge" maven { url = "https://files.minecraftforge.net/maven" }
url = "https://thedarkcolour.github.io/KotlinForForge" maven { url = "https://thedarkcolour.github.io/KotlinForForge" }
}
} }
dependencies { dependencies {
@@ -99,7 +108,7 @@ allprojects {
implementation "org.jetbrains.kotlin:kotlin-reflect" implementation "org.jetbrains.kotlin:kotlin-reflect"
} }
if (file("$buildDir/classes").exists()){ if (file("$buildDir/classes").exists()) {
file("$buildDir/classes/java/main").mkdirs() // Forge complains when the java folder is missing file("$buildDir/classes/java/main").mkdirs() // Forge complains when the java folder is missing
} }
} }
@@ -115,8 +124,7 @@ sourceSets {
minecraft { minecraft {
mappings channel: "snapshot", version: rootProject.mapping_version mappings channel: "snapshot", version: rootProject.mapping_version
setAccessTransformers(rootProject.access_transformers)
accessTransformer = file("src/main/resources/META-INF/accesstransformer.cfg")
runs { runs {
client { client {
@@ -131,6 +139,7 @@ minecraft {
hee { hee {
source sourceSets.main source sourceSets.main
source project(":system").sourceSets.main source project(":system").sourceSets.main
source project(":util").sourceSets.main
} }
} }
} }
@@ -147,11 +156,13 @@ minecraft {
hee { hee {
source sourceSets.main source sourceSets.main
source project(":system").sourceSets.main source project(":system").sourceSets.main
source project(":util").sourceSets.main
} }
} }
} }
data { data {
property "hee.debug", ""
args "--mod", "hee" args "--mod", "hee"
args "--all" args "--all"
args "--output", file("data/gen") args "--output", file("data/gen")
@@ -164,6 +175,7 @@ minecraft {
hee { hee {
source sourceSets.main source sourceSets.main
source project(":system").sourceSets.main source project(":system").sourceSets.main
source project(":util").sourceSets.main
source project(":datagen").sourceSets.main source project(":datagen").sourceSets.main
} }
} }
@@ -179,9 +191,11 @@ dependencies {
minecraft "net.minecraftforge:forge:" + mc_version + "-" + forge_version minecraft "net.minecraftforge:forge:" + mc_version + "-" + forge_version
implementation project(":system") implementation project(":system")
implementation project(":util")
implementation "thedarkcolour:kotlinforforge:" + kotlin_mod_version implementation "thedarkcolour:kotlinforforge:" + kotlin_mod_version
testImplementation project(":system") testImplementation project(":system")
testImplementation project(":util")
testImplementation "org.junit.jupiter:junit-jupiter-api:5.3.0-RC1" testImplementation "org.junit.jupiter:junit-jupiter-api:5.3.0-RC1"
if (System.getProperty("idea.sync.active") != "true") { if (System.getProperty("idea.sync.active") != "true") {
@@ -197,9 +211,11 @@ test {
jar { jar {
archiveName = archivesBaseName + "-" + mc_version + "-v" + version + ".jar" archiveName = archivesBaseName + "-" + mc_version + "-v" + version + ".jar"
from(project(":system").sourceSets.main.output) { ["system", "util"].each {
exclude "META-INF" from(project(":" + it).sourceSets.main.output) {
exclude "pack.mcmeta" exclude "pack.mcmeta"
exclude "META-INF/*.kotlin_module"
}
} }
from("./data/gen") { from("./data/gen") {

View File

@@ -5,28 +5,23 @@ buildscript {
} }
dependencies { dependencies {
classpath group: "net.minecraftforge.gradle", name: "ForgeGradle", version: "4.1.+", changing: true classpath group: "net.minecraftforge.gradle", name: "ForgeGradle", version: forge_gradle_version, changing: true
classpath group: "org.jetbrains.kotlin", name: "kotlin-gradle-plugin", version: kotlin_version classpath group: "org.jetbrains.kotlin", name: "kotlin-gradle-plugin", version: kotlin_version
} }
} }
repositories {
mavenCentral()
maven { url = "https://files.minecraftforge.net/maven" }
}
apply plugin: "net.minecraftforge.gradle" apply plugin: "net.minecraftforge.gradle"
apply plugin: "eclipse"
minecraft { minecraft {
mappings channel: "snapshot", version: rootProject.mapping_version mappings channel: "snapshot", version: rootProject.mapping_version
accessTransformer = file("../src/main/resources/META-INF/accesstransformer.cfg") setAccessTransformers(rootProject.access_transformers)
} }
dependencies { dependencies {
minecraft "net.minecraftforge:forge:" + mc_version + "-" + forge_version minecraft "net.minecraftforge:forge:" + mc_version + "-" + forge_version
implementation rootProject implementation rootProject
implementation project(":system") implementation project(":system")
implementation project(":util")
} }
jar { jar {

View File

@@ -10,6 +10,9 @@ e53a79fa8e5222e4287e2e5d410890b1f8df78ba assets/hee/blockstates/autumn_leaves_ye
1ce8f488560f32fddbd2532961df123665625c75 assets/hee/blockstates/autumn_sapling_orange.json 1ce8f488560f32fddbd2532961df123665625c75 assets/hee/blockstates/autumn_sapling_orange.json
303070f9945ee2e6716e0fcd67bfa3275b93fde6 assets/hee/blockstates/autumn_sapling_red.json 303070f9945ee2e6716e0fcd67bfa3275b93fde6 assets/hee/blockstates/autumn_sapling_red.json
694318e51ca78111cd91a507a99ab852825cdf0c assets/hee/blockstates/autumn_sapling_yellowgreen.json 694318e51ca78111cd91a507a99ab852825cdf0c assets/hee/blockstates/autumn_sapling_yellowgreen.json
6af0fcab50e591ffad19be1909b4e2baba4bc084 assets/hee/blockstates/cauldron_dragons_breath.json
06141839f09e97f639771c67108b9b2e2f437403 assets/hee/blockstates/cauldron_ender_goo.json
802edf094f47f5ce129eec4b2be018ab8a9a62e6 assets/hee/blockstates/cauldron_purified_ender_goo.json
e926f62a373640c427ba9ac962d7b2dcbe0ae376 assets/hee/blockstates/corrupted_energy.json e926f62a373640c427ba9ac962d7b2dcbe0ae376 assets/hee/blockstates/corrupted_energy.json
7bce0e85ae6f21ceede602f140f40c7678480790 assets/hee/blockstates/dark_chest.json 7bce0e85ae6f21ceede602f140f40c7678480790 assets/hee/blockstates/dark_chest.json
97ac658307fc07611fe9328ab95d692ab16bb92d assets/hee/blockstates/dark_loam.json 97ac658307fc07611fe9328ab95d692ab16bb92d assets/hee/blockstates/dark_loam.json
@@ -72,7 +75,7 @@ c16b5933b9af8fb1033c6d6d11e19628d7c56f4f assets/hee/blockstates/miners_burial_bl
b58fb5ca5bdaf639f725135a2a6682adc4c712ff assets/hee/blockstates/miners_burial_block_plain.json b58fb5ca5bdaf639f725135a2a6682adc4c712ff assets/hee/blockstates/miners_burial_block_plain.json
4c56ed06867c9ef95b287b57e31ddb123e56020e assets/hee/blockstates/obsidian_chiseled.json 4c56ed06867c9ef95b287b57e31ddb123e56020e assets/hee/blockstates/obsidian_chiseled.json
4c56ed06867c9ef95b287b57e31ddb123e56020e assets/hee/blockstates/obsidian_chiseled_lit.json 4c56ed06867c9ef95b287b57e31ddb123e56020e assets/hee/blockstates/obsidian_chiseled_lit.json
58196b68181ce4554fe7accaa29d3f1f2596b3c2 assets/hee/blockstates/obsidian_falling.json 27365e71c0a9f8cfab0340d70a65b7f341363e0d assets/hee/blockstates/obsidian_falling.json
d4bc138bf24df55f5df0df391cced6c587e6fec3 assets/hee/blockstates/obsidian_pillar.json d4bc138bf24df55f5df0df391cced6c587e6fec3 assets/hee/blockstates/obsidian_pillar.json
d666add54a950dd814fc08a7e612ac5a57070c15 assets/hee/blockstates/obsidian_pillar_lit.json d666add54a950dd814fc08a7e612ac5a57070c15 assets/hee/blockstates/obsidian_pillar_lit.json
3c6eb037eb8731410f06b17815e9b9d3705c6b7f assets/hee/blockstates/obsidian_smooth.json 3c6eb037eb8731410f06b17815e9b9d3705c6b7f assets/hee/blockstates/obsidian_smooth.json
@@ -89,6 +92,7 @@ b70f529af4a5d86e6313d278bed22000f5aa5239 assets/hee/blockstates/purified_ender_g
7b9473e5987ea2cf6fde1a7b530895bba6891a24 assets/hee/blockstates/puzzle_block_wall.json 7b9473e5987ea2cf6fde1a7b530895bba6891a24 assets/hee/blockstates/puzzle_block_wall.json
ce9b1e3bb4760063c69b9c671c8a567520125dd2 assets/hee/blockstates/scaffolding.json ce9b1e3bb4760063c69b9c671c8a567520125dd2 assets/hee/blockstates/scaffolding.json
070df87fc3b7dd9029a0bf0d59745cb0e4430181 assets/hee/blockstates/spawner_obsidian_towers.json 070df87fc3b7dd9029a0bf0d59745cb0e4430181 assets/hee/blockstates/spawner_obsidian_towers.json
eb08886b7e7241361d5c7ee280e024610990847e assets/hee/blockstates/stone_brick_wall.json
947fcca21b602927ed0ead585ea1d2213372f074 assets/hee/blockstates/table_base_tier_1.json 947fcca21b602927ed0ead585ea1d2213372f074 assets/hee/blockstates/table_base_tier_1.json
404f8c1b45214db75959f02706dc10c66b278970 assets/hee/blockstates/table_base_tier_2.json 404f8c1b45214db75959f02706dc10c66b278970 assets/hee/blockstates/table_base_tier_2.json
805a8e554ff95cea28405e6de97da053986bd9df assets/hee/blockstates/table_base_tier_3.json 805a8e554ff95cea28405e6de97da053986bd9df assets/hee/blockstates/table_base_tier_3.json
@@ -103,6 +107,7 @@ c53b83ef3e8152ed65147117c10122e4906ea61b assets/hee/blockstates/whitebark_log.js
281264d279f075947ee2f8afdb78190364782921 assets/hee/blockstates/whitebark_planks.json 281264d279f075947ee2f8afdb78190364782921 assets/hee/blockstates/whitebark_planks.json
976d2b47d52e04eb9944e3c4c8aee9a91f315ade assets/hee/blockstates/whitebark_slab.json 976d2b47d52e04eb9944e3c4c8aee9a91f315ade assets/hee/blockstates/whitebark_slab.json
776dd79a096f999f2606047486af73aca71a6cf0 assets/hee/blockstates/whitebark_stairs.json 776dd79a096f999f2606047486af73aca71a6cf0 assets/hee/blockstates/whitebark_stairs.json
9c87b9db95b144daa448ab95b11338423a7b5394 assets/hee/lang/en_us.json
a3127926cde114f660a9748f9d2ff6c378778d6a assets/hee/models/block/accumulation_table_tier_1.json a3127926cde114f660a9748f9d2ff6c378778d6a assets/hee/models/block/accumulation_table_tier_1.json
c87320b92ede3bf18f7497cf59689d15ef18969b assets/hee/models/block/accumulation_table_tier_2.json c87320b92ede3bf18f7497cf59689d15ef18969b assets/hee/models/block/accumulation_table_tier_2.json
0adc1ddee430fc2aacd2b6a32fbc1fea048345c2 assets/hee/models/block/accumulation_table_tier_3.json 0adc1ddee430fc2aacd2b6a32fbc1fea048345c2 assets/hee/models/block/accumulation_table_tier_3.json
@@ -159,6 +164,16 @@ f2e86d976bcd985021fbe00d34b1e1b44a64a557 assets/hee/models/block/endersol_merge_
488e5dec7542396ca80e3bcb02b7313a412aa97f assets/hee/models/block/endium_block.json 488e5dec7542396ca80e3bcb02b7313a412aa97f assets/hee/models/block/endium_block.json
aa8fcca7cb3898e5e7658bbdae0a555209b3f8e2 assets/hee/models/block/endium_ore.json aa8fcca7cb3898e5e7658bbdae0a555209b3f8e2 assets/hee/models/block/endium_ore.json
01c6bfe57748c7a87ce304024d905c7715f1fe3c assets/hee/models/block/enhanced_brewing_stand.json 01c6bfe57748c7a87ce304024d905c7715f1fe3c assets/hee/models/block/enhanced_brewing_stand.json
1926175e552d2b810d01b8a89fc45a5bb4dd39ed assets/hee/models/block/eternal_fire_floor0.json
1eab166292d4a4fcb44a9f5d9a33ca0dcf535ba5 assets/hee/models/block/eternal_fire_floor1.json
82316da36e8f8f4ee6fd9ae5fd119e4692b99d2d assets/hee/models/block/eternal_fire_side0.json
61ef10a01e1377e36af67d5ae379218924626595 assets/hee/models/block/eternal_fire_side1.json
ad645653a99dc42535fdfb855b4dc8622c6f826d assets/hee/models/block/eternal_fire_side_alt0.json
e233d09cb8537c735b2af104c0637bab2ca85d59 assets/hee/models/block/eternal_fire_side_alt1.json
5726b3ca9700fbca7ac3ade22ad5cc0634cfe652 assets/hee/models/block/eternal_fire_up0.json
4f913fac7c9deac303f95251a82018e4e3fb0183 assets/hee/models/block/eternal_fire_up1.json
fa5d1de1603cdea3f8886c053a48c9ce145ec173 assets/hee/models/block/eternal_fire_up_alt0.json
9b39ca3af11554cc5f7b49fa6b7d495d4026395e assets/hee/models/block/eternal_fire_up_alt1.json
78688919cd3be6d8e511a9e72227c8c1ed3eaf07 assets/hee/models/block/ethereal_lantern.json 78688919cd3be6d8e511a9e72227c8c1ed3eaf07 assets/hee/models/block/ethereal_lantern.json
2978d091e8cbd221ee969bb3f2e078c06ef4e3e1 assets/hee/models/block/experience_gate.json 2978d091e8cbd221ee969bb3f2e078c06ef4e3e1 assets/hee/models/block/experience_gate.json
7f01aebf3576d63fb8f254aa0d6ffd28f11245a4 assets/hee/models/block/experience_gate_controller.json 7f01aebf3576d63fb8f254aa0d6ffd28f11245a4 assets/hee/models/block/experience_gate_controller.json
@@ -205,14 +220,13 @@ e715a206318b020b1e3119db56f8e807ab4c11dd assets/hee/models/block/infused_tnt.jso
63f514ba3c4648bbe843ab4bc5ddf1df70025f0c assets/hee/models/block/infusion_table_tier_1.json 63f514ba3c4648bbe843ab4bc5ddf1df70025f0c assets/hee/models/block/infusion_table_tier_1.json
71efff4640a6fe83ac449de2204e2d2bd0e3f97e assets/hee/models/block/infusion_table_tier_2.json 71efff4640a6fe83ac449de2204e2d2bd0e3f97e assets/hee/models/block/infusion_table_tier_2.json
18c56872e21de3d66f642f1d6a3c4bccafc461c8 assets/hee/models/block/infusion_table_tier_3.json 18c56872e21de3d66f642f1d6a3c4bccafc461c8 assets/hee/models/block/infusion_table_tier_3.json
a5f3f2cbbe8628a426817953c087585f65fc2254 assets/hee/models/block/loot_chest.json fd787c41eb1e5875ff3b22b7a5c5d989d097ad40 assets/hee/models/block/loot_chest.json
7b4ae46a1f8d7d285d31565ce7cba02a5784d93f assets/hee/models/block/miners_burial_block_chiseled.json 7b4ae46a1f8d7d285d31565ce7cba02a5784d93f assets/hee/models/block/miners_burial_block_chiseled.json
f86f536da296ac2e2081fe038757e565f7ac6952 assets/hee/models/block/miners_burial_block_jail.json f86f536da296ac2e2081fe038757e565f7ac6952 assets/hee/models/block/miners_burial_block_jail.json
7b3afe0784c92fb8e0d8112427e7f2ee1799e5e5 assets/hee/models/block/miners_burial_block_pillar.json 7b3afe0784c92fb8e0d8112427e7f2ee1799e5e5 assets/hee/models/block/miners_burial_block_pillar.json
7e60044fcb9a5806d815a94b49304ff6ca992496 assets/hee/models/block/miners_burial_block_pillar_horizontal.json 7e60044fcb9a5806d815a94b49304ff6ca992496 assets/hee/models/block/miners_burial_block_pillar_horizontal.json
1af20bb8055eb36f6e0b0db1eac13ad7a63ff106 assets/hee/models/block/miners_burial_block_plain.json 1af20bb8055eb36f6e0b0db1eac13ad7a63ff106 assets/hee/models/block/miners_burial_block_plain.json
0ed91de9858f63ae21ace09f60cf734bbd27daa6 assets/hee/models/block/obsidian_chiseled.json 0ed91de9858f63ae21ace09f60cf734bbd27daa6 assets/hee/models/block/obsidian_chiseled.json
b1c121d633d189b0cb6fbc8b675b5acf0b19a0d4 assets/hee/models/block/obsidian_falling.json
66637af0fb0dc1f048ce46c7291d6fe3e443e69f assets/hee/models/block/obsidian_pillar.json 66637af0fb0dc1f048ce46c7291d6fe3e443e69f assets/hee/models/block/obsidian_pillar.json
f5677922b8a5a69b2fd2a34cf081fb4dcbd9bd23 assets/hee/models/block/obsidian_pillar_horizontal.json f5677922b8a5a69b2fd2a34cf081fb4dcbd9bd23 assets/hee/models/block/obsidian_pillar_horizontal.json
66637af0fb0dc1f048ce46c7291d6fe3e443e69f assets/hee/models/block/obsidian_pillar_lit.json 66637af0fb0dc1f048ce46c7291d6fe3e443e69f assets/hee/models/block/obsidian_pillar_lit.json
@@ -295,7 +309,6 @@ ffbc19b2aeeb81c1acf03dfc6f4ab101b5602f7a assets/hee/models/item/autumn_sapling_b
2ef2d9dd8a04a7a2bb0d0a75570565ff4921cf67 assets/hee/models/item/blank_token.json 2ef2d9dd8a04a7a2bb0d0a75570565ff4921cf67 assets/hee/models/item/blank_token.json
98167609bf3898587f7565736a6fc24a7966cacd assets/hee/models/item/blobby_spawn_egg.json 98167609bf3898587f7565736a6fc24a7966cacd assets/hee/models/item/blobby_spawn_egg.json
fda3face7f4a5bb8debff8958d1d4920860cd1c3 assets/hee/models/item/compost.json fda3face7f4a5bb8debff8958d1d4920860cd1c3 assets/hee/models/item/compost.json
bd805b17a4641f39e85e70aa5e10f45b0f0d32ce assets/hee/models/item/corrupted_energy.json
5305057f6e86d0fb549f22e6d49a2ca6e9723c54 assets/hee/models/item/dark_chest.json 5305057f6e86d0fb549f22e6d49a2ca6e9723c54 assets/hee/models/item/dark_chest.json
45959256d2d1b4548f4f528d2d690816697955d2 assets/hee/models/item/dark_loam.json 45959256d2d1b4548f4f528d2d690816697955d2 assets/hee/models/item/dark_loam.json
d6669437273af857f67460b9ffc674f07cc07630 assets/hee/models/item/dark_loam_slab.json d6669437273af857f67460b9ffc674f07cc07630 assets/hee/models/item/dark_loam_slab.json
@@ -397,7 +410,7 @@ b0ccc08c142525e3d82a6643d34dfb0d82385571 assets/hee/models/item/miners_burial_bl
8e0fc42a6a28596571ec0877ab3a9af7901adeaa assets/hee/models/item/miners_burial_block_plain.json 8e0fc42a6a28596571ec0877ab3a9af7901adeaa assets/hee/models/item/miners_burial_block_plain.json
7a8592c4a45ccdea4ca36898b3371364f6aab2ca assets/hee/models/item/obsidian_chiseled.json 7a8592c4a45ccdea4ca36898b3371364f6aab2ca assets/hee/models/item/obsidian_chiseled.json
7a8592c4a45ccdea4ca36898b3371364f6aab2ca assets/hee/models/item/obsidian_chiseled_lit.json 7a8592c4a45ccdea4ca36898b3371364f6aab2ca assets/hee/models/item/obsidian_chiseled_lit.json
6ec06a3d2286e954a180a021f8e2fa0847bc62a9 assets/hee/models/item/obsidian_falling.json 561f15cf196c891a108a723c24894fa524b7d2e2 assets/hee/models/item/obsidian_falling.json
3c4e981d4d1945965dfbdc0e4c5ce4c2325646ca assets/hee/models/item/obsidian_fragment.json 3c4e981d4d1945965dfbdc0e4c5ce4c2325646ca assets/hee/models/item/obsidian_fragment.json
28e22c71e0b66c4f05a034efed3fdc1c53ed3446 assets/hee/models/item/obsidian_pillar.json 28e22c71e0b66c4f05a034efed3fdc1c53ed3446 assets/hee/models/item/obsidian_pillar.json
28e22c71e0b66c4f05a034efed3fdc1c53ed3446 assets/hee/models/item/obsidian_pillar_lit.json 28e22c71e0b66c4f05a034efed3fdc1c53ed3446 assets/hee/models/item/obsidian_pillar_lit.json
@@ -469,7 +482,7 @@ aa8696fc83d73951a890f55cd7c2b9c9abb3f611 assets/hee/models/item/whitebark_log.js
2903a69c4cd7c37db3891af9c0736568ccc3acff data/forge/tags/blocks/chests.json 2903a69c4cd7c37db3891af9c0736568ccc3acff data/forge/tags/blocks/chests.json
3260d80138f7c357d2efbda403e8d0e6a957d75b data/forge/tags/blocks/end_stones.json 3260d80138f7c357d2efbda403e8d0e6a957d75b data/forge/tags/blocks/end_stones.json
424e2e03cf62f23f4496468a97b9f0df060df9fe data/forge/tags/blocks/glass.json 424e2e03cf62f23f4496468a97b9f0df060df9fe data/forge/tags/blocks/glass.json
f87bf8e15aea2ca3068935be41828e61a22e6ef8 data/forge/tags/blocks/obsidian.json 763fefed687a3383a23e481415837b08a931661f data/forge/tags/blocks/obsidian.json
83ea3831e8edbb4cab7f4a997b6e78b74d273493 data/forge/tags/blocks/ores.json 83ea3831e8edbb4cab7f4a997b6e78b74d273493 data/forge/tags/blocks/ores.json
9a1109a26cfd5f396d8e080f77d8277f130f299d data/forge/tags/blocks/storage_blocks.json 9a1109a26cfd5f396d8e080f77d8277f130f299d data/forge/tags/blocks/storage_blocks.json
2903a69c4cd7c37db3891af9c0736568ccc3acff data/forge/tags/items/chests.json 2903a69c4cd7c37db3891af9c0736568ccc3acff data/forge/tags/items/chests.json
@@ -480,7 +493,7 @@ d3fbc7a0a7d1a6cd5b4a2d6604a4625c57b57a9a data/forge/tags/items/ender_pearls.json
ff2ba2285b4163d5d08376c6d99477f96273310c data/forge/tags/items/heads.json ff2ba2285b4163d5d08376c6d99477f96273310c data/forge/tags/items/heads.json
144c342bc93a719b95e99b4d9493ed29885bf71b data/forge/tags/items/ingots.json 144c342bc93a719b95e99b4d9493ed29885bf71b data/forge/tags/items/ingots.json
b187118e591990e8c0397058318592c587c3dcff data/forge/tags/items/nuggets.json b187118e591990e8c0397058318592c587c3dcff data/forge/tags/items/nuggets.json
f87bf8e15aea2ca3068935be41828e61a22e6ef8 data/forge/tags/items/obsidian.json 763fefed687a3383a23e481415837b08a931661f data/forge/tags/items/obsidian.json
83ea3831e8edbb4cab7f4a997b6e78b74d273493 data/forge/tags/items/ores.json 83ea3831e8edbb4cab7f4a997b6e78b74d273493 data/forge/tags/items/ores.json
ebdc7d4617021fcc8582e3a17b42d4a815d9e021 data/forge/tags/items/rods.json ebdc7d4617021fcc8582e3a17b42d4a815d9e021 data/forge/tags/items/rods.json
9a1109a26cfd5f396d8e080f77d8277f130f299d data/forge/tags/items/storage_blocks.json 9a1109a26cfd5f396d8e080f77d8277f130f299d data/forge/tags/items/storage_blocks.json
@@ -503,6 +516,7 @@ d9abd1ed1cc52d7f8c1b48896da855b2e8bded23 data/hee/loot_tables/blocks/dusty_stone
ef63046d109846e09f43eaa0fbd322889d31d3c3 data/hee/loot_tables/blocks/dusty_stone_brick_stairs.json ef63046d109846e09f43eaa0fbd322889d31d3c3 data/hee/loot_tables/blocks/dusty_stone_brick_stairs.json
fd7e4cb74c69e176813fd0cddef9c4c98847eacc data/hee/loot_tables/blocks/dusty_stone_bricks.json fd7e4cb74c69e176813fd0cddef9c4c98847eacc data/hee/loot_tables/blocks/dusty_stone_bricks.json
e891c4099dec492133fc58662765c326b00f1e09 data/hee/loot_tables/blocks/dusty_stone_cracked_bricks.json e891c4099dec492133fc58662765c326b00f1e09 data/hee/loot_tables/blocks/dusty_stone_cracked_bricks.json
de6d8d0b775f590077634afc913165c831192070 data/hee/loot_tables/blocks/dusty_stone_decoration.json
5ca27ed38494044939def58dae0354d0cb09baad data/hee/loot_tables/blocks/end_stone_burned.json 5ca27ed38494044939def58dae0354d0cb09baad data/hee/loot_tables/blocks/end_stone_burned.json
c50fb5765d11b9f46dd81f2d9c33d4d0b6bb1402 data/hee/loot_tables/blocks/end_stone_enchanted.json c50fb5765d11b9f46dd81f2d9c33d4d0b6bb1402 data/hee/loot_tables/blocks/end_stone_enchanted.json
7d720082305ddef2d864263bf58c55a67549cbeb data/hee/loot_tables/blocks/end_stone_infested.json 7d720082305ddef2d864263bf58c55a67549cbeb data/hee/loot_tables/blocks/end_stone_infested.json
@@ -567,24 +581,26 @@ e66091a13a6e7593eb5bd971978d24a5a0e375b3 data/hee/loot_tables/blocks/whitebark.j
7d84dc443a052e349593b71d2c0a523e75396cdf data/hee/loot_tables/blocks/whitebark_slab.json 7d84dc443a052e349593b71d2c0a523e75396cdf data/hee/loot_tables/blocks/whitebark_slab.json
83e0b81adb3f9dd488397e8459b95f7b0ce19927 data/hee/loot_tables/blocks/whitebark_stairs.json 83e0b81adb3f9dd488397e8459b95f7b0ce19927 data/hee/loot_tables/blocks/whitebark_stairs.json
f5996244831ab38fe1fae2f304bbd7825d6ad98b data/minecraft/tags/blocks/bamboo_plantable_on.json f5996244831ab38fe1fae2f304bbd7825d6ad98b data/minecraft/tags/blocks/bamboo_plantable_on.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/minecraft/tags/blocks/flower_pots.json 479189f9b35a3c8f795539daf6a1809130242c5b data/minecraft/tags/blocks/flower_pots.json
424e2e03cf62f23f4496468a97b9f0df060df9fe data/minecraft/tags/blocks/impermeable.json 424e2e03cf62f23f4496468a97b9f0df060df9fe data/minecraft/tags/blocks/impermeable.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/minecraft/tags/blocks/leaves.json 4557912145f8c53493f249ef3961d02e156891e4 data/minecraft/tags/blocks/leaves.json
4ea74ec750ba7360a7843a0d4a604ac7b35dfa96 data/minecraft/tags/blocks/logs.json 4ea74ec750ba7360a7843a0d4a604ac7b35dfa96 data/minecraft/tags/blocks/logs.json
4ea74ec750ba7360a7843a0d4a604ac7b35dfa96 data/minecraft/tags/blocks/logs_that_burn.json
697395021049c8cccfac2486c52eb6664cc5bad6 data/minecraft/tags/blocks/planks.json 697395021049c8cccfac2486c52eb6664cc5bad6 data/minecraft/tags/blocks/planks.json
10fff7e5092ddc68cc1611ad4605dc4d6608e227 data/minecraft/tags/blocks/portals.json 10fff7e5092ddc68cc1611ad4605dc4d6608e227 data/minecraft/tags/blocks/portals.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/minecraft/tags/blocks/saplings.json 6f73d4c0d7c0f2650b498f35a60e8fe9c280c765 data/minecraft/tags/blocks/saplings.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/minecraft/tags/blocks/slabs.json eb69de8447077a713baaab7e10184ec283c25516 data/minecraft/tags/blocks/slabs.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/minecraft/tags/blocks/stairs.json 07e3d7d270309424e1ab60a1b89ab2da85f800c7 data/minecraft/tags/blocks/stairs.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/minecraft/tags/blocks/walls.json 5318f9d9be9209139567f7f58d77d1b27d9d1327 data/minecraft/tags/blocks/walls.json
8a04ae43dc7062677394df7bf7276dbc92a5f1ca data/minecraft/tags/blocks/wooden_slabs.json 8a04ae43dc7062677394df7bf7276dbc92a5f1ca data/minecraft/tags/blocks/wooden_slabs.json
3bf587d2f806c14a76a10db8f43386552382c381 data/minecraft/tags/blocks/wooden_stairs.json 3bf587d2f806c14a76a10db8f43386552382c381 data/minecraft/tags/blocks/wooden_stairs.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/minecraft/tags/items/leaves.json 4557912145f8c53493f249ef3961d02e156891e4 data/minecraft/tags/items/leaves.json
4ea74ec750ba7360a7843a0d4a604ac7b35dfa96 data/minecraft/tags/items/logs.json 4ea74ec750ba7360a7843a0d4a604ac7b35dfa96 data/minecraft/tags/items/logs.json
4ea74ec750ba7360a7843a0d4a604ac7b35dfa96 data/minecraft/tags/items/logs_that_burn.json
697395021049c8cccfac2486c52eb6664cc5bad6 data/minecraft/tags/items/planks.json 697395021049c8cccfac2486c52eb6664cc5bad6 data/minecraft/tags/items/planks.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/minecraft/tags/items/saplings.json 6f73d4c0d7c0f2650b498f35a60e8fe9c280c765 data/minecraft/tags/items/saplings.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/minecraft/tags/items/slabs.json eb69de8447077a713baaab7e10184ec283c25516 data/minecraft/tags/items/slabs.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/minecraft/tags/items/stairs.json 07e3d7d270309424e1ab60a1b89ab2da85f800c7 data/minecraft/tags/items/stairs.json
74700d556ca80c7a1db5fd4efb09c3ddb26cad66 data/minecraft/tags/items/walls.json 5318f9d9be9209139567f7f58d77d1b27d9d1327 data/minecraft/tags/items/walls.json
8a04ae43dc7062677394df7bf7276dbc92a5f1ca data/minecraft/tags/items/wooden_slabs.json 8a04ae43dc7062677394df7bf7276dbc92a5f1ca data/minecraft/tags/items/wooden_slabs.json
3bf587d2f806c14a76a10db8f43386552382c381 data/minecraft/tags/items/wooden_stairs.json 3bf587d2f806c14a76a10db8f43386552382c381 data/minecraft/tags/items/wooden_stairs.json

View File

@@ -0,0 +1,16 @@
{
"variants": {
"level=0": {
"model": "minecraft:block/cauldron"
},
"level=1": {
"model": "hee:block/cauldron_dragons_breath_level1"
},
"level=2": {
"model": "hee:block/cauldron_dragons_breath_level2"
},
"level=3": {
"model": "hee:block/cauldron_dragons_breath_level3"
}
}
}

View File

@@ -0,0 +1,16 @@
{
"variants": {
"level=0": {
"model": "minecraft:block/cauldron"
},
"level=1": {
"model": "hee:block/cauldron_ender_goo_level1"
},
"level=2": {
"model": "hee:block/cauldron_ender_goo_level2"
},
"level=3": {
"model": "hee:block/cauldron_ender_goo_level3"
}
}
}

View File

@@ -0,0 +1,16 @@
{
"variants": {
"level=0": {
"model": "minecraft:block/cauldron"
},
"level=1": {
"model": "hee:block/cauldron_purified_ender_goo_level1"
},
"level=2": {
"model": "hee:block/cauldron_purified_ender_goo_level2"
},
"level=3": {
"model": "hee:block/cauldron_purified_ender_goo_level3"
}
}
}

View File

@@ -1,7 +1,7 @@
{ {
"variants": { "variants": {
"": { "": {
"model": "hee:block/obsidian_falling" "model": "minecraft:block/obsidian"
} }
} }
} }

View File

@@ -0,0 +1,90 @@
{
"multipart": [
{
"when": {
"up": "true"
},
"apply": {
"model": "hee:block/stone_brick_wall_post"
}
},
{
"when": {
"east": "low"
},
"apply": {
"model": "hee:block/stone_brick_wall_side",
"y": 90,
"uvlock": true
}
},
{
"when": {
"east": "tall"
},
"apply": {
"model": "hee:block/stone_brick_wall_side_tall",
"y": 90,
"uvlock": true
}
},
{
"when": {
"north": "low"
},
"apply": {
"model": "hee:block/stone_brick_wall_side",
"uvlock": true
}
},
{
"when": {
"north": "tall"
},
"apply": {
"model": "hee:block/stone_brick_wall_side_tall",
"uvlock": true
}
},
{
"when": {
"south": "low"
},
"apply": {
"model": "hee:block/stone_brick_wall_side",
"y": 180,
"uvlock": true
}
},
{
"when": {
"south": "tall"
},
"apply": {
"model": "hee:block/stone_brick_wall_side_tall",
"y": 180,
"uvlock": true
}
},
{
"when": {
"west": "low"
},
"apply": {
"model": "hee:block/stone_brick_wall_side",
"y": 270,
"uvlock": true
}
},
{
"when": {
"west": "tall"
},
"apply": {
"model": "hee:block/stone_brick_wall_side_tall",
"y": 270,
"uvlock": true
}
}
]
}

View File

@@ -1,415 +1,357 @@
{ {
"block.hee.ethereal_lantern": "Ethereal Lantern", "block.hee.accumulation_table": "Accumulation Table",
"block.hee.stone_brick_wall": "Stone Brick Wall", "block.hee.ancient_cobweb": "Ancient Cobweb",
"block.hee.infused_glass": "Infused Glass", "block.hee.autumn_leaves_brown": "Autumn Leaves (Brown)",
"block.hee.vantablock": "Vantablock", "block.hee.autumn_leaves_orange": "Autumn Leaves (Orange)",
"block.hee.endium_block": "Endium Block", "block.hee.autumn_leaves_red": "Autumn Leaves (Red)",
"block.hee.endersol": "Endersol", "block.hee.autumn_leaves_yellowgreen": "Autumn Leaves (Yellow-Green)",
"block.hee.humus": "Humus", "block.hee.autumn_sapling_brown": "Autumn Sapling (Brown)",
"block.hee.autumn_sapling_orange": "Autumn Sapling (Orange)",
"block.hee.gloomrock": "Gloomrock", "block.hee.autumn_sapling_red": "Autumn Sapling (Red)",
"block.hee.gloomrock_bricks": "Gloomrock Bricks", "block.hee.autumn_sapling_yellowgreen": "Autumn Sapling (Yellow-Green)",
"block.hee.gloomrock_brick_slab": "Gloomrock Brick Slab", "block.hee.dark_chest": "Dark Chest",
"block.hee.gloomrock_brick_stairs": "Gloomrock Brick Stairs",
"block.hee.gloomrock_smooth": "Smooth Gloomrock",
"block.hee.gloomrock_smooth_slab": "Smooth Gloomrock Slab",
"block.hee.gloomrock_smooth_stairs": "Smooth Gloomrock Stairs",
"block.hee.gloomrock_smooth_red": "Red Gloomrock",
"block.hee.gloomrock_smooth_orange": "Orange Gloomrock",
"block.hee.gloomrock_smooth_yellow": "Yellow Gloomrock",
"block.hee.gloomrock_smooth_green": "Green Gloomrock",
"block.hee.gloomrock_smooth_cyan": "Cyan Gloomrock",
"block.hee.gloomrock_smooth_blue": "Blue Gloomrock",
"block.hee.gloomrock_smooth_purple": "Purple Gloomrock",
"block.hee.gloomrock_smooth_magenta": "Magenta Gloomrock",
"block.hee.gloomrock_smooth_white": "White Gloomrock",
"block.hee.gloomtorch": "Gloomtorch",
"block.hee.dusty_stone": "Dusty Stone",
"block.hee.dusty_stone_cracked": "Cracked Dusty Stone",
"block.hee.dusty_stone_damaged": "Damaged Dusty Stone",
"block.hee.dusty_stone_bricks": "Dusty Stone Bricks",
"block.hee.dusty_stone_cracked_bricks": "Cracked Dusty Stone Bricks",
"block.hee.dusty_stone_decoration": "Dusty Stone Decoration",
"block.hee.dusty_stone_brick_stairs": "Dusty Stone Brick Stairs",
"block.hee.dusty_stone_brick_slab": "Dusty Stone Brick Slab",
"block.hee.obsidian_stairs": "Obsidian Stairs",
"block.hee.obsidian_falling": "Falling Obsidian",
"block.hee.obsidian_smooth": "Smooth Obsidian",
"block.hee.obsidian_chiseled": "Chiseled Obsidian",
"block.hee.obsidian_pillar": "Obsidian Pillar",
"block.hee.obsidian_smooth_lit": "Smooth Obsidian (Lit)",
"block.hee.obsidian_chiseled_lit": "Chiseled Obsidian (Lit)",
"block.hee.obsidian_pillar_lit": "Obsidian Pillar (Lit)",
"block.hee.obsidian_tower_top": "Obsidian Tower Top",
"block.hee.end_stone_infested": "Infested End Stone",
"block.hee.end_stone_burned": "Burned End Stone",
"block.hee.end_stone_enchanted": "Enchanted End Stone",
"block.hee.dark_loam": "Dark Loam", "block.hee.dark_loam": "Dark Loam",
"block.hee.dark_loam_slab": "Dark Loam Slab", "block.hee.dark_loam_slab": "Dark Loam Slab",
"block.hee.death_flower": "Death Flower",
"block.hee.death_flower_healed": "Healed Death Flower",
"block.hee.death_flower_withered": "Withered Death Flower",
"block.hee.dry_vines": "Dry Vines",
"block.hee.dusty_stone": "Dusty Stone",
"block.hee.dusty_stone_brick_slab": "Dusty Stone Brick Slab",
"block.hee.dusty_stone_brick_stairs": "Dusty Stone Brick Stairs",
"block.hee.dusty_stone_bricks": "Dusty Stone Bricks",
"block.hee.dusty_stone_cracked": "Cracked Dusty Stone",
"block.hee.dusty_stone_cracked_bricks": "Cracked Dusty Stone Bricks",
"block.hee.dusty_stone_damaged": "Damaged Dusty Stone",
"block.hee.dusty_stone_decoration": "Dusty Stone Decoration",
"block.hee.end_portal_acceptor": "End Portal Acceptor",
"block.hee.end_portal_frame": "End Portal Frame",
"block.hee.end_portal_inner": "End Portal",
"block.hee.end_powder_ore": "End Powder Ore",
"block.hee.end_stone_burned": "Burned End Stone",
"block.hee.end_stone_enchanted": "Enchanted End Stone",
"block.hee.end_stone_infested": "Infested End Stone",
"block.hee.enderman_head": "Enderman Head",
"block.hee.endersol": "Endersol",
"block.hee.endium_block": "Endium Block",
"block.hee.endium_ore": "Endium Ore",
"block.hee.energy_cluster": "Energy Cluster",
"block.hee.enhanced_brewing_stand": "Enhanced Brewing Stand",
"block.hee.eternal_fire": "Eternal Fire",
"block.hee.ethereal_lantern": "Ethereal Lantern",
"block.hee.experience_gate": "Experience Gate",
"block.hee.experience_gate_controller": "Experience Gate (Controller)",
"block.hee.experience_table": "Experience Table",
"block.hee.gloomrock": "Gloomrock",
"block.hee.gloomrock_brick_slab": "Gloomrock Brick Slab",
"block.hee.gloomrock_brick_stairs": "Gloomrock Brick Stairs",
"block.hee.gloomrock_bricks": "Gloomrock Bricks",
"block.hee.gloomrock_smooth": "Smooth Gloomrock",
"block.hee.gloomrock_smooth_blue": "Blue Gloomrock",
"block.hee.gloomrock_smooth_cyan": "Cyan Gloomrock",
"block.hee.gloomrock_smooth_green": "Green Gloomrock",
"block.hee.gloomrock_smooth_magenta": "Magenta Gloomrock",
"block.hee.gloomrock_smooth_orange": "Orange Gloomrock",
"block.hee.gloomrock_smooth_purple": "Purple Gloomrock",
"block.hee.gloomrock_smooth_red": "Red Gloomrock",
"block.hee.gloomrock_smooth_slab": "Smooth Gloomrock Slab",
"block.hee.gloomrock_smooth_stairs": "Smooth Gloomrock Stairs",
"block.hee.gloomrock_smooth_white": "White Gloomrock",
"block.hee.gloomrock_smooth_yellow": "Yellow Gloomrock",
"block.hee.gloomtorch": "Gloomtorch",
"block.hee.grave_dirt": "Grave Dirt", "block.hee.grave_dirt": "Grave Dirt",
"block.hee.grave_dirt_loot": "Grave Dirt (Loot)", "block.hee.grave_dirt_loot": "Grave Dirt (Loot)",
"block.hee.grave_dirt_spiderling": "Grave Dirt (Spiderling)", "block.hee.grave_dirt_spiderling": "Grave Dirt (Spiderling)",
"block.hee.humus": "Humus",
"block.hee.whitebark_log": "Whitebark Log", "block.hee.igneous_plate": "Igneous Plate",
"block.hee.whitebark": "Whitebark", "block.hee.igneous_rock_ore": "Igneous Rock Ore",
"block.hee.whitebark_planks": "Whitebark Planks", "block.hee.infused_glass": "Infused Glass",
"block.hee.whitebark_stairs": "Whitebark Stairs", "block.hee.infusion_table": "Infusion Table",
"block.hee.whitebark_slab": "Whitebark Slab",
"block.hee.miners_burial_block_plain": "Miner's Burial Block",
"block.hee.miners_burial_block_chiseled": "Miner's Burial Block (Chiseled)",
"block.hee.miners_burial_block_pillar": "Miner's Burial Block (Pillar)",
"block.hee.miners_burial_block_jail": "Miner's Burial Block (Jail)",
"block.hee.miners_burial_altar": "Miner's Burial Altar",
"block.hee.jar_o_dust": "Jar o' Dust", "block.hee.jar_o_dust": "Jar o' Dust",
"block.hee.jar_o_dust.tooltip.entry": "§7%sx %s", "block.hee.jar_o_dust.tooltip.entry": "\u00A77%sx %s",
"block.hee.dark_chest": "Dark Chest", "block.hee.large_shulker_box": "Large Shulker Box",
"block.hee.loot_chest": "Loot Chest", "block.hee.loot_chest": "Loot Chest",
"block.hee.loot_chest.tooltip": "§5§o(Editable in creative mode)",
"block.hee.loot_chest.error_has_loot_table": "Cannot edit a Loot Chest that uses a predefined loot table", "block.hee.loot_chest.error_has_loot_table": "Cannot edit a Loot Chest that uses a predefined loot table",
"block.hee.loot_chest.tooltip": "\u00A75\u00A7o(Editable in creative mode)",
"block.hee.puzzle_block_wall": "Puzzle Block (Wall)", "block.hee.medium_shulker_box": "Medium Shulker Box",
"block.hee.puzzle_block_plain": "Puzzle Block (Plain)", "block.hee.miners_burial_altar": "Miner's Burial Altar",
"block.hee.miners_burial_block_chiseled": "Miner's Burial Block (Chiseled)",
"block.hee.miners_burial_block_jail": "Miner's Burial Block (Jail)",
"block.hee.miners_burial_block_pillar": "Miner's Burial Block (Pillar)",
"block.hee.miners_burial_block_plain": "Miner's Burial Block",
"block.hee.obsidian_chiseled": "Chiseled Obsidian",
"block.hee.obsidian_chiseled_lit": "Chiseled Obsidian (Lit)",
"block.hee.obsidian_falling": "Falling Obsidian",
"block.hee.obsidian_pillar": "Obsidian Pillar",
"block.hee.obsidian_pillar_lit": "Obsidian Pillar (Lit)",
"block.hee.obsidian_smooth": "Smooth Obsidian",
"block.hee.obsidian_smooth_lit": "Smooth Obsidian (Lit)",
"block.hee.obsidian_stairs": "Obsidian Stairs",
"block.hee.obsidian_tower_top": "Obsidian Tower Top",
"block.hee.potted_autumn_sapling_brown": "Potted Autumn Sapling (Brown)",
"block.hee.potted_autumn_sapling_orange": "Potted Autumn Sapling (Orange)",
"block.hee.potted_autumn_sapling_red": "Potted Autumn Sapling (Red)",
"block.hee.potted_autumn_sapling_yellowgreen": "Potted Autumn Sapling (Yellow-Green)",
"block.hee.potted_death_flower": "Potted Death Flower",
"block.hee.potted_death_flower_healed": "Potted Healed Death Flower",
"block.hee.potted_death_flower_withered": "Potted Withered Death Flower",
"block.hee.puzzle_block_burst_3": "Puzzle Block (Burst 3x3)", "block.hee.puzzle_block_burst_3": "Puzzle Block (Burst 3x3)",
"block.hee.puzzle_block_burst_5": "Puzzle Block (Burst 5x5)", "block.hee.puzzle_block_burst_5": "Puzzle Block (Burst 5x5)",
"block.hee.puzzle_block_plain": "Puzzle Block (Plain)",
"block.hee.puzzle_block_redirect_1": "Puzzle Block (Redirect 1)", "block.hee.puzzle_block_redirect_1": "Puzzle Block (Redirect 1)",
"block.hee.puzzle_block_redirect_2": "Puzzle Block (Redirect 2)", "block.hee.puzzle_block_redirect_2": "Puzzle Block (Redirect 2)",
"block.hee.puzzle_block_redirect_4": "Puzzle Block (Redirect 4)", "block.hee.puzzle_block_redirect_4": "Puzzle Block (Redirect 4)",
"block.hee.puzzle_block_teleport": "Puzzle Block (Teleport)", "block.hee.puzzle_block_teleport": "Puzzle Block (Teleport)",
"block.hee.puzzle_block_wall": "Puzzle Block (Wall)",
"block.hee.experience_gate": "Experience Gate",
"block.hee.experience_gate_controller": "Experience Gate (Controller)",
"block.hee.igneous_plate": "Igneous Plate",
"block.hee.enhanced_brewing_stand": "Enhanced Brewing Stand",
"block.hee.end_powder_ore": "End Powder Ore",
"block.hee.endium_ore": "Endium Ore",
"block.hee.stardust_ore": "Stardust Ore",
"block.hee.igneous_rock_ore": "Igneous Rock Ore",
"block.hee.autumn_leaves_red": "Autumn Leaves (Red)",
"block.hee.autumn_leaves_brown": "Autumn Leaves (Brown)",
"block.hee.autumn_leaves_orange": "Autumn Leaves (Orange)",
"block.hee.autumn_leaves_yellowgreen": "Autumn Leaves (Yellow-Green)",
"block.hee.autumn_sapling_red": "Autumn Sapling (Red)",
"block.hee.autumn_sapling_brown": "Autumn Sapling (Brown)",
"block.hee.autumn_sapling_orange": "Autumn Sapling (Orange)",
"block.hee.autumn_sapling_yellowgreen": "Autumn Sapling (Yellow-Green)",
"block.hee.potted_autumn_sapling_red": "Potted Autumn Sapling (Red)",
"block.hee.potted_autumn_sapling_brown": "Potted Autumn Sapling (Brown)",
"block.hee.potted_autumn_sapling_orange": "Potted Autumn Sapling (Orange)",
"block.hee.potted_autumn_sapling_yellowgreen": "Potted Autumn Sapling (Yellow-Green)",
"block.hee.death_flower": "Death Flower",
"block.hee.death_flower_healed": "Healed Death Flower",
"block.hee.death_flower_withered": "Withered Death Flower",
"block.hee.potted_death_flower": "Potted Death Flower",
"block.hee.potted_death_flower_healed": "Potted Healed Death Flower",
"block.hee.potted_death_flower_withered": "Potted Withered Death Flower",
"block.hee.ancient_cobweb": "Ancient Cobweb",
"block.hee.dry_vines": "Dry Vines",
"block.hee.enderman_head": "Enderman Head",
"block.hee.end_portal_inner": "End Portal",
"block.hee.end_portal_frame": "End Portal Frame",
"block.hee.end_portal_acceptor": "End Portal Acceptor",
"block.hee.void_portal_inner": "Void Portal",
"block.hee.void_portal_frame": "Void Portal Frame",
"block.hee.void_portal_storage": "Void Portal Storage",
"block.hee.energy_cluster": "Energy Cluster",
"block.hee.table_pedestal": "Table Pedestal",
"block.hee.table_base": "Table Base",
"block.hee.accumulation_table": "Accumulation Table",
"block.hee.experience_table": "Experience Table",
"block.hee.infusion_table": "Infusion Table",
"block.hee.eternal_fire": "Eternal Fire",
"block.hee.scaffolding": "Scaffolding", "block.hee.scaffolding": "Scaffolding",
"block.hee.shulker_box": "Shulker Box", "block.hee.shulker_box": "Shulker Box",
"block.hee.small_shulker_box": "Small Shulker Box", "block.hee.small_shulker_box": "Small Shulker Box",
"block.hee.medium_shulker_box": "Medium Shulker Box", "block.hee.stardust_ore": "Stardust Ore",
"block.hee.large_shulker_box": "Large Shulker Box", "block.hee.stone_brick_wall": "Stone Brick Wall",
"block.hee.table_base": "Table Base",
"block.tooltip.hee.table.tier": "§7Tier %s", "block.hee.table_pedestal": "Table Pedestal",
"block.hee.vantablock": "Vantablock",
"item.hee.ancient_dust": "Ancient Dust", "block.hee.void_portal_frame": "Void Portal Frame",
"item.hee.ethereum": "Ethereum", "block.hee.void_portal_inner": "Void Portal",
"item.hee.end_powder": "End Powder", "block.hee.void_portal_storage": "Void Portal Storage",
"item.hee.stardust": "Stardust", "block.hee.whitebark": "Whitebark",
"item.hee.endium_ingot": "Endium Ingot", "block.hee.whitebark_log": "Whitebark Log",
"item.hee.endium_nugget": "Endium Nugget", "block.hee.whitebark_planks": "Whitebark Planks",
"item.hee.obsidian_fragment": "Obsidian Fragment", "block.hee.whitebark_slab": "Whitebark Slab",
"item.hee.igneous_rock": "Igneous Rock", "block.hee.whitebark_stairs": "Whitebark Stairs",
"item.hee.puzzle_medallion": "Puzzle Medallion", "block.tooltip.hee.table.tier": "\u00A77Tier %s",
"item.hee.infernium": "Infernium", "commands.hee.causatum.check": "Ender Causatum stage: %s",
"item.hee.infernium_ingot": "Infernium Ingot", "commands.hee.causatum.info": "checks or triggers Ender Causatum stages",
"item.hee.auricion": "Auricion", "commands.hee.causatum.list": "Ender Causatum stages:",
"item.hee.dragon_scale": "Dragon Scale", "commands.hee.causatum.set": "Ender Causatum stage updated for %s player(s)",
"item.hee.instability_orb": "Instability Orb", "commands.hee.debug.info": "access to debug toggles",
"item.hee.ectoplasm": "Ectoplasm", "commands.hee.help.failed": "Page must be between 1 and %s",
"item.hee.enchanted_claw": "Enchanted Claw", "commands.hee.help.footer.admin": "\u00A7a\u00A7nadmin commands",
"commands.hee.help.footer.end": "\u00A72 ---",
"item.hee.alteration_nexus": "Alteration Nexus", "commands.hee.help.footer.middle": "\u00A72 / \u00A7r",
"item.hee.void_essence": "Void Essence", "commands.hee.help.footer.next": "next page",
"item.hee.obsidian_rod": "Obsidian Rod", "commands.hee.help.footer.prev": "previous page",
"item.hee.purity_extract": "Purity Extract", "commands.hee.help.footer.start": "\u00A72--- Navigate to: \u00A7r",
"item.hee.static_core": "Static Core", "commands.hee.help.header.admin": "\u00A72--- Showing \u00A7aadmin\u00A72 commands, page %s \u00A72of %s\u00A72 ---",
"item.hee.ticking_core": "Ticking Core", "commands.hee.help.header.client": "\u00A72--- Showing \u00A7aclient\u00A72 commands, page %s\u00A72 ---",
"item.hee.dirty_infernium_ingot": "Dirty Infernium Ingot", "commands.hee.help.header.debug": "\u00A72--- Showing \u00A7adebug\u00A72 commands, page %s \u00A72of %s\u00A72 ---",
"item.hee.amelior": "Amelior", "commands.hee.help.info": "shows command list",
"item.hee.revitalization_substance": "Revitalization Substance", "commands.hee.infusions.add_success": "Added %s infusion",
"item.hee.binding_essence": "Binding Essence", "commands.hee.infusions.already_present": "Infusion is already present on this item",
"commands.hee.infusions.info": "manipulates infusions on held item",
"item.hee.eye_of_ender": "Eye of Ender", "commands.hee.infusions.no_held_item": "No item held in main hand",
"item.hee.compost": "Compost", "commands.hee.infusions.not_applicable": "Infusion cannot be applied to this item",
"item.hee.void_salad.single": "Void Salad", "commands.hee.infusions.not_present": "Infusion is not present on this item",
"item.hee.void_salad.double": "Void Void Salad", "commands.hee.infusions.nothing_to_remove": "No infusions present on this item",
"item.hee.void_salad.mega": "Mega Void Salad", "commands.hee.infusions.remove_success": "Removed %s infusion",
"commands.hee.infusions.reset_success": "Removed %s infusion(s)",
"item.hee.accumulation_table_core": "Accumulation Table Core", "commands.hee.instability.info": "utilities for instability",
"item.hee.experience_table_core": "Experience Table Core", "commands.hee.lootchest.info": "manipulates Loot Chests",
"item.hee.infusion_table_core": "Infusion Table Core", "commands.hee.lootchest.not_loot_chest": "No Loot Chest at the specified location",
"commands.hee.lootchest.remove_table_success": "Removed loot table",
"item.hee.table_link": "Table Link", "commands.hee.lootchest.reset_success": "Reset loot generated for %s player(s)",
"item.hee.knowledge_note": "Knowledge Note", "commands.hee.lootchest.set_table_success": "Updated loot table",
"item.hee.experience_bottle.tooltip": "§a%s §2experience", "commands.hee.lootchest.table_not_found": "Loot table not found",
"commands.hee.scaffolding.info": "sets current structure palette",
"item.hee.void_miner": "Void Miner", "commands.hee.structure.info": "utilities for custom structures",
"item.hee.void_bucket": "Void Bucket", "commands.hee.territory.info": "utilities for territories",
"item.hee.scorching_pickaxe": "Scorching Pickaxe", "commands.hee.testworld.info": "converts overworld into a test world",
"item.hee.scorching_shovel": "Scorching Shovel", "commands.hee.token.info": "generates a Portal Token item",
"item.hee.scorching_axe": "Scorching Axe", "commands.hee.token.success": "Created Portal Token leading to %s",
"item.hee.scorching_sword": "Scorching Sword", "effect.hee.banishment": "Banishment",
"item.hee.flint_and_infernium": "Flint and Infernium", "effect.hee.corruption": "Corruption",
"effect.hee.lifeless": "Lifeless",
"item.hee.ender_goo_bucket": "Ender Goo Bucket", "effect.hee.purity": "Purity",
"item.hee.purified_ender_goo_bucket": "Purified Ender Goo Bucket",
"item.hee.energy_oracle": "Energy Oracle",
"item.hee.energy_receptacle": "Energy Receptacle",
"item.hee.energy_receptacle.tooltip.empty": "§9Empty",
"item.hee.energy_receptacle.tooltip.holding": "§9Holding §3%s§9 Energy",
"item.hee.spatial_dash_gem": "Spatial Dash Gem",
"item.hee.linking_gem": "Linking Gem",
"item.hee.portal_token.normal": "Portal Token",
"item.hee.portal_token.rare": "Rare Portal Token",
"item.hee.portal_token.solitary": "Solitary Portal Token",
"item.hee.portal_token.normal.concrete": "Portal Token (%s)",
"item.hee.portal_token.rare.concrete": "Rare Portal Token (%s)",
"item.hee.portal_token.solitary.concrete": "Solitary Portal Token (%s)",
"item.hee.portal_token.tooltip.difficulty.peaceful": "§7«§2 Peaceful §7»",
"item.hee.portal_token.tooltip.difficulty.neutral": "§7«§e Neutral §7»",
"item.hee.portal_token.tooltip.difficulty.hostile": "§7«§4 Hostile §7»",
"item.hee.portal_token.tooltip.difficulty.boss": "§7«§5 Boss §7»",
"item.hee.portal_token.tooltip.activate": "§6Right-click to activate",
"item.hee.portal_token.tooltip.creative.generate": "§6Hold and right-click to generate (creative)",
"item.hee.portal_token.tooltip.creative.teleport": "§6Hold and right-click to teleport (creative)",
"item.hee.portal_token.tooltip.advanced": "§7Index: %s",
"item.hee.blank_token": "Blank Token",
"item.hee.trinket_pouch": "Trinket Pouch",
"item.hee.trinket_pouch.tooltip": "§7Right-click to open",
"item.hee.amulet_of_recovery": "Amulet of Recovery",
"item.hee.amulet_of_recovery.cost_error": "Error calculating Energy cost for Amulet of Recovery. Please check server logs for the full error and report it.",
"item.hee.ring_of_hunger": "Ring of Hunger",
"item.hee.ring_of_preservation": "Ring of Preservation",
"item.hee.talisman_of_griefing": "Talisman of Griefing",
"item.hee.scale_of_freefall": "Scale of Freefall",
"item.hee.ender_eye_spawn_egg": "Ender Eye Spawn Egg",
"item.hee.angry_enderman_spawn_egg": "Angry Enderman Spawn Egg",
"item.hee.blobby_spawn_egg": "Blobby Spawn Egg",
"item.hee.endermite_instability_spawn_egg": "Endermite Spawn Egg (Instability)",
"item.hee.spiderling_spawn_egg": "Spiderling Spawn Egg",
"item.hee.undread_spawn_egg": "Undread Spawn Egg",
"item.hee.vampire_bat_spawn_egg": "Vampire Bat Spawn Egg",
"item.hee.chorus_berry": "Chorus Berry",
"item.hee.shulker_box.tooltip": "§7Right-click to open",
"item.tooltip.hee.energy.level": "§9Energy: §3%s§9 / §3%s",
"item.tooltip.hee.energy.uses": "§9Uses Left: §3%s",
"item.tooltip.hee.trinket.in_slot.charged": "§aActive",
"item.tooltip.hee.trinket.in_slot.uncharged": "§cMust be recharged",
"item.tooltip.hee.trinket.not_in_slot.charged": "§cMust be placed in Trinket slot",
"item.tooltip.hee.trinket.not_in_slot.uncharged": "§cMust be charged and placed in Trinket slot",
"item.tooltip.hee.table_core.tooltip": "§7Minimum Tier: %s",
"fluid.hee.ender_goo": "Ender Goo",
"fluid.hee.purified_ender_goo": "Purified Ender Goo",
"hee.infusions.list.title": "§aInfusions",
"hee.infusions.list.item": "§2- %s",
"hee.infusions.list.none": "§7None",
"hee.infusions.applicable.title": "§aApplicable To",
"hee.infusions.applicable.item": "§2- %s §3[%s]",
"hee.infusion.power": "Power",
"hee.infusion.fire": "Fire",
"hee.infusion.trap": "Trap",
"hee.infusion.mining": "Mining",
"hee.infusion.harmless": "Harmless",
"hee.infusion.phasing": "Phasing",
"hee.infusion.slow": "Slow",
"hee.infusion.riding": "Riding",
"hee.infusion.vigor": "Vigor",
"hee.infusion.capacity": "Capacity",
"hee.infusion.distance": "Distance",
"hee.infusion.speed": "Speed",
"hee.infusion.stability": "Stability",
"hee.infusion.safety": "Safety",
"hee.infusion.expansion": "Expansion",
"itemGroup.hee": "Hardcore Ender Expansion",
"hee.energy.overlay.health": "%s ENERGY CLUSTER",
"hee.energy.overlay.level": "HOLDING %s OUT OF %s ENERGY",
"hee.energy.overlay.ignored": "IGNORED",
"hee.energy.health.powered": "POWERED",
"hee.energy.health.healthy": "HEALTHY",
"hee.energy.health.weakened": "WEAKENED",
"hee.energy.health.tired": "TIRED",
"hee.energy.health.damaged": "DAMAGED",
"hee.energy.health.unstable": "UNSTABLE",
"hee.energy.health.revitalizing": "REVITALIZING",
"entity.hee.ender_eye": "Ender Eye",
"entity.hee.angry_enderman": "Angry Enderman", "entity.hee.angry_enderman": "Angry Enderman",
"entity.hee.blobby": "Blobby", "entity.hee.blobby": "Blobby",
"entity.hee.ender_eye": "Ender Eye",
"entity.hee.ender_pearl": "Ender Pearl",
"entity.hee.endermite_instability": "Endermite (Instability)", "entity.hee.endermite_instability": "Endermite (Instability)",
"entity.hee.spiderling": "Spiderling", "entity.hee.spiderling": "Spiderling",
"entity.hee.undread": "Undread", "entity.hee.undread": "Undread",
"entity.hee.vampire_bat": "Vampire Bat", "entity.hee.vampire_bat": "Vampire Bat",
"entity.hee.ender_pearl": "Ender Pearl", "fluid.hee.ender_goo": "Ender Goo",
"fluid.hee.purified_ender_goo": "Purified Ender Goo",
"effect.hee.lifeless": "Lifeless",
"effect.hee.purity": "Purity",
"effect.hee.corruption": "Corruption",
"effect.hee.banishment": "Banishment",
"item.minecraft.potion.effect.purity": "Potion of Purity",
"item.minecraft.splash_potion.effect.purity": "Splash Potion of Purity",
"item.minecraft.lingering_potion.effect.purity": "Lingering Potion of Purity",
"item.minecraft.tipped_arrow.effect.purity": "Arrow of Purity",
"item.minecraft.potion.effect.corruption": "Potion of Corruption",
"item.minecraft.splash_potion.effect.corruption": "Splash Potion of Corruption",
"item.minecraft.lingering_potion.effect.corruption": "Lingering Potion of Corruption",
"item.minecraft.tipped_arrow.effect.corruption": "Arrow of Corruption",
"item.minecraft.potion.effect.banishment": "Potion of Banishment",
"item.minecraft.splash_potion.effect.banishment": "Splash Potion of Banishment",
"item.minecraft.lingering_potion.effect.banishment": "Lingering Potion of Banishment",
"item.minecraft.tipped_arrow.effect.banishment": "Arrow of Banishment",
"gui.hee.amulet_of_recovery.move_all": "Move All", "gui.hee.amulet_of_recovery.move_all": "Move All",
"gui.hee.enhanced_brewing_stand.title": "Enhanced Brewing Stand",
"gui.hee.loot_chest.title": "Loot Chest", "gui.hee.loot_chest.title": "Loot Chest",
"gui.hee.loot_chest.title.creative": "Loot Chest (Editing)", "gui.hee.loot_chest.title.creative": "Loot Chest (Editing)",
"gui.hee.portal_token_storage.title": "Portal Tokens", "gui.hee.portal_token_storage.title": "Portal Tokens",
"gui.hee.enhanced_brewing_stand.title": "Enhanced Brewing Stand", "hee.energy.health.damaged": "DAMAGED",
"hee.energy.health.healthy": "HEALTHY",
"hee.territory.fallback.name": "Unknown", "hee.energy.health.powered": "POWERED",
"hee.territory.the_hub.name": "The Hub", "hee.energy.health.revitalizing": "REVITALIZING",
"hee.territory.forgotten_tombs.name": "Forgotten Tombs", "hee.energy.health.tired": "TIRED",
"hee.territory.obsidian_towers.name": "Obsidian Towers", "hee.energy.health.unstable": "UNSTABLE",
"hee.energy.health.weakened": "WEAKENED",
"hee.energy.overlay.health": "%s ENERGY CLUSTER",
"hee.energy.overlay.ignored": "IGNORED",
"hee.energy.overlay.level": "HOLDING %s OUT OF %s ENERGY",
"hee.infusion.capacity": "Capacity",
"hee.infusion.distance": "Distance",
"hee.infusion.expansion": "Expansion",
"hee.infusion.fire": "Fire",
"hee.infusion.harmless": "Harmless",
"hee.infusion.mining": "Mining",
"hee.infusion.phasing": "Phasing",
"hee.infusion.power": "Power",
"hee.infusion.riding": "Riding",
"hee.infusion.safety": "Safety",
"hee.infusion.slow": "Slow",
"hee.infusion.speed": "Speed",
"hee.infusion.stability": "Stability",
"hee.infusion.trap": "Trap",
"hee.infusion.vigor": "Vigor",
"hee.infusions.applicable.item": "\u00A72- %s \u00A73[%s]",
"hee.infusions.applicable.title": "\u00A7aApplicable To",
"hee.infusions.list.item": "\u00A72- %s",
"hee.infusions.list.none": "\u00A77None",
"hee.infusions.list.title": "\u00A7aInfusions",
"hee.territory.arcane_conjunctions.name": "Arcane Conjunctions", "hee.territory.arcane_conjunctions.name": "Arcane Conjunctions",
"hee.territory.lost_garden.name": "Lost Garden",
"hee.territory.ender_city.name": "Ender City",
"hee.territory.hostile_pass.name": "Hostile Pass",
"hee.territory.warded_mines.name": "Warded Mines",
"hee.territory.eternal_mists.name": "Eternal Mists",
"hee.territory.cursed_library.name": "Cursed Library", "hee.territory.cursed_library.name": "Cursed Library",
"hee.territory.dragon_lair.name": "Dragon Lair", "hee.territory.dragon_lair.name": "Dragon Lair",
"hee.territory.ender_city.name": "Ender City",
"commands.hee.help.info": "shows command list", "hee.territory.eternal_mists.name": "Eternal Mists",
"commands.hee.help.failed": "Page must be between 1 and %s", "hee.territory.fallback.name": "Unknown",
"commands.hee.help.header.client": "§2--- Showing §aclient§2 commands, page %s§2 ---", "hee.territory.forgotten_tombs.name": "Forgotten Tombs",
"commands.hee.help.header.admin": "§2--- Showing §aadmin§2 commands, page %s §2of %s§2 ---", "hee.territory.hostile_pass.name": "Hostile Pass",
"commands.hee.help.header.debug": "§2--- Showing §adebug§2 commands, page %s §2of %s§2 ---", "hee.territory.lost_garden.name": "Lost Garden",
"commands.hee.help.footer.start": "§2--- Navigate to: §r", "hee.territory.obsidian_towers.name": "Obsidian Towers",
"commands.hee.help.footer.admin": "§a§nadmin commands", "hee.territory.the_hub.name": "The Hub",
"commands.hee.help.footer.prev": "previous page", "hee.territory.warded_mines.name": "Warded Mines",
"commands.hee.help.footer.middle": "§2 / §r", "item.hee.accumulation_table_core": "Accumulation Table Core",
"commands.hee.help.footer.next": "next page", "item.hee.alteration_nexus": "Alteration Nexus",
"commands.hee.help.footer.end": "§2 ---", "item.hee.amelior": "Amelior",
"item.hee.amulet_of_recovery": "Amulet of Recovery",
"commands.hee.causatum.info": "checks or triggers Ender Causatum stages", "item.hee.amulet_of_recovery.cost_error": "Error calculating Energy cost for Amulet of Recovery. Please check server logs for the full error and report it.",
"commands.hee.causatum.list": "Ender Causatum stages:", "item.hee.ancient_dust": "Ancient Dust",
"commands.hee.causatum.check": "Ender Causatum stage: %s", "item.hee.angry_enderman_spawn_egg": "Angry Enderman Spawn Egg",
"commands.hee.causatum.set": "Ender Causatum stage updated for %s player(s)", "item.hee.auricion": "Auricion",
"item.hee.binding_essence": "Binding Essence",
"commands.hee.infusions.info": "manipulates infusions on held item", "item.hee.blank_token": "Blank Token",
"commands.hee.infusions.reset_success": "Removed %s infusion(s)", "item.hee.blobby_spawn_egg": "Blobby Spawn Egg",
"commands.hee.infusions.add_success": "Added %s infusion", "item.hee.chorus_berry": "Chorus Berry",
"commands.hee.infusions.remove_success": "Removed %s infusion", "item.hee.compost": "Compost",
"commands.hee.infusions.no_held_item": "No item held in main hand", "item.hee.dirty_infernium_ingot": "Dirty Infernium Ingot",
"commands.hee.infusions.nothing_to_remove": "No infusions present on this item", "item.hee.dragon_scale": "Dragon Scale",
"commands.hee.infusions.not_applicable": "Infusion cannot be applied to this item", "item.hee.ectoplasm": "Ectoplasm",
"commands.hee.infusions.already_present": "Infusion is already present on this item", "item.hee.enchanted_claw": "Enchanted Claw",
"commands.hee.infusions.not_present": "Infusion is not present on this item", "item.hee.end_powder": "End Powder",
"item.hee.ender_eye_spawn_egg": "Ender Eye Spawn Egg",
"commands.hee.lootchest.info": "manipulates Loot Chests", "item.hee.ender_goo_bucket": "Ender Goo Bucket",
"commands.hee.lootchest.set_table_success": "Updated loot table", "item.hee.endermite_instability_spawn_egg": "Endermite (Instability) Spawn Egg",
"commands.hee.lootchest.remove_table_success": "Removed loot table", "item.hee.endium_ingot": "Endium Ingot",
"commands.hee.lootchest.reset_success": "Reset loot generated for %s player(s)", "item.hee.endium_nugget": "Endium Nugget",
"commands.hee.lootchest.table_not_found": "Loot table not found", "item.hee.energy_oracle": "Energy Oracle",
"commands.hee.lootchest.not_loot_chest": "No Loot Chest at the specified location", "item.hee.energy_receptacle": "Energy Receptacle",
"item.hee.energy_receptacle.tooltip.empty": "\u00A79Empty",
"commands.hee.token.info": "generates a Portal Token item", "item.hee.energy_receptacle.tooltip.holding": "\u00A79Holding \u00A73%s\u00A79 Energy",
"commands.hee.token.success": "Created Portal Token leading to %s", "item.hee.ethereum": "Ethereum",
"item.hee.experience_bottle.tooltip": "\u00A7a%s \u00A72experience",
"commands.hee.structure.info": "utilities for custom structures", "item.hee.experience_table_core": "Experience Table Core",
"commands.hee.testworld.info": "converts overworld into a test world", "item.hee.flint_and_infernium": "Flint and Infernium",
"item.hee.igneous_rock": "Igneous Rock",
"item.hee.infernium": "Infernium",
"item.hee.infernium_ingot": "Infernium Ingot",
"item.hee.infusion_table_core": "Infusion Table Core",
"item.hee.instability_orb": "Instability Orb",
"item.hee.knowledge_note": "Knowledge Note",
"item.hee.linking_gem": "Linking Gem",
"item.hee.obsidian_fragment": "Obsidian Fragment",
"item.hee.obsidian_rod": "Obsidian Rod",
"item.hee.portal_token.normal": "Portal Token",
"item.hee.portal_token.normal.concrete": "Portal Token (%s)",
"item.hee.portal_token.rare": "Rare Portal Token",
"item.hee.portal_token.rare.concrete": "Rare Portal Token (%s)",
"item.hee.portal_token.solitary": "Solitary Portal Token",
"item.hee.portal_token.solitary.concrete": "Solitary Portal Token (%s)",
"item.hee.portal_token.tooltip.activate": "\u00A76Right-click to activate",
"item.hee.portal_token.tooltip.advanced": "\u00A77Index: %s",
"item.hee.portal_token.tooltip.creative.generate": "\u00A76Hold and right-click to generate (creative)",
"item.hee.portal_token.tooltip.creative.teleport": "\u00A76Hold and right-click to teleport (creative)",
"item.hee.portal_token.tooltip.difficulty.boss": "\u00A77\u00AB\u00A75 Boss \u00A77\u00BB",
"item.hee.portal_token.tooltip.difficulty.hostile": "\u00A77\u00AB\u00A74 Hostile \u00A77\u00BB",
"item.hee.portal_token.tooltip.difficulty.neutral": "\u00A77\u00AB\u00A7e Neutral \u00A77\u00BB",
"item.hee.portal_token.tooltip.difficulty.peaceful": "\u00A77\u00AB\u00A72 Peaceful \u00A77\u00BB",
"item.hee.purified_ender_goo_bucket": "Purified Ender Goo Bucket",
"item.hee.purity_extract": "Purity Extract",
"item.hee.puzzle_medallion": "Puzzle Medallion",
"item.hee.revitalization_substance": "Revitalization Substance",
"item.hee.ring_of_hunger": "Ring of Hunger",
"item.hee.ring_of_preservation": "Ring of Preservation",
"item.hee.scale_of_freefall": "Scale of Freefall",
"item.hee.scorching_axe": "Scorching Axe",
"item.hee.scorching_pickaxe": "Scorching Pickaxe",
"item.hee.scorching_shovel": "Scorching Shovel",
"item.hee.scorching_sword": "Scorching Sword",
"item.hee.shulker_box.tooltip": "\u00A77Right-click to open",
"item.hee.spatial_dash_gem": "Spatial Dash Gem",
"item.hee.spiderling_spawn_egg": "Spiderling Spawn Egg",
"item.hee.stardust": "Stardust",
"item.hee.static_core": "Static Core",
"item.hee.table_link": "Table Link",
"item.hee.talisman_of_griefing": "Talisman of Griefing",
"item.hee.ticking_core": "Ticking Core",
"item.hee.trinket_pouch": "Trinket Pouch",
"item.hee.trinket_pouch.tooltip": "\u00A77Right-click to open",
"item.hee.undread_spawn_egg": "Undread Spawn Egg",
"item.hee.vampire_bat_spawn_egg": "Vampire Bat Spawn Egg",
"item.hee.void_bucket": "Void Bucket",
"item.hee.void_essence": "Void Essence",
"item.hee.void_miner": "Void Miner",
"item.hee.void_salad.double": "Void Void Salad",
"item.hee.void_salad.mega": "Mega Void Salad",
"item.hee.void_salad.single": "Void Salad",
"item.minecraft.lingering_potion.effect.banishment": "Lingering Potion of Banishment",
"item.minecraft.lingering_potion.effect.corruption": "Lingering Potion of Corruption",
"item.minecraft.lingering_potion.effect.purity": "Lingering Potion of Purity",
"item.minecraft.potion.effect.banishment": "Potion of Banishment",
"item.minecraft.potion.effect.corruption": "Potion of Corruption",
"item.minecraft.potion.effect.purity": "Potion of Purity",
"item.minecraft.splash_potion.effect.banishment": "Splash Potion of Banishment",
"item.minecraft.splash_potion.effect.corruption": "Splash Potion of Corruption",
"item.minecraft.splash_potion.effect.purity": "Splash Potion of Purity",
"item.minecraft.tipped_arrow.effect.banishment": "Arrow of Banishment",
"item.minecraft.tipped_arrow.effect.corruption": "Arrow of Corruption",
"item.minecraft.tipped_arrow.effect.purity": "Arrow of Purity",
"item.tooltip.hee.energy.level": "\u00A79Energy: \u00A73%s\u00A79 / \u00A73%s",
"item.tooltip.hee.energy.uses": "\u00A79Uses Left: \u00A73%s",
"item.tooltip.hee.table_core.tooltip": "\u00A77Minimum Tier: %s",
"item.tooltip.hee.trinket.in_slot.charged": "\u00A7aActive",
"item.tooltip.hee.trinket.in_slot.uncharged": "\u00A7cMust be recharged",
"item.tooltip.hee.trinket.not_in_slot.charged": "\u00A7cMust be placed in Trinket slot",
"item.tooltip.hee.trinket.not_in_slot.uncharged": "\u00A7cMust be charged and placed in Trinket slot",
"itemGroup.hee": "Hardcore Ender Expansion",
"subtitles.hee.ambient.forgotten_tombs.end_trigger": "Graves rattle", "subtitles.hee.ambient.forgotten_tombs.end_trigger": "Graves rattle",
"subtitles.hee.block.cauldron.brew": "Cauldron bubbles", "subtitles.hee.block.cauldron.brew": "Cauldron bubbles",
"subtitles.hee.block.death_flower.wither": "Death Flower withers", "subtitles.hee.block.death_flower.wither": "Death Flower withers",
"subtitles.hee.block.experience_gate.pickup": "Experience Gate charges",
"subtitles.hee.block.experience_gate.levelup": "Experience Gate dings", "subtitles.hee.block.experience_gate.levelup": "Experience Gate dings",
"subtitles.hee.block.jar_o_dust.shatter": "Jar o' Dust shatters", "subtitles.hee.block.experience_gate.pickup": "Experience Gate charges",
"subtitles.hee.block.igneous_plate.cool": "Igneous Plate cools", "subtitles.hee.block.igneous_plate.cool": "Igneous Plate cools",
"subtitles.hee.block.jar_o_dust.shatter": "Jar o' Dust shatters",
"subtitles.hee.block.miners_burial_altar.insert": "Puzzle Medallion descends", "subtitles.hee.block.miners_burial_altar.insert": "Puzzle Medallion descends",
"subtitles.hee.block.obsidian.land": "Obsidian landed", "subtitles.hee.block.obsidian.land": "Obsidian landed",
"subtitles.hee.block.puzzle_logic.click": "Puzzle Block clicks", "subtitles.hee.block.puzzle_logic.click": "Puzzle Block clicks",
"subtitles.hee.block.spawner.expire": "Spawner expires", "subtitles.hee.block.spawner.expire": "Spawner expires",
"subtitles.hee.item.puzzle_medallion.spawn": "Puzzle Medallion appears",
"subtitles.hee.item.revitalization_substance.use.success": "Revitalization Substance accepted",
"subtitles.hee.item.revitalization_substance.use.fail": "Revitalization Substance rejected",
"subtitles.hee.item.scale_of_freefall.use": "Scale of Freefall activates",
"subtitles.hee.item.ring_of_preservation.use": "Ring of Preservation mends",
"subtitles.hee.item.table_link.use.success": "Linking succeeds",
"subtitles.hee.item.table_link.use.fail": "Linking fails",
"subtitles.hee.entity.generic.teleport": "Something teleports", "subtitles.hee.entity.generic.teleport": "Something teleports",
"subtitles.hee.entity.igneous_rock.burn": "Igneous Rock burns", "subtitles.hee.entity.igneous_rock.burn": "Igneous Rock burns",
"subtitles.hee.entity.player.teleport": "Player teleports", "subtitles.hee.entity.player.teleport": "Player teleports",
"subtitles.hee.entity.revitalization_substance.heal": "Goo heals", "subtitles.hee.entity.revitalization_substance.heal": "Goo heals",
"subtitles.hee.entity.spatial_dash.expire": "Spatial Dash expires", "subtitles.hee.entity.spatial_dash.expire": "Spatial Dash expires",
"subtitles.hee.entity.token_holder.drop": "Portal Token drops", "subtitles.hee.entity.token_holder.drop": "Portal Token drops",
"subtitles.hee.item.puzzle_medallion.spawn": "Puzzle Medallion appears",
"subtitles.hee.item.revitalization_substance.use.fail": "Revitalization Substance rejected",
"subtitles.hee.item.revitalization_substance.use.success": "Revitalization Substance accepted",
"subtitles.hee.item.ring_of_preservation.use": "Ring of Preservation mends",
"subtitles.hee.item.scale_of_freefall.use": "Scale of Freefall activates",
"subtitles.hee.item.table_link.use.fail": "Linking fails",
"subtitles.hee.item.table_link.use.success": "Linking succeeds",
"subtitles.hee.mob.ender_eye.hit.fail": "Ender Eye resists damage", "subtitles.hee.mob.ender_eye.hit.fail": "Ender Eye resists damage",
"subtitles.hee.mob.enderman.first_kill": "A feeling of coldness fills your existence", "subtitles.hee.mob.enderman.first_kill": "A feeling of coldness fills your existence",
"subtitles.hee.mob.enderman.teleport.fail": "Enderman panics", "subtitles.hee.mob.enderman.teleport.fail": "Enderman panics",
"subtitles.hee.mob.enderman.teleport.out": "Enderman escapes", "subtitles.hee.mob.enderman.teleport.out": "Enderman escapes",
"subtitles.hee.mob.undread.hurt": "Undread hurts",
"subtitles.hee.mob.undread.death": "Undread dies",
"subtitles.hee.mob.undread.curse": "Undread curses", "subtitles.hee.mob.undread.curse": "Undread curses",
"subtitles.hee.mob.undread.fuse": "Undread smokes" "subtitles.hee.mob.undread.death": "Undread dies",
"subtitles.hee.mob.undread.fuse": "Undread smokes",
"subtitles.hee.mob.undread.hurt": "Undread hurts"
} }

View File

@@ -0,0 +1,7 @@
{
"parent": "minecraft:block/fire_floor0",
"textures": {
"particle": "hee:block/eternal_fire_0",
"fire": "hee:block/eternal_fire_0"
}
}

View File

@@ -0,0 +1,7 @@
{
"parent": "minecraft:block/fire_floor1",
"textures": {
"particle": "hee:block/eternal_fire_1",
"fire": "hee:block/eternal_fire_1"
}
}

View File

@@ -0,0 +1,7 @@
{
"parent": "minecraft:block/fire_side0",
"textures": {
"particle": "hee:block/eternal_fire_0",
"fire": "hee:block/eternal_fire_0"
}
}

View File

@@ -0,0 +1,7 @@
{
"parent": "minecraft:block/fire_side1",
"textures": {
"particle": "hee:block/eternal_fire_1",
"fire": "hee:block/eternal_fire_1"
}
}

View File

@@ -0,0 +1,7 @@
{
"parent": "minecraft:block/fire_side_alt0",
"textures": {
"particle": "hee:block/eternal_fire_0",
"fire": "hee:block/eternal_fire_0"
}
}

View File

@@ -0,0 +1,7 @@
{
"parent": "minecraft:block/fire_side_alt1",
"textures": {
"particle": "hee:block/eternal_fire_1",
"fire": "hee:block/eternal_fire_1"
}
}

View File

@@ -0,0 +1,7 @@
{
"parent": "minecraft:block/fire_up0",
"textures": {
"particle": "hee:block/eternal_fire_0",
"fire": "hee:block/eternal_fire_0"
}
}

View File

@@ -0,0 +1,7 @@
{
"parent": "minecraft:block/fire_up1",
"textures": {
"particle": "hee:block/eternal_fire_1",
"fire": "hee:block/eternal_fire_1"
}
}

View File

@@ -0,0 +1,7 @@
{
"parent": "minecraft:block/fire_up_alt0",
"textures": {
"particle": "hee:block/eternal_fire_0",
"fire": "hee:block/eternal_fire_0"
}
}

View File

@@ -0,0 +1,7 @@
{
"parent": "minecraft:block/fire_up_alt1",
"textures": {
"particle": "hee:block/eternal_fire_1",
"fire": "hee:block/eternal_fire_1"
}
}

View File

@@ -1,5 +1,4 @@
{ {
"parent": "minecraft:block/block",
"textures": { "textures": {
"particle": "hee:block/loot_chest_particle" "particle": "hee:block/loot_chest_particle"
} }

View File

@@ -1,6 +0,0 @@
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "minecraft:block/obsidian"
}
}

View File

@@ -1,3 +0,0 @@
{
"parent": "hee:block/corrupted_energy"
}

View File

@@ -1,3 +1,3 @@
{ {
"parent": "hee:block/obsidian_falling" "parent": "minecraft:block/obsidian"
} }

View File

@@ -7,6 +7,7 @@
"hee:obsidian_pillar", "hee:obsidian_pillar",
"hee:obsidian_smooth_lit", "hee:obsidian_smooth_lit",
"hee:obsidian_chiseled_lit", "hee:obsidian_chiseled_lit",
"hee:obsidian_pillar_lit" "hee:obsidian_pillar_lit",
"hee:obsidian_tower_top"
] ]
} }

View File

@@ -7,6 +7,7 @@
"hee:obsidian_pillar", "hee:obsidian_pillar",
"hee:obsidian_smooth_lit", "hee:obsidian_smooth_lit",
"hee:obsidian_chiseled_lit", "hee:obsidian_chiseled_lit",
"hee:obsidian_pillar_lit" "hee:obsidian_pillar_lit",
"hee:obsidian_tower_top"
] ]
} }

View File

@@ -0,0 +1,19 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "hee:dusty_stone_decoration"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View File

@@ -1,4 +1,12 @@
{ {
"replace": false, "replace": false,
"values": [] "values": [
"hee:potted_autumn_sapling_red",
"hee:potted_autumn_sapling_brown",
"hee:potted_autumn_sapling_orange",
"hee:potted_autumn_sapling_yellowgreen",
"hee:potted_death_flower",
"hee:potted_death_flower_healed",
"hee:potted_death_flower_withered"
]
} }

View File

@@ -1,4 +1,9 @@
{ {
"replace": false, "replace": false,
"values": [] "values": [
"hee:autumn_leaves_red",
"hee:autumn_leaves_brown",
"hee:autumn_leaves_orange",
"hee:autumn_leaves_yellowgreen"
]
} }

View File

@@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"hee:whitebark_log",
"hee:whitebark"
]
}

View File

@@ -1,4 +1,9 @@
{ {
"replace": false, "replace": false,
"values": [] "values": [
"hee:autumn_sapling_red",
"hee:autumn_sapling_brown",
"hee:autumn_sapling_orange",
"hee:autumn_sapling_yellowgreen"
]
} }

View File

@@ -1,4 +1,10 @@
{ {
"replace": false, "replace": false,
"values": [] "values": [
"hee:gloomrock_brick_slab",
"hee:gloomrock_smooth_slab",
"hee:dusty_stone_brick_slab",
"hee:dark_loam_slab",
"hee:whitebark_slab"
]
} }

View File

@@ -1,4 +1,10 @@
{ {
"replace": false, "replace": false,
"values": [] "values": [
"hee:gloomrock_brick_stairs",
"hee:gloomrock_smooth_stairs",
"hee:dusty_stone_brick_stairs",
"hee:obsidian_stairs",
"hee:whitebark_stairs"
]
} }

View File

@@ -1,4 +1,6 @@
{ {
"replace": false, "replace": false,
"values": [] "values": [
"hee:stone_brick_wall"
]
} }

View File

@@ -1,4 +1,9 @@
{ {
"replace": false, "replace": false,
"values": [] "values": [
"hee:autumn_leaves_red",
"hee:autumn_leaves_brown",
"hee:autumn_leaves_orange",
"hee:autumn_leaves_yellowgreen"
]
} }

View File

@@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"hee:whitebark_log",
"hee:whitebark"
]
}

View File

@@ -1,4 +1,9 @@
{ {
"replace": false, "replace": false,
"values": [] "values": [
"hee:autumn_sapling_red",
"hee:autumn_sapling_brown",
"hee:autumn_sapling_orange",
"hee:autumn_sapling_yellowgreen"
]
} }

View File

@@ -1,4 +1,10 @@
{ {
"replace": false, "replace": false,
"values": [] "values": [
"hee:gloomrock_brick_slab",
"hee:gloomrock_smooth_slab",
"hee:dusty_stone_brick_slab",
"hee:dark_loam_slab",
"hee:whitebark_slab"
]
} }

View File

@@ -1,4 +1,10 @@
{ {
"replace": false, "replace": false,
"values": [] "values": [
"hee:gloomrock_brick_stairs",
"hee:gloomrock_smooth_stairs",
"hee:dusty_stone_brick_stairs",
"hee:obsidian_stairs",
"hee:whitebark_stairs"
]
} }

View File

@@ -1,4 +1,6 @@
{ {
"replace": false, "replace": false,
"values": [] "values": [
"hee:stone_brick_wall"
]
} }

View File

@@ -1,15 +1,15 @@
package chylex.hee.datagen package chylex.hee.datagen
import chylex.hee.HEE import chylex.hee.HEE
import chylex.hee.datagen.client.BlockItemModels
import chylex.hee.datagen.client.BlockModels import chylex.hee.datagen.client.BlockModels
import chylex.hee.datagen.client.BlockStates import chylex.hee.datagen.client.BlockStates
import chylex.hee.datagen.client.ItemModels import chylex.hee.datagen.client.ItemModels
import chylex.hee.datagen.client.LangEnglish
import chylex.hee.datagen.server.BlockLootTables import chylex.hee.datagen.server.BlockLootTables
import chylex.hee.datagen.server.BlockTags import chylex.hee.datagen.server.BlockTags
import chylex.hee.datagen.server.ItemTags import chylex.hee.datagen.server.ItemTags
import chylex.hee.system.forge.SubscribeAllEvents import chylex.hee.util.forge.SubscribeAllEvents
import chylex.hee.system.forge.SubscribeEvent import net.minecraftforge.eventbus.api.SubscribeEvent
import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus.MOD import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus.MOD
import net.minecraftforge.fml.event.lifecycle.GatherDataEvent import net.minecraftforge.fml.event.lifecycle.GatherDataEvent
@@ -22,10 +22,10 @@ object DataGen {
with(e.generator) { with(e.generator) {
if (e.includeClient()) { if (e.includeClient()) {
addProvider(BlockStates(this, modid, helper))
addProvider(BlockModels(this, modid, helper)) addProvider(BlockModels(this, modid, helper))
addProvider(BlockItemModels(this, modid, helper)) addProvider(BlockStates(this, modid, helper))
addProvider(ItemModels(this, modid, helper)) addProvider(ItemModels(this, modid, helper))
addProvider(LangEnglish(this, modid))
} }
if (e.includeServer()) { if (e.includeServer()) {

View File

@@ -1,53 +1,14 @@
package chylex.hee.datagen package chylex.hee.datagen
import chylex.hee.HEE import chylex.hee.HEE
import chylex.hee.system.facades.Resource
import net.minecraft.block.Block
import net.minecraft.data.IDataProvider import net.minecraft.data.IDataProvider
import net.minecraft.item.Item
import net.minecraft.util.IItemProvider
import net.minecraft.util.ResourceLocation
import net.minecraftforge.client.model.generators.ModelBuilder import net.minecraftforge.client.model.generators.ModelBuilder
import net.minecraftforge.client.model.generators.ModelProvider import net.minecraftforge.client.model.generators.ModelProvider
import net.minecraftforge.registries.IForgeRegistryEntry
val IForgeRegistryEntry<*>.path: String
get() = registryName!!.path
val IForgeRegistryEntry<*>.isVanilla
get() = Resource.isVanilla(registryName!!)
val IItemProvider.r
get() = when(this) {
is Block -> resource("block/" + this.path, this.isVanilla)
is Item -> resource("item/" + this.path, this.isVanilla)
else -> throw IllegalArgumentException()
}
fun IItemProvider.r(suffix: String): ResourceLocation {
return when(this) {
is Block -> resource("block/" + this.path + suffix, this.isVanilla)
is Item -> resource("item/" + this.path + suffix, this.isVanilla)
else -> throw IllegalArgumentException()
}
}
fun resource(path: String, vanilla: Boolean): ResourceLocation {
return if (vanilla) Resource.Vanilla(path) else Resource.Custom(path)
}
inline fun <T : IDataProvider> T?.safeUnit(callback: T.() -> Unit) { inline fun <T : IDataProvider> T?.safeUnit(callback: T.() -> Unit) {
try { try {
this?.callback() this?.callback()
} catch(e: Exception) { } catch (e: Exception) {
HEE.log.error("[DataGen] " + e.message)
}
}
inline fun <T : ModelBuilder<T>, U : ModelProvider<T>> U?.safeUnit(callback: U.() -> Unit) {
try {
this?.callback()
} catch(e: Exception) {
HEE.log.error("[DataGen] " + e.message) HEE.log.error("[DataGen] " + e.message)
} }
} }
@@ -55,7 +16,7 @@ inline fun <T : ModelBuilder<T>, U : ModelProvider<T>> U?.safeUnit(callback: U.(
inline fun <T : ModelBuilder<T>, U : ModelProvider<T>> U?.safe(callback: U.() -> T): T? { inline fun <T : ModelBuilder<T>, U : ModelProvider<T>> U?.safe(callback: U.() -> T): T? {
return try { return try {
this?.callback() this?.callback()
} catch(e: Exception) { } catch (e: Exception) {
HEE.log.error("[DataGen] " + e.message) HEE.log.error("[DataGen] " + e.message)
null null
} }
@@ -64,12 +25,8 @@ inline fun <T : ModelBuilder<T>, U : ModelProvider<T>> U?.safe(callback: U.() ->
inline fun <T : ModelBuilder<T>> T?.then(callback: T.() -> T): T? { inline fun <T : ModelBuilder<T>> T?.then(callback: T.() -> T): T? {
return try { return try {
this?.callback() this?.callback()
} catch(e: Exception) { } catch (e: Exception) {
HEE.log.error("[DataGen] " + e.message) HEE.log.error("[DataGen] " + e.message)
null null
} }
} }
class Callback<T>(val item: T, val suffix: String, val path: String) {
override fun toString() = path
}

View File

@@ -1,115 +0,0 @@
package chylex.hee.datagen.client
import chylex.hee.datagen.client.util.block
import chylex.hee.datagen.client.util.multi
import chylex.hee.datagen.client.util.override
import chylex.hee.datagen.client.util.parent
import chylex.hee.datagen.client.util.simple
import chylex.hee.datagen.r
import chylex.hee.datagen.then
import chylex.hee.init.ModBlocks
import chylex.hee.system.facades.Resource
import net.minecraft.block.Blocks
import net.minecraft.data.DataGenerator
import net.minecraftforge.client.model.generators.ItemModelProvider
import net.minecraftforge.common.data.ExistingFileHelper
class BlockItemModels(generator: DataGenerator, modid: String, existingFileHelper: ExistingFileHelper) : ItemModelProvider(generator, modid, existingFileHelper) {
override fun registerModels() {
// Blocks: Building (Uncategorized)
parent(ModBlocks.STONE_BRICK_WALL, Resource.Custom("block/stone_brick_wall_inventory"), checkExistence = false)
parent(ModBlocks.INFUSED_GLASS, Resource.Custom("block/infused_glass_c0"))
block(ModBlocks.ENDERSOL)
block(ModBlocks.HUMUS)
// Blocks: Building (Gloomrock)
simple(ModBlocks.GLOOMTORCH.asItem())
// Blocks: Building (Grave Dirt)
parent(ModBlocks.GRAVE_DIRT_PLAIN, Resource.Custom("block/grave_dirt_low"))
parent(ModBlocks.GRAVE_DIRT_LOOT, Resource.Custom("block/grave_dirt_loot_4"), checkExistence = false)
parent(ModBlocks.GRAVE_DIRT_SPIDERLING, Resource.Custom("block/grave_dirt_low"))
// Blocks: Interactive (Storage)
parent(ModBlocks.DARK_CHEST, Blocks.CHEST.asItem().r)
parent(ModBlocks.LOOT_CHEST, Blocks.CHEST.asItem().r)
// Blocks: Interactive (Puzzle)
parent(ModBlocks.PUZZLE_PLAIN, Resource.Custom("block/puzzle_base_active"), checkExistence = false)
parent(ModBlocks.PUZZLE_BURST_3, Resource.Custom("block/puzzle_block_inventory")).then {
texture("top", Resource.Custom("block/puzzle_overlay_burst_3"))
}
parent(ModBlocks.PUZZLE_BURST_5, Resource.Custom("block/puzzle_block_inventory")).then {
texture("top", Resource.Custom("block/puzzle_overlay_burst_5"))
}
parent(ModBlocks.PUZZLE_REDIRECT_1, Resource.Custom("block/puzzle_block_inventory")).then {
texture("top", Resource.Custom("block/puzzle_overlay_redirect_1n"))
}
parent(ModBlocks.PUZZLE_REDIRECT_2, Resource.Custom("block/puzzle_block_inventory")).then {
texture("top", Resource.Custom("block/puzzle_overlay_redirect_2ns"))
}
parent(ModBlocks.PUZZLE_REDIRECT_4, Resource.Custom("block/puzzle_block_inventory")).then {
texture("top", Resource.Custom("block/puzzle_overlay_redirect_4"))
}
parent(ModBlocks.PUZZLE_TELEPORT, Resource.Custom("block/puzzle_block_inventory")).then {
texture("top", Resource.Custom("block/puzzle_overlay_teleport"))
}
// Blocks: Interactive (Gates)
block(ModBlocks.EXPERIENCE_GATE)
// Blocks: Interactive (Uncategorized)
simple(ModBlocks.IGNEOUS_PLATE)
simple(ModBlocks.ENHANCED_BREWING_STAND.asItem())
// Blocks: Decorative (Trees)
simple(ModBlocks.WHITEBARK_SAPLING_AUTUMN_RED)
simple(ModBlocks.WHITEBARK_SAPLING_AUTUMN_BROWN)
simple(ModBlocks.WHITEBARK_SAPLING_AUTUMN_ORANGE)
simple(ModBlocks.WHITEBARK_SAPLING_AUTUMN_YELLOWGREEN)
// Blocks: Decorative (Plants)
simple(ModBlocks.DEATH_FLOWER_DECAYING, ModBlocks.DEATH_FLOWER_DECAYING.r("_1")).then {
override(ModBlocks.DEATH_FLOWER_DECAYING.asItem().r("_2")) { predicate(Resource.Custom("death_level"), 4F) }
override(ModBlocks.DEATH_FLOWER_DECAYING.asItem().r("_3")) { predicate(Resource.Custom("death_level"), 8F) }
override(ModBlocks.DEATH_FLOWER_DECAYING.asItem().r("_4")) { predicate(Resource.Custom("death_level"), 12F) }
}
multi(ModBlocks.DEATH_FLOWER_DECAYING, Resource.Vanilla("item/generated"), 1..4) {
texture("layer0", Resource.Custom("block/" + it.path))
}
simple(ModBlocks.DEATH_FLOWER_HEALED)
simple(ModBlocks.DEATH_FLOWER_WITHERED)
// Blocks: Decorative (Uncategorized)
simple(ModBlocks.ANCIENT_COBWEB)
simple(ModBlocks.DRY_VINES, Blocks.VINE.r)
block(ModBlocks.ENDERMAN_HEAD)
// Blocks: Energy
simple(ModBlocks.ENERGY_CLUSTER)
// Blocks: Tables
block(ModBlocks.TABLE_PEDESTAL)
}
}

View File

@@ -1,220 +1,74 @@
package chylex.hee.datagen.client package chylex.hee.datagen.client
import chylex.hee.datagen.client.util.cauldron
import chylex.hee.datagen.client.util.cross
import chylex.hee.datagen.client.util.cube
import chylex.hee.datagen.client.util.cubeBottomTop import chylex.hee.datagen.client.util.cubeBottomTop
import chylex.hee.datagen.client.util.cubeColumn import chylex.hee.datagen.client.util.cubeColumn
import chylex.hee.datagen.client.util.flowerPot
import chylex.hee.datagen.client.util.leaves
import chylex.hee.datagen.client.util.multi
import chylex.hee.datagen.client.util.parent import chylex.hee.datagen.client.util.parent
import chylex.hee.datagen.client.util.particle import chylex.hee.datagen.client.util.particle
import chylex.hee.datagen.client.util.portalFrame import chylex.hee.datagen.client.util.portalFrame
import chylex.hee.datagen.client.util.simple import chylex.hee.datagen.client.util.simple
import chylex.hee.datagen.client.util.suffixed import chylex.hee.datagen.client.util.suffixed
import chylex.hee.datagen.client.util.table import chylex.hee.datagen.client.util.table
import chylex.hee.datagen.client.util.wall
import chylex.hee.datagen.r
import chylex.hee.datagen.then import chylex.hee.datagen.then
import chylex.hee.game.Resource.location
import chylex.hee.game.block.BlockAbstractTable
import chylex.hee.game.block.IHeeBlock
import chylex.hee.game.block.properties.BlockModel
import chylex.hee.game.block.properties.BlockModel.CubeBottomTop
import chylex.hee.game.block.properties.BlockModel.CubeColumn
import chylex.hee.game.block.properties.BlockModel.Fluid
import chylex.hee.game.block.properties.BlockModel.FromParent
import chylex.hee.game.block.properties.BlockModel.Manual
import chylex.hee.game.block.properties.BlockModel.Multi
import chylex.hee.game.block.properties.BlockModel.NoAmbientOcclusion
import chylex.hee.game.block.properties.BlockModel.Parent
import chylex.hee.game.block.properties.BlockModel.ParticleOnly
import chylex.hee.game.block.properties.BlockModel.PortalFrame
import chylex.hee.game.block.properties.BlockModel.SimpleBlockModel
import chylex.hee.game.block.properties.BlockModel.Suffixed
import chylex.hee.game.block.properties.BlockModel.Table
import chylex.hee.game.block.properties.BlockModel.WithTextures
import chylex.hee.init.ModBlocks import chylex.hee.init.ModBlocks
import chylex.hee.system.facades.Resource import net.minecraft.block.Block
import net.minecraft.block.Blocks
import net.minecraft.data.DataGenerator import net.minecraft.data.DataGenerator
import net.minecraftforge.client.model.generators.BlockModelBuilder
import net.minecraftforge.client.model.generators.BlockModelProvider import net.minecraftforge.client.model.generators.BlockModelProvider
import net.minecraftforge.common.data.ExistingFileHelper import net.minecraftforge.common.data.ExistingFileHelper
class BlockModels(generator: DataGenerator, modid: String, existingFileHelper: ExistingFileHelper) : BlockModelProvider(generator, modid, existingFileHelper) { class BlockModels(generator: DataGenerator, modid: String, existingFileHelper: ExistingFileHelper) : BlockModelProvider(generator, modid, existingFileHelper) {
override fun registerModels() { override fun registerModels() {
for (block in ModBlocks.ALL) {
// Blocks: Building (Uncategorized) (block as? IHeeBlock)?.model?.let { registerModel(block, it.blockModel) { builder -> builder } }
wall(ModBlocks.STONE_BRICK_WALL, Blocks.STONE_BRICKS.r)
simple(ModBlocks.STONE_BRICK_WALL.suffixed("_inventory"), Resource.Vanilla("block/wall_inventory"), "wall", Blocks.STONE_BRICKS.r)
cubeColumn(ModBlocks.ENDERSOL)
cubeBottomTop(ModBlocks.ENDERSOL.suffixed("_merge_1"), ModBlocks.ENDERSOL.r("_merge_1"), Blocks.END_STONE.r, ModBlocks.ENDERSOL.r("_top"))
cubeBottomTop(ModBlocks.ENDERSOL.suffixed("_merge_2"), ModBlocks.ENDERSOL.r("_merge_2"), Blocks.END_STONE.r, ModBlocks.ENDERSOL.r("_top"))
cube(ModBlocks.HUMUS)
cubeBottomTop(ModBlocks.HUMUS.suffixed("_merge"), ModBlocks.HUMUS.r("_merge"), ModBlocks.ENDERSOL.r("_top"), ModBlocks.HUMUS.r)
// Blocks: Building (Obsidian)
cube(ModBlocks.OBSIDIAN_FALLING, Blocks.OBSIDIAN.r)
// Blocks: Building (End Stone)
cubeBottomTop(ModBlocks.END_STONE_INFESTED, bottom = Blocks.END_STONE.r).then {
texture("particle", ModBlocks.END_STONE_INFESTED.r("_top"))
}
cubeBottomTop(ModBlocks.END_STONE_BURNED, bottom = Blocks.END_STONE.r).then {
texture("particle", ModBlocks.END_STONE_BURNED.r("_top"))
}
cubeBottomTop(ModBlocks.END_STONE_ENCHANTED, bottom = Blocks.END_STONE.r).then {
texture("particle", ModBlocks.END_STONE_ENCHANTED.r("_top"))
}
// Blocks: Building (Grave Dirt)
cube(ModBlocks.GRAVE_DIRT_PLAIN.suffixed("_full"), ModBlocks.GRAVE_DIRT_PLAIN.r).then {
texture("particle", ModBlocks.GRAVE_DIRT_PLAIN.r)
}
multi(ModBlocks.GRAVE_DIRT_LOOT, Resource.Custom("block/grave_dirt_low"), 1..6) {
texture("top", Resource.Custom("block/$it"))
}
// Blocks: Building (Wood)
cube(ModBlocks.WHITEBARK, ModBlocks.WHITEBARK_LOG.r)
// Blocks: Fluids
particle(ModBlocks.ENDER_GOO, ModBlocks.ENDER_GOO.r("_still"))
particle(ModBlocks.PURIFIED_ENDER_GOO, ModBlocks.PURIFIED_ENDER_GOO.r("_still"))
cauldron(ModBlocks.CAULDRON_ENDER_GOO, ModBlocks.ENDER_GOO.r("_still"))
cauldron(ModBlocks.CAULDRON_PURIFIED_ENDER_GOO, ModBlocks.PURIFIED_ENDER_GOO.r("_still"))
cauldron(ModBlocks.CAULDRON_DRAGONS_BREATH, Resource.Custom("block/dragons_breath_still"))
// Blocks: Interactive (Storage)
particle(ModBlocks.DARK_CHEST, ModBlocks.GLOOMROCK_SMOOTH.r)
parent(ModBlocks.LOOT_CHEST, Resource.Vanilla("block/block")).then {
texture("particle", ModBlocks.LOOT_CHEST.r("_particle"))
}
// Blocks: Interactive (Puzzle)
arrayOf("active", "disabled", "inactive").forEach {
parent("puzzle_base_$it", Resource.Vanilla("block/cube_all")).then {
texture("all", Resource.Custom("block/puzzle_base_$it"))
} }
} }
arrayOf("burst_3", "burst_5", "redirect_1e", "redirect_1n", "redirect_1s", "redirect_1w", "redirect_2ew", "redirect_2ns", "redirect_4", "teleport").forEach { private fun registerModel(block: Block, model: BlockModel, callback: (BlockModelBuilder) -> BlockModelBuilder) {
parent("puzzle_overlay_$it", Resource.Custom("block/puzzle_overlay")).then { when (model) {
texture("overlay", Resource.Custom("block/puzzle_overlay_$it")) is SimpleBlockModel -> simple(block, model.parent, model.textureName, model.textureLocation ?: block.location)?.then(callback)
is CubeBottomTop -> cubeBottomTop(block, model.side ?: block.location("_side"), model.bottom ?: block.location("_bottom"), model.top ?: block.location("_top"))?.then(callback)
is PortalFrame -> portalFrame(block, model.frameBlock.location("_side"), model.frameBlock.location("_top_" + model.topSuffix))?.then(callback)
is ParticleOnly -> particle(block, model.particle)?.then(callback)
is Parent -> parent(model.name, model.parent)?.then(callback)
is FromParent -> parent(block, model.parent)?.then(callback)
is Suffixed -> registerModel(block.suffixed(model.suffix), model.wrapped, callback)
is WithTextures -> registerModel(block, model.baseModel) {
model.textures.entries.fold(callback(it)) { builder, (name, location) -> builder.texture(name, location) }
}
is NoAmbientOcclusion -> registerModel(block, model.baseModel) {
callback(it).ao(false)
}
is Multi -> {
for (innerModel in model.models) {
registerModel(block, innerModel, callback)
} }
} }
// Blocks: Interactive (Gates) CubeColumn -> cubeColumn(block)?.then(callback)
Table -> table(block as BlockAbstractTable)?.then(callback)
cubeBottomTop(ModBlocks.EXPERIENCE_GATE, top = ModBlocks.EXPERIENCE_GATE.r("_bottom")) Fluid -> particle(block, block.location("_still"))?.then(callback)
Manual -> return
multi(ModBlocks.EXPERIENCE_GATE, ModBlocks.EXPERIENCE_GATE.r, arrayOf("_rd1", "_rd2", "_ud")) {
texture("top", Resource.Custom("block/experience_gate_top" + it.suffix))
} }
cubeBottomTop(ModBlocks.EXPERIENCE_GATE_CONTROLLER, ModBlocks.EXPERIENCE_GATE.r("_side"), ModBlocks.EXPERIENCE_GATE.r("_bottom"), ModBlocks.EXPERIENCE_GATE.r("_top_controller"))
// Blocks: Interactive (Uncategorized)
cubeBottomTop(ModBlocks.INFUSED_TNT, Blocks.TNT.r("_side"), Blocks.TNT.r("_bottom"), Blocks.TNT.r("_top"))
particle(ModBlocks.IGNEOUS_PLATE, ModBlocks.IGNEOUS_PLATE.r)
parent(ModBlocks.ENHANCED_BREWING_STAND, Blocks.BREWING_STAND.r).then {
texture("particle", Blocks.BREWING_STAND.r)
texture("base", Blocks.BREWING_STAND.r("_base"))
texture("stand", ModBlocks.ENHANCED_BREWING_STAND.r)
}
// Blocks: Ores
parent(ModBlocks.STARDUST_ORE, Resource.Custom("block/cube_overlay")).then {
texture("particle", ModBlocks.STARDUST_ORE.r("_particle"))
texture("base", Blocks.END_STONE.r)
}
// Blocks: Decorative (Trees)
cross(ModBlocks.WHITEBARK_SAPLING_AUTUMN_RED)
cross(ModBlocks.WHITEBARK_SAPLING_AUTUMN_BROWN)
cross(ModBlocks.WHITEBARK_SAPLING_AUTUMN_ORANGE)
cross(ModBlocks.WHITEBARK_SAPLING_AUTUMN_YELLOWGREEN)
leaves(ModBlocks.WHITEBARK_LEAVES_AUTUMN_RED)
leaves(ModBlocks.WHITEBARK_LEAVES_AUTUMN_BROWN)
leaves(ModBlocks.WHITEBARK_LEAVES_AUTUMN_ORANGE)
leaves(ModBlocks.WHITEBARK_LEAVES_AUTUMN_YELLOWGREEN)
flowerPot(ModBlocks.POTTED_WHITEBARK_SAPLING_AUTUMN_RED, ModBlocks.WHITEBARK_SAPLING_AUTUMN_RED)
flowerPot(ModBlocks.POTTED_WHITEBARK_SAPLING_AUTUMN_BROWN, ModBlocks.WHITEBARK_SAPLING_AUTUMN_BROWN)
flowerPot(ModBlocks.POTTED_WHITEBARK_SAPLING_AUTUMN_ORANGE, ModBlocks.WHITEBARK_SAPLING_AUTUMN_ORANGE)
flowerPot(ModBlocks.POTTED_WHITEBARK_SAPLING_AUTUMN_YELLOWGREEN, ModBlocks.WHITEBARK_SAPLING_AUTUMN_YELLOWGREEN)
// Blocks: Decorative (Plants)
multi(ModBlocks.DEATH_FLOWER_DECAYING, Resource.Vanilla("block/cross"), 1..4) {
texture("cross", Resource.Custom("block/$it"))
}
cross(ModBlocks.DEATH_FLOWER_HEALED)
cross(ModBlocks.DEATH_FLOWER_WITHERED)
multi(ModBlocks.POTTED_DEATH_FLOWER_DECAYING, Resource.Vanilla("block/flower_pot_cross"), 1..4) {
texture("plant", Resource.Custom("block/death_flower" + it.suffix))
}
flowerPot(ModBlocks.POTTED_DEATH_FLOWER_HEALED, ModBlocks.DEATH_FLOWER_HEALED)
flowerPot(ModBlocks.POTTED_DEATH_FLOWER_WITHERED, ModBlocks.DEATH_FLOWER_WITHERED)
// Blocks: Decorative (Uncategorized)
cross(ModBlocks.ANCIENT_COBWEB)
// Blocks: Portals
portalFrame(ModBlocks.END_PORTAL_FRAME, ModBlocks.END_PORTAL_FRAME.r("_side"), ModBlocks.END_PORTAL_FRAME.r("_top_plain"))
portalFrame(ModBlocks.END_PORTAL_ACCEPTOR, ModBlocks.END_PORTAL_FRAME.r("_side"), ModBlocks.END_PORTAL_FRAME.r("_top_acceptor"))
portalFrame(ModBlocks.VOID_PORTAL_FRAME, ModBlocks.VOID_PORTAL_FRAME.r("_side"), ModBlocks.VOID_PORTAL_FRAME.r("_top_plain"))
portalFrame(ModBlocks.VOID_PORTAL_STORAGE, ModBlocks.VOID_PORTAL_FRAME.r("_side"), ModBlocks.VOID_PORTAL_FRAME.r("_top_storage"))
portalFrame(ModBlocks.VOID_PORTAL_FRAME_CRAFTED, ModBlocks.VOID_PORTAL_FRAME.r("_side"), ModBlocks.VOID_PORTAL_FRAME.r("_top_plain"))
portalFrame(ModBlocks.VOID_PORTAL_STORAGE_CRAFTED, ModBlocks.VOID_PORTAL_FRAME.r("_side"), ModBlocks.VOID_PORTAL_FRAME.r("_top_storage"))
// Blocks: Energy
cross(ModBlocks.CORRUPTED_ENERGY, Blocks.BARRIER.asItem().r).then { ao(false) }
// Blocks: Tables
for(tier in 1..3) {
parent("table_tier_$tier", Resource.Custom("block/table")).then {
texture("particle", "hee:block/table_base")
texture("bottom", "hee:block/table_base")
texture("top", "hee:block/table_base")
texture("side", "hee:block/table_base_side_$tier")
}
}
parent(ModBlocks.TABLE_BASE_TIER_1, Resource.Custom("block/table_tier_1")).then {
Resource.Custom("block/transparent").let {
texture("overlay_top", it)
texture("overlay_side", it)
}
}
parent(ModBlocks.TABLE_BASE_TIER_2, Resource.Custom("block/table_tier_2")).then {
Resource.Custom("block/transparent").let {
texture("overlay_top", it)
texture("overlay_side", it)
}
}
parent(ModBlocks.TABLE_BASE_TIER_3, Resource.Custom("block/table_tier_3")).then {
Resource.Custom("block/transparent").let {
texture("overlay_top", it)
texture("overlay_side", it)
}
}
table(ModBlocks.ACCUMULATION_TABLE_TIER_1)
table(ModBlocks.ACCUMULATION_TABLE_TIER_2)
table(ModBlocks.ACCUMULATION_TABLE_TIER_3)
table(ModBlocks.EXPERIENCE_TABLE_TIER_1)
table(ModBlocks.EXPERIENCE_TABLE_TIER_2)
table(ModBlocks.EXPERIENCE_TABLE_TIER_3)
table(ModBlocks.INFUSION_TABLE_TIER_1)
table(ModBlocks.INFUSION_TABLE_TIER_2)
table(ModBlocks.INFUSION_TABLE_TIER_3)
} }
} }

View File

@@ -1,191 +1,53 @@
package chylex.hee.datagen.client package chylex.hee.datagen.client
import chylex.hee.datagen.client.util.cube import chylex.hee.datagen.client.util.cauldron
import chylex.hee.datagen.client.util.log import chylex.hee.datagen.client.util.log
import chylex.hee.datagen.client.util.pillar import chylex.hee.datagen.client.util.pillar
import chylex.hee.datagen.client.util.simpleStateAndItem
import chylex.hee.datagen.client.util.simpleStateOnly import chylex.hee.datagen.client.util.simpleStateOnly
import chylex.hee.datagen.client.util.slab import chylex.hee.datagen.client.util.slab
import chylex.hee.datagen.client.util.stairs import chylex.hee.datagen.client.util.stairs
import chylex.hee.datagen.r import chylex.hee.datagen.client.util.wall
import chylex.hee.game.block.IHeeBlock
import chylex.hee.game.block.properties.BlockStatePreset
import chylex.hee.game.block.properties.BlockStatePreset.Cauldron
import chylex.hee.game.block.properties.BlockStatePreset.Log
import chylex.hee.game.block.properties.BlockStatePreset.None
import chylex.hee.game.block.properties.BlockStatePreset.Pillar
import chylex.hee.game.block.properties.BlockStatePreset.PillarFrom
import chylex.hee.game.block.properties.BlockStatePreset.Simple
import chylex.hee.game.block.properties.BlockStatePreset.SimpleFrom
import chylex.hee.game.block.properties.BlockStatePreset.Slab
import chylex.hee.game.block.properties.BlockStatePreset.Stairs
import chylex.hee.game.block.properties.BlockStatePreset.Wall
import chylex.hee.init.ModBlocks import chylex.hee.init.ModBlocks
import net.minecraft.block.Blocks import net.minecraft.block.Block
import net.minecraft.block.RotatedPillarBlock
import net.minecraft.block.SlabBlock
import net.minecraft.block.StairsBlock
import net.minecraft.block.WallBlock
import net.minecraft.data.DataGenerator import net.minecraft.data.DataGenerator
import net.minecraftforge.client.model.generators.BlockStateProvider import net.minecraftforge.client.model.generators.BlockStateProvider
import net.minecraftforge.common.data.ExistingFileHelper import net.minecraftforge.common.data.ExistingFileHelper
class BlockStates(generator: DataGenerator, modid: String, existingFileHelper: ExistingFileHelper) : BlockStateProvider(generator, modid, existingFileHelper) { class BlockStates(generator: DataGenerator, modid: String, existingFileHelper: ExistingFileHelper) : BlockStateProvider(generator, modid, existingFileHelper) {
override fun registerStatesAndModels() { override fun registerStatesAndModels() {
for (block in ModBlocks.ALL) {
(block as? IHeeBlock)?.model?.let { registerState(block, it.blockState) }
}
}
// Blocks: Building (Uncategorized) private fun registerState(block: Block, model: BlockStatePreset) {
when (model) {
cube(ModBlocks.ETHEREAL_LANTERN) None -> return
cube(ModBlocks.VANTABLOCK) Simple -> simpleStateOnly(block)
cube(ModBlocks.ENDIUM_BLOCK) is SimpleFrom -> simpleStateOnly(block, model.modelBlock)
Pillar -> pillar(block as RotatedPillarBlock)
// Blocks: Building (Gloomrock) is PillarFrom -> pillar(block as RotatedPillarBlock, model.modelBlock)
is Stairs -> stairs(block as StairsBlock, model.fullBlock, model.side)
cube(ModBlocks.GLOOMROCK) is Slab -> slab(block as SlabBlock, model.fullBlock, model.side)
cube(ModBlocks.GLOOMROCK_BRICKS) is Wall -> wall(block as WallBlock, model.fullBlock)
stairs(ModBlocks.GLOOMROCK_BRICK_STAIRS, ModBlocks.GLOOMROCK_BRICKS) is Cauldron -> cauldron(block, model.fluidTexture)
slab(ModBlocks.GLOOMROCK_BRICK_SLAB, ModBlocks.GLOOMROCK_BRICKS) Log -> log(block as RotatedPillarBlock)
cube(ModBlocks.GLOOMROCK_SMOOTH) }
stairs(ModBlocks.GLOOMROCK_SMOOTH_STAIRS, ModBlocks.GLOOMROCK_SMOOTH, side = ModBlocks.GLOOMROCK_SMOOTH_SLAB.r("_side"))
slab(ModBlocks.GLOOMROCK_SMOOTH_SLAB, ModBlocks.GLOOMROCK_SMOOTH, side = ModBlocks.GLOOMROCK_SMOOTH_SLAB.r("_side"))
cube(ModBlocks.GLOOMROCK_SMOOTH_RED)
cube(ModBlocks.GLOOMROCK_SMOOTH_ORANGE)
cube(ModBlocks.GLOOMROCK_SMOOTH_YELLOW)
cube(ModBlocks.GLOOMROCK_SMOOTH_GREEN)
cube(ModBlocks.GLOOMROCK_SMOOTH_CYAN)
cube(ModBlocks.GLOOMROCK_SMOOTH_BLUE)
cube(ModBlocks.GLOOMROCK_SMOOTH_PURPLE)
cube(ModBlocks.GLOOMROCK_SMOOTH_MAGENTA)
cube(ModBlocks.GLOOMROCK_SMOOTH_WHITE)
// Blocks: Building (Dusty Stone)
cube(ModBlocks.DUSTY_STONE)
cube(ModBlocks.DUSTY_STONE_CRACKED)
cube(ModBlocks.DUSTY_STONE_DAMAGED)
cube(ModBlocks.DUSTY_STONE_BRICKS)
cube(ModBlocks.DUSTY_STONE_CRACKED_BRICKS)
cube(ModBlocks.DUSTY_STONE_DECORATION)
stairs(ModBlocks.DUSTY_STONE_BRICK_STAIRS, ModBlocks.DUSTY_STONE_BRICKS)
slab(ModBlocks.DUSTY_STONE_BRICK_SLAB, ModBlocks.DUSTY_STONE_BRICKS)
// Blocks: Building (Obsidian)
stairs(ModBlocks.OBSIDIAN_STAIRS, Blocks.OBSIDIAN)
simpleStateAndItem(ModBlocks.OBSIDIAN_FALLING)
cube(ModBlocks.OBSIDIAN_SMOOTH)
cube(ModBlocks.OBSIDIAN_CHISELED)
pillar(ModBlocks.OBSIDIAN_PILLAR)
cube(ModBlocks.OBSIDIAN_SMOOTH_LIT, ModBlocks.OBSIDIAN_SMOOTH)
cube(ModBlocks.OBSIDIAN_CHISELED_LIT, ModBlocks.OBSIDIAN_CHISELED)
pillar(ModBlocks.OBSIDIAN_PILLAR_LIT, ModBlocks.OBSIDIAN_PILLAR)
cube(ModBlocks.OBSIDIAN_TOWER_TOP, ModBlocks.OBSIDIAN_CHISELED)
// Blocks: Building (End Stone)
simpleStateAndItem(ModBlocks.END_STONE_INFESTED)
simpleStateAndItem(ModBlocks.END_STONE_BURNED)
simpleStateAndItem(ModBlocks.END_STONE_ENCHANTED)
// Blocks: Building (Dark Loam)
cube(ModBlocks.DARK_LOAM)
slab(ModBlocks.DARK_LOAM_SLAB, ModBlocks.DARK_LOAM)
// Blocks: Building (Wood)
log(ModBlocks.WHITEBARK_LOG)
simpleStateAndItem(ModBlocks.WHITEBARK)
cube(ModBlocks.WHITEBARK_PLANKS)
stairs(ModBlocks.WHITEBARK_STAIRS, ModBlocks.WHITEBARK_PLANKS)
slab(ModBlocks.WHITEBARK_SLAB, ModBlocks.WHITEBARK_PLANKS)
// Blocks: Building (Miner's Burial)
cube(ModBlocks.MINERS_BURIAL_BLOCK_PLAIN)
cube(ModBlocks.MINERS_BURIAL_BLOCK_CHISELED)
pillar(ModBlocks.MINERS_BURIAL_BLOCK_PILLAR)
cube(ModBlocks.MINERS_BURIAL_BLOCK_JAIL)
simpleStateAndItem(ModBlocks.MINERS_BURIAL_ALTAR)
// Blocks: Fluids
simpleStateOnly(ModBlocks.ENDER_GOO)
simpleStateOnly(ModBlocks.PURIFIED_ENDER_GOO)
// Blocks: Interactive (Storage)
simpleStateOnly(ModBlocks.JAR_O_DUST)
simpleStateOnly(ModBlocks.DARK_CHEST)
simpleStateOnly(ModBlocks.LOOT_CHEST)
// Blocks: Interactive (Puzzle)
cube(ModBlocks.PUZZLE_WALL)
// Blocks: Interactive (Gates)
simpleStateAndItem(ModBlocks.EXPERIENCE_GATE_CONTROLLER)
// Blocks: Interactive (Uncategorized)
simpleStateAndItem(ModBlocks.INFUSED_TNT)
simpleStateOnly(ModBlocks.IGNEOUS_PLATE)
// Blocks: Ores
cube(ModBlocks.END_POWDER_ORE)
cube(ModBlocks.ENDIUM_ORE)
cube(ModBlocks.IGNEOUS_ROCK_ORE)
// Blocks: Decorative (Trees)
simpleStateOnly(ModBlocks.WHITEBARK_SAPLING_AUTUMN_RED)
simpleStateOnly(ModBlocks.WHITEBARK_SAPLING_AUTUMN_BROWN)
simpleStateOnly(ModBlocks.WHITEBARK_SAPLING_AUTUMN_ORANGE)
simpleStateOnly(ModBlocks.WHITEBARK_SAPLING_AUTUMN_YELLOWGREEN)
simpleStateAndItem(ModBlocks.WHITEBARK_LEAVES_AUTUMN_RED)
simpleStateAndItem(ModBlocks.WHITEBARK_LEAVES_AUTUMN_BROWN)
simpleStateAndItem(ModBlocks.WHITEBARK_LEAVES_AUTUMN_ORANGE)
simpleStateAndItem(ModBlocks.WHITEBARK_LEAVES_AUTUMN_YELLOWGREEN)
simpleStateOnly(ModBlocks.POTTED_WHITEBARK_SAPLING_AUTUMN_RED)
simpleStateOnly(ModBlocks.POTTED_WHITEBARK_SAPLING_AUTUMN_BROWN)
simpleStateOnly(ModBlocks.POTTED_WHITEBARK_SAPLING_AUTUMN_ORANGE)
simpleStateOnly(ModBlocks.POTTED_WHITEBARK_SAPLING_AUTUMN_YELLOWGREEN)
// Blocks: Decorative (Plants)
simpleStateOnly(ModBlocks.DEATH_FLOWER_HEALED)
simpleStateOnly(ModBlocks.DEATH_FLOWER_WITHERED)
simpleStateOnly(ModBlocks.POTTED_DEATH_FLOWER_HEALED)
simpleStateOnly(ModBlocks.POTTED_DEATH_FLOWER_WITHERED)
// Blocks: Decorative (Uncategorized)
simpleStateOnly(ModBlocks.ANCIENT_COBWEB)
simpleStateOnly(ModBlocks.ENDERMAN_HEAD, Blocks.SOUL_SAND)
simpleStateOnly(ModBlocks.ENDERMAN_WALL_HEAD, Blocks.SOUL_SAND)
// Blocks: Spawners
simpleStateOnly(ModBlocks.SPAWNER_OBSIDIAN_TOWERS, Blocks.SPAWNER)
// Blocks: Portals
simpleStateOnly(ModBlocks.END_PORTAL_INNER, Blocks.END_PORTAL)
simpleStateAndItem(ModBlocks.END_PORTAL_FRAME)
simpleStateAndItem(ModBlocks.END_PORTAL_ACCEPTOR)
simpleStateOnly(ModBlocks.VOID_PORTAL_INNER, Blocks.END_PORTAL)
simpleStateAndItem(ModBlocks.VOID_PORTAL_FRAME)
simpleStateAndItem(ModBlocks.VOID_PORTAL_STORAGE)
simpleStateAndItem(ModBlocks.VOID_PORTAL_FRAME_CRAFTED)
simpleStateAndItem(ModBlocks.VOID_PORTAL_STORAGE_CRAFTED)
// Blocks: Energy
simpleStateAndItem(ModBlocks.CORRUPTED_ENERGY)
// Blocks: Tables
simpleStateAndItem(ModBlocks.TABLE_BASE_TIER_1)
simpleStateAndItem(ModBlocks.TABLE_BASE_TIER_2)
simpleStateAndItem(ModBlocks.TABLE_BASE_TIER_3)
simpleStateAndItem(ModBlocks.ACCUMULATION_TABLE_TIER_1)
simpleStateAndItem(ModBlocks.ACCUMULATION_TABLE_TIER_2)
simpleStateAndItem(ModBlocks.ACCUMULATION_TABLE_TIER_3)
simpleStateAndItem(ModBlocks.EXPERIENCE_TABLE_TIER_1)
simpleStateAndItem(ModBlocks.EXPERIENCE_TABLE_TIER_2)
simpleStateAndItem(ModBlocks.EXPERIENCE_TABLE_TIER_3)
simpleStateAndItem(ModBlocks.INFUSION_TABLE_TIER_1)
simpleStateAndItem(ModBlocks.INFUSION_TABLE_TIER_2)
simpleStateAndItem(ModBlocks.INFUSION_TABLE_TIER_3)
// Blocks: Utilities
simpleStateAndItem(ModBlocks.SCAFFOLDING)
} }
} }

View File

@@ -1,166 +1,108 @@
package chylex.hee.datagen.client package chylex.hee.datagen.client
import chylex.hee.datagen.client.util.block
import chylex.hee.datagen.client.util.layers import chylex.hee.datagen.client.util.layers
import chylex.hee.datagen.client.util.multi
import chylex.hee.datagen.client.util.override import chylex.hee.datagen.client.util.override
import chylex.hee.datagen.client.util.parent import chylex.hee.datagen.client.util.parent
import chylex.hee.datagen.client.util.simple import chylex.hee.datagen.client.util.simple
import chylex.hee.datagen.client.util.suffixed import chylex.hee.datagen.client.util.suffixed
import chylex.hee.datagen.r
import chylex.hee.datagen.then import chylex.hee.datagen.then
import chylex.hee.game.Resource
import chylex.hee.game.Resource.location
import chylex.hee.game.block.IHeeBlock
import chylex.hee.game.item.IHeeItem
import chylex.hee.game.item.properties.ItemModel
import chylex.hee.game.item.properties.ItemModel.AsBlock
import chylex.hee.game.item.properties.ItemModel.Copy
import chylex.hee.game.item.properties.ItemModel.FromParent
import chylex.hee.game.item.properties.ItemModel.Layers
import chylex.hee.game.item.properties.ItemModel.Manual
import chylex.hee.game.item.properties.ItemModel.Multi
import chylex.hee.game.item.properties.ItemModel.Named
import chylex.hee.game.item.properties.ItemModel.Simple
import chylex.hee.game.item.properties.ItemModel.SingleItemModel
import chylex.hee.game.item.properties.ItemModel.Skull
import chylex.hee.game.item.properties.ItemModel.SpawnEgg
import chylex.hee.game.item.properties.ItemModel.Suffixed
import chylex.hee.game.item.properties.ItemModel.Wall
import chylex.hee.game.item.properties.ItemModel.WithOverrides
import chylex.hee.game.item.properties.ItemModel.WithTextures
import chylex.hee.init.ModBlocks
import chylex.hee.init.ModItems import chylex.hee.init.ModItems
import chylex.hee.system.facades.Resource import net.minecraft.block.Block
import net.minecraft.data.DataGenerator import net.minecraft.data.DataGenerator
import net.minecraft.item.Items import net.minecraft.util.IItemProvider
import net.minecraftforge.client.model.generators.ItemModelBuilder
import net.minecraftforge.client.model.generators.ItemModelProvider import net.minecraftforge.client.model.generators.ItemModelProvider
import net.minecraftforge.common.data.ExistingFileHelper import net.minecraftforge.common.data.ExistingFileHelper
class ItemModels(generator: DataGenerator, modid: String, existingFileHelper: ExistingFileHelper) : ItemModelProvider(generator, modid, existingFileHelper) { class ItemModels(generator: DataGenerator, modid: String, existingFileHelper: ExistingFileHelper) : ItemModelProvider(generator, modid, existingFileHelper) {
override fun registerModels() { override fun registerModels() {
for (item in ModItems.ALL) {
// Items: Raw Resources (item as? IHeeItem)?.model?.let {
registerModel(item, it)
simple(ModItems.ETHEREUM) }
simple(ModItems.ANCIENT_DUST)
simple(ModItems.END_POWDER)
simple(ModItems.STARDUST)
simple(ModItems.ENDIUM_INGOT)
simple(ModItems.ENDIUM_NUGGET)
simple(ModItems.OBSIDIAN_FRAGMENT)
simple(ModItems.IGNEOUS_ROCK)
simple(ModItems.PUZZLE_MEDALLION)
simple(ModItems.INFERNIUM)
simple(ModItems.INFERNIUM_INGOT)
simple(ModItems.AURICION)
simple(ModItems.DRAGON_SCALE)
simple(ModItems.INSTABILITY_ORB)
simple(ModItems.ECTOPLASM)
simple(ModItems.ENCHANTED_CLAW)
// Items: Manufactured Resources
simple(ModItems.ALTERATION_NEXUS)
simple(ModItems.VOID_ESSENCE)
simple(ModItems.OBSIDIAN_ROD)
simple(ModItems.PURITY_EXTRACT)
simple(ModItems.STATIC_CORE)
simple(ModItems.TICKING_CORE)
simple(ModItems.DIRTY_INFERNIUM_INGOT)
simple(ModItems.AMELIOR)
simple(ModItems.REVITALIZATION_SUBSTANCE)
layers(ModItems.BINDING_ESSENCE, arrayOf("binding_essence_primary", "binding_essence_secondary", "binding_essence_tertiary", "binding_essence_quaternary"))
// Items: Nature & Food
simple(ModItems.COMPOST)
simple(ModItems.VOID_SALAD).then {
override(Resource.Custom("item/void_void_salad")) { predicate(Resource.Custom("void_salad_type"), 1F) }
override(Resource.Custom("item/mega_void_salad")) { predicate(Resource.Custom("void_salad_type"), 2F) }
} }
simple("void_void_salad") for (block in ModBlocks.ALL) {
simple("mega_void_salad") (block as? IHeeBlock)?.model?.itemModel?.let {
registerModel(if (it.asItem) block.asItem() else block, it.model)
// Items: Table Cores }
}
simple(ModItems.ACCUMULATION_TABLE_CORE)
simple(ModItems.EXPERIENCE_TABLE_CORE)
simple(ModItems.INFUSION_TABLE_CORE)
// Items: Utilities
simple(ModItems.TABLE_LINK)
simple(ModItems.KNOWLEDGE_NOTE)
parent(ModItems.ENDERMAN_HEAD, Resource.Vanilla("item/template_skull"))
simple(ModItems.EXPERIENCE_BOTTLE, Items.EXPERIENCE_BOTTLE.r)
// Items: Tools
simple(ModItems.VOID_MINER)
simple(ModItems.VOID_BUCKET).then {
override(ModItems.VOID_BUCKET.r("_fluid_level_1")) { predicate(Resource.Custom("void_bucket_cooldown"), 0.01F) }
override(ModItems.VOID_BUCKET.r("_fluid_level_2")) { predicate(Resource.Custom("void_bucket_cooldown"), 0.3F) }
override(ModItems.VOID_BUCKET.r("_fluid_level_3")) { predicate(Resource.Custom("void_bucket_cooldown"), 0.5F) }
override(ModItems.VOID_BUCKET.r("_fluid_level_4")) { predicate(Resource.Custom("void_bucket_cooldown"), 0.7F) }
} }
multi(ModItems.VOID_BUCKET, Resource.Vanilla("item/generated"), Array(4) { "_fluid_level_${it + 1}" }) { private fun registerModel(item: IItemProvider, model: ItemModel) {
texture("layer0", Resource.Custom("item/void_bucket")) registerModel(item, model) { it }
texture("layer1", Resource.Custom("item/$it"))
} }
simple(ModItems.SCORCHING_PICKAXE) private fun registerModel(item: IItemProvider, model: ItemModel, callback: (ItemModelBuilder) -> ItemModelBuilder) {
simple(ModItems.SCORCHING_SHOVEL) when (model) {
simple(ModItems.SCORCHING_AXE) is SingleItemModel -> registerSingleModel(item, model, callback)
simple(ModItems.SCORCHING_SWORD)
simple(ModItems.FLINT_AND_INFERNIUM)
// Items: Fluids is WithTextures -> registerModel(item, model.baseModel) {
model.textures.entries.fold(callback(it)) { builder, (name, location) -> builder.texture(name, location) }
simple(ModItems.ENDER_GOO_BUCKET)
simple(ModItems.PURIFIED_ENDER_GOO_BUCKET)
// Items: Energy
layers(ModItems.ENERGY_ORACLE, arrayOf("energy_oracle", "energy_oracle_indicator_inactive")).then {
override(ModItems.ENERGY_ORACLE.r("_active_mild")) { predicate(Resource.Custom("activity_intensity"), 0.5F) }
override(ModItems.ENERGY_ORACLE.r("_active_full")) { predicate(Resource.Custom("activity_intensity"), 1F) }
} }
multi(ModItems.ENERGY_ORACLE, Resource.Vanilla("item/generated"), arrayOf("_active_mild", "_active_full")) { is WithOverrides -> registerModel(item, model.baseModel) {
texture("layer0", Resource.Custom("item/energy_oracle")) var builder = callback(it)
texture("layer1", Resource.Custom("item/energy_oracle_indicator" + it.suffix))
for ((property, valueMap) in model.overrides) {
for ((value, overrideModel) in valueMap) {
registerSingleModel(item, overrideModel)
builder = builder.override(overrideModel.getLocation(item.asItem())) {
predicate(property.name, value)
}
}
} }
simple(ModItems.ENERGY_RECEPTACLE).then { builder
override(ModItems.ENERGY_RECEPTACLE.r("_with_cluster")) { predicate(Resource.Custom("has_cluster"), 1F) }
} }
layers(ModItems.ENERGY_RECEPTACLE.suffixed("_with_cluster"), arrayOf("energy_receptacle", "energy_receptacle_cluster")) is Multi -> {
for (innerModel in model.models) {
// Items: Gems & Teleportation registerModel(item, innerModel, callback)
}
simple(ModItems.INFUSED_ENDER_PEARL, Items.ENDER_PEARL.r) }
simple(ModItems.SPATIAL_DASH_GEM) }
simple(ModItems.LINKING_GEM)
layers(ModItems.PORTAL_TOKEN, arrayOf("portal_token_outline", "portal_token_color_top", "portal_token_color_bottom")).then {
override(ModItems.PORTAL_TOKEN.r("_rare")) { predicate(Resource.Custom("token_type"), 1F) }
override(ModItems.PORTAL_TOKEN.r("_rare_corrupted")) { predicate(Resource.Custom("token_type"), 1.5F) }
override(ModItems.PORTAL_TOKEN.r("_solitary")) { predicate(Resource.Custom("token_type"), 2F) }
} }
layers(ModItems.PORTAL_TOKEN.suffixed("_rare"), arrayOf("portal_token_outline", "portal_token_color_top", "portal_token_color_bottom", "portal_token_border_rare")) private fun registerSingleModel(item: IItemProvider, model: SingleItemModel) {
layers(ModItems.PORTAL_TOKEN.suffixed("_rare_corrupted"), arrayOf("portal_token_outline", "portal_token_color_top", "portal_token_color_bottom", "portal_token_border_rare", "portal_token_corruption")) registerSingleModel(item, model) { it }
layers(ModItems.PORTAL_TOKEN.suffixed("_solitary"), arrayOf("portal_token_outline", "portal_token_color_top", "portal_token_color_bottom", "portal_token_border_solitary"))
simple(ModItems.BLANK_TOKEN)
// Items: Trinkets
simple(ModItems.TRINKET_POUCH)
simple(ModItems.TOTEM_OF_UNDYING).then {
override(ModItems.TOTEM_OF_UNDYING.r("_shaking")) { predicate(Resource.Custom("is_shaking"), 1F) }
} }
simple(ModItems.TOTEM_OF_UNDYING.suffixed("_shaking")) private fun registerSingleModel(item: IItemProvider, model: SingleItemModel, callback: (ItemModelBuilder) -> ItemModelBuilder) {
simple(ModItems.AMULET_OF_RECOVERY) when (model) {
simple(ModItems.AMULET_OF_RECOVERY.suffixed("_held")) Manual -> return
simple(ModItems.RING_OF_HUNGER) Simple -> simple(item)?.then(callback)
simple(ModItems.RING_OF_PRESERVATION) AsBlock -> block(item as Block)?.then(callback)
simple(ModItems.TALISMAN_OF_GRIEFING) Skull -> parent(item, Resource.Vanilla("item/template_skull"))?.then(callback)
simple(ModItems.SCALE_OF_FREEFALL) SpawnEgg -> parent(item, Resource.Vanilla("item/template_spawn_egg"))?.then(callback)
Wall -> parent(item, item.suffixed("_inventory").location)?.then(callback)
// Items: Spawn Eggs is Copy -> simple(item, model.item.location)?.then(callback)
is Layers -> layers(item, model.layers)?.then(callback)
parent(ModItems.SPAWN_ENDER_EYE, Resource.Vanilla("item/template_spawn_egg")) is Named -> simple(model.name)?.then(callback)
parent(ModItems.SPAWN_ANGRY_ENDERMAN, Resource.Vanilla("item/template_spawn_egg")) is FromParent -> parent(item, model.parent)?.then(callback)
parent(ModItems.SPAWN_BLOBBY, Resource.Vanilla("item/template_spawn_egg")) is Suffixed -> registerModel(item.suffixed(model.suffix), model.wrapped, callback)
parent(ModItems.SPAWN_ENDERMITE_INSTABILITY, Resource.Vanilla("item/template_spawn_egg")) }
parent(ModItems.SPAWN_SPIDERLING, Resource.Vanilla("item/template_spawn_egg"))
parent(ModItems.SPAWN_UNDREAD, Resource.Vanilla("item/template_spawn_egg"))
parent(ModItems.SPAWN_VAMPIRE_BAT, Resource.Vanilla("item/template_spawn_egg"))
} }
} }

View File

@@ -0,0 +1,119 @@
package chylex.hee.datagen.client
import chylex.hee.HEE
import chylex.hee.client.text.LocalizationStrategy
import chylex.hee.game.block.IHeeBlock
import chylex.hee.game.command.ClientCommandHandler
import chylex.hee.game.item.IHeeItem
import chylex.hee.game.item.infusion.Infusion
import chylex.hee.game.mechanics.energy.IClusterHealth.HealthOverride
import chylex.hee.game.mechanics.energy.IClusterHealth.HealthStatus
import chylex.hee.game.potion.IHeeEffect
import chylex.hee.game.territory.TerritoryType
import chylex.hee.init.ModBlocks
import chylex.hee.init.ModCommands
import chylex.hee.init.ModEffects
import chylex.hee.init.ModEntities
import chylex.hee.init.ModItems
import chylex.hee.init.ModLanguage
import chylex.hee.init.ModPotions
import chylex.hee.init.ModSounds
import chylex.hee.system.getRegistryEntries
import chylex.hee.system.path
import net.minecraft.data.DataGenerator
import net.minecraft.potion.Effect
import net.minecraft.potion.Potion
import net.minecraftforge.common.data.LanguageProvider
class LangEnglish(generator: DataGenerator, modid: String) : LanguageProvider(generator, modid, "en_us") {
private val addedKeys = mutableMapOf<String, String>()
override fun addTranslations() {
for (block in ModBlocks.ALL) {
if (block is IHeeBlock) {
block.localization.localize(block.translationKey.removePrefix("block.hee."))?.let { add(block, it) }
addAll(block.localizationExtra)
}
}
for (item in ModItems.ALL) {
if (item is IHeeItem) {
item.localization.localize(item.translationKey.removePrefix("item.hee.").removePrefix("block.hee."))?.let { add(item, it) }
addAll(item.localizationExtra)
}
}
for (fluid in ModBlocks.FLUIDS) {
add("fluid.hee." + fluid.registryName, fluid.localizedName)
}
for ((type, properties) in ModEntities.ALL) {
properties.localization.localize(type.translationKey.removePrefix("entity.hee."))?.let { add(type, it) }
}
for ((sound, localized) in ModSounds.SUBTITLES) {
add("subtitles.hee." + sound.name.path, localized)
}
for (effect in getRegistryEntries<Effect>(ModEffects)) {
if (effect is IHeeEffect) {
effect.localization.localize(effect.name.removePrefix("effect.hee."))?.let { add(effect, it) }
}
}
for (potion in getRegistryEntries<Potion>(ModPotions)) {
val name = potion.path
val localized = LocalizationStrategy.Default.localize(name)
add("item.minecraft.potion.effect.$name", "Potion of $localized")
add("item.minecraft.splash_potion.effect.$name", "Splash Potion of $localized")
add("item.minecraft.lingering_potion.effect.$name", "Lingering Potion of $localized")
add("item.minecraft.tipped_arrow.effect.$name", "Arrow of $localized")
}
for (territoryType in TerritoryType.ALL) {
add(territoryType.translationKey, LocalizationStrategy.Default.localize(territoryType.title))
}
for (infusion in Infusion.values()) {
add(infusion.translationKey, infusion.localizedName)
}
for (clusterHealth in listOf(*HealthStatus.values(), *HealthOverride.values())) {
add(clusterHealth.translationKey, clusterHealth.localizedName)
}
for (command in ModCommands.admin + ModCommands.debug) {
val name = command.name
add("commands.hee.$name.info", command.description)
for ((key, translation) in command.localization) {
add("commands.hee.$name.$key", translation)
}
}
for (command in ClientCommandHandler.nonHelpCommands.values) {
val name = command.name
add("commands.hee.$name.info", command.description)
}
for ((key, localizedText) in ModLanguage.GENERIC) {
add(key, localizedText)
}
}
private fun addAll(map: Map<String, String>) {
for ((key, value) in map) {
add(key, value)
}
}
override fun add(key: String, value: String) {
val previous = addedKeys.put(key, value)
if (previous == null) {
super.add(key, value)
}
else if (value != previous) {
HEE.log.warn("[LangEnglish] Duplicate translation: $key -> $previous -> $value")
}
}
}

View File

@@ -1,15 +1,12 @@
package chylex.hee.datagen.client.util package chylex.hee.datagen.client.util
import chylex.hee.datagen.Callback
import chylex.hee.datagen.path
import chylex.hee.datagen.r
import chylex.hee.datagen.safe import chylex.hee.datagen.safe
import chylex.hee.datagen.safeUnit
import chylex.hee.datagen.then import chylex.hee.datagen.then
import chylex.hee.game.Resource
import chylex.hee.game.Resource.location
import chylex.hee.game.block.BlockAbstractTable import chylex.hee.game.block.BlockAbstractTable
import chylex.hee.system.facades.Resource import chylex.hee.system.named
import chylex.hee.system.forge.named import chylex.hee.system.path
import chylex.hee.system.migration.BlockWall
import net.minecraft.block.AbstractBlock import net.minecraft.block.AbstractBlock
import net.minecraft.block.Block import net.minecraft.block.Block
import net.minecraft.block.Blocks import net.minecraft.block.Blocks
@@ -29,66 +26,22 @@ fun BlockModelProvider.parent(block: Block, parent: ResourceLocation) = safe {
this.getBuilder(block.path).parent(getExistingFile(parent)) this.getBuilder(block.path).parent(getExistingFile(parent))
} }
fun BlockModelProvider.simple(block: Block, parent: ResourceLocation, textureName: String, textureLocation: ResourceLocation = block.r): BlockModelBuilder? { fun BlockModelProvider.simple(block: Block, parent: ResourceLocation, textureName: String, textureLocation: ResourceLocation = block.location): BlockModelBuilder? {
return this.parent(block, parent).then { texture(textureName, textureLocation) } return this.parent(block, parent).then { texture(textureName, textureLocation) }
} }
fun BlockModelProvider.cube(block: Block, texture: ResourceLocation = block.r): BlockModelBuilder? { fun BlockModelProvider.cubeColumn(block: Block, side: ResourceLocation = block.location, end: ResourceLocation = block.location("_top")) = safe {
return this.simple(block, Resource.Vanilla("block/cube_all"), "all", texture)
}
fun BlockModelProvider.cross(block: Block, texture: ResourceLocation = block.r): BlockModelBuilder? {
return this.simple(block, Resource.Vanilla("block/cross"), "cross", texture)
}
fun BlockModelProvider.cubeColumn(block: Block, side: ResourceLocation = block.r, end: ResourceLocation = block.r("_top")) = safe {
return this.cubeColumn(block.path, side, end) return this.cubeColumn(block.path, side, end)
} }
fun BlockModelProvider.cubeBottomTop(block: Block, side: ResourceLocation = block.r("_side"), bottom: ResourceLocation = block.r("_bottom"), top: ResourceLocation = block.r("_top")) = safe { fun BlockModelProvider.cubeBottomTop(block: Block, side: ResourceLocation, bottom: ResourceLocation, top: ResourceLocation) = safe {
return this.cubeBottomTop(block.path, side, bottom, top) return this.cubeBottomTop(block.path, side, bottom, top)
} }
fun BlockModelProvider.leaves(block: Block): BlockModelBuilder? {
return this.simple(block, Resource.Vanilla("block/leaves"), "all")
}
fun BlockModelProvider.particle(block: Block, particle: ResourceLocation) = safe { fun BlockModelProvider.particle(block: Block, particle: ResourceLocation) = safe {
this.getBuilder(block.path).texture("particle", particle) this.getBuilder(block.path).texture("particle", particle)
} }
fun BlockModelProvider.multi(block: Block, parent: ResourceLocation, suffixes: Array<String>, callback: BlockModelBuilder.(Callback<Block>) -> Unit) {
for(suffix in suffixes) {
val path = block.path + suffix
this.safeUnit {
this.getBuilder(path).parent(getExistingFile(parent)).callback(Callback(block, suffix, path))
}
}
}
fun BlockModelProvider.multi(block: Block, parent: ResourceLocation, suffixes: IntRange, callback: BlockModelBuilder.(Callback<Block>) -> Unit) {
multi(block, parent, Array(1 + suffixes.last - suffixes.first) { "_${suffixes.first + it}" }, callback)
}
fun BlockModelProvider.wall(block: BlockWall, texture: ResourceLocation) = safeUnit {
wallPost(block.path + "_post", texture)
wallSide(block.path + "_side", texture)
wallSideTall(block.path + "_side_tall", texture)
}
fun BlockModelProvider.cauldron(block: Block, water: ResourceLocation) = safeUnit {
getBuilder(block.path + "_level1").parent(getExistingFile(Resource.Vanilla("block/cauldron_level1"))).texture("water", water)
getBuilder(block.path + "_level2").parent(getExistingFile(Resource.Vanilla("block/cauldron_level2"))).texture("water", water)
getBuilder(block.path + "_level3").parent(getExistingFile(Resource.Vanilla("block/cauldron_level3"))).texture("water", water)
}
fun BlockModelProvider.flowerPot(potBlock: Block, plantBlock: Block) = safe {
this.getBuilder(potBlock.path)
.parent(getExistingFile(Resource.Vanilla("block/flower_pot_cross")))
.texture("plant", plantBlock.r)
}
fun BlockModelProvider.portalFrame(block: Block, side: ResourceLocation, top: ResourceLocation) = safe { fun BlockModelProvider.portalFrame(block: Block, side: ResourceLocation, top: ResourceLocation) = safe {
this.getBuilder(block.path) this.getBuilder(block.path)
.parent(getExistingFile(Resource.Custom("block/portal_frame"))) .parent(getExistingFile(Resource.Custom("block/portal_frame")))

View File

@@ -1,63 +1,57 @@
package chylex.hee.datagen.client.util package chylex.hee.datagen.client.util
import chylex.hee.datagen.r
import chylex.hee.datagen.safeUnit import chylex.hee.datagen.safeUnit
import chylex.hee.system.migration.BlockRotatedPillar import chylex.hee.game.Resource
import chylex.hee.system.migration.BlockSlab import chylex.hee.game.Resource.location
import chylex.hee.system.migration.BlockStairs import chylex.hee.game.block.util.CAULDRON_LEVEL
import chylex.hee.system.path
import net.minecraft.block.Block import net.minecraft.block.Block
import net.minecraft.block.RotatedPillarBlock
import net.minecraft.block.SlabBlock
import net.minecraft.block.StairsBlock
import net.minecraft.block.WallBlock
import net.minecraft.util.ResourceLocation import net.minecraft.util.ResourceLocation
import net.minecraftforge.client.model.generators.BlockStateProvider import net.minecraftforge.client.model.generators.BlockStateProvider
import net.minecraftforge.client.model.generators.ConfiguredModel
import net.minecraftforge.client.model.generators.ModelFile.UncheckedModelFile import net.minecraftforge.client.model.generators.ModelFile.UncheckedModelFile
private fun BlockStateProvider.simpleBlockItem(block: Block) {
this.simpleBlockItem(block, UncheckedModelFile(block.r))
}
fun BlockStateProvider.simpleStateOnly(block: Block, model: Block = block) = safeUnit { fun BlockStateProvider.simpleStateOnly(block: Block, model: Block = block) = safeUnit {
this.simpleBlock(block, UncheckedModelFile(model.r)) this.simpleBlock(block, UncheckedModelFile(model.location))
} }
fun BlockStateProvider.simpleStateAndItem(block: Block) = safeUnit { fun BlockStateProvider.pillar(block: RotatedPillarBlock, model: Block = block) = safeUnit {
this.simpleBlock(block, UncheckedModelFile(block.r)) this.axisBlock(block, model.location)
this.simpleBlockItem(block)
} }
fun BlockStateProvider.cube(block: Block) = safeUnit { fun BlockStateProvider.stairs(stairsBlock: StairsBlock, fullBlock: Block, side: ResourceLocation? = null) = safeUnit {
this.simpleBlock(block) val texture = fullBlock.location
this.simpleBlockItem(block) this.stairsBlock(stairsBlock, side ?: texture, texture, texture)
} }
fun BlockStateProvider.cube(block: Block, model: Block) = safeUnit { fun BlockStateProvider.slab(slabBlock: SlabBlock, fullBlock: Block, side: ResourceLocation? = null) = safeUnit {
val modelFile = UncheckedModelFile(model.r) val texture = fullBlock.location
this.simpleBlock(block, modelFile)
this.simpleBlockItem(block, modelFile)
}
fun BlockStateProvider.stairs(stairBlock: BlockStairs, fullBlock: Block, side: ResourceLocation? = null) = safeUnit {
val texture = fullBlock.r
this.stairsBlock(stairBlock, side ?: texture, texture, texture)
this.simpleBlockItem(stairBlock)
}
fun BlockStateProvider.slab(slabBlock: BlockSlab, fullBlock: Block, side: ResourceLocation? = null) = safeUnit {
val texture = fullBlock.r
this.slabBlock(slabBlock, texture, side ?: texture, texture, texture) this.slabBlock(slabBlock, texture, side ?: texture, texture, texture)
this.simpleBlockItem(slabBlock)
} }
fun BlockStateProvider.log(block: BlockRotatedPillar) = safeUnit { fun BlockStateProvider.wall(block: WallBlock, fullBlock: Block) = safeUnit {
val texture = fullBlock.location
this.wallBlock(block, texture)
models().simple(block.suffixed("_inventory"), Resource.Vanilla("block/wall_inventory"), "wall", texture)
}
fun BlockStateProvider.cauldron(block: Block, water: ResourceLocation) = safeUnit {
val models = models()
val level1 = models.getBuilder(block.path + "_level1").parent(models.getExistingFile(Resource.Vanilla("block/cauldron_level1"))).texture("water", water)
val level2 = models.getBuilder(block.path + "_level2").parent(models.getExistingFile(Resource.Vanilla("block/cauldron_level2"))).texture("water", water)
val level3 = models.getBuilder(block.path + "_level3").parent(models.getExistingFile(Resource.Vanilla("block/cauldron_level3"))).texture("water", water)
getVariantBuilder(block)
.partialState().with(CAULDRON_LEVEL, 0).addModels(ConfiguredModel(models.getExistingFile(Resource.Vanilla("block/cauldron"))))
.partialState().with(CAULDRON_LEVEL, 1).addModels(ConfiguredModel(level1))
.partialState().with(CAULDRON_LEVEL, 2).addModels(ConfiguredModel(level2))
.partialState().with(CAULDRON_LEVEL, 3).addModels(ConfiguredModel(level3))
}
fun BlockStateProvider.log(block: RotatedPillarBlock) = safeUnit {
this.logBlock(block) this.logBlock(block)
this.simpleBlockItem(block)
}
fun BlockStateProvider.pillar(block: BlockRotatedPillar) = safeUnit {
this.axisBlock(block)
this.simpleBlockItem(block)
}
fun BlockStateProvider.pillar(block: BlockRotatedPillar, model: Block) = safeUnit {
val modelFile = UncheckedModelFile(model.r)
this.axisBlock(block, model.r)
this.simpleBlockItem(block, modelFile)
} }

View File

@@ -1,12 +1,11 @@
package chylex.hee.datagen.client.util package chylex.hee.datagen.client.util
import chylex.hee.datagen.Callback
import chylex.hee.datagen.path
import chylex.hee.datagen.r
import chylex.hee.datagen.safe import chylex.hee.datagen.safe
import chylex.hee.datagen.safeUnit import chylex.hee.game.Resource
import chylex.hee.system.facades.Resource import chylex.hee.game.Resource.location
import chylex.hee.system.forge.named import chylex.hee.game.Resource.locationPrefix
import chylex.hee.system.named
import chylex.hee.system.path
import net.minecraft.block.Block import net.minecraft.block.Block
import net.minecraft.item.Item import net.minecraft.item.Item
import net.minecraft.util.IItemProvider import net.minecraft.util.IItemProvider
@@ -20,59 +19,49 @@ fun Item.suffixed(suffix: String): Item {
return Item(Item.Properties()) named this.path + suffix return Item(Item.Properties()) named this.path + suffix
} }
private val ItemModelProvider.generated fun IItemProvider.suffixed(suffix: String): IItemProvider = when (this) {
get() = getExistingFile(Resource.Vanilla("item/generated")) is Block -> this.suffixed(suffix)
is Item -> this.suffixed(suffix)
private fun IItemProvider.path() = when(this) {
is Block -> this.path
is Item -> this.path
else -> throw IllegalArgumentException() else -> throw IllegalArgumentException()
} }
private val ItemModelProvider.generated
get() = getExistingFile(Resource.Vanilla("item/generated"))
private fun ItemModelProvider.build(item: IItemProvider): ItemModelBuilder { private fun ItemModelProvider.build(item: IItemProvider): ItemModelBuilder {
return this.getBuilder(item.path()) return this.getBuilder(when (item) {
is Block -> item.path
is Item -> item.path
else -> throw IllegalArgumentException()
})
} }
fun ItemModelProvider.parent(item: IItemProvider, parent: ResourceLocation, checkExistence: Boolean = true) = safe { fun ItemModelProvider.parent(item: IItemProvider, parent: ResourceLocation) = safe {
this.build(item).parent(if (checkExistence) getExistingFile(parent) else UncheckedModelFile(parent)) this.build(item).parent(getExistingFile(parent))
} }
fun ItemModelProvider.simple(path: String, texture: String = "item/$path") = safe { fun ItemModelProvider.simple(path: String, texture: String = "item/$path") = safe {
this.getBuilder(path).parent(generated).texture("layer0", texture) this.getBuilder(path).parent(generated).texture("layer0", texture)
} }
fun ItemModelProvider.simple(item: IItemProvider, texture: ResourceLocation = item.r) = safe { fun ItemModelProvider.simple(item: IItemProvider, texture: ResourceLocation = item.location) = safe {
this.build(item).parent(generated).texture("layer0", texture) this.build(item).parent(generated).texture("layer0", texture)
} }
fun ItemModelProvider.layers(item: Item, layers: Array<String>) = safe { fun ItemModelProvider.layers(item: IItemProvider, layers: Array<out String>) = safe {
var builder = this.getBuilder(item.path).parent(generated) var builder = this.build(item).parent(generated)
for((index, layer) in layers.withIndex()) { for ((index, layer) in layers.withIndex()) {
builder = builder.texture("layer$index", Resource.Custom("item/$layer")) builder = builder.texture("layer$index", Resource.Custom(item.locationPrefix + layer))
} }
builder builder
} }
fun ItemModelProvider.multi(item: IItemProvider, parent: ResourceLocation, suffixes: Array<String>, callback: ItemModelBuilder.(Callback<IItemProvider>) -> Unit) {
for(suffix in suffixes) {
val path = item.path() + suffix
this.safeUnit {
this.getBuilder(path).parent(getExistingFile(parent)).callback(Callback(item, suffix, path))
}
}
}
fun ItemModelProvider.multi(item: IItemProvider, parent: ResourceLocation, suffixes: IntRange, callback: ItemModelBuilder.(Callback<IItemProvider>) -> Unit) {
multi(item, parent, Array(1 + suffixes.last - suffixes.first) { "_${suffixes.first + it}" }, callback)
}
fun ItemModelProvider.block(block: Block, parent: Block = block) = safe { fun ItemModelProvider.block(block: Block, parent: Block = block) = safe {
this.getBuilder(block.path).parent(UncheckedModelFile(parent.r)) this.getBuilder(block.path).parent(UncheckedModelFile(parent.location))
} }
fun ItemModelBuilder.override(model: ResourceLocation, callback: OverrideBuilder.() -> OverrideBuilder): ItemModelBuilder? { inline fun ItemModelBuilder.override(model: ResourceLocation, callback: OverrideBuilder.() -> OverrideBuilder): ItemModelBuilder {
return this.override().model(UncheckedModelFile(model)).let(callback).end() return this.override().model(UncheckedModelFile(model)).let(callback).end()
} }

View File

@@ -1,99 +1,42 @@
package chylex.hee.datagen.server package chylex.hee.datagen.server
import chylex.hee.HEE
import chylex.hee.datagen.server.util.BlockLootTableProvider import chylex.hee.datagen.server.util.BlockLootTableProvider
import chylex.hee.game.block.IHeeBlock
import chylex.hee.game.block.properties.BlockDrop
import chylex.hee.game.block.properties.BlockDrop.FlowerPot
import chylex.hee.game.block.properties.BlockDrop.Manual
import chylex.hee.game.block.properties.BlockDrop.NamedTile
import chylex.hee.game.block.properties.BlockDrop.Nothing
import chylex.hee.game.block.properties.BlockDrop.OneOf
import chylex.hee.game.block.properties.BlockDrop.Self
import chylex.hee.init.ModBlocks import chylex.hee.init.ModBlocks
import chylex.hee.init.ModItems import net.minecraft.block.Block
import net.minecraft.block.Blocks import net.minecraft.block.FlowerPotBlock
import net.minecraft.data.DataGenerator import net.minecraft.data.DataGenerator
import net.minecraft.loot.LootTables
class BlockLootTables(generator: DataGenerator) : BlockLootTableProvider(generator) { class BlockLootTables(generator: DataGenerator) : BlockLootTableProvider(generator) {
override val consumer = object : RegistrationConsumer() { override val consumer = object : RegistrationConsumer() {
override fun addTables() { override fun addTables() {
dropSelf(ModBlocks.ACCUMULATION_TABLE_TIER_1) for (block in ModBlocks.ALL) {
dropSelf(ModBlocks.ACCUMULATION_TABLE_TIER_2) (block as? IHeeBlock)?.let { registerDrop(block, it.drop) }
dropSelf(ModBlocks.ACCUMULATION_TABLE_TIER_3) }
dropSelf(ModBlocks.DARK_LOAM) }
dropSelf(ModBlocks.DARK_LOAM_SLAB)
dropSelf(ModBlocks.DEATH_FLOWER_HEALED)
dropSelf(ModBlocks.DEATH_FLOWER_WITHERED)
dropSelf(ModBlocks.DUSTY_STONE_BRICKS)
dropSelf(ModBlocks.DUSTY_STONE_BRICK_SLAB)
dropSelf(ModBlocks.DUSTY_STONE_BRICK_STAIRS)
dropSelf(ModBlocks.DUSTY_STONE_CRACKED_BRICKS)
dropSelf(ModBlocks.ENDIUM_BLOCK)
dropSelf(ModBlocks.ENDIUM_ORE)
dropSelf(ModBlocks.END_STONE_BURNED)
dropSelf(ModBlocks.END_STONE_ENCHANTED)
dropSelf(ModBlocks.END_STONE_INFESTED)
dropSelf(ModBlocks.ETHEREAL_LANTERN)
dropSelf(ModBlocks.EXPERIENCE_TABLE_TIER_1)
dropSelf(ModBlocks.EXPERIENCE_TABLE_TIER_2)
dropSelf(ModBlocks.EXPERIENCE_TABLE_TIER_3)
dropSelf(ModBlocks.GLOOMROCK)
dropSelf(ModBlocks.GLOOMROCK_BRICKS)
dropSelf(ModBlocks.GLOOMROCK_BRICK_SLAB)
dropSelf(ModBlocks.GLOOMROCK_BRICK_STAIRS)
dropSelf(ModBlocks.GLOOMROCK_SMOOTH)
dropSelf(ModBlocks.GLOOMROCK_SMOOTH_BLUE)
dropSelf(ModBlocks.GLOOMROCK_SMOOTH_CYAN)
dropSelf(ModBlocks.GLOOMROCK_SMOOTH_GREEN)
dropSelf(ModBlocks.GLOOMROCK_SMOOTH_MAGENTA)
dropSelf(ModBlocks.GLOOMROCK_SMOOTH_ORANGE)
dropSelf(ModBlocks.GLOOMROCK_SMOOTH_PURPLE)
dropSelf(ModBlocks.GLOOMROCK_SMOOTH_RED)
dropSelf(ModBlocks.GLOOMROCK_SMOOTH_SLAB)
dropSelf(ModBlocks.GLOOMROCK_SMOOTH_STAIRS)
dropSelf(ModBlocks.GLOOMROCK_SMOOTH_WHITE)
dropSelf(ModBlocks.GLOOMROCK_SMOOTH_YELLOW)
dropSelf(ModBlocks.GLOOMTORCH)
dropSelf(ModBlocks.IGNEOUS_PLATE)
dropSelf(ModBlocks.INFUSION_TABLE_TIER_1)
dropSelf(ModBlocks.INFUSION_TABLE_TIER_2)
dropSelf(ModBlocks.INFUSION_TABLE_TIER_3)
dropSelf(ModBlocks.MINERS_BURIAL_BLOCK_CHISELED)
dropSelf(ModBlocks.MINERS_BURIAL_BLOCK_PILLAR)
dropSelf(ModBlocks.MINERS_BURIAL_BLOCK_PLAIN)
dropSelf(ModBlocks.OBSIDIAN_CHISELED)
dropSelf(ModBlocks.OBSIDIAN_CHISELED_LIT)
dropSelf(ModBlocks.OBSIDIAN_PILLAR)
dropSelf(ModBlocks.OBSIDIAN_PILLAR_LIT)
dropSelf(ModBlocks.OBSIDIAN_SMOOTH)
dropSelf(ModBlocks.OBSIDIAN_SMOOTH_LIT)
dropSelf(ModBlocks.OBSIDIAN_STAIRS)
dropSelf(ModBlocks.STONE_BRICK_WALL)
dropSelf(ModBlocks.TABLE_BASE_TIER_1)
dropSelf(ModBlocks.TABLE_BASE_TIER_2)
dropSelf(ModBlocks.TABLE_BASE_TIER_3)
dropSelf(ModBlocks.TABLE_PEDESTAL)
dropSelf(ModBlocks.VANTABLOCK)
dropSelf(ModBlocks.VOID_PORTAL_FRAME_CRAFTED)
dropSelf(ModBlocks.VOID_PORTAL_STORAGE_CRAFTED)
dropSelf(ModBlocks.WHITEBARK)
dropSelf(ModBlocks.WHITEBARK_LOG)
dropSelf(ModBlocks.WHITEBARK_PLANKS)
dropSelf(ModBlocks.WHITEBARK_SAPLING_AUTUMN_BROWN)
dropSelf(ModBlocks.WHITEBARK_SAPLING_AUTUMN_ORANGE)
dropSelf(ModBlocks.WHITEBARK_SAPLING_AUTUMN_RED)
dropSelf(ModBlocks.WHITEBARK_SAPLING_AUTUMN_YELLOWGREEN)
dropSelf(ModBlocks.WHITEBARK_SLAB)
dropSelf(ModBlocks.WHITEBARK_STAIRS)
dropFunc(ModBlocks.DARK_CHEST, withName) private fun registerDrop(block: Block, drop: BlockDrop) {
dropFunc(ModBlocks.ENHANCED_BREWING_STAND, withName) if (block.lootTable == LootTables.EMPTY && drop != Nothing) {
HEE.log.error("[BlockLootTables] block has empty loot table but declares drops: " + block.registryName)
return
}
dropOther(ModBlocks.CAULDRON_DRAGONS_BREATH, Blocks.CAULDRON) when (drop) {
dropOther(ModBlocks.CAULDRON_ENDER_GOO, Blocks.CAULDRON) Nothing, Manual -> return
dropOther(ModBlocks.CAULDRON_PURIFIED_ENDER_GOO, Blocks.CAULDRON) Self -> registerDropSelfLootTable(block)
dropOther(ModBlocks.ENDERMAN_HEAD, ModItems.ENDERMAN_HEAD) NamedTile -> registerLootTable(block, withName)
dropOther(ModBlocks.ENDERMAN_WALL_HEAD, ModItems.ENDERMAN_HEAD) FlowerPot -> registerFlowerPot(block as FlowerPotBlock)
dropOther(ModBlocks.OBSIDIAN_FALLING, Blocks.OBSIDIAN) is OneOf -> registerDropping(block, drop.item)
}
dropFlowerPot(ModBlocks.POTTED_DEATH_FLOWER_HEALED)
dropFlowerPot(ModBlocks.POTTED_DEATH_FLOWER_WITHERED)
dropFlowerPot(ModBlocks.POTTED_WHITEBARK_SAPLING_AUTUMN_BROWN)
dropFlowerPot(ModBlocks.POTTED_WHITEBARK_SAPLING_AUTUMN_ORANGE)
dropFlowerPot(ModBlocks.POTTED_WHITEBARK_SAPLING_AUTUMN_YELLOWGREEN)
dropFlowerPot(ModBlocks.POTTED_WHITEBARK_SAPLING_AUTUMN_RED)
} }
} }
} }

View File

@@ -1,46 +1,32 @@
package chylex.hee.datagen.server package chylex.hee.datagen.server
import chylex.hee.datagen.server.util.add import chylex.hee.game.block.IHeeBlock
import chylex.hee.game.block.BlockWhitebarkSapling
import chylex.hee.init.ModBlocks import chylex.hee.init.ModBlocks
import chylex.hee.system.forge.getRegistryEntries
import chylex.hee.system.migration.BlockFlowerPot
import chylex.hee.system.migration.BlockLeaves
import chylex.hee.system.migration.BlockSlab
import chylex.hee.system.migration.BlockStairs
import chylex.hee.system.migration.BlockWall
import net.minecraft.block.Block import net.minecraft.block.Block
import net.minecraft.data.BlockTagsProvider import net.minecraft.data.BlockTagsProvider
import net.minecraft.data.DataGenerator import net.minecraft.data.DataGenerator
import net.minecraft.tags.BlockTags import net.minecraft.tags.ITag.INamedTag
import net.minecraftforge.common.Tags
import net.minecraftforge.common.data.ExistingFileHelper import net.minecraftforge.common.data.ExistingFileHelper
class BlockTags(generator: DataGenerator, modId: String, existingFileHelper: ExistingFileHelper?) : BlockTagsProvider(generator, modId, existingFileHelper) { class BlockTags(generator: DataGenerator, modId: String, existingFileHelper: ExistingFileHelper?) : BlockTagsProvider(generator, modId, existingFileHelper) {
private val blocks = getRegistryEntries<Block>(ModBlocks) private val registeredTags = mutableSetOf<INamedTag<Block>>()
val allRegisteredTags: Set<INamedTag<Block>>
get() = registeredTags
override fun registerTags() { override fun registerTags() {
getOrCreateBuilder(BlockTags.BAMBOO_PLANTABLE_ON).add(ModBlocks.HUMUS) for (block in ModBlocks.ALL) {
getOrCreateBuilder(BlockTags.FLOWER_POTS).add(blocks.filterIsInstance<BlockFlowerPot>()) val tags = (block as? IHeeBlock)?.tags
getOrCreateBuilder(BlockTags.IMPERMEABLE).add(ModBlocks.INFUSED_GLASS) if (!tags.isNullOrEmpty()) {
getOrCreateBuilder(BlockTags.LEAVES).add(blocks.filterIsInstance<BlockLeaves>()) registerTags(block, tags)
getOrCreateBuilder(BlockTags.LOGS).add(ModBlocks.WHITEBARK_LOG, ModBlocks.WHITEBARK) }
getOrCreateBuilder(BlockTags.PORTALS).add(ModBlocks.END_PORTAL_INNER, ModBlocks.VOID_PORTAL_INNER) }
getOrCreateBuilder(BlockTags.PLANKS).add(ModBlocks.WHITEBARK_PLANKS) }
getOrCreateBuilder(BlockTags.SAPLINGS).add(blocks.filterIsInstance<BlockWhitebarkSapling>())
getOrCreateBuilder(BlockTags.SLABS).add(blocks.filterIsInstance<BlockSlab>())
getOrCreateBuilder(BlockTags.STAIRS).add(blocks.filterIsInstance<BlockStairs>())
getOrCreateBuilder(BlockTags.WALLS).add(blocks.filterIsInstance<BlockWall>())
getOrCreateBuilder(BlockTags.WOODEN_SLABS).add(ModBlocks.WHITEBARK_SLAB)
getOrCreateBuilder(BlockTags.WOODEN_STAIRS).add(ModBlocks.WHITEBARK_STAIRS)
getOrCreateBuilder(Tags.Blocks.CHESTS).add(ModBlocks.DARK_CHEST) private fun registerTags(block: Block, tags: List<INamedTag<Block>>) {
getOrCreateBuilder(Tags.Blocks.END_STONES).add(ModBlocks.END_STONE_INFESTED, ModBlocks.END_STONE_BURNED, ModBlocks.END_STONE_ENCHANTED) for (tag in tags) {
getOrCreateBuilder(Tags.Blocks.GLASS).add(ModBlocks.INFUSED_GLASS) getOrCreateBuilder(tag).addItemEntry(block)
getOrCreateBuilder(Tags.Blocks.OBSIDIAN).add(ModBlocks.OBSIDIAN_FALLING) registeredTags.add(tag)
getOrCreateBuilder(Tags.Blocks.OBSIDIAN).add(ModBlocks.OBSIDIAN_SMOOTH, ModBlocks.OBSIDIAN_CHISELED, ModBlocks.OBSIDIAN_PILLAR) }
getOrCreateBuilder(Tags.Blocks.OBSIDIAN).add(ModBlocks.OBSIDIAN_SMOOTH_LIT, ModBlocks.OBSIDIAN_CHISELED_LIT, ModBlocks.OBSIDIAN_PILLAR_LIT)
getOrCreateBuilder(Tags.Blocks.ORES).add(ModBlocks.END_POWDER_ORE, ModBlocks.ENDIUM_ORE, ModBlocks.STARDUST_ORE, ModBlocks.IGNEOUS_ROCK_ORE)
getOrCreateBuilder(Tags.Blocks.STORAGE_BLOCKS).add(ModBlocks.ENDIUM_BLOCK)
} }
} }

View File

@@ -1,38 +1,33 @@
package chylex.hee.datagen.server package chylex.hee.datagen.server
import chylex.hee.game.item.IHeeItem
import chylex.hee.init.ModItems import chylex.hee.init.ModItems
import net.minecraft.data.BlockTagsProvider
import net.minecraft.data.DataGenerator import net.minecraft.data.DataGenerator
import net.minecraft.data.ItemTagsProvider import net.minecraft.data.ItemTagsProvider
import net.minecraft.tags.BlockTags import net.minecraft.item.Item
import net.minecraft.tags.ITag.INamedTag
import net.minecraft.tags.ItemTags import net.minecraft.tags.ItemTags
import net.minecraftforge.common.Tags
import net.minecraftforge.common.data.ExistingFileHelper import net.minecraftforge.common.data.ExistingFileHelper
class ItemTags(dataGenerator: DataGenerator, blockTagProvider: BlockTagsProvider, modId: String, existingFileHelper: ExistingFileHelper?) : ItemTagsProvider(dataGenerator, blockTagProvider, modId, existingFileHelper) { class ItemTags(dataGenerator: DataGenerator, private val blockTags: chylex.hee.datagen.server.BlockTags, modId: String, existingFileHelper: ExistingFileHelper?) : ItemTagsProvider(dataGenerator, blockTags, modId, existingFileHelper) {
override fun registerTags() { override fun registerTags() {
copy(BlockTags.LEAVES, ItemTags.LEAVES) val itemTags = ItemTags.getAllTags().associateBy { it.name }
copy(BlockTags.LOGS, ItemTags.LOGS)
copy(BlockTags.PLANKS, ItemTags.PLANKS)
copy(BlockTags.SAPLINGS, ItemTags.SAPLINGS)
copy(BlockTags.SLABS, ItemTags.SLABS)
copy(BlockTags.STAIRS, ItemTags.STAIRS)
copy(BlockTags.WALLS, ItemTags.WALLS)
copy(BlockTags.WOODEN_SLABS, ItemTags.WOODEN_SLABS)
copy(BlockTags.WOODEN_STAIRS, ItemTags.WOODEN_STAIRS)
copy(Tags.Blocks.CHESTS, Tags.Items.CHESTS) for (blockTag in blockTags.allRegisteredTags) {
copy(Tags.Blocks.END_STONES, Tags.Items.END_STONES) itemTags[blockTag.name]?.let { copy(blockTag, it) }
copy(Tags.Blocks.GLASS, Tags.Items.GLASS) }
copy(Tags.Blocks.OBSIDIAN, Tags.Items.OBSIDIAN)
copy(Tags.Blocks.ORES, Tags.Items.ORES)
copy(Tags.Blocks.STORAGE_BLOCKS, Tags.Items.STORAGE_BLOCKS)
getOrCreateBuilder(Tags.Items.DUSTS).add(ModItems.ANCIENT_DUST, ModItems.END_POWDER, ModItems.STARDUST) for (item in ModItems.ALL) {
getOrCreateBuilder(Tags.Items.ENDER_PEARLS).add(ModItems.INFUSED_ENDER_PEARL) val tags = (item as? IHeeItem)?.tags
getOrCreateBuilder(Tags.Items.HEADS).add(ModItems.ENDERMAN_HEAD) if (!tags.isNullOrEmpty()) {
getOrCreateBuilder(Tags.Items.INGOTS).add(ModItems.ENDIUM_INGOT, ModItems.INFERNIUM_INGOT, ModItems.DIRTY_INFERNIUM_INGOT) registerTags(item, tags)
getOrCreateBuilder(Tags.Items.NUGGETS).add(ModItems.ENDIUM_NUGGET) }
getOrCreateBuilder(Tags.Items.RODS).add(ModItems.OBSIDIAN_ROD) }
}
private fun registerTags(item: Item, tags: List<INamedTag<Item>>) {
for (tag in tags) {
getOrCreateBuilder(tag).addItemEntry(item)
}
} }
} }

View File

@@ -1,6 +1,5 @@
package chylex.hee.datagen.server.util package chylex.hee.datagen.server.util
import chylex.hee.system.migration.BlockFlowerPot
import com.mojang.datafixers.util.Pair import com.mojang.datafixers.util.Pair
import net.minecraft.block.Block import net.minecraft.block.Block
import net.minecraft.data.DataGenerator import net.minecraft.data.DataGenerator
@@ -11,7 +10,6 @@ import net.minecraft.loot.LootParameterSets
import net.minecraft.loot.LootTable import net.minecraft.loot.LootTable
import net.minecraft.loot.LootTable.Builder import net.minecraft.loot.LootTable.Builder
import net.minecraft.loot.ValidationTracker import net.minecraft.loot.ValidationTracker
import net.minecraft.util.IItemProvider
import net.minecraft.util.ResourceLocation import net.minecraft.util.ResourceLocation
import java.util.function.BiConsumer import java.util.function.BiConsumer
import java.util.function.Consumer import java.util.function.Consumer
@@ -33,12 +31,12 @@ abstract class BlockLootTableProvider(generator: DataGenerator) : LootTableProvi
protected abstract class RegistrationConsumer : BlockLootTables() { protected abstract class RegistrationConsumer : BlockLootTables() {
private val lootTables = mutableMapOf<ResourceLocation, Builder>() private val lootTables = mutableMapOf<ResourceLocation, Builder>()
override fun addTables() {} abstract override fun addTables()
final override fun accept(consumer: BiConsumer<ResourceLocation?, Builder?>) { final override fun accept(consumer: BiConsumer<ResourceLocation?, Builder?>) {
addTables() addTables()
for((location, table) in lootTables) { for ((location, table) in lootTables) {
consumer.accept(location, table) consumer.accept(location, table)
} }
@@ -49,22 +47,6 @@ abstract class BlockLootTableProvider(generator: DataGenerator) : LootTableProvi
check(lootTables.put(block.lootTable, table) == null) check(lootTables.put(block.lootTable, table) == null)
} }
protected fun dropSelf(block: Block) {
registerDropSelfLootTable(block)
}
protected fun dropOther(block: Block, drop: IItemProvider) {
registerDropping(block, drop)
}
protected fun dropFunc(block: Block, func: (Block) -> Builder) {
registerLootTable(block, func)
}
protected fun dropFlowerPot(block: BlockFlowerPot) {
registerFlowerPot(block)
}
protected companion object { protected companion object {
val withName = BlockLootTables::droppingWithName val withName = BlockLootTables::droppingWithName
} }

View File

@@ -3,5 +3,5 @@ package chylex.hee.datagen.server.util
import net.minecraft.data.TagsProvider import net.minecraft.data.TagsProvider
fun <T> TagsProvider.Builder<T>.add(items: List<T>) { fun <T> TagsProvider.Builder<T>.add(items: List<T>) {
items.forEach(this::add) items.forEach(this::addItemEntry)
} }

View File

@@ -5,26 +5,21 @@ buildscript {
} }
dependencies { dependencies {
classpath group: "net.minecraftforge.gradle", name: "ForgeGradle", version: "4.1.+", changing: true classpath group: "net.minecraftforge.gradle", name: "ForgeGradle", version: forge_gradle_version, changing: true
classpath group: "org.jetbrains.kotlin", name: "kotlin-gradle-plugin", version: kotlin_version classpath group: "org.jetbrains.kotlin", name: "kotlin-gradle-plugin", version: kotlin_version
} }
} }
repositories {
mavenCentral()
maven { url = "https://files.minecraftforge.net/maven" }
}
apply plugin: "net.minecraftforge.gradle" apply plugin: "net.minecraftforge.gradle"
apply plugin: "eclipse"
minecraft { minecraft {
mappings channel: "snapshot", version: rootProject.mapping_version mappings channel: "snapshot", version: rootProject.mapping_version
accessTransformer = file("../../src/main/resources/META-INF/accesstransformer.cfg") setAccessTransformers(rootProject.access_transformers)
} }
dependencies { dependencies {
minecraft "net.minecraftforge:forge:" + mc_version + "-" + forge_version minecraft "net.minecraftforge:forge:" + mc_version + "-" + forge_version
implementation project(":util")
} }
jar { jar {

View File

@@ -1,7 +1,6 @@
package chylex.hee package chylex.hee
import chylex.hee.proxy.ISidedProxy import chylex.hee.game.Resource
import chylex.hee.system.facades.Resource
import net.minecraft.util.RegistryKey import net.minecraft.util.RegistryKey
import net.minecraft.util.registry.Registry import net.minecraft.util.registry.Registry
import net.minecraft.world.World import net.minecraft.world.World
@@ -12,7 +11,6 @@ object HEE {
const val ID = "hee" const val ID = "hee"
lateinit var version: String lateinit var version: String
lateinit var proxy: ISidedProxy
val log: Logger = LogManager.getLogger("HardcoreEnderExpansion") val log: Logger = LogManager.getLogger("HardcoreEnderExpansion")
val dim: RegistryKey<World> = RegistryKey.getOrCreateKey(Registry.WORLD_KEY, Resource.Custom("end")) val dim: RegistryKey<World> = RegistryKey.getOrCreateKey(Registry.WORLD_KEY, Resource.Custom("end"))

View File

@@ -1,8 +1,8 @@
package chylex.hee.client package chylex.hee.client
import chylex.hee.HEE import chylex.hee.HEE
import chylex.hee.system.facades.Resource import chylex.hee.game.Resource
import chylex.hee.system.migration.supply import chylex.hee.util.forge.supply
import net.minecraft.client.Minecraft import net.minecraft.client.Minecraft
import net.minecraft.resources.IPackFinder import net.minecraft.resources.IPackFinder
import net.minecraft.resources.IPackNameDecorator import net.minecraft.resources.IPackNameDecorator
@@ -15,6 +15,8 @@ import net.minecraftforge.fml.packs.ResourcePackLoader
import java.util.function.Consumer import java.util.function.Consumer
object VanillaResourceOverrides : IPackFinder { object VanillaResourceOverrides : IPackFinder {
const val PACK_NAME = "Hardcore Ender Expansion 2"
fun register() { fun register() {
// Minecraft is null when running datagen, but I cannot move this to FMLClientSetupEvent because it only runs after all resource packs are initialized // Minecraft is null when running datagen, but I cannot move this to FMLClientSetupEvent because it only runs after all resource packs are initialized
with(Minecraft.getInstance() ?: return) { with(Minecraft.getInstance() ?: return) {
@@ -26,15 +28,18 @@ object VanillaResourceOverrides : IPackFinder {
val delegate = ResourcePackLoader.getResourcePackFor(HEE.ID).get() val delegate = ResourcePackLoader.getResourcePackFor(HEE.ID).get()
val supplier = supply<IResourcePack>(Pack(delegate)) val supplier = supply<IResourcePack>(Pack(delegate))
output.accept(ResourcePackInfo.createResourcePack("HEE 2", true /* isAlwaysEnabled */, supplier, factory, Priority.TOP, IPackNameDecorator.BUILTIN)!!) output.accept(ResourcePackInfo.createResourcePack(PACK_NAME, true /* isAlwaysEnabled */, supplier, factory, Priority.TOP, IPackNameDecorator.BUILTIN)!!)
} }
private class Pack(delegate: IResourcePack) : IResourcePack by delegate { private class Pack(delegate: IResourcePack) : IResourcePack by delegate {
override fun getName() = "Hardcore Ender Expansion 2" override fun getName() = PACK_NAME
override fun isHidden() = true // minecraft doesn't remember the order across restarts anyway override fun isHidden() = true // minecraft doesn't remember the order across restarts anyway
override fun getResourceNamespaces(type: ResourcePackType): MutableSet<String> { override fun getResourceNamespaces(type: ResourcePackType): MutableSet<String> {
return mutableSetOf(Resource.NAMESPACE_VANILLA) return if (type == ResourcePackType.CLIENT_RESOURCES)
mutableSetOf(Resource.NAMESPACE_VANILLA)
else
mutableSetOf()
} }
} }
} }

View File

@@ -1,10 +1,10 @@
package chylex.hee.client.color package chylex.hee.client.color
import chylex.hee.client.MC import chylex.hee.client.util.MC
import chylex.hee.system.color.HCL import chylex.hee.util.color.space.HCL
import chylex.hee.system.forge.Side import chylex.hee.util.forge.Side
import chylex.hee.system.forge.Sided import chylex.hee.util.forge.Sided
import chylex.hee.system.math.offsetTowards import chylex.hee.util.math.lerp
@Sided(Side.CLIENT) @Sided(Side.CLIENT)
class ColorTransition(private val defaultColor: HCL, private val transitionDuration: Float) { class ColorTransition(private val defaultColor: HCL, private val transitionDuration: Float) {
@@ -72,8 +72,8 @@ class ColorTransition(private val defaultColor: HCL, private val transitionDurat
return HCL( return HCL(
hue = hueSource.hue, hue = hueSource.hue,
chroma = offsetTowards(currentFrom.chroma, transitionTo.chroma, currentProgress), chroma = lerp(currentFrom.chroma, transitionTo.chroma, currentProgress),
luminance = offsetTowards(currentFrom.luminance, transitionTo.luminance, currentProgress) luminance = lerp(currentFrom.luminance, transitionTo.luminance, currentProgress)
) )
} }
} }

View File

@@ -1,11 +1,11 @@
package chylex.hee.client.gui.base package chylex.hee.client.gui.screen
import chylex.hee.client.render.gl.GL import chylex.hee.client.render.util.GL
import chylex.hee.game.inventory.size import chylex.hee.game.Resource
import chylex.hee.system.color.IntColor.Companion.RGB import chylex.hee.game.inventory.util.size
import chylex.hee.system.facades.Resource import chylex.hee.util.color.RGB
import chylex.hee.system.forge.Side import chylex.hee.util.forge.Side
import chylex.hee.system.forge.Sided import chylex.hee.util.forge.Sided
import com.mojang.blaze3d.matrix.MatrixStack import com.mojang.blaze3d.matrix.MatrixStack
import net.minecraft.client.gui.screen.inventory.ContainerScreen import net.minecraft.client.gui.screen.inventory.ContainerScreen
import net.minecraft.entity.player.PlayerInventory import net.minecraft.entity.player.PlayerInventory
@@ -13,7 +13,7 @@ import net.minecraft.inventory.container.ChestContainer
import net.minecraft.util.text.ITextComponent import net.minecraft.util.text.ITextComponent
@Sided(Side.CLIENT) @Sided(Side.CLIENT)
abstract class GuiBaseChestContainer<T : ChestContainer>(container: T, inventory: PlayerInventory, title: ITextComponent) : ContainerScreen<T>(container, inventory, title) { abstract class AbstractChestContainerScreen<T : ChestContainer>(container: T, inventory: PlayerInventory, title: ITextComponent) : ContainerScreen<T>(container, inventory, title) {
private companion object { private companion object {
private val TEX_BACKGROUND = Resource.Vanilla("textures/gui/container/generic_54.png") private val TEX_BACKGROUND = Resource.Vanilla("textures/gui/container/generic_54.png")
private val COLOR_TEXT = RGB(64u).i private val COLOR_TEXT = RGB(64u).i

View File

@@ -1,10 +1,10 @@
package chylex.hee.client.gui.base package chylex.hee.client.gui.screen
import chylex.hee.client.render.gl.GL import chylex.hee.client.render.util.GL
import chylex.hee.game.container.base.ContainerBaseCustomInventory import chylex.hee.game.container.AbstractCustomInventoryContainer
import chylex.hee.system.color.IntColor.Companion.RGB import chylex.hee.util.color.RGB
import chylex.hee.system.forge.Side import chylex.hee.util.forge.Side
import chylex.hee.system.forge.Sided import chylex.hee.util.forge.Sided
import com.mojang.blaze3d.matrix.MatrixStack import com.mojang.blaze3d.matrix.MatrixStack
import net.minecraft.client.gui.screen.inventory.ContainerScreen import net.minecraft.client.gui.screen.inventory.ContainerScreen
import net.minecraft.entity.player.PlayerInventory import net.minecraft.entity.player.PlayerInventory
@@ -12,7 +12,7 @@ import net.minecraft.util.ResourceLocation
import net.minecraft.util.text.ITextComponent import net.minecraft.util.text.ITextComponent
@Sided(Side.CLIENT) @Sided(Side.CLIENT)
abstract class GuiBaseCustomInventory<T : ContainerBaseCustomInventory<*>>(container: T, inventory: PlayerInventory, title: ITextComponent) : ContainerScreen<T>(container, inventory, title) { abstract class AbstractCustomInventoryScreen<T : AbstractCustomInventoryContainer<*>>(container: T, inventory: PlayerInventory, title: ITextComponent) : ContainerScreen<T>(container, inventory, title) {
private companion object { private companion object {
private val COLOR_TEXT = RGB(64u).i private val COLOR_TEXT = RGB(64u).i
} }

View File

@@ -1,7 +1,7 @@
package chylex.hee.client.render package chylex.hee.client.render
import chylex.hee.system.forge.Side import chylex.hee.util.forge.Side
import chylex.hee.system.forge.Sided import chylex.hee.util.forge.Sided
import com.mojang.blaze3d.matrix.MatrixStack import com.mojang.blaze3d.matrix.MatrixStack
import net.minecraft.client.Minecraft import net.minecraft.client.Minecraft
import net.minecraft.client.world.ClientWorld import net.minecraft.client.world.ClientWorld

View File

@@ -1,4 +1,4 @@
package chylex.hee.client.render.gl package chylex.hee.client.render
import com.mojang.blaze3d.platform.GlStateManager.DestFactor import com.mojang.blaze3d.platform.GlStateManager.DestFactor
import com.mojang.blaze3d.platform.GlStateManager.SourceFactor import com.mojang.blaze3d.platform.GlStateManager.SourceFactor

View File

@@ -1,13 +1,10 @@
package chylex.hee.client.render.territory package chylex.hee.client.render.world
import chylex.hee.client.MC import chylex.hee.client.render.util.GL
import chylex.hee.client.render.TerritoryRenderer import chylex.hee.game.Resource
import chylex.hee.client.render.gl.GL import chylex.hee.util.forge.Side
import chylex.hee.system.facades.Resource import chylex.hee.util.forge.Sided
import chylex.hee.system.forge.Side import chylex.hee.util.math.Vec3
import chylex.hee.system.forge.Sided
import chylex.hee.system.math.Vec3
import chylex.hee.system.math.remapRange
import com.mojang.blaze3d.matrix.MatrixStack import com.mojang.blaze3d.matrix.MatrixStack
import net.minecraft.client.Minecraft import net.minecraft.client.Minecraft
import net.minecraft.client.renderer.RenderHelper import net.minecraft.client.renderer.RenderHelper
@@ -16,22 +13,9 @@ import net.minecraft.client.renderer.vertex.DefaultVertexFormats
import net.minecraft.client.world.ClientWorld import net.minecraft.client.world.ClientWorld
import net.minecraftforge.client.ISkyRenderHandler import net.minecraftforge.client.ISkyRenderHandler
import org.lwjgl.opengl.GL11.GL_QUADS import org.lwjgl.opengl.GL11.GL_QUADS
import kotlin.math.pow
abstract class AbstractEnvironmentRenderer : ISkyRenderHandler { abstract class AbstractEnvironmentRenderer : ISkyRenderHandler {
companion object { companion object {
val currentSkyAlpha
@Sided(Side.CLIENT)
get() = remapRange(TerritoryRenderer.VOID_FACTOR_VALUE, (-1F)..(0.5F), (1F)..(0F)).coerceIn(0F, 1F)
val currentFogDensityMp
@Sided(Side.CLIENT)
get() = 1F + (9F * remapRange(TerritoryRenderer.VOID_FACTOR_VALUE, (-0.5F)..(1F), (0F)..(1F)).coerceIn(0F, 1F).pow(1.5F))
val currentRenderDistanceMp
@Sided(Side.CLIENT)
get() = MC.settings.renderDistanceChunks.let { if (it > 12) 0F else (1F - (it / 16.5F)).pow((it - 1) * 0.25F) }
val DEFAULT_TEXTURE = Resource.Custom("textures/environment/white.png") val DEFAULT_TEXTURE = Resource.Custom("textures/environment/white.png")
val DEFAULT_COLOR = Vec3.xyz(1.0) val DEFAULT_COLOR = Vec3.xyz(1.0)
const val DEFAULT_ALPHA = 1F const val DEFAULT_ALPHA = 1F

View File

@@ -1,14 +1,14 @@
package chylex.hee.client.render.territory package chylex.hee.client.render.world
import chylex.hee.system.forge.Side import chylex.hee.util.forge.Side
import chylex.hee.system.forge.Sided import chylex.hee.util.forge.Sided
import com.mojang.blaze3d.matrix.MatrixStack import com.mojang.blaze3d.matrix.MatrixStack
import net.minecraft.client.world.ClientWorld import net.minecraft.client.world.ClientWorld
class MultiRenderer(private vararg val renderers: AbstractEnvironmentRenderer) : AbstractEnvironmentRenderer() { class MultiRenderer(private vararg val renderers: AbstractEnvironmentRenderer) : AbstractEnvironmentRenderer() {
@Sided(Side.CLIENT) @Sided(Side.CLIENT)
override fun render(world: ClientWorld, matrix: MatrixStack, partialTicks: Float) { override fun render(world: ClientWorld, matrix: MatrixStack, partialTicks: Float) {
for(renderer in renderers) { for (renderer in renderers) {
renderer.render(world, matrix, partialTicks) renderer.render(world, matrix, partialTicks)
} }
} }

View File

@@ -0,0 +1,88 @@
package chylex.hee.client.text
sealed class LocalizationStrategy {
abstract fun localize(key: String): String?
object Default : LocalizationStrategy() {
private val nonCapitalizedWords = setOf("of", "and")
override fun localize(key: String): String {
return key.split('_').joinToString(" ") {
if (nonCapitalizedWords.contains(it)) it else it.replaceFirstChar(Char::titlecaseChar)
}
}
}
open class ReplaceWords(private val wrapped: LocalizationStrategy, private val toReplace: String, private val replacement: String?) : LocalizationStrategy() {
constructor(toReplace: String, replacement: String?) : this(Default, toReplace, replacement)
override fun localize(key: String): String? {
val localized = wrapped.localize(key) ?: return null
val words = localized.split(' ').toMutableList()
val toDelete = this.toReplace.split(' ')
for (index in words.indices) {
if (toDelete.withIndex().all { (offset, word) -> words[index + offset] == word }) {
words.subList(index, index + toDelete.size).clear()
replacement?.let { words.add(index, it) }
break
}
}
return words.joinToString(" ")
}
}
class DeleteWords(wrapped: LocalizationStrategy, toDelete: String) : ReplaceWords(wrapped, toDelete, null) {
constructor(toDelete: String) : this(Default, toDelete)
}
class Parenthesized(private val wrapped: LocalizationStrategy = Default, private val wordCount: Int, private val wordOffset: Int = 0, private val fromStart: Boolean = false) : LocalizationStrategy() {
override fun localize(key: String): String? {
val localized = wrapped.localize(key) ?: return null
val words = localized.split(' ').toMutableList()
val firstIndex = if (fromStart) wordOffset else words.size - wordOffset - wordCount
val lastIndex = firstIndex + wordCount - 1
if (firstIndex < 0 || lastIndex > words.lastIndex) {
return localized
}
words[firstIndex] = '(' + words[firstIndex]
words[lastIndex] = words[lastIndex] + ')'
return words.joinToString(" ")
}
}
class MoveToBeginning(private val wrapped: LocalizationStrategy = Default, private val wordCount: Int, private val wordOffset: Int = 0, private val fromStart: Boolean = false) : LocalizationStrategy() {
override fun localize(key: String): String? {
val localized = wrapped.localize(key) ?: return null
val words = localized.split(' ').toMutableList()
val firstIndex = if (fromStart) wordOffset else words.size - wordOffset - wordCount
if (firstIndex < 0 || firstIndex + wordCount > words.size) {
return localized
}
val subList = words.subList(firstIndex, firstIndex + wordCount)
val movedWords = subList.toList()
subList.clear()
words.addAll(0, movedWords)
return words.joinToString(" ")
}
}
class Custom(private val localized: String) : LocalizationStrategy() {
override fun localize(key: String): String {
return localized
}
}
object None : LocalizationStrategy() {
override fun localize(key: String): String? {
return null
}
}
}

View File

@@ -1,18 +1,29 @@
package chylex.hee.proxy package chylex.hee.game
import chylex.hee.system.forge.Side import chylex.hee.client.util.MC
import chylex.hee.util.forge.Side
import net.minecraft.entity.player.PlayerEntity
import net.minecraft.loot.LootTable import net.minecraft.loot.LootTable
import net.minecraft.server.MinecraftServer import net.minecraft.server.MinecraftServer
import net.minecraft.util.RegistryKey import net.minecraft.util.RegistryKey
import net.minecraft.util.ResourceLocation import net.minecraft.util.ResourceLocation
import net.minecraft.world.World import net.minecraft.world.World
import net.minecraft.world.server.ServerWorld import net.minecraft.world.server.ServerWorld
import net.minecraftforge.fml.DistExecutor
import net.minecraftforge.fml.DistExecutor.SafeCallable
import net.minecraftforge.fml.loading.FMLEnvironment import net.minecraftforge.fml.loading.FMLEnvironment
import net.minecraftforge.fml.server.ServerLifecycleHooks import net.minecraftforge.fml.server.ServerLifecycleHooks
object Environment { object Environment {
val side: Side = FMLEnvironment.dist val side: Side = FMLEnvironment.dist
@Suppress("ConvertLambdaToReference")
fun getClientSidePlayer(): PlayerEntity? {
return DistExecutor.safeCallWhenOn(Side.CLIENT) {
SafeCallable<PlayerEntity?> { MC.player }
}
}
fun getServer(): MinecraftServer { fun getServer(): MinecraftServer {
return ServerLifecycleHooks.getCurrentServer() return ServerLifecycleHooks.getCurrentServer()
} }

View File

@@ -1,6 +1,6 @@
package chylex.hee.system package chylex.hee.game
// UPDATE 1.15 // UPDATE 1.16
/** /**
* Contains magic numbers and other constants which cannot be easily accessed using code, and must be reviewed before updating Minecraft versions. * Contains magic numbers and other constants which cannot be easily accessed using code, and must be reviewed before updating Minecraft versions.
@@ -16,7 +16,7 @@ object MagicValues {
/** /**
* Default player damage added to [IItemTier.getAttackDamage][net.minecraft.item.IItemTier.getAttackDamage]. * Default player damage added to [IItemTier.getAttackDamage][net.minecraft.item.IItemTier.getAttackDamage].
* *
* Found in [PlayerEntity.registerAttributes][net.minecraft.entity.player.PlayerEntity.registerAttributes] (+ 1F). * Found in [PlayerEntity.registerAttributes][net.minecraft.entity.player.PlayerEntity.func_234570_el_] (+ 1F).
*/ */
const val PLAYER_HAND_DAMAGE = 1F const val PLAYER_HAND_DAMAGE = 1F

View File

@@ -0,0 +1,45 @@
package chylex.hee.game
import chylex.hee.HEE
import chylex.hee.system.isVanilla
import chylex.hee.system.path
import net.minecraft.block.Block
import net.minecraft.item.Item
import net.minecraft.util.IItemProvider
import net.minecraft.util.ResourceLocation
object Resource {
const val NAMESPACE_VANILLA = "minecraft"
fun Vanilla(path: String) = ResourceLocation(NAMESPACE_VANILLA, path)
fun Custom(path: String) = ResourceLocation(HEE.ID, path)
fun isVanilla(location: ResourceLocation) = location.namespace == NAMESPACE_VANILLA
fun isCustom(location: ResourceLocation) = location.namespace == HEE.ID
operator fun invoke(path: String, isVanilla: Boolean): ResourceLocation {
return if (isVanilla) Vanilla(path) else Custom(path)
}
val IItemProvider.locationPrefix
get() = when (this) {
is Block -> "block/"
is Item -> "item/"
else -> throw IllegalArgumentException()
}
val IItemProvider.location
get() = when (this) {
is Block -> Resource(this.locationPrefix + this.path, this.isVanilla)
is Item -> Resource(this.locationPrefix + this.path, this.isVanilla)
else -> throw IllegalArgumentException()
}
fun IItemProvider.location(suffix: String): ResourceLocation {
return when (this) {
is Block -> Resource(this.locationPrefix + this.path + suffix, this.isVanilla)
is Item -> Resource(this.locationPrefix + this.path + suffix, this.isVanilla)
else -> throw IllegalArgumentException()
}
}
}

View File

@@ -0,0 +1,11 @@
package chylex.hee.game.block
import chylex.hee.game.block.properties.BlockBuilder
import chylex.hee.game.block.properties.BlockDrop
import net.minecraft.block.Block
import net.minecraft.loot.LootTables
open class HeeBlock(builder: BlockBuilder) : Block(builder.p), IHeeBlock {
override val drop
get() = if (lootTable == LootTables.EMPTY) BlockDrop.Nothing else BlockDrop.Self
}

View File

@@ -0,0 +1,34 @@
package chylex.hee.game.block
import chylex.hee.client.text.LocalizationStrategy
import chylex.hee.game.block.properties.BlockDrop
import chylex.hee.game.block.properties.BlockModel
import chylex.hee.game.block.properties.BlockRenderLayer
import chylex.hee.game.block.properties.BlockRenderLayer.SOLID
import chylex.hee.game.block.properties.BlockTint
import chylex.hee.game.block.properties.IBlockStateModel
import net.minecraft.block.Block
import net.minecraft.tags.ITag.INamedTag
interface IHeeBlock {
val localization: LocalizationStrategy
get() = LocalizationStrategy.Default
val localizationExtra: Map<String, String>
get() = emptyMap()
val model: IBlockStateModel
get() = BlockModel.Cube
val renderLayer: BlockRenderLayer
get() = SOLID
val tint: BlockTint?
get() = null
val drop: BlockDrop
get() = BlockDrop.Self
val tags: List<INamedTag<Block>>
get() = emptyList()
}

View File

@@ -0,0 +1,8 @@
package chylex.hee.game.block.entity
import net.minecraft.block.Block
import net.minecraft.tileentity.TileEntity
interface IHeeTileEntityType<T : TileEntity> {
val blocks: Array<out Block>
}

View File

@@ -1,6 +1,6 @@
package chylex.hee.game.block.fluid package chylex.hee.game.block.fluid
import chylex.hee.system.migration.BlockFlowingFluid import chylex.hee.game.block.util.FLUID_LEVEL
import net.minecraft.block.BlockState import net.minecraft.block.BlockState
import net.minecraft.fluid.FluidState import net.minecraft.fluid.FluidState
import net.minecraft.fluid.Fluids import net.minecraft.fluid.Fluids
@@ -11,7 +11,7 @@ class FlowingFluid5(properties: Properties) : ForgeFlowingFluid.Flowing(properti
const val FLOW_DISTANCE = 5 const val FLOW_DISTANCE = 5
fun stateToLevel(state: BlockState): Int { fun stateToLevel(state: BlockState): Int {
return when(state[BlockFlowingFluid.LEVEL]) { return when (state[FLUID_LEVEL]) {
in 0..3 -> 1 in 0..3 -> 1
4 -> 2 4 -> 2
5 -> 3 5 -> 3

View File

@@ -1,8 +1,9 @@
package chylex.hee.game.block.fluid package chylex.hee.game.block.fluid
import chylex.hee.system.color.IntColor import chylex.hee.game.Resource
import chylex.hee.system.color.IntColor.Companion.RGB import chylex.hee.system.named
import chylex.hee.system.forge.named import chylex.hee.util.color.IntColor
import chylex.hee.util.color.RGB
import net.minecraft.block.material.MaterialColor import net.minecraft.block.material.MaterialColor
import net.minecraft.fluid.Fluid import net.minecraft.fluid.Fluid
import net.minecraft.util.ResourceLocation import net.minecraft.util.ResourceLocation
@@ -17,7 +18,15 @@ import java.util.function.BiFunction
import java.util.function.Supplier import java.util.function.Supplier
@Suppress("LeakingThis") @Suppress("LeakingThis")
abstract class FluidBase(fluidName: String, val rgbColor: IntColor, val mapColor: MaterialColor, val resistance: Float, texStill: ResourceLocation, texFlowing: ResourceLocation) { abstract class FluidBase(
val registryName: String,
val localizedName: String,
val rgbColor: IntColor,
val mapColor: MaterialColor,
val resistance: Float,
texStill: ResourceLocation = Resource.Custom("block/" + registryName + "_still"),
texFlowing: ResourceLocation = Resource.Custom("block/" + registryName + "_flowing"),
) {
val fogColor = rgbColor.asVec val fogColor = rgbColor.asVec
lateinit var still: ForgeFlowingFluid.Source lateinit var still: ForgeFlowingFluid.Source
@@ -30,8 +39,8 @@ abstract class FluidBase(fluidName: String, val rgbColor: IntColor, val mapColor
val attr = FluidAttributesFixColor.Builder(texStill, texFlowing).color(rgbColor.i).let(::attr) val attr = FluidAttributesFixColor.Builder(texStill, texFlowing).color(rgbColor.i).let(::attr)
val props = Properties(supplyStill, supplyFlowing, attr).explosionResistance(resistance).let(::props) val props = Properties(supplyStill, supplyFlowing, attr).explosionResistance(resistance).let(::props)
still = ForgeFlowingFluid.Source(props) named fluidName still = ForgeFlowingFluid.Source(props) named registryName
flowing = constructFlowingFluid(props) named "flowing_$fluidName" flowing = constructFlowingFluid(props) named "flowing_$registryName"
} }
abstract fun attr(attributes: Builder): Builder abstract fun attr(attributes: Builder): Builder

View File

@@ -1,11 +1,11 @@
package chylex.hee.game.block.logic package chylex.hee.game.block.logic
import chylex.hee.HEE import chylex.hee.HEE
import chylex.hee.game.entity.selectAllEntities import chylex.hee.game.entity.util.selectAllEntities
import chylex.hee.game.world.Pos import chylex.hee.game.world.util.getBlock
import chylex.hee.game.world.getBlock import chylex.hee.util.forge.SubscribeAllEvents
import chylex.hee.system.forge.SubscribeAllEvents import chylex.hee.util.forge.SubscribeEvent
import chylex.hee.system.forge.SubscribeEvent import chylex.hee.util.math.Pos
import net.minecraft.entity.Entity import net.minecraft.entity.Entity
import net.minecraft.util.math.BlockPos import net.minecraft.util.math.BlockPos
import net.minecraft.world.World import net.minecraft.world.World
@@ -22,7 +22,7 @@ interface IFullBlockCollisionHandler {
if (e.phase == Phase.END) { if (e.phase == Phase.END) {
val world = e.world val world = e.world
for(entity in world.selectAllEntities) { for (entity in world.selectAllEntities) {
if (entity.isOnGround) { if (entity.isOnGround) {
val pos = Pos(entity.posX, entity.posY - 0.01, entity.posZ) val pos = Pos(entity.posX, entity.posY - 0.01, entity.posZ)
val block = pos.getBlock(world) val block = pos.getBlock(world)

View File

@@ -0,0 +1,12 @@
package chylex.hee.game.block.properties
import net.minecraft.util.IItemProvider
sealed class BlockDrop {
object Nothing : BlockDrop()
object Self : BlockDrop()
object Manual : BlockDrop()
object NamedTile : BlockDrop()
object FlowerPot : BlockDrop()
class OneOf(val item: IItemProvider) : BlockDrop()
}

View File

@@ -0,0 +1,5 @@
package chylex.hee.game.block.properties
import chylex.hee.game.item.properties.ItemModel
class BlockItemModel(val model: ItemModel, val asItem: Boolean = false)

View File

@@ -0,0 +1,53 @@
package chylex.hee.game.block.properties
import chylex.hee.game.Resource
import chylex.hee.game.item.properties.ItemModel
import chylex.hee.system.isVanilla
import chylex.hee.system.path
import net.minecraft.block.Block
import net.minecraft.util.ResourceLocation
sealed class BlockModel : IBlockStateModel {
override val blockState
get() = BlockStatePreset.Simple
override val blockModel
get() = this
override val itemModel
get() = BlockItemModel(ItemModel.AsBlock)
class SimpleBlockModel internal constructor(val parent: ResourceLocation, val textureName: String, val textureLocation: ResourceLocation?) : BlockModel()
companion object {
val Cube = Cube()
val Cross = Cross()
val Leaves = SimpleBlockModel(Resource.Vanilla("block/leaves"), "all", null)
fun Cube(texture: ResourceLocation? = null) = SimpleBlockModel(Resource.Vanilla("block/cube_all"), "all", texture)
fun Cross(texture: ResourceLocation? = null) = SimpleBlockModel(Resource.Vanilla("block/cross"), "cross", texture)
fun PottedPlant(texture: ResourceLocation? = null) = SimpleBlockModel(Resource.Vanilla("block/flower_pot_cross"), "plant", texture)
}
class CubeBottomTop(val side: ResourceLocation? = null, val bottom: ResourceLocation? = null, val top: ResourceLocation? = null) : BlockModel()
class PortalFrame(val frameBlock: Block, val topSuffix: String) : BlockModel()
class ParticleOnly(val particle: ResourceLocation) : BlockModel()
class Parent(val name: String, val parent: ResourceLocation) : BlockModel()
class FromParent(val parent: ResourceLocation) : BlockModel() {
constructor(block: Block) : this(Resource("block/" + block.path, block.isVanilla))
}
class Suffixed(val suffix: String, val wrapped: BlockModel = Cube): BlockModel()
class WithTextures(val baseModel: BlockModel, val textures: Map<String, ResourceLocation>) : BlockModel()
class NoAmbientOcclusion(val baseModel: BlockModel) : BlockModel()
class Multi(vararg val models: BlockModel) : BlockModel() {
constructor(models: List<BlockModel>) : this(*models.toTypedArray())
}
object CubeColumn : BlockModel()
object Table : BlockModel()
object Fluid : BlockModel()
object Manual : BlockModel()
}

View File

@@ -0,0 +1,8 @@
package chylex.hee.game.block.properties
enum class BlockRenderLayer {
SOLID,
CUTOUT,
CUTOUT_MIPPED,
TRANSLUCENT
}

View File

@@ -0,0 +1,12 @@
package chylex.hee.game.block.properties
import chylex.hee.game.item.properties.ItemModel
class BlockStateModel(
override val blockState: BlockStatePreset,
override val blockModel: BlockModel,
override val itemModel: BlockItemModel?,
) : IBlockStateModel {
constructor(blockState: BlockStatePreset, blockModel: BlockModel, itemModel: ItemModel?) : this(blockState, blockModel, itemModel?.let(::BlockItemModel))
constructor(blockState: BlockStatePreset, blockModel: BlockModel) : this(blockState, blockModel, null as BlockItemModel?)
}

View File

@@ -0,0 +1,89 @@
package chylex.hee.game.block.properties
import chylex.hee.game.Resource.location
import chylex.hee.game.item.properties.ItemModel
import net.minecraft.block.Block
import net.minecraft.block.Blocks
import net.minecraft.util.ResourceLocation
object BlockStateModels {
val Manual = BlockStateModel(
BlockStatePreset.None,
BlockModel.Manual
)
fun Cube(modelBlock: Block) = BlockStateModel(
BlockStatePreset.SimpleFrom(modelBlock),
BlockModel.Manual,
ItemModel.FromParent(modelBlock)
)
val Pillar = BlockStateModel(
BlockStatePreset.Pillar,
BlockModel.Manual,
ItemModel.AsBlock
)
fun Pillar(modelBlock: Block) = BlockStateModel(
BlockStatePreset.PillarFrom(modelBlock),
BlockModel.Manual,
ItemModel.FromParent(modelBlock)
)
val Cross = BlockStateModel(
BlockStatePreset.Simple,
BlockModel.Cross,
ItemModel.Simple
)
val Log = BlockStateModel(
BlockStatePreset.Log,
BlockModel.Manual,
ItemModel.AsBlock
)
val Fluid = BlockStateModel(
BlockStatePreset.Simple,
BlockModel.Fluid
)
fun Stairs(fullBlock: Block, side: ResourceLocation? = null) = BlockStateModel(
BlockStatePreset.Stairs(fullBlock, side),
BlockModel.Manual,
ItemModel.AsBlock
)
fun Slab(fullBlock: Block, side: ResourceLocation? = null) = BlockStateModel(
BlockStatePreset.Slab(fullBlock, side),
BlockModel.Manual,
ItemModel.AsBlock
)
fun Wall(fullBlock: Block) = BlockStateModel(
BlockStatePreset.Wall(fullBlock),
BlockModel.Manual,
ItemModel.Wall
)
fun Chest(particleTexture: ResourceLocation) = BlockStateModel(
BlockStatePreset.Simple,
BlockModel.ParticleOnly(particleTexture),
ItemModel.FromParent(Blocks.CHEST.asItem().location)
)
fun Cauldron(fluidTexture: ResourceLocation) = BlockStateModel(
BlockStatePreset.Cauldron(fluidTexture),
BlockModel.Manual
)
fun PottedPlant(plantBlock: Block) = BlockStateModel(
BlockStatePreset.Simple,
BlockModel.PottedPlant(plantBlock.location)
)
fun ItemOnly(itemModel: ItemModel, asItem: Boolean = false) = BlockStateModel(
BlockStatePreset.None,
BlockModel.Manual,
BlockItemModel(itemModel, asItem)
)
}

View File

@@ -0,0 +1,17 @@
package chylex.hee.game.block.properties
import net.minecraft.block.Block
import net.minecraft.util.ResourceLocation
sealed class BlockStatePreset {
object None : BlockStatePreset()
object Simple : BlockStatePreset()
class SimpleFrom(val modelBlock: Block) : BlockStatePreset()
object Pillar : BlockStatePreset()
class PillarFrom(val modelBlock: Block) : BlockStatePreset()
class Stairs(val fullBlock: Block, val side: ResourceLocation? = null) : BlockStatePreset()
class Slab(val fullBlock: Block, val side: ResourceLocation? = null) : BlockStatePreset()
class Wall(val fullBlock: Block) : BlockStatePreset()
class Cauldron(val fluidTexture: ResourceLocation) : BlockStatePreset()
object Log : BlockStatePreset()
}

View File

@@ -0,0 +1,30 @@
package chylex.hee.game.block.properties
import chylex.hee.util.forge.Side
import chylex.hee.util.forge.Sided
import net.minecraft.block.Block
import net.minecraft.block.BlockState
import net.minecraft.client.renderer.color.IBlockColor
import net.minecraft.client.renderer.color.IItemColor
import net.minecraft.util.math.BlockPos
import net.minecraft.world.IBlockDisplayReader
@Sided(Side.CLIENT, _interface = IBlockColor::class)
abstract class BlockTint : IBlockColor {
protected companion object {
const val NO_TINT = -1
}
@Sided(Side.CLIENT)
open fun forItem(block: Block): IItemColor? {
return IItemColor { _, tintIndex -> this@BlockTint.tint(block.defaultState, null, null, tintIndex) }
}
@Sided(Side.CLIENT)
final override fun getColor(state: BlockState, world: IBlockDisplayReader?, pos: BlockPos?, tintIndex: Int): Int {
return tint(state, world, pos, tintIndex)
}
@Sided(Side.CLIENT)
abstract fun tint(state: BlockState, world: IBlockDisplayReader?, pos: BlockPos?, tintIndex: Int): Int
}

View File

@@ -0,0 +1,7 @@
package chylex.hee.game.block.properties
interface IBlockStateModel {
val blockState: BlockStatePreset
val blockModel: BlockModel
val itemModel: BlockItemModel?
}

View File

@@ -1,8 +1,9 @@
package chylex.hee.commands package chylex.hee.game.command
import net.minecraft.command.CommandSource import net.minecraft.command.CommandSource
interface IClientCommand { interface IClientCommand {
val name: String val name: String
val description: String
fun executeCommand(sender: CommandSource, args: Array<String>) fun executeCommand(sender: CommandSource, args: Array<String>)
} }

View File

@@ -0,0 +1,28 @@
package chylex.hee.game.command
import com.mojang.brigadier.builder.ArgumentBuilder
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType
import net.minecraft.command.CommandSource
import net.minecraft.util.text.ITextComponent
import net.minecraft.util.text.TranslationTextComponent
interface ICommand {
val name: String
val description: String
val permissionLevel: Int
get() = 2
val localization: Map<String, String>
get() = emptyMap()
fun register(builder: ArgumentBuilder<CommandSource, *>)
}
fun ICommand.message(name: String, vararg params: Any): ITextComponent {
return TranslationTextComponent("commands.hee.${this.name}.$name", *params)
}
fun ICommand.exception(name: String): SimpleCommandExceptionType {
return SimpleCommandExceptionType(TranslationTextComponent("commands.hee.${this.name}.$name"))
}

View File

@@ -1,7 +1,5 @@
package chylex.hee.commands.arguments package chylex.hee.game.command.argument
import chylex.hee.system.compatibility.EraseGenerics
import chylex.hee.system.serialization.use
import com.google.gson.JsonObject import com.google.gson.JsonObject
import com.mojang.brigadier.StringReader import com.mojang.brigadier.StringReader
import com.mojang.brigadier.arguments.ArgumentType import com.mojang.brigadier.arguments.ArgumentType
@@ -22,8 +20,8 @@ class EnumArgument<T : Enum<T>>(private val enumClass: Class<T>) : ArgumentType<
} }
object Serializer : IArgumentSerializer<EnumArgument<*>> { object Serializer : IArgumentSerializer<EnumArgument<*>> {
override fun write(argument: EnumArgument<*>, buffer: PacketBuffer) = buffer.use { override fun write(argument: EnumArgument<*>, buffer: PacketBuffer) {
writeString(argument.enumClass.name, 256) buffer.writeString(argument.enumClass.name, 256)
} }
override fun write(argument: EnumArgument<*>, json: JsonObject) { override fun write(argument: EnumArgument<*>, json: JsonObject) {
@@ -31,7 +29,7 @@ class EnumArgument<T : Enum<T>>(private val enumClass: Class<T>) : ArgumentType<
} }
override fun read(buffer: PacketBuffer): EnumArgument<*> { override fun read(buffer: PacketBuffer): EnumArgument<*> {
return EraseGenerics.createEnumArgument(Class.forName(buffer.readString(256))) return EnumArgumentConstructor.createEnumArgument(Class.forName(buffer.readString(256)))
} }
} }

View File

@@ -0,0 +1,14 @@
package chylex.hee.game.command.argument;
final class EnumArgumentConstructor {
private EnumArgumentConstructor() {}
@SuppressWarnings({ "unchecked", "rawtypes" })
static EnumArgument<?> createEnumArgument(final Class<?> cls) {
if (!cls.isEnum()) {
throw new IllegalArgumentException("cannot create an EnumArgument for class: " + cls.getName());
}
return new EnumArgument(cls);
}
}

View File

@@ -1,6 +1,5 @@
package chylex.hee.commands.arguments package chylex.hee.game.command.argument
import chylex.hee.system.serialization.use
import com.google.gson.JsonArray import com.google.gson.JsonArray
import com.google.gson.JsonObject import com.google.gson.JsonObject
import com.mojang.brigadier.StringReader import com.mojang.brigadier.StringReader
@@ -24,9 +23,9 @@ class ValidatedStringArgument(private val strings: Set<String>) : ArgumentType<S
} }
object Serializer : IArgumentSerializer<ValidatedStringArgument> { object Serializer : IArgumentSerializer<ValidatedStringArgument> {
override fun write(argument: ValidatedStringArgument, buffer: PacketBuffer) = buffer.use { override fun write(argument: ValidatedStringArgument, buffer: PacketBuffer) {
writeVarInt(argument.strings.size) buffer.writeVarInt(argument.strings.size)
argument.strings.forEach { writeString(it, MAX_LENGTH) } argument.strings.forEach { buffer.writeString(it, MAX_LENGTH) }
} }
override fun write(argument: ValidatedStringArgument, json: JsonObject) { override fun write(argument: ValidatedStringArgument, json: JsonObject) {
@@ -41,8 +40,8 @@ class ValidatedStringArgument(private val strings: Set<String>) : ArgumentType<S
} }
init { init {
require(strings.none { it.contains(' ') }) { "[StringFromSetArgument] strings must not contain any spaces" } require(strings.none { it.contains(' ') }) { "[ValidatedStringArgument] strings must not contain any spaces" }
require(strings.none { it.length > MAX_LENGTH }) { "[StringFromSetArgument] strings must be at most $MAX_LENGTH characters" } require(strings.none { it.length > MAX_LENGTH }) { "[ValidatedStringArgument] strings must be at most $MAX_LENGTH characters" }
} }
override fun parse(reader: StringReader): String { override fun parse(reader: StringReader): String {

View File

@@ -1,12 +1,12 @@
package chylex.hee.game.container.base package chylex.hee.game.container
import chylex.hee.system.migration.EntityPlayer import net.minecraft.entity.player.PlayerEntity
import net.minecraft.inventory.IInventory import net.minecraft.inventory.IInventory
import net.minecraft.inventory.container.ChestContainer import net.minecraft.inventory.container.ChestContainer
import net.minecraft.inventory.container.ContainerType import net.minecraft.inventory.container.ContainerType
import net.minecraft.inventory.container.Slot import net.minecraft.inventory.container.Slot
abstract class ContainerBaseChest<T : IInventory>(type: ContainerType<out ContainerBaseChest<T>>, id: Int, player: EntityPlayer, chestInventory: IInventory, rows: Int) : ChestContainer(type, id, player.inventory, chestInventory, rows) { abstract class AbstractChestContainer<T : IInventory>(type: ContainerType<out AbstractChestContainer<T>>, id: Int, player: PlayerEntity, chestInventory: IInventory, rows: Int) : ChestContainer(type, id, player.inventory, chestInventory, rows) {
override fun addSlot(slot: Slot): Slot { override fun addSlot(slot: Slot): Slot {
return if (slot.inventory === lowerChestInventory) return if (slot.inventory === lowerChestInventory)
super.addSlot(wrapChestSlot(slot)) super.addSlot(wrapChestSlot(slot))

Some files were not shown because too many files have changed in this diff Show More