diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..c9398bf
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,615 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
new file mode 100644
index 0000000..1531e21
--- /dev/null
+++ b/.github/workflows/maven.yml
@@ -0,0 +1,25 @@
+# This workflow will build a Java project with Maven
+# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
+
+name: Java CI with Maven
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: Set up JDK 11
+ uses: actions/setup-java@v2
+ with:
+ java-version: '11'
+ distribution: 'adopt'
+ - name: Build with Maven
+ run: mvn -B package --file pom.xml
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..62b694c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,16 @@
+# Gradle build system ignores
+.gradle/
+build/
+
+# Other IDE related folders
+.idea/
+.settings/
+
+# MCreator workspace
+.mcreator/
+
+# Minecraft client/server files
+run/
+
+# MacOS system files
+.DS_STORE
\ No newline at end of file
diff --git a/.project b/.project
new file mode 100644
index 0000000..1eefd24
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ EasySurvival
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+
diff --git a/_export/CropPlantsUpdateTick.ptpl b/_export/CropPlantsUpdateTick.ptpl
new file mode 100644
index 0000000..eadae50
Binary files /dev/null and b/_export/CropPlantsUpdateTick.ptpl differ
diff --git a/_export/CropTreesUpdateTick.ptpl b/_export/CropTreesUpdateTick.ptpl
new file mode 100644
index 0000000..8679243
Binary files /dev/null and b/_export/CropTreesUpdateTick.ptpl differ
diff --git a/_reference/EasySurvival.jar b/_reference/EasySurvival.jar
new file mode 100644
index 0000000..f2aa5c6
Binary files /dev/null and b/_reference/EasySurvival.jar differ
diff --git a/_reference/teleportmod_1.16.3-1.1.3.jar b/_reference/teleportmod_1.16.3-1.1.3.jar
new file mode 100644
index 0000000..cf14b3a
Binary files /dev/null and b/_reference/teleportmod_1.16.3-1.1.3.jar differ
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..a46f914
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,57 @@
+plugins {
+ id 'eclipse'
+ id 'net.minecraftforge.gradle' version '[6.0,6.2)'
+}
+
+version = '1.0'
+group = 'com.yourname.modid'
+archivesBaseName = 'modid'
+
+java.toolchain.languageVersion = JavaLanguageVersion.of(17)
+
+minecraft {
+ mappings channel: 'official', version: '1.20.1'
+
+ accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
+
+ copyIdeResources = true
+
+ runs {
+ client {
+ workingDirectory project.file('run')
+
+ property 'forge.logging.markers', 'REGISTRIES'
+ property 'forge.logging.console.level', 'debug'
+
+ mods {
+ examplemod {
+ source sourceSets.main
+ }
+ }
+ }
+
+ server {
+ workingDirectory project.file('run')
+
+ property 'forge.logging.markers', 'REGISTRIES'
+ property 'forge.logging.console.level', 'debug'
+
+ mods {
+ examplemod {
+ source sourceSets.main
+ }
+ }
+ }
+ }
+}
+
+dependencies {
+ minecraft 'net.minecraftforge:forge:1.20.1-47.2.0'
+}
+
+tasks.withType(JavaCompile).configureEach {
+ options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
+}
+
+apply from: 'mcreator.gradle'
+
diff --git a/easysurvival.mcreator b/easysurvival.mcreator
new file mode 100644
index 0000000..c78dd27
--- /dev/null
+++ b/easysurvival.mcreator
@@ -0,0 +1,3094 @@
+{
+ "mod_elements": [
+ {
+ "name": "NetherStick",
+ "type": "item",
+ "sortid": 1,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "nether_stick",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/item/nether_stick.json",
+ "src/main/java/ch/netquick/easysurvival/item/NetherStickItem.java"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherStickRecipe",
+ "type": "recipe",
+ "sortid": 2,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "nether_stick_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/nether_stick_recipe.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "Crop",
+ "type": "block",
+ "sortid": 3,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "crop",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/item/crop.json",
+ "src/main/resources/assets/easysurvival/models/block/crop.json",
+ "src/main/java/ch/netquick/easysurvival/block/CropBlock.java",
+ "src/main/java/ch/netquick/easysurvival/block/entity/CropBlockEntity.java",
+ "src/main/resources/assets/easysurvival/blockstates/crop.json"
+ ]
+ },
+ "path": "~/Crop_Plants"
+ },
+ {
+ "name": "CropGUI",
+ "type": "gui",
+ "sortid": 4,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "crop_gui",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/world/inventory/CropGUIMenu.java",
+ "src/main/java/ch/netquick/easysurvival/client/gui/CropGUIScreen.java"
+ ]
+ },
+ "path": "~/Crop_Plants"
+ },
+ {
+ "name": "CropUpdateTick",
+ "type": "procedure",
+ "sortid": 6,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "crop_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/CropUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Crop_Plants"
+ },
+ {
+ "name": "NetherrackPickaxe",
+ "type": "tool",
+ "sortid": 7,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "netherrack_pickaxe",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/item/NetherrackPickaxeItem.java",
+ "src/main/resources/assets/easysurvival/models/item/netherrack_pickaxe.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherrackAxe",
+ "type": "tool",
+ "sortid": 8,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "netherrack_axe",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/item/netherrack_axe.json",
+ "src/main/java/ch/netquick/easysurvival/item/NetherrackAxeItem.java"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherrackSword",
+ "type": "tool",
+ "sortid": 9,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "netherrack_sword",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/item/NetherrackSwordItem.java",
+ "src/main/resources/assets/easysurvival/models/item/netherrack_sword.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherrackShovel",
+ "type": "tool",
+ "sortid": 10,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "netherrack_shovel",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/item/netherrack_shovel.json",
+ "src/main/java/ch/netquick/easysurvival/item/NetherrackShovelItem.java"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherrackHoe",
+ "type": "tool",
+ "sortid": 11,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "netherrack_hoe",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/item/NetherrackHoeItem.java",
+ "src/main/resources/assets/easysurvival/models/item/netherrack_hoe.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherrackPickaxeRecipe",
+ "type": "recipe",
+ "sortid": 12,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "netherrack_pickaxe_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/netherrack_pickaxe_recipe.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherrackAxeRecipe",
+ "type": "recipe",
+ "sortid": 13,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "netherrack_axe_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/netherrack_axe_recipe.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherrackSwordRecipe",
+ "type": "recipe",
+ "sortid": 14,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "netherrack_sword_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/netherrack_sword_recipe.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherrackShovelRecipe",
+ "type": "recipe",
+ "sortid": 15,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "netherrack_shovel_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/netherrack_shovel_recipe.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherrackHoeRecipe",
+ "type": "recipe",
+ "sortid": 16,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "netherrack_hoe_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/netherrack_hoe_recipe.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "TreeCrop",
+ "type": "block",
+ "sortid": 17,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "tree_crop",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/block/entity/TreeCropBlockEntity.java",
+ "src/main/resources/assets/easysurvival/blockstates/tree_crop.json",
+ "src/main/resources/assets/easysurvival/models/block/tree_crop.json",
+ "src/main/java/ch/netquick/easysurvival/block/TreeCropBlock.java",
+ "src/main/resources/assets/easysurvival/models/item/tree_crop.json"
+ ]
+ },
+ "path": "~/Crop_Trees"
+ },
+ {
+ "name": "TreeCropGUI",
+ "type": "gui",
+ "sortid": 19,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "tree_crop_gui",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/client/gui/TreeCropGUIScreen.java",
+ "src/main/java/ch/netquick/easysurvival/world/inventory/TreeCropGUIMenu.java"
+ ]
+ },
+ "path": "~/Crop_Trees"
+ },
+ {
+ "name": "TreeCropUpdateTick",
+ "type": "procedure",
+ "sortid": 20,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "tree_crop_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/TreeCropUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Crop_Trees"
+ },
+ {
+ "name": "CropRecipe",
+ "type": "recipe",
+ "sortid": 21,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "crop_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/crop_recipe.json"
+ ]
+ },
+ "path": "~/Crop_Plants"
+ },
+ {
+ "name": "BasaltPickaxe",
+ "type": "tool",
+ "sortid": 22,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "basalt_pickaxe",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/item/basalt_pickaxe.json",
+ "src/main/java/ch/netquick/easysurvival/item/BasaltPickaxeItem.java"
+ ]
+ },
+ "path": "~/Basalt_Tools"
+ },
+ {
+ "name": "BasaltAxe",
+ "type": "tool",
+ "sortid": 23,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "basalt_axe",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/item/BasaltAxeItem.java",
+ "src/main/resources/assets/easysurvival/models/item/basalt_axe.json"
+ ]
+ },
+ "path": "~/Basalt_Tools"
+ },
+ {
+ "name": "BasaltSword",
+ "type": "tool",
+ "sortid": 24,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "basalt_sword",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/item/basalt_sword.json",
+ "src/main/java/ch/netquick/easysurvival/item/BasaltSwordItem.java"
+ ]
+ },
+ "path": "~/Basalt_Tools"
+ },
+ {
+ "name": "BasaltShovel",
+ "type": "tool",
+ "sortid": 25,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "basalt_shovel",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/item/BasaltShovelItem.java",
+ "src/main/resources/assets/easysurvival/models/item/basalt_shovel.json"
+ ]
+ },
+ "path": "~/Basalt_Tools"
+ },
+ {
+ "name": "BasaltHoe",
+ "type": "tool",
+ "sortid": 26,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "basalt_hoe",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/item/BasaltHoeItem.java",
+ "src/main/resources/assets/easysurvival/models/item/basalt_hoe.json"
+ ]
+ },
+ "path": "~/Basalt_Tools"
+ },
+ {
+ "name": "BasaltPickaxeRecipe",
+ "type": "recipe",
+ "sortid": 27,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "basalt_pickaxe_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/basalt_pickaxe_recipe.json"
+ ]
+ },
+ "path": "~/Basalt_Tools"
+ },
+ {
+ "name": "BasaltAxeRecipe",
+ "type": "recipe",
+ "sortid": 28,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "basalt_axe_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/basalt_axe_recipe.json"
+ ]
+ },
+ "path": "~/Basalt_Tools"
+ },
+ {
+ "name": "BasaltSwordRecipe",
+ "type": "recipe",
+ "sortid": 29,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "basalt_sword_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/basalt_sword_recipe.json"
+ ]
+ },
+ "path": "~/Basalt_Tools"
+ },
+ {
+ "name": "BasaltShovelRecipe",
+ "type": "recipe",
+ "sortid": 30,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "basalt_shovel_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/basalt_shovel_recipe.json"
+ ]
+ },
+ "path": "~/Basalt_Tools"
+ },
+ {
+ "name": "BasaltHoeRecipe",
+ "type": "recipe",
+ "sortid": 31,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "basalt_hoe_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/basalt_hoe_recipe.json"
+ ]
+ },
+ "path": "~/Basalt_Tools"
+ },
+ {
+ "name": "NetherrackArmor",
+ "type": "armor",
+ "sortid": 32,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "netherrack_armor",
+ "metadata": {
+ "eh": true,
+ "el": true,
+ "eb": true,
+ "ec": true,
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/item/NetherrackArmorItem.java",
+ "src/main/resources/assets/easysurvival/models/item/netherrack_armor_chestplate.json",
+ "src/main/resources/assets/easysurvival/models/item/netherrack_armor_boots.json",
+ "src/main/resources/assets/easysurvival/models/item/netherrack_armor_leggings.json",
+ "src/main/resources/assets/easysurvival/models/item/netherrack_armor_helmet.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherrackArmorHelmetRecipe",
+ "type": "recipe",
+ "sortid": 33,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "netherrack_armor_helmet_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/netherrack_armor_helmet_recipe.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherrackArmorBodyRecipe",
+ "type": "recipe",
+ "sortid": 34,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "netherrack_armor_body_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/netherrack_armor_body_recipe.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherrackArmorLeggingsRecipe",
+ "type": "recipe",
+ "sortid": 35,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "netherrack_armor_leggings_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/netherrack_armor_leggings_recipe.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherrackArmorBootsRecipe",
+ "type": "recipe",
+ "sortid": 36,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "netherrack_armor_boots_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/netherrack_armor_boots_recipe.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "QuarzPickaxe",
+ "type": "tool",
+ "sortid": 37,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "quarz_pickaxe",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/item/quarz_pickaxe.json",
+ "src/main/java/ch/netquick/easysurvival/item/QuarzPickaxeItem.java"
+ ]
+ },
+ "path": "~/Quarz_Tools"
+ },
+ {
+ "name": "QuarzAxe",
+ "type": "tool",
+ "sortid": 38,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "quarz_axe",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/item/QuarzAxeItem.java",
+ "src/main/resources/assets/easysurvival/models/item/quarz_axe.json"
+ ]
+ },
+ "path": "~/Quarz_Tools"
+ },
+ {
+ "name": "QuarzSword",
+ "type": "tool",
+ "sortid": 39,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "quarz_sword",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/item/quarz_sword.json",
+ "src/main/java/ch/netquick/easysurvival/item/QuarzSwordItem.java"
+ ]
+ },
+ "path": "~/Quarz_Tools"
+ },
+ {
+ "name": "QuarzShovel",
+ "type": "tool",
+ "sortid": 40,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "quarz_shovel",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/item/quarz_shovel.json",
+ "src/main/java/ch/netquick/easysurvival/item/QuarzShovelItem.java"
+ ]
+ },
+ "path": "~/Quarz_Tools"
+ },
+ {
+ "name": "QuarzHoe",
+ "type": "tool",
+ "sortid": 41,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "quarz_hoe",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/item/QuarzHoeItem.java",
+ "src/main/resources/assets/easysurvival/models/item/quarz_hoe.json"
+ ]
+ },
+ "path": "~/Quarz_Tools"
+ },
+ {
+ "name": "QuarzPickaxeRecipe",
+ "type": "recipe",
+ "sortid": 42,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "quarz_pickaxe_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/quarz_pickaxe_recipe.json"
+ ]
+ },
+ "path": "~/Quarz_Tools"
+ },
+ {
+ "name": "QuarzAxeRecipe",
+ "type": "recipe",
+ "sortid": 43,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "quarz_axe_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/quarz_axe_recipe.json"
+ ]
+ },
+ "path": "~/Quarz_Tools"
+ },
+ {
+ "name": "QuarzSwordRecipe",
+ "type": "recipe",
+ "sortid": 44,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "quarz_sword_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/quarz_sword_recipe.json"
+ ]
+ },
+ "path": "~/Quarz_Tools"
+ },
+ {
+ "name": "QuarzShovelRecipe",
+ "type": "recipe",
+ "sortid": 45,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "quarz_shovel_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/quarz_shovel_recipe.json"
+ ]
+ },
+ "path": "~/Quarz_Tools"
+ },
+ {
+ "name": "QuarzHoeRecipe",
+ "type": "recipe",
+ "sortid": 46,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "quarz_hoe_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/quarz_hoe_recipe.json"
+ ]
+ },
+ "path": "~/Quarz_Tools"
+ },
+ {
+ "name": "ShulkerBoxRecipe",
+ "type": "recipe",
+ "sortid": 47,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "shulker_box_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/shulker_box_recipe.json"
+ ]
+ },
+ "path": "~/Misc_Recipes"
+ },
+ {
+ "name": "EnderpPearlRecipe",
+ "type": "recipe",
+ "sortid": 48,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "enderp_pearl_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/enderp_pearl_recipe.json"
+ ]
+ },
+ "path": "~/Misc_Recipes"
+ },
+ {
+ "name": "TreeCropRecipe",
+ "type": "recipe",
+ "sortid": 49,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "tree_crop_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/tree_crop_recipe.json"
+ ]
+ },
+ "path": "~/Crop_Trees"
+ },
+ {
+ "name": "NetherBucket",
+ "type": "recipe",
+ "sortid": 53,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "nether_bucket",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/nether_bucket.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherLadderRecipe",
+ "type": "recipe",
+ "sortid": 50,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "nether_ladder_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/nether_ladder_recipe.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherWorkbench",
+ "type": "recipe",
+ "sortid": 51,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "nether_workbench",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/nether_workbench.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "NetherForge",
+ "type": "recipe",
+ "sortid": 52,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "nether_forge",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/nether_forge.json"
+ ]
+ },
+ "path": "~/Netherrack_Tools"
+ },
+ {
+ "name": "SpawnerBlaze",
+ "type": "block",
+ "sortid": 54,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_blaze",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/item/spawner_blaze.json",
+ "src/main/resources/assets/easysurvival/models/block/spawner_blaze.json",
+ "src/main/resources/assets/easysurvival/blockstates/spawner_blaze.json",
+ "src/main/java/ch/netquick/easysurvival/block/SpawnerBlazeBlock.java"
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "SpawnerBlazeUpdateTick",
+ "type": "procedure",
+ "sortid": 55,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_blaze_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/SpawnerBlazeUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "SpawnerBlazeRecipe",
+ "type": "recipe",
+ "sortid": 56,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_blaze_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/spawner_blaze_recipe.json"
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "SpawnerSlimeUpdateTick",
+ "type": "procedure",
+ "sortid": 57,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_slime_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/SpawnerSlimeUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "SpawnerSlime",
+ "type": "block",
+ "sortid": 57,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_slime",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/block/spawner_slime.json",
+ "src/main/java/ch/netquick/easysurvival/block/SpawnerSlimeBlock.java",
+ "src/main/resources/assets/easysurvival/models/item/spawner_slime.json",
+ "src/main/resources/assets/easysurvival/blockstates/spawner_slime.json"
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "SpawnerSlimeRecipe",
+ "type": "recipe",
+ "sortid": 58,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_slime_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/spawner_slime_recipe.json"
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "NetherWartRecipe",
+ "type": "recipe",
+ "sortid": 59,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "nether_wart_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/nether_wart_recipe.json"
+ ]
+ },
+ "path": "~/Misc_Recipes"
+ },
+ {
+ "name": "SpawnerGhastUpdateTick",
+ "type": "procedure",
+ "sortid": 60,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_ghast_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/SpawnerGhastUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "SpawnerGhast",
+ "type": "block",
+ "sortid": 60,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_ghast",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/block/SpawnerGhastBlock.java",
+ "src/main/resources/assets/easysurvival/models/block/spawner_ghast.json",
+ "src/main/resources/assets/easysurvival/models/item/spawner_ghast.json",
+ "src/main/resources/assets/easysurvival/blockstates/spawner_ghast.json"
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "SpawnerGhasRecipe",
+ "type": "recipe",
+ "sortid": 61,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_ghas_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/spawner_ghas_recipe.json"
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "EasyEnchantmentTable",
+ "type": "block",
+ "sortid": 62,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_enchantment_table",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/block/EasyEnchantmentTableBlock.java",
+ "src/main/resources/assets/easysurvival/models/item/easy_enchantment_table.json",
+ "src/main/java/ch/netquick/easysurvival/block/entity/EasyEnchantmentTableBlockEntity.java",
+ "src/main/resources/assets/easysurvival/blockstates/easy_enchantment_table.json",
+ "src/main/resources/assets/easysurvival/models/block/easy_enchantment_table.json"
+ ]
+ },
+ "path": "~/EasyEnchantmentTable"
+ },
+ {
+ "name": "EasyEnchantmentTableUpdateTick",
+ "type": "procedure",
+ "sortid": 64,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_enchantment_table_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyEnchantmentTableUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/EasyEnchantmentTable"
+ },
+ {
+ "name": "EasyEnchantmentTableGUI",
+ "type": "gui",
+ "sortid": 65,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_enchantment_table_gui",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/network/EasyEnchantmentTableGUISlotMessage.java",
+ "src/main/java/ch/netquick/easysurvival/client/gui/EasyEnchantmentTableGUIScreen.java",
+ "src/main/java/ch/netquick/easysurvival/world/inventory/EasyEnchantmentTableGUIMenu.java"
+ ]
+ },
+ "path": "~/EasyEnchantmentTable"
+ },
+ {
+ "name": "EasyEnchantmentTableGUIClear",
+ "type": "procedure",
+ "sortid": 66,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_enchantment_table_gui_clear",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyEnchantmentTableGUIClearProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/EasyEnchantmentTable"
+ },
+ {
+ "name": "EasyEnchantmentTableGUIreset",
+ "type": "procedure",
+ "sortid": 67,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_enchantment_table_gu_ireset",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyEnchantmentTableGUIresetProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/EasyEnchantmentTable"
+ },
+ {
+ "name": "EasyEnchantmentTableGUItakeItem1",
+ "type": "procedure",
+ "sortid": 68,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_enchantment_table_gu_itake_item_1",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyEnchantmentTableGUItakeItem1Procedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/EasyEnchantmentTable"
+ },
+ {
+ "name": "EasyEnchantmentTableGUItakeItem2",
+ "type": "procedure",
+ "sortid": 69,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_enchantment_table_gu_itake_item_2",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyEnchantmentTableGUItakeItem2Procedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/EasyEnchantmentTable"
+ },
+ {
+ "name": "EasyEnchantmentTableGUItakeItem3",
+ "type": "procedure",
+ "sortid": 70,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_enchantment_table_gu_itake_item_3",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyEnchantmentTableGUItakeItem3Procedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/EasyEnchantmentTable"
+ },
+ {
+ "name": "EasyEnchantmentTableGUItakeItem4",
+ "type": "procedure",
+ "sortid": 71,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_enchantment_table_gu_itake_item_4",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyEnchantmentTableGUItakeItem4Procedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/EasyEnchantmentTable"
+ },
+ {
+ "name": "EasyEnchantmentTableGUItakeItem5",
+ "type": "procedure",
+ "sortid": 72,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_enchantment_table_gu_itake_item_5",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyEnchantmentTableGUItakeItem5Procedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/EasyEnchantmentTable"
+ },
+ {
+ "name": "EasyEnchantmentTableGUItakeItem6",
+ "type": "procedure",
+ "sortid": 73,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_enchantment_table_gu_itake_item_6",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyEnchantmentTableGUItakeItem6Procedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/EasyEnchantmentTable"
+ },
+ {
+ "name": "EasyEnchantmentTableGUItakeItem7",
+ "type": "procedure",
+ "sortid": 74,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_enchantment_table_gu_itake_item_7",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyEnchantmentTableGUItakeItem7Procedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/EasyEnchantmentTable"
+ },
+ {
+ "name": "EasyEnchantmentTableGUItakeItem8",
+ "type": "procedure",
+ "sortid": 75,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_enchantment_table_gu_itake_item_8",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyEnchantmentTableGUItakeItem8Procedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/EasyEnchantmentTable"
+ },
+ {
+ "name": "EasyEnchantmentTableGUItakeItem9",
+ "type": "procedure",
+ "sortid": 76,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_enchantment_table_gu_itake_item_9",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyEnchantmentTableGUItakeItem9Procedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/EasyEnchantmentTable"
+ },
+ {
+ "name": "EasyEnchantmentTableRecipe",
+ "type": "recipe",
+ "sortid": 81,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_enchantment_table_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/easy_enchantment_table_recipe.json"
+ ]
+ },
+ "path": "~/EasyEnchantmentTable"
+ },
+ {
+ "name": "EasyAnvil",
+ "type": "block",
+ "sortid": 83,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_anvil",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/block/entity/EasyAnvilBlockEntity.java",
+ "src/main/java/ch/netquick/easysurvival/block/EasyAnvilBlock.java",
+ "src/main/resources/assets/easysurvival/models/block/easy_anvil.json",
+ "src/main/resources/assets/easysurvival/models/item/easy_anvil.json",
+ "src/main/resources/assets/easysurvival/blockstates/easy_anvil.json"
+ ]
+ },
+ "path": "~/Easy_Anvil"
+ },
+ {
+ "name": "EasyAnvilGUI",
+ "type": "gui",
+ "sortid": 84,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_anvil_gui",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/client/gui/EasyAnvilGUIScreen.java",
+ "src/main/java/ch/netquick/easysurvival/world/inventory/EasyAnvilGUIMenu.java",
+ "src/main/java/ch/netquick/easysurvival/network/EasyAnvilGUISlotMessage.java"
+ ]
+ },
+ "path": "~/Easy_Anvil"
+ },
+ {
+ "name": "EasyAnvilRecipe",
+ "type": "recipe",
+ "sortid": 87,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_anvil_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/easy_anvil_recipe.json"
+ ]
+ },
+ "path": "~/Easy_Anvil"
+ },
+ {
+ "name": "DedicatedStorageGUI",
+ "type": "gui",
+ "sortid": 88,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "dedicated_storage_gui",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/client/gui/DedicatedStorageGUIScreen.java",
+ "src/main/java/ch/netquick/easysurvival/world/inventory/DedicatedStorageGUIMenu.java"
+ ]
+ },
+ "path": "~/DedicatedStorage"
+ },
+ {
+ "name": "SpawnersActive",
+ "type": "gamerule",
+ "sortid": 89,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawnersActive",
+ "metadata": {
+ "type": "logic",
+ "files": []
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "EasyForgeUpdateTick",
+ "type": "procedure",
+ "sortid": 90,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_forge_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyForgeUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Easy_Forge"
+ },
+ {
+ "name": "EasyForge",
+ "type": "block",
+ "sortid": 90,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_forge",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/block/EasyForgeBlock.java",
+ "src/main/resources/assets/easysurvival/models/item/easy_forge.json",
+ "src/main/java/ch/netquick/easysurvival/block/entity/EasyForgeBlockEntity.java",
+ "src/main/resources/assets/easysurvival/models/block/easy_forge.json",
+ "src/main/resources/assets/easysurvival/blockstates/easy_forge.json"
+ ]
+ },
+ "path": "~/Easy_Forge"
+ },
+ {
+ "name": "EasyForgeGUI",
+ "type": "gui",
+ "sortid": 91,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_forge_gui",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/world/inventory/EasyForgeGUIMenu.java",
+ "src/main/java/ch/netquick/easysurvival/client/gui/EasyForgeGUIScreen.java"
+ ]
+ },
+ "path": "~/Easy_Forge"
+ },
+ {
+ "name": "EasyForgeRecipe",
+ "type": "recipe",
+ "sortid": 92,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_forge_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/easy_forge_recipe.json"
+ ]
+ },
+ "path": "~/Easy_Forge"
+ },
+ {
+ "name": "TeleporterPlate",
+ "type": "block",
+ "sortid": 95,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "teleporter_plate",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/block/teleporter_plate.json",
+ "src/main/java/ch/netquick/easysurvival/block/TeleporterPlateBlock.java",
+ "src/main/java/ch/netquick/easysurvival/block/entity/TeleporterPlateBlockEntity.java",
+ "src/main/resources/assets/easysurvival/models/item/teleporter_plate.json",
+ "src/main/resources/assets/easysurvival/blockstates/teleporter_plate.json"
+ ]
+ },
+ "path": "~/Teleporter"
+ },
+ {
+ "name": "TeleportSetGUI",
+ "type": "gui",
+ "sortid": 96,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "teleport_set_gui",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/world/inventory/TeleportSetGUIMenu.java",
+ "src/main/java/ch/netquick/easysurvival/client/gui/TeleportSetGUIScreen.java"
+ ]
+ },
+ "path": "~/Teleporter"
+ },
+ {
+ "name": "TeleporterGUI",
+ "type": "gui",
+ "sortid": 96,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "teleporter_gui",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/client/gui/TeleporterGUIScreen.java",
+ "src/main/java/ch/netquick/easysurvival/world/inventory/TeleporterGUIMenu.java"
+ ]
+ },
+ "path": "~/Teleporter"
+ },
+ {
+ "name": "TeleporterProc",
+ "type": "procedure",
+ "sortid": 97,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "teleporter_proc",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/TeleporterProcProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "entity",
+ "type": "entity"
+ },
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Teleporter"
+ },
+ {
+ "name": "EasyFridge",
+ "type": "block",
+ "sortid": 103,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_fridge",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/block/entity/EasyFridgeBlockEntity.java",
+ "src/main/resources/assets/easysurvival/models/item/easy_fridge.json",
+ "src/main/resources/assets/easysurvival/models/block/easy_fridge.json",
+ "src/main/resources/assets/easysurvival/blockstates/easy_fridge.json",
+ "src/main/java/ch/netquick/easysurvival/block/EasyFridgeBlock.java"
+ ]
+ },
+ "path": "~/Easy_Fridge"
+ },
+ {
+ "name": "QuarzBlock",
+ "type": "recipe",
+ "sortid": 99,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "quarz_block",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/quarz_block.json"
+ ]
+ },
+ "path": "~/Misc_Recipes"
+ },
+ {
+ "name": "EasyTeleportRecipe",
+ "type": "recipe",
+ "sortid": 100,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_teleport_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/easy_teleport_recipe.json"
+ ]
+ },
+ "path": "~/Teleporter"
+ },
+ {
+ "name": "Elytra",
+ "type": "recipe",
+ "sortid": 101,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "elytra",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/elytra.json"
+ ]
+ },
+ "path": "~/Misc_Recipes"
+ },
+ {
+ "name": "PortableCraftingTable",
+ "type": "item",
+ "sortid": 102,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "portable_crafting_table",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/item/inventory/PortableCraftingTableInventoryCapability.java",
+ "src/main/java/ch/netquick/easysurvival/item/PortableCraftingTableItem.java",
+ "src/main/resources/assets/easysurvival/models/item/portable_crafting_table.json"
+ ]
+ },
+ "path": "~/Portable_CraftingTable"
+ },
+ {
+ "name": "PlaceCraftingTable",
+ "type": "procedure",
+ "sortid": 109,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "place_crafting_table",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/PlaceCraftingTableProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "entity",
+ "type": "entity"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Portable_CraftingTable"
+ },
+ {
+ "name": "SpawnerPillager",
+ "type": "block",
+ "sortid": 115,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_pillager",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/block/SpawnerPillagerBlock.java",
+ "src/main/resources/assets/easysurvival/models/item/spawner_pillager.json",
+ "src/main/resources/assets/easysurvival/models/block/spawner_pillager.json",
+ "src/main/resources/assets/easysurvival/blockstates/spawner_pillager.json"
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "SpawnerCreeper",
+ "type": "block",
+ "sortid": 113,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_creeper",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/block/spawner_creeper.json",
+ "src/main/resources/assets/easysurvival/blockstates/spawner_creeper.json",
+ "src/main/java/ch/netquick/easysurvival/block/SpawnerCreeperBlock.java",
+ "src/main/resources/assets/easysurvival/models/item/spawner_creeper.json"
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "SpawnerCreeperUpdateTick",
+ "type": "procedure",
+ "sortid": 114,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_creeper_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/SpawnerCreeperUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "SpawnerWitherSkelettUpdateTick",
+ "type": "procedure",
+ "sortid": 111,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_wither_skelett_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/SpawnerWitherSkelettUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "SpawnerPillagerUpdateTick",
+ "type": "procedure",
+ "sortid": 116,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_pillager_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/SpawnerPillagerUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "SpawnerEvokerUpdateTick",
+ "type": "procedure",
+ "sortid": 118,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_evoker_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/SpawnerEvokerUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "SpawnerEvoker",
+ "type": "block",
+ "sortid": 117,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_evoker",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/item/spawner_evoker.json",
+ "src/main/resources/assets/easysurvival/blockstates/spawner_evoker.json",
+ "src/main/resources/assets/easysurvival/models/block/spawner_evoker.json",
+ "src/main/java/ch/netquick/easysurvival/block/SpawnerEvokerBlock.java"
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "Trident",
+ "type": "recipe",
+ "sortid": 119,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "trident",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/trident.json"
+ ]
+ },
+ "path": "~/Misc_Recipes"
+ },
+ {
+ "name": "SpawnerWitherSkelett",
+ "type": "block",
+ "sortid": 112,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_wither_skelett",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/block/SpawnerWitherSkelettBlock.java",
+ "src/main/resources/assets/easysurvival/models/item/spawner_wither_skelett.json",
+ "src/main/resources/assets/easysurvival/blockstates/spawner_wither_skelett.json",
+ "src/main/resources/assets/easysurvival/models/block/spawner_wither_skelett.json"
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "EasyIntake",
+ "type": "block",
+ "sortid": 125,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_intake",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/block/easy_intake.json",
+ "src/main/resources/assets/easysurvival/blockstates/easy_intake.json",
+ "src/main/java/ch/netquick/easysurvival/block/EasyIntakeBlock.java",
+ "src/main/resources/assets/easysurvival/models/item/easy_intake.json",
+ "src/main/java/ch/netquick/easysurvival/block/entity/EasyIntakeBlockEntity.java"
+ ]
+ },
+ "path": "~/DedicatedStorage"
+ },
+ {
+ "name": "EasySaw",
+ "type": "block",
+ "sortid": 113,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_saw",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/item/easy_saw.json",
+ "src/main/resources/assets/easysurvival/models/block/easy_saw.json",
+ "src/main/resources/assets/easysurvival/blockstates/easy_saw.json",
+ "src/main/java/ch/netquick/easysurvival/block/EasySawBlock.java",
+ "src/main/java/ch/netquick/easysurvival/block/entity/EasySawBlockEntity.java"
+ ]
+ },
+ "path": "~/Easy_Saw"
+ },
+ {
+ "name": "EasyFridgeGUI",
+ "type": "gui",
+ "sortid": 118,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_fridge_gui",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/world/inventory/EasyFridgeGUIMenu.java",
+ "src/main/java/ch/netquick/easysurvival/client/gui/EasyFridgeGUIScreen.java"
+ ]
+ },
+ "path": "~/Easy_Fridge"
+ },
+ {
+ "name": "EasyAnvilItemTaken",
+ "type": "procedure",
+ "sortid": 121,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_anvil_item_taken",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyAnvilItemTakenProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "entity",
+ "type": "entity"
+ }
+ ]
+ },
+ "path": "~/Easy_Anvil"
+ },
+ {
+ "name": "EasyFridgeUpdateTick",
+ "type": "procedure",
+ "sortid": 117,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_fridge_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyFridgeUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Easy_Fridge"
+ },
+ {
+ "name": "EasySmelterGUI",
+ "type": "gui",
+ "sortid": 114,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_smelter_gui",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/client/gui/EasySmelterGUIScreen.java",
+ "src/main/java/ch/netquick/easysurvival/world/inventory/EasySmelterGUIMenu.java"
+ ]
+ },
+ "path": "~/Easy_Smelter"
+ },
+ {
+ "name": "EasyIntakeGUI",
+ "type": "gui",
+ "sortid": 124,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_intake_gui",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/world/inventory/EasyIntakeGUIMenu.java",
+ "src/main/java/ch/netquick/easysurvival/client/gui/EasyIntakeGUIScreen.java"
+ ]
+ },
+ "path": "~/DedicatedStorage"
+ },
+ {
+ "name": "EasySawRecipe",
+ "type": "recipe",
+ "sortid": 119,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_saw_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/easy_saw_recipe.json"
+ ]
+ },
+ "path": "~/Easy_Saw"
+ },
+ {
+ "name": "EasyIntakeOnBlockRightClicked",
+ "type": "procedure",
+ "sortid": 126,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_intake_on_block_right_clicked",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyIntakeOnBlockRightClickedProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "entity",
+ "type": "entity"
+ },
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/DedicatedStorage"
+ },
+ {
+ "name": "EasyForgeAuto",
+ "type": "block",
+ "sortid": 128,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_forge_auto",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/block/entity/EasyForgeAutoBlockEntity.java",
+ "src/main/resources/assets/easysurvival/models/block/easy_forge_auto.json",
+ "src/main/resources/assets/easysurvival/models/item/easy_forge_auto.json",
+ "src/main/java/ch/netquick/easysurvival/block/EasyForgeAutoBlock.java",
+ "src/main/resources/assets/easysurvival/blockstates/easy_forge_auto.json"
+ ]
+ },
+ "path": "~/Easy_Forge"
+ },
+ {
+ "name": "EasySmelterUpdateTick",
+ "type": "procedure",
+ "sortid": 115,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_smelter_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasySmelterUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Easy_Smelter"
+ },
+ {
+ "name": "EasyAnvilUpdateTick",
+ "type": "procedure",
+ "sortid": 122,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_anvil_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyAnvilUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Easy_Anvil"
+ },
+ {
+ "name": "EasySurvival",
+ "type": "tab",
+ "sortid": 119,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_survival",
+ "metadata": {
+ "files": []
+ }
+ },
+ {
+ "name": "EasySmelter",
+ "type": "block",
+ "sortid": 112,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_smelter",
+ "metadata": {
+ "files": [
+ "src/main/resources/assets/easysurvival/models/block/easy_smelter.json",
+ "src/main/resources/assets/easysurvival/blockstates/easy_smelter.json",
+ "src/main/java/ch/netquick/easysurvival/block/EasySmelterBlock.java",
+ "src/main/java/ch/netquick/easysurvival/block/entity/EasySmelterBlockEntity.java",
+ "src/main/resources/assets/easysurvival/models/item/easy_smelter.json"
+ ]
+ },
+ "path": "~/Easy_Smelter"
+ },
+ {
+ "name": "EasyAnvilItemReset",
+ "type": "procedure",
+ "sortid": 123,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_anvil_item_reset",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyAnvilItemResetProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "entity",
+ "type": "entity"
+ }
+ ]
+ },
+ "path": "~/Easy_Anvil"
+ },
+ {
+ "name": "EasySawUpdateTick",
+ "type": "procedure",
+ "sortid": 117,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_saw_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasySawUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Easy_Saw"
+ },
+ {
+ "name": "EasyFridgeRecipe",
+ "type": "recipe",
+ "sortid": 110,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_fridge_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/easy_fridge_recipe.json"
+ ]
+ },
+ "path": "~/Easy_Fridge"
+ },
+ {
+ "name": "EasySawGUI",
+ "type": "gui",
+ "sortid": 116,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_saw_gui",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/world/inventory/EasySawGUIMenu.java",
+ "src/main/java/ch/netquick/easysurvival/client/gui/EasySawGUIScreen.java"
+ ]
+ },
+ "path": "~/Easy_Saw"
+ },
+ {
+ "name": "EasySmelterRecipe",
+ "type": "recipe",
+ "sortid": 120,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_smelter_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/easy_smelter_recipe.json"
+ ]
+ },
+ "path": "~/Easy_Smelter"
+ },
+ {
+ "name": "EasyForgeAutoRecipe",
+ "type": "recipe",
+ "sortid": 129,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_forge_auto_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/easy_forge_auto_recipe.json"
+ ]
+ },
+ "path": "~/Easy_Forge"
+ },
+ {
+ "name": "EasyIntakeRecipe",
+ "type": "recipe",
+ "sortid": 131,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_intake_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/easy_intake_recipe.json"
+ ]
+ },
+ "path": "~/DedicatedStorage"
+ },
+ {
+ "name": "SpawnerPillagerRecipe",
+ "type": "recipe",
+ "sortid": 135,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_pillager_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/spawner_pillager_recipe.json"
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "SpawnerCreeperRecipe",
+ "type": "recipe",
+ "sortid": 133,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_creeper_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/spawner_creeper_recipe.json"
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "SpawnerEvokerRecipe",
+ "type": "recipe",
+ "sortid": 132,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "spawner_evoker_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/spawner_evoker_recipe.json"
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "WitherSkelettonSpawnerRecipe",
+ "type": "recipe",
+ "sortid": 131,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "wither_skeletton_spawner_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/wither_skeletton_spawner_recipe.json"
+ ]
+ },
+ "path": "~/Spawner"
+ },
+ {
+ "name": "CobbleStoneRecipe",
+ "type": "recipe",
+ "sortid": 134,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "cobble_stone_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/cobble_stone_recipe.json"
+ ]
+ },
+ "path": "~/Misc_Recipes"
+ },
+ {
+ "name": "EasyConverter",
+ "type": "block",
+ "sortid": 136,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_converter",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/block/entity/EasyConverterBlockEntity.java",
+ "src/main/resources/assets/easysurvival/models/block/easy_converter.json",
+ "src/main/resources/assets/easysurvival/models/item/easy_converter.json",
+ "src/main/java/ch/netquick/easysurvival/block/EasyConverterBlock.java",
+ "src/main/resources/assets/easysurvival/blockstates/easy_converter.json"
+ ]
+ },
+ "path": "~/Easy_Converter"
+ },
+ {
+ "name": "EasyConverterGUI",
+ "type": "gui",
+ "sortid": 137,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_converter_gui",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/world/inventory/EasyConverterGUIMenu.java",
+ "src/main/java/ch/netquick/easysurvival/client/gui/EasyConverterGUIScreen.java"
+ ]
+ },
+ "path": "~/Easy_Converter"
+ },
+ {
+ "name": "EasyConverterUpdateTick",
+ "type": "procedure",
+ "sortid": 138,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_converter_update_tick",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/EasyConverterUpdateTickProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Easy_Converter"
+ },
+ {
+ "name": "EasyConverterRecipe",
+ "type": "recipe",
+ "sortid": 139,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "easy_converter_recipe",
+ "metadata": {
+ "files": [
+ "src/main/resources/data/easysurvival/recipes/easy_converter_recipe.json"
+ ]
+ },
+ "path": "~/Easy_Converter"
+ },
+ {
+ "name": "CraftingStickGUI",
+ "type": "gui",
+ "sortid": 140,
+ "compiles": true,
+ "locked_code": false,
+ "registry_name": "crafting_stick_gui",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/client/gui/CraftingStickGUIScreen.java",
+ "src/main/java/ch/netquick/easysurvival/world/inventory/CraftingStickGUIMenu.java"
+ ]
+ },
+ "path": "~/Portable_CraftingTable"
+ },
+ {
+ "name": "OpenCraftingGUI",
+ "type": "procedure",
+ "sortid": 142,
+ "compiles": true,
+ "locked_code": true,
+ "registry_name": "open_crafting_gui",
+ "metadata": {
+ "files": [
+ "src/main/java/ch/netquick/easysurvival/procedures/OpenCraftingGUIProcedure.java"
+ ],
+ "dependencies": [
+ {
+ "name": "entity",
+ "type": "entity"
+ },
+ {
+ "name": "x",
+ "type": "number"
+ },
+ {
+ "name": "y",
+ "type": "number"
+ },
+ {
+ "name": "z",
+ "type": "number"
+ },
+ {
+ "name": "world",
+ "type": "world"
+ }
+ ]
+ },
+ "path": "~/Portable_CraftingTable"
+ }
+ ],
+ "variable_elements": [],
+ "sound_elements": [],
+ "tag_elements": {
+ "ITEMS:forge:tag_leggings": [
+ "CUSTOM:NetherrackArmor.legs",
+ "Items.LEATHER_LEGGINGS",
+ "Items.CHAINMAIL_LEGGINGS",
+ "Items.IRON_LEGGINGS",
+ "Items.GOLDEN_LEGGINGS",
+ "Items.DIAMOND_LEGGINGS",
+ "Items.NETHERITE_LEGGINGS"
+ ],
+ "ITEMS:forge:tag_armor": [
+ "CUSTOM:NetherrackArmor.helmet",
+ "CUSTOM:NetherrackArmor.body",
+ "CUSTOM:NetherrackArmor.legs",
+ "CUSTOM:NetherrackArmor.boots",
+ "Items.LEATHER_HELMET",
+ "Items.LEATHER_CHESTPLATE",
+ "Items.LEATHER_LEGGINGS",
+ "Items.LEATHER_BOOTS",
+ "Items.CHAINMAIL_HELMET",
+ "Items.CHAINMAIL_CHESTPLATE",
+ "Items.CHAINMAIL_LEGGINGS",
+ "Items.CHAINMAIL_BOOTS",
+ "Items.TURTLE_HELMET",
+ "Items.IRON_HELMET",
+ "Items.IRON_CHESTPLATE",
+ "Items.IRON_LEGGINGS",
+ "Items.IRON_BOOTS",
+ "Items.GOLDEN_HELMET",
+ "Items.GOLDEN_CHESTPLATE",
+ "Items.GOLDEN_LEGGINGS",
+ "Items.GOLDEN_BOOTS",
+ "Items.DIAMOND_HELMET",
+ "Items.DIAMOND_CHESTPLATE",
+ "Items.DIAMOND_LEGGINGS",
+ "Items.DIAMOND_BOOTS",
+ "Items.NETHERITE_HELMET",
+ "Items.NETHERITE_CHESTPLATE",
+ "Items.NETHERITE_LEGGINGS",
+ "Items.NETHERITE_BOOTS"
+ ],
+ "ITEMS:forge:tag_log": [
+ "Blocks.LOG#0",
+ "Blocks.LOG#1",
+ "Blocks.LOG#2",
+ "Blocks.LOG#3",
+ "Blocks.LOG2#0",
+ "Blocks.LOG2#1",
+ "Blocks.WARPED_STEM",
+ "Blocks.CRIMSON_STEM",
+ "Blocks.STRIPPED_OAK_LOG",
+ "Blocks.STRIPPED_SPRUCE_LOG",
+ "Blocks.STRIPPED_BIRCH_LOG",
+ "Blocks.STRIPPED_JUNGLE_LOG",
+ "Blocks.STRIPPED_ACACIA_LOG",
+ "Blocks.STRIPPED_DARK_OAK_LOG",
+ "Blocks.STRIPPED_WARPED_STEM",
+ "Blocks.STRIPPED_CRIMSON_STEM",
+ "Blocks.DARK_OAK_WOOD",
+ "Blocks.MANGROVE_LOG",
+ "Blocks.CHERRY_LOG",
+ "Blocks.STRIPPED_CHERRY_LOG",
+ "Blocks.STRIPPED_MANGROVE_LOG"
+ ],
+ "ITEMS:forge:tag_helmet": [
+ "Items.IRON_HELMET",
+ "Items.CHAINMAIL_HELMET",
+ "Items.LEATHER_HELMET",
+ "Items.TURTLE_HELMET",
+ "Items.GOLDEN_HELMET",
+ "Items.DIAMOND_HELMET",
+ "Items.NETHERITE_HELMET"
+ ],
+ "ITEMS:minecraft:tagseeds": [
+ "Items.WHEAT_SEEDS",
+ "Items.PUMPKIN_SEEDS",
+ "Items.TORCHFLOWER_SEEDS",
+ "Items.MELON_SEEDS",
+ "Items.BEETROOT_SEEDS",
+ "Items.CARROT",
+ "Items.POTATO",
+ "Items.CHORUS_FRUIT"
+ ],
+ "ITEMS:forge:tag_chest": [
+ "CUSTOM:NetherrackArmor.body",
+ "Items.LEATHER_CHESTPLATE",
+ "Items.CHAINMAIL_CHESTPLATE",
+ "Items.IRON_CHESTPLATE",
+ "Items.GOLDEN_CHESTPLATE",
+ "Items.DIAMOND_CHESTPLATE",
+ "Items.NETHERITE_CHESTPLATE"
+ ],
+ "ITEMS:forge:tag_intake": [
+ "Blocks.STONE#0",
+ "Blocks.STONE#1",
+ "Blocks.STONE#3",
+ "Blocks.STONE#5",
+ "Blocks.SMOOTH_STONE",
+ "Blocks.GRASS",
+ "Blocks.DIRT#0",
+ "Blocks.COBBLESTONE",
+ "Blocks.MOSSY_COBBLESTONE",
+ "Blocks.PLANKS#0",
+ "Blocks.PLANKS#1",
+ "Blocks.PLANKS#2",
+ "Blocks.PLANKS#3",
+ "Blocks.PLANKS#4",
+ "Blocks.PLANKS#5",
+ "Blocks.CRIMSON_PLANKS",
+ "Blocks.WARPED_PLANKS",
+ "Blocks.SAPLING#0",
+ "Blocks.SAPLING#1",
+ "Blocks.SAPLING#2",
+ "Blocks.SAPLING#3",
+ "Blocks.SAPLING#4",
+ "Blocks.SAPLING#5",
+ "Blocks.REEDS",
+ "Blocks.SAND#0",
+ "Blocks.SAND#1",
+ "Blocks.GRAVEL",
+ "Blocks.MAGMA",
+ "Blocks.OBSIDIAN",
+ "Blocks.CRYING_OBSIDIAN",
+ "Blocks.COAL_ORE",
+ "Blocks.IRON_ORE",
+ "Blocks.REDSTONE_ORE",
+ "Blocks.LIT_REDSTONE_ORE",
+ "Blocks.GOLD_ORE",
+ "Blocks.LAPIS_ORE",
+ "Blocks.DIAMOND_ORE",
+ "Blocks.EMERALD_ORE",
+ "Blocks.QUARTZ_ORE",
+ "Blocks.NETHER_GOLD_ORE",
+ "Blocks.GILDED_BLACKSTONE",
+ "Blocks.COAL_BLOCK",
+ "Blocks.IRON_BLOCK",
+ "Blocks.REDSTONE_BLOCK",
+ "Blocks.GOLD_BLOCK",
+ "Blocks.LAPIS_BLOCK",
+ "Blocks.DIAMOND_BLOCK",
+ "Blocks.EMERALD_BLOCK",
+ "Blocks.NETHERITE_BLOCK",
+ "Blocks.QUARTZ_BLOCK#0",
+ "Blocks.QUARTZ_BLOCK#1",
+ "Blocks.QUARTZ_BLOCK#2",
+ "Blocks.QUARTZ_BLOCK#3",
+ "Blocks.QUARTZ_BRICKS",
+ "Blocks.SLIME_BLOCK",
+ "Blocks.LOG",
+ "Blocks.LOG2",
+ "Blocks.WARPED_STEM",
+ "Blocks.CRIMSON_STEM",
+ "Blocks.STRIPPED_OAK_LOG",
+ "Blocks.STRIPPED_SPRUCE_LOG",
+ "Blocks.STRIPPED_BIRCH_LOG",
+ "Blocks.STRIPPED_JUNGLE_LOG",
+ "Blocks.STRIPPED_ACACIA_LOG",
+ "Blocks.STRIPPED_DARK_OAK_LOG",
+ "Blocks.STRIPPED_WARPED_STEM",
+ "Blocks.STRIPPED_CRIMSON_STEM",
+ "Blocks.OAK_WOOD",
+ "Blocks.SPRUCE_WOOD",
+ "Blocks.BIRCH_WOOD",
+ "Blocks.JUNGLE_WOOD",
+ "Blocks.JUNGLE_WOOD",
+ "Blocks.ACACIA_WOOD",
+ "Blocks.DARK_OAK_WOOD",
+ "Blocks.WARPED_HYPHAE",
+ "Blocks.CRIMSON_HYPHAE",
+ "Blocks.STRIPPED_OAK_WOOD",
+ "Blocks.STRIPPED_SPRUCE_WOOD",
+ "Blocks.STRIPPED_BIRCH_WOOD",
+ "Blocks.STRIPPED_JUNGLE_WOOD",
+ "Blocks.STRIPPED_ACACIA_WOOD",
+ "Blocks.STRIPPED_DARK_OAK_WOOD",
+ "Blocks.STRIPPED_WARPED_HYPHAE",
+ "Blocks.STRIPPED_CRIMSON_HYPHAE",
+ "Blocks.LEAVES",
+ "Blocks.SPONGE#0",
+ "Blocks.SANDSTONE#0",
+ "Blocks.SANDSTONE#1",
+ "Blocks.SANDSTONE#2",
+ "Blocks.SMOOTH_SANDSTONE",
+ "Blocks.RED_SANDSTONE#0",
+ "Blocks.RED_SANDSTONE#1",
+ "Blocks.RED_SANDSTONE#2",
+ "Blocks.SMOOTH_RED_SANDSTONE",
+ "Blocks.NOTEBLOCK",
+ "Blocks.RAIL",
+ "Blocks.GOLDEN_RAIL",
+ "Blocks.DETECTOR_RAIL",
+ "Blocks.ACTIVATOR_RAIL",
+ "Blocks.NETHER_BRICK",
+ "Blocks.CHISELED_NETHER_BRICKS",
+ "Blocks.CRACKED_NETHER_BRICKS",
+ "Blocks.RED_NETHER_BRICK",
+ "Blocks.NETHERRACK",
+ "Blocks.WARPED_NYLIUM",
+ "Blocks.CRIMSON_NYLIUM",
+ "Blocks.SOUL_SAND",
+ "Blocks.SOUL_SOIL",
+ "Blocks.GLOWSTONE",
+ "Blocks.SHROOMLIGHT",
+ "Blocks.BONE_BLOCK",
+ "Blocks.NETHER_WART_BLOCK",
+ "Blocks.STONEBRICK#0",
+ "Blocks.STONEBRICK#1",
+ "Blocks.STONEBRICK#2",
+ "Blocks.STONEBRICK#3",
+ "Blocks.END_STONE",
+ "Blocks.END_BRICKS",
+ "Blocks.PURPUR_BLOCK",
+ "Blocks.PURPUR_PILLAR",
+ "Blocks.PURPUR_DOUBLE_SLAB",
+ "Blocks.WOOL#0",
+ "Blocks.WOOL#1",
+ "Blocks.WOOL#2",
+ "Blocks.WOOL#3",
+ "Blocks.WOOL#4",
+ "Blocks.WOOL#5",
+ "Blocks.WOOL#6",
+ "Blocks.WOOL#7",
+ "Blocks.WOOL#8",
+ "Blocks.WOOL#9",
+ "Blocks.WOOL#10",
+ "Blocks.WOOL#11",
+ "Blocks.WOOL#12",
+ "Blocks.WOOL#13",
+ "Blocks.WOOL#14",
+ "Blocks.WOOL#15",
+ "Blocks.HARDENED_CLAY",
+ "Blocks.STAINED_HARDENED_CLAY#0",
+ "Blocks.STAINED_HARDENED_CLAY#1",
+ "Blocks.STAINED_HARDENED_CLAY#2",
+ "Blocks.STAINED_HARDENED_CLAY#3",
+ "Blocks.STAINED_HARDENED_CLAY#4",
+ "Blocks.STAINED_HARDENED_CLAY#5",
+ "Blocks.STAINED_HARDENED_CLAY#6",
+ "Blocks.STAINED_HARDENED_CLAY#7",
+ "Blocks.STAINED_HARDENED_CLAY#8",
+ "Blocks.STAINED_HARDENED_CLAY#9",
+ "Blocks.STAINED_HARDENED_CLAY#10",
+ "Blocks.STAINED_HARDENED_CLAY#11",
+ "Blocks.STAINED_HARDENED_CLAY#12",
+ "Blocks.STAINED_HARDENED_CLAY#13",
+ "Blocks.STAINED_HARDENED_CLAY#14",
+ "Blocks.STAINED_HARDENED_CLAY#15",
+ "Blocks.GLASS",
+ "Items.DIAMOND",
+ "Items.DYE#4",
+ "Items.DYE#15",
+ "Items.COAL#0",
+ "Items.IRON_INGOT",
+ "Items.GOLD_INGOT",
+ "Items.GOLD_NUGGET",
+ "Items.NETHERITE_INGOT",
+ "Items.NETHERITE_SCRAP",
+ "Items.EMERALD",
+ "Items.QUARTZ",
+ "Items.WHEAT",
+ "Items.FLINT",
+ "Items.APPLE",
+ "Items.FEATHER",
+ "Items.STRING",
+ "Items.GUNPOWDER",
+ "Items.BEEF",
+ "Items.PORKCHOP",
+ "Items.CHICKEN",
+ "Items.BONE",
+ "Items.LEATHER",
+ "Blocks.LOG",
+ "Blocks.LOG#0",
+ "Blocks.LOG#1",
+ "Blocks.LOG#2",
+ "Blocks.LOG#3",
+ "Blocks.LOG2#0",
+ "Blocks.LOG2#1"
+ ],
+ "BLOCKS:minecraft:mineable/pickaxe": [
+ "~CUSTOM:EasyAnvil",
+ "~CUSTOM:TreeCrop",
+ "~CUSTOM:Crop"
+ ],
+ "ITEMS:forge:tag_stick": [
+ "CUSTOM:NetherStick",
+ "Items.STICK"
+ ],
+ "ITEMS:forge:planks": [
+ "Blocks.PLANKS#0",
+ "Blocks.PLANKS#1",
+ "Blocks.PLANKS#2",
+ "Blocks.PLANKS#3",
+ "Blocks.PLANKS#4",
+ "Blocks.PLANKS#5",
+ "Blocks.CRIMSON_PLANKS",
+ "Blocks.WARPED_PLANKS"
+ ],
+ "ITEMS:forge:tag_boots": [
+ "CUSTOM:NetherrackArmor.boots",
+ "CUSTOM:NetherrackArmor.boots",
+ "Items.LEATHER_BOOTS",
+ "Items.CHAINMAIL_BOOTS",
+ "Items.IRON_BOOTS",
+ "Items.GOLDEN_BOOTS",
+ "Items.DIAMOND_BOOTS",
+ "Items.NETHERITE_BOOTS"
+ ],
+ "ITEMS:minecraft:tagstone": [
+ "Blocks.STONE#0",
+ "Blocks.STONE#1",
+ "Blocks.STONE#3",
+ "Blocks.STONE#4",
+ "Blocks.STONE#5",
+ "Blocks.STONE#6",
+ "Blocks.SMOOTH_STONE",
+ "Blocks.DEEPSLATE",
+ "Blocks.COBBLED_DEEPSLATE",
+ "Blocks.POLISHED_DEEPSLATE",
+ "Blocks.DEEPSLATE_TILES",
+ "Blocks.DEEPSLATE_BRICKS",
+ "Blocks.CALCITE",
+ "Blocks.DRIPSTONE_BLOCK",
+ "Blocks.COBBLESTONE",
+ "Blocks.MOSSY_COBBLESTONE",
+ "Blocks.DIRT#2",
+ "Blocks.CRACKED_DEEPSLATE_TILES"
+ ],
+ "ITEMS:minecraft:tagsaplings": [
+ "Blocks.SAPLING#0",
+ "Blocks.SAPLING#1",
+ "Blocks.SAPLING#2",
+ "Blocks.SAPLING#3",
+ "Blocks.SAPLING#4",
+ "Blocks.SAPLING#5",
+ "Blocks.CHERRY_SAPLING",
+ "Blocks.BAMBOO_SAPLING",
+ "Blocks.REEDS",
+ "Items.REEDS",
+ "Blocks.CACTUS",
+ "Blocks.MANGROVE_PROPAGULE"
+ ]
+ },
+ "language_map": {
+ "en_us": {
+ "gui.easysurvival.crop_gui.label_seed": "Seed",
+ "gui.easysurvival.teleport_set_gui.TeleportName": "Name",
+ "gui.easysurvival.teleport_set_gui.button_set": "Set",
+ "gui.easysurvival.easy_smelter_gui.label_easysmelter": "EasySmelter",
+ "block.easysurvival.spawner_creeper": "Spawner Creeper",
+ "itemGroup.tabeasy_survival": "Easy Survival",
+ "block.easysurvival.spawner_pillager": "Spawner Pillager",
+ "item.easysurvival.portable_crafting_table": "Portable Crafting Table",
+ "gui.easysurvival.easy_enchantment_table_gui.label_easyenchant": "EasyEnchant",
+ "item.easysurvival.quarz_axe": "Quarz Axe",
+ "gui.easysurvival.teleporter_gui.button_teleport": "Teleport",
+ "item.easysurvival.basalt_sword": "Basalt Sword",
+ "block.easysurvival.crop": "Crop",
+ "gui.easysurvival.easy_saw_gui.label_template": "Template",
+ "gui.easysurvival.easy_fridge_gui.label_easyfridge": "EasyFridge",
+ "item.easysurvival.netherrack_armor_leggings": "Netherrack Leggings",
+ "gui.easysurvival.teleporter_gui.label_teleport_1": "Teleport 1",
+ "block.easysurvival.easy_intake": "Easy Intake",
+ "item.easysurvival.netherrack_armor_chestplate": "Netherrack Chestplate",
+ "block.easysurvival.spawner_ghast": "Spawner Ghast",
+ "gui.easysurvival.crop_gui.label_growcrop": "GrowCrop",
+ "item.easysurvival.netherrack_sword": "Netherrack Sword",
+ "gui.easysurvival.teleporter_gui.label_teleport_2": "Teleport 2",
+ "block.easysurvival.spawner_evoker": "Spawner Evoker",
+ "block.easysurvival.spawner_blaze": "Spawner Blaze",
+ "gui.easysurvival.easy_saw_gui.label_easysaw": "EasySaw",
+ "block.easysurvival.easy_saw": "Easy Saw",
+ "gui.easysurvival.teleport_set_gui.label_set_teleport": "Set Teleport",
+ "item.easysurvival.netherrack_axe": "Netherrack Axe",
+ "block.easysurvival.easy_fridge": "Easy Fridge",
+ "block.easysurvival.spawner_slime": "Spawner Slime",
+ "block.easysurvival.easy_anvil": "Easy Anvil",
+ "gui.easysurvival.tree_crop_gui.label_treecrop": "TreeCrop",
+ "item.easysurvival.basalt_axe": "Basalt Axe",
+ "item_group.easysurvival.easy_survival": "Easy Survival",
+ "gamerule.spawnersActive": "Spawners active",
+ "item.easysurvival.quarz_sword": "Quarz Sword",
+ "block.easysurvival.tree_crop": "Tree Crop",
+ "gui.easysurvival.easy_forge_gui.label_empty": "\u003e\u003e",
+ "block.easysurvival.teleporter_plate": "Teleporter Plate",
+ "item.easysurvival.netherrack_pickaxe": "Netherrack Pickaxe",
+ "gui.easysurvival.teleporter_gui.label_easyteleport": "EasyTeleport",
+ "item.easysurvival.basalt_pickaxe": "Basalt Pickaxe",
+ "block.easysurvival.easy_converter": "Easy Converter",
+ "item.easysurvival.netherrack_armor_helmet": "Netherrack Helmet",
+ "gui.easysurvival.easy_enchantment_table_gui.label_item": "Item",
+ "block.easysurvival.easy_smelter": "Easy Smelter",
+ "item.easysurvival.netherrack_armor_boots": "Netherrack Boots",
+ "block.easysurvival.spawner_wither_skelett": "Spawner Wither Skeleton",
+ "gui.easysurvival.easy_enchantment_table_gui.label_lapis_lazuli": "Lapis Lazuli",
+ "block.easysurvival.easy_forge": "Easy Forge",
+ "gamerule.spawnersActive.description": "Sets if custom spawners are active or inactive",
+ "block.easysurvival.easy_forge_auto": "Easy Forge",
+ "item.easysurvival.quarz_pickaxe": "Quarz Pickaxe",
+ "item.easysurvival.netherrack_shovel": "Netherrack Shovel",
+ "item.easysurvival.quarz_hoe": "Quarz Hoe",
+ "item.easysurvival.netherrack_hoe": "Netherrack Hoe",
+ "gui.easysurvival.teleporter_gui.button_teleport1": "Teleport",
+ "gui.easysurvival.easy_converter_gui.label_easyconverter": "EasyConverter",
+ "gui.easysurvival.easy_anvil_gui.label_ingot": "Ingot",
+ "item.easysurvival.basalt_shovel": "Basalt Shovel",
+ "gui.easysurvival.easy_anvil_gui.label_easyanvil": "EasyAnvil",
+ "gui.easysurvival.easy_intake_gui.label_easyintake": "EasyIntake",
+ "item.easysurvival.basalt_hoe": "Basalt Hoe",
+ "item.easysurvival.nether_stick": "Nether Stick",
+ "block.easysurvival.easy_enchantment_table": "Easy Enchantment Table",
+ "gui.easysurvival.easy_forge_gui.label_easyforge": "EasyForge",
+ "item.easysurvival.quarz_shovel": "Quarz Shovel"
+ }
+ },
+ "foldersRoot": {
+ "name": "~",
+ "children": [
+ {
+ "name": "Crop_Plants",
+ "children": []
+ },
+ {
+ "name": "Crop_Trees",
+ "children": []
+ },
+ {
+ "name": "Netherrack_Tools",
+ "children": []
+ },
+ {
+ "name": "Basalt_Tools",
+ "children": []
+ },
+ {
+ "name": "Quarz_Tools",
+ "children": []
+ },
+ {
+ "name": "Misc_Recipes",
+ "children": []
+ },
+ {
+ "name": "Spawner",
+ "children": []
+ },
+ {
+ "name": "EasyEnchantmentTable",
+ "children": []
+ },
+ {
+ "name": "Easy_Anvil",
+ "children": []
+ },
+ {
+ "name": "Easy_Forge",
+ "children": []
+ },
+ {
+ "name": "DedicatedStorage",
+ "children": []
+ },
+ {
+ "name": "Teleporter",
+ "children": []
+ },
+ {
+ "name": "Easy_Fridge",
+ "children": []
+ },
+ {
+ "name": "Easy_Saw",
+ "children": []
+ },
+ {
+ "name": "Easy_Smelter",
+ "children": []
+ },
+ {
+ "name": "Easy_Converter",
+ "children": []
+ },
+ {
+ "name": "Portable_CraftingTable",
+ "children": []
+ }
+ ]
+ },
+ "workspaceSettings": {
+ "modid": "easysurvival",
+ "modName": "EasySurvival",
+ "version": "1.0.0",
+ "author": "netqu, MCreator",
+ "websiteURL": "https://mcreator.net",
+ "license": "Academic Free License v3.0",
+ "serverSideOnly": false,
+ "requiredMods": [],
+ "dependencies": [],
+ "dependants": [],
+ "mcreatorDependencies": [],
+ "currentGenerator": "forge-1.20.1",
+ "modElementsPackage": "ch.netquick.easysurvival"
+ },
+ "mcreatorVersion": 202400110712
+}
\ No newline at end of file
diff --git a/elements/BasaltAxe.mod.json b/elements/BasaltAxe.mod.json
new file mode 100644
index 0000000..0e8529c
--- /dev/null
+++ b/elements/BasaltAxe.mod.json
@@ -0,0 +1,34 @@
+{
+ "_fv": 60,
+ "_type": "tool",
+ "definition": {
+ "toolType": "Axe",
+ "renderType": 0,
+ "blockingRenderType": 0,
+ "texture": "basalt_axe",
+ "customModelName": "Normal",
+ "blockingModelName": "Normal blocking",
+ "name": "Basalt Axe",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "creativeTab": {
+ "value": "TOOLS"
+ },
+ "harvestLevel": 2,
+ "efficiency": 5.0,
+ "attackSpeed": 1.0,
+ "enchantability": 11,
+ "damageVsEntity": 2.0,
+ "usageCount": 183,
+ "blocksAffected": [],
+ "repairItems": [
+ {
+ "value": "Blocks.BASALT"
+ }
+ ],
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false
+ }
+}
\ No newline at end of file
diff --git a/elements/BasaltAxeRecipe.mod.json b/elements/BasaltAxeRecipe.mod.json
new file mode 100644
index 0000000..823cbb4
--- /dev/null
+++ b/elements/BasaltAxeRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.BASALT"
+ },
+ {
+ "value": "Blocks.BASALT"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.BASALT"
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:BasaltAxe"
+ },
+ "name": "basalt_axe_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/BasaltHoe.mod.json b/elements/BasaltHoe.mod.json
new file mode 100644
index 0000000..833db2c
--- /dev/null
+++ b/elements/BasaltHoe.mod.json
@@ -0,0 +1,34 @@
+{
+ "_fv": 60,
+ "_type": "tool",
+ "definition": {
+ "toolType": "Hoe",
+ "renderType": 0,
+ "blockingRenderType": 0,
+ "texture": "basalt_hoe",
+ "customModelName": "Normal",
+ "blockingModelName": "Normal blocking",
+ "name": "Basalt Hoe",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "creativeTab": {
+ "value": "TOOLS"
+ },
+ "harvestLevel": 2,
+ "efficiency": 5.0,
+ "attackSpeed": 1.0,
+ "enchantability": 11,
+ "damageVsEntity": 2.0,
+ "usageCount": 183,
+ "blocksAffected": [],
+ "repairItems": [
+ {
+ "value": "Blocks.BASALT"
+ }
+ ],
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false
+ }
+}
\ No newline at end of file
diff --git a/elements/BasaltHoeRecipe.mod.json b/elements/BasaltHoeRecipe.mod.json
new file mode 100644
index 0000000..22396b0
--- /dev/null
+++ b/elements/BasaltHoeRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.BASALT"
+ },
+ {
+ "value": "Blocks.BASALT"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:BasaltHoe"
+ },
+ "name": "basalt_hoe_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/BasaltPickaxe.mod.json b/elements/BasaltPickaxe.mod.json
new file mode 100644
index 0000000..d6f391d
--- /dev/null
+++ b/elements/BasaltPickaxe.mod.json
@@ -0,0 +1,34 @@
+{
+ "_fv": 60,
+ "_type": "tool",
+ "definition": {
+ "toolType": "Pickaxe",
+ "renderType": 0,
+ "blockingRenderType": 0,
+ "texture": "basalt_pickaxe",
+ "customModelName": "Normal",
+ "blockingModelName": "Normal blocking",
+ "name": "Basalt Pickaxe",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "creativeTab": {
+ "value": "TOOLS"
+ },
+ "harvestLevel": 2,
+ "efficiency": 5.0,
+ "attackSpeed": 1.0,
+ "enchantability": 11,
+ "damageVsEntity": 2.0,
+ "usageCount": 183,
+ "blocksAffected": [],
+ "repairItems": [
+ {
+ "value": "Blocks.BASALT"
+ }
+ ],
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false
+ }
+}
\ No newline at end of file
diff --git a/elements/BasaltPickaxeRecipe.mod.json b/elements/BasaltPickaxeRecipe.mod.json
new file mode 100644
index 0000000..0b5ca0f
--- /dev/null
+++ b/elements/BasaltPickaxeRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.BASALT"
+ },
+ {
+ "value": "Blocks.BASALT"
+ },
+ {
+ "value": "Blocks.BASALT"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:BasaltPickaxe"
+ },
+ "name": "basalt_pickaxe_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/BasaltShovel.mod.json b/elements/BasaltShovel.mod.json
new file mode 100644
index 0000000..b926fea
--- /dev/null
+++ b/elements/BasaltShovel.mod.json
@@ -0,0 +1,34 @@
+{
+ "_fv": 60,
+ "_type": "tool",
+ "definition": {
+ "toolType": "Spade",
+ "renderType": 0,
+ "blockingRenderType": 0,
+ "texture": "basalt_shovel",
+ "customModelName": "Normal",
+ "blockingModelName": "Normal blocking",
+ "name": "Basalt Shovel",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "creativeTab": {
+ "value": "TOOLS"
+ },
+ "harvestLevel": 2,
+ "efficiency": 5.0,
+ "attackSpeed": 1.0,
+ "enchantability": 11,
+ "damageVsEntity": 2.0,
+ "usageCount": 183,
+ "blocksAffected": [],
+ "repairItems": [
+ {
+ "value": "Blocks.BASALT"
+ }
+ ],
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false
+ }
+}
\ No newline at end of file
diff --git a/elements/BasaltShovelRecipe.mod.json b/elements/BasaltShovelRecipe.mod.json
new file mode 100644
index 0000000..d03d229
--- /dev/null
+++ b/elements/BasaltShovelRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.BASALT"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:BasaltShovel"
+ },
+ "name": "basalt_shovel_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/BasaltSword.mod.json b/elements/BasaltSword.mod.json
new file mode 100644
index 0000000..6419feb
--- /dev/null
+++ b/elements/BasaltSword.mod.json
@@ -0,0 +1,34 @@
+{
+ "_fv": 60,
+ "_type": "tool",
+ "definition": {
+ "toolType": "Sword",
+ "renderType": 0,
+ "blockingRenderType": 0,
+ "texture": "basalt_sword",
+ "customModelName": "Normal",
+ "blockingModelName": "Normal blocking",
+ "name": "Basalt Sword",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "creativeTab": {
+ "value": "COMBAT"
+ },
+ "harvestLevel": 2,
+ "efficiency": 5.0,
+ "attackSpeed": 1.0,
+ "enchantability": 11,
+ "damageVsEntity": 2.0,
+ "usageCount": 183,
+ "blocksAffected": [],
+ "repairItems": [
+ {
+ "value": "Blocks.BASALT"
+ }
+ ],
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false
+ }
+}
\ No newline at end of file
diff --git a/elements/BasaltSwordRecipe.mod.json b/elements/BasaltSwordRecipe.mod.json
new file mode 100644
index 0000000..cc42f2a
--- /dev/null
+++ b/elements/BasaltSwordRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.BASALT"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.BASALT"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:BasaltSword"
+ },
+ "name": "basalt_sword_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/CobbleStoneRecipe.mod.json b/elements/CobbleStoneRecipe.mod.json
new file mode 100644
index 0000000..c9b170e
--- /dev/null
+++ b/elements/CobbleStoneRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": true,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "Blocks.COBBLESTONE"
+ },
+ "name": "cobble_stone_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/CraftingStickGUI.mod.json b/elements/CraftingStickGUI.mod.json
new file mode 100644
index 0000000..cbe01ce
--- /dev/null
+++ b/elements/CraftingStickGUI.mod.json
@@ -0,0 +1,184 @@
+{
+ "_fv": 60,
+ "_type": "gui",
+ "definition": {
+ "type": 1,
+ "width": 176,
+ "height": 166,
+ "inventoryOffsetX": 0,
+ "inventoryOffsetY": 0,
+ "renderBgLayer": true,
+ "doesPauseGame": false,
+ "components": [
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 0,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 133,
+ "y": 96
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 1,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 151,
+ "y": 96
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 2,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 169,
+ "y": 96
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 3,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 133,
+ "y": 78
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 4,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 151,
+ "y": 78
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 5,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 169,
+ "y": 78
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 6,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 133,
+ "y": 60
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 7,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 151,
+ "y": 60
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 8,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 169,
+ "y": 60
+ }
+ }
+ ],
+ "gridSettings": {
+ "sx": 18,
+ "sy": 18,
+ "ox": 11,
+ "oy": 15,
+ "snapOnGrid": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/elements/Crop.mod.json b/elements/Crop.mod.json
new file mode 100644
index 0000000..bbfe7a5
--- /dev/null
+++ b/elements/Crop.mod.json
@@ -0,0 +1,157 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "texture",
+ "textureTop": "simple-wood-texture_1048-4655",
+ "textureLeft": "simple-wood-texture_1048-4655",
+ "textureFront": "simple-wood-texture_1048-4655",
+ "textureRight": "simple-wood-texture_1048-4655",
+ "textureBack": "simple-wood-texture_1048-4655",
+ "renderType": 2,
+ "customModelName": "seedcrop:default",
+ "rotationMode": 0,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Crop",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "CUSTOM:EasySurvival"
+ },
+ "destroyTool": "pickaxe",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": true,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ROCK"
+ },
+ "tickRate": 50,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "emittedRedstonePower": {
+ "fixedValue": 15.0
+ },
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "BLOCK",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "GROUND"
+ },
+ "breakSound": {
+ "value": ""
+ },
+ "fallSound": {
+ "value": ""
+ },
+ "hitSound": {
+ "value": ""
+ },
+ "placeSound": {
+ "value": ""
+ },
+ "stepSound": {
+ "value": ""
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": true,
+ "guiBoundTo": "CropGUI",
+ "openGUIOnRightClick": true,
+ "inventorySize": 8,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "inventoryInSlotIDs": [
+ 0
+ ],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "CropUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/CropGUI.mod.json b/elements/CropGUI.mod.json
new file mode 100644
index 0000000..194ef33
--- /dev/null
+++ b/elements/CropGUI.mod.json
@@ -0,0 +1,154 @@
+{
+ "_fv": 60,
+ "_type": "gui",
+ "definition": {
+ "type": 1,
+ "width": 176,
+ "height": 166,
+ "inventoryOffsetX": 0,
+ "inventoryOffsetY": 0,
+ "renderBgLayer": true,
+ "doesPauseGame": false,
+ "components": [
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 0,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": false,
+ "x": 133,
+ "y": 84
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 1,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 169,
+ "y": 84
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 2,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 187,
+ "y": 84
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 3,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 205,
+ "y": 84
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 4,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 223,
+ "y": 84
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 5,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 241,
+ "y": 84
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 6,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 259,
+ "y": 84
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 7,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 277,
+ "y": 84
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_growcrop",
+ "text": {
+ "fixedValue": "GrowCrop"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 133,
+ "y": 45
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_seed",
+ "text": {
+ "fixedValue": "Seed"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 133,
+ "y": 74
+ }
+ }
+ ],
+ "gridSettings": {
+ "sx": 18,
+ "sy": 18,
+ "ox": 11,
+ "oy": 15,
+ "snapOnGrid": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/elements/CropRecipe.mod.json b/elements/CropRecipe.mod.json
new file mode 100644
index 0000000..0931bcb
--- /dev/null
+++ b/elements/CropRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.GLASS"
+ },
+ {
+ "value": "Blocks.GLASS"
+ },
+ {
+ "value": "Blocks.GLASS"
+ },
+ {
+ "value": "Blocks.DIRT"
+ },
+ {
+ "value": "TAG:minecraft:tagseeds"
+ },
+ {
+ "value": "Blocks.DIRT"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:Crop"
+ },
+ "name": "crop_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/CropUpdateTick.mod.json b/elements/CropUpdateTick.mod.json
new file mode 100644
index 0000000..eed27c3
--- /dev/null
+++ b/elements/CropUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "previousRecipeSlotnono_ext_trigger0Items.WHEAT_SEEDSlocal:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Items.WHEATlocal:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Items.PUMPKIN_SEEDSlocal:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Blocks.PUMPKINlocal:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Items.MELON_SEEDSlocal:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Items.MELONlocal:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Items.BEETROOT_SEEDSlocal:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Items.BEETROOTlocal:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Items.CARROTlocal:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Items.CARROTlocal:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Items.POTATOlocal:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Items.POTATOlocal:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Items.CHORUS_FRUITlocal:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Items.CHORUS_FRUIT_POPPEDlocal:SlotnoBREAKlocal:SlotnoADDlocal:Slotno1"
+ }
+}
\ No newline at end of file
diff --git a/elements/DedicatedStorageGUI.mod.json b/elements/DedicatedStorageGUI.mod.json
new file mode 100644
index 0000000..09dcbec
--- /dev/null
+++ b/elements/DedicatedStorageGUI.mod.json
@@ -0,0 +1,508 @@
+{
+ "_fv": 60,
+ "_type": "gui",
+ "definition": {
+ "type": 1,
+ "width": 176,
+ "height": 166,
+ "inventoryOffsetX": 0,
+ "inventoryOffsetY": 0,
+ "renderBgLayer": true,
+ "doesPauseGame": false,
+ "components": [
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 0,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 132,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 1,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 150,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 2,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 168,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 3,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 186,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 4,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 204,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 5,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 222,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 6,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 240,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 7,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 258,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 8,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 276,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 9,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 132,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 10,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 150,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 11,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 168,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 12,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 186,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 13,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 204,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 14,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 222,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 15,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 240,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 16,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 258,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 17,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 276,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 18,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 132,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 19,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 150,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 20,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 168,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 21,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 186,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 22,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 204,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 23,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 222,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 24,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 240,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 25,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 258,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 26,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 276,
+ "y": 93
+ }
+ }
+ ],
+ "gridSettings": {
+ "sx": 18,
+ "sy": 18,
+ "ox": 11,
+ "oy": 15,
+ "snapOnGrid": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyAnvil.mod.json b/elements/EasyAnvil.mod.json
new file mode 100644
index 0000000..f2aa495
--- /dev/null
+++ b/elements/EasyAnvil.mod.json
@@ -0,0 +1,149 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "anviltexture",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "anvil:default",
+ "rotationMode": 1,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Easy Anvil",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "CUSTOM:EasySurvival"
+ },
+ "destroyTool": "pickaxe",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": true,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ANVIL"
+ },
+ "tickRate": 10,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "emittedRedstonePower": {
+ "fixedValue": 15.0
+ },
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "ANVIL"
+ },
+ "breakSound": {
+ "value": ""
+ },
+ "fallSound": {
+ "value": ""
+ },
+ "hitSound": {
+ "value": ""
+ },
+ "placeSound": {
+ "value": ""
+ },
+ "stepSound": {
+ "value": ""
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": true,
+ "guiBoundTo": "EasyAnvilGUI",
+ "openGUIOnRightClick": true,
+ "inventorySize": 3,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [
+ 2
+ ],
+ "inventoryInSlotIDs": [],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "EasyAnvilUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyAnvilGUI.mod.json b/elements/EasyAnvilGUI.mod.json
new file mode 100644
index 0000000..fe4b31e
--- /dev/null
+++ b/elements/EasyAnvilGUI.mod.json
@@ -0,0 +1,118 @@
+{
+ "_fv": 60,
+ "_type": "gui",
+ "definition": {
+ "type": 1,
+ "width": 176,
+ "height": 166,
+ "inventoryOffsetX": 0,
+ "inventoryOffsetY": 0,
+ "renderBgLayer": true,
+ "doesPauseGame": false,
+ "components": [
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 0,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "onTakenFromSlot": {
+ "name": "EasyAnvilItemReset"
+ },
+ "onStackTransfer": {
+ "name": "EasyAnvilItemReset"
+ },
+ "x": 132,
+ "y": 84
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_easyanvil",
+ "text": {
+ "fixedValue": "EasyAnvil"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 132,
+ "y": 48
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 2,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "onTakenFromSlot": {
+ "name": "EasyAnvilItemTaken"
+ },
+ "onStackTransfer": {
+ "name": "EasyAnvilItemTaken"
+ },
+ "x": 276,
+ "y": 84
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": "Items.IRON_INGOT"
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 1,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "onTakenFromSlot": {
+ "name": "EasyAnvilItemReset"
+ },
+ "onStackTransfer": {
+ "name": "EasyAnvilItemReset"
+ },
+ "x": 150,
+ "y": 84
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_ingot",
+ "text": {
+ "fixedValue": "Ingot"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 169,
+ "y": 87
+ }
+ }
+ ],
+ "gridSettings": {
+ "sx": 18,
+ "sy": 18,
+ "ox": 11,
+ "oy": 15,
+ "snapOnGrid": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyAnvilItemReset.mod.json b/elements/EasyAnvilItemReset.mod.json
new file mode 100644
index 0000000..c32e983
--- /dev/null
+++ b/elements/EasyAnvilItemReset.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "no_ext_trigger12"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyAnvilItemTaken.mod.json b/elements/EasyAnvilItemTaken.mod.json
new file mode 100644
index 0000000..30189c1
--- /dev/null
+++ b/elements/EasyAnvilItemTaken.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "no_ext_trigger1011"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyAnvilRecipe.mod.json b/elements/EasyAnvilRecipe.mod.json
new file mode 100644
index 0000000..670931f
--- /dev/null
+++ b/elements/EasyAnvilRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.IRON_BLOCK"
+ },
+ {
+ "value": "Blocks.IRON_BLOCK"
+ },
+ {
+ "value": "Blocks.IRON_BLOCK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:EasyAnvil"
+ },
+ "name": "easy_anvil_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyAnvilUpdateTick.mod.json b/elements/EasyAnvilUpdateTick.mod.json
new file mode 100644
index 0000000..8c2ee4c
--- /dev/null
+++ b/elements/EasyAnvilUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "tempitemno_ext_triggerlocal:tempitem0GTE11GTlocal:tempitem0local:tempitem01local:tempitem2"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyConverter.mod.json b/elements/EasyConverter.mod.json
new file mode 100644
index 0000000..f4bfeaf
--- /dev/null
+++ b/elements/EasyConverter.mod.json
@@ -0,0 +1,151 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "bowl",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "crafter:default",
+ "rotationMode": 0,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Easy Converter",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "CUSTOM:EasySurvival"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ROCK"
+ },
+ "tickRate": 10,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "emittedRedstonePower": {
+ "fixedValue": 15.0
+ },
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "GROUND"
+ },
+ "breakSound": {
+ "value": ""
+ },
+ "fallSound": {
+ "value": ""
+ },
+ "hitSound": {
+ "value": ""
+ },
+ "placeSound": {
+ "value": ""
+ },
+ "stepSound": {
+ "value": ""
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": true,
+ "guiBoundTo": "EasyConverterGUI",
+ "openGUIOnRightClick": true,
+ "inventorySize": 2,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [
+ 1
+ ],
+ "inventoryInSlotIDs": [
+ 0
+ ],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "EasyConverterUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyConverterGUI.mod.json b/elements/EasyConverterGUI.mod.json
new file mode 100644
index 0000000..f053042
--- /dev/null
+++ b/elements/EasyConverterGUI.mod.json
@@ -0,0 +1,67 @@
+{
+ "_fv": 60,
+ "_type": "gui",
+ "definition": {
+ "type": 1,
+ "width": 176,
+ "height": 166,
+ "inventoryOffsetX": 0,
+ "inventoryOffsetY": 0,
+ "renderBgLayer": true,
+ "doesPauseGame": false,
+ "components": [
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 0,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 150,
+ "y": 84
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 1,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 204,
+ "y": 84
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_easyconverter",
+ "text": {
+ "fixedValue": "EasyConverter"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 132,
+ "y": 48
+ }
+ }
+ ],
+ "gridSettings": {
+ "sx": 18,
+ "sy": 18,
+ "ox": 11,
+ "oy": 15,
+ "snapOnGrid": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyConverterRecipe.mod.json b/elements/EasyConverterRecipe.mod.json
new file mode 100644
index 0000000..5ee2235
--- /dev/null
+++ b/elements/EasyConverterRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Items.IRON_INGOT"
+ },
+ {
+ "value": "Items.IRON_INGOT"
+ },
+ {
+ "value": "Items.IRON_INGOT"
+ },
+ {
+ "value": "TAG:minecraft:tagstone"
+ },
+ {
+ "value": "TAG:minecraft:tagstone"
+ },
+ {
+ "value": "TAG:minecraft:tagstone"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:EasyConverter"
+ },
+ "name": "easy_converter_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyConverterUpdateTick.mod.json b/elements/EasyConverterUpdateTick.mod.json
new file mode 100644
index 0000000..c3b6e3d
--- /dev/null
+++ b/elements/EasyConverterUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "InputStackOutputStackStackSizeAmountInAmountno_ext_triggerlocal:InputStack0ORlocal:InputStackBlocks.LOG#0local:InputStackBlocks.STRIPPED_OAK_WOODlocal:StackSize64local:Amount4local:InAmount1local:OutputStackBlocks.PLANKS#0ORlocal:InputStackBlocks.LOG#1local:InputStackBlocks.STRIPPED_SPRUCE_WOODlocal:StackSize64local:InAmount1local:Amount4local:OutputStackBlocks.PLANKS#1ORlocal:InputStackBlocks.LOG#2local:InputStackBlocks.STRIPPED_BIRCH_LOGlocal:StackSize64local:InAmount1local:Amount4local:OutputStackBlocks.PLANKS#2ORlocal:InputStackBlocks.LOG#3local:InputStackBlocks.STRIPPED_JUNGLE_LOGlocal:StackSize64local:InAmount1local:Amount4local:OutputStackBlocks.PLANKS#3ORlocal:InputStackBlocks.LOG2#0local:InputStackBlocks.STRIPPED_ACACIA_LOGlocal:StackSize64local:InAmount1local:Amount4local:OutputStackBlocks.PLANKS#4ORlocal:InputStackBlocks.LOG2#1local:InputStackBlocks.STRIPPED_DARK_OAK_LOGlocal:StackSize64local:InAmount1local:Amount4local:OutputStackBlocks.PLANKS#5ORlocal:InputStackBlocks.WARPED_STEMlocal:InputStackBlocks.STRIPPED_WARPED_STEMlocal:StackSize64local:InAmount1local:Amount4local:OutputStackBlocks.WARPED_PLANKSORlocal:InputStackBlocks.CRIMSON_STEMlocal:InputStackBlocks.STRIPPED_CRIMSON_STEMlocal:StackSize64local:InAmount1local:Amount4local:OutputStackBlocks.CRIMSON_PLANKSlocal:InputStackBlocks.BONE_BLOCKlocal:StackSize64local:InAmount1local:Amount9local:OutputStackItems.DYE#15local:InputStackItems.BONElocal:StackSize64local:InAmount1local:Amount3local:OutputStackItems.DYE#15local:InputStackforge:plankslocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.COAL#0local:InputStackItems.GOLD_NUGGETlocal:StackSize64local:InAmount9local:Amount1local:OutputStackItems.GOLD_INGOTlocal:InputStackBlocks.GOLD_ORElocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.GOLD_INGOTlocal:InputStackBlocks.NETHER_GOLD_ORElocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.GOLD_INGOTlocal:InputStackBlocks.IRON_ORElocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.IRON_INGOTlocal:InputStackItems.IRON_NUGGETlocal:StackSize64local:InAmount9local:Amount1local:OutputStackItems.IRON_INGOTlocal:InputStackItems.IRON_INGOTlocal:StackSize64local:InAmount9local:Amount1local:OutputStackBlocks.IRON_BLOCKlocal:InputStackItems.GOLD_INGOTlocal:StackSize64local:InAmount9local:Amount1local:OutputStackBlocks.GOLD_BLOCKlocal:InputStackItems.COAL#0local:StackSize64local:InAmount9local:Amount1local:OutputStackBlocks.COAL_BLOCKlocal:InputStackItems.DIAMONDlocal:StackSize64local:InAmount9local:Amount1local:OutputStackBlocks.DIAMOND_BLOCKlocal:InputStackItems.NETHERITE_INGOTlocal:StackSize64local:InAmount9local:Amount1local:OutputStackBlocks.NETHERITE_BLOCKlocal:InputStackItems.REDSTONElocal:StackSize64local:InAmount9local:Amount1local:OutputStackBlocks.REDSTONE_BLOCKlocal:InputStackItems.DYE#4local:StackSize64local:InAmount9local:Amount1local:OutputStackBlocks.LAPIS_BLOCKlocal:InputStackItems.WATER_BUCKETlocal:StackSize64local:InAmount0local:Amount1local:OutputStackBlocks.PACKED_ICElocal:InputStackBlocks.PACKED_ICElocal:StackSize16local:InAmount1local:Amount1local:OutputStackItems.SNOWBALLlocal:InputStackItems.SNOWBALLlocal:StackSize64local:InAmount4local:Amount1local:OutputStackBlocks.SNOWlocal:InputStackBlocks.NETHERRACKlocal:StackSize64local:InAmount1local:Amount1local:OutputStackBlocks.COBBLESTONElocal:InputStackBlocks.COBBLESTONElocal:StackSize64local:InAmount1local:Amount1local:OutputStackBlocks.STONE#0local:InputStackBlocks.STONE#0local:StackSize64local:InAmount1local:Amount1local:OutputStackBlocks.SMOOTH_STONElocal:InputStackItems.QUARTZlocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.IRON_INGOTlocal:InputStackBlocks.ANCIENT_DEBRISlocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.NETHERITE_SCRAPlocal:InputStackItems.WHEATlocal:StackSize64local:InAmount3local:Amount1local:OutputStackItems.BREADlocal:InputStackItems.GLOWSTONE_DUSTlocal:StackSize64local:InAmount9local:Amount1local:OutputStackBlocks.GLOWSTONElocal:InputStackItems.POTATOlocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.BAKED_POTATOlocal:InputStackItems.PORKCHOPlocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.COOKED_PORKCHOPlocal:InputStackItems.BEEFlocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.COOKED_BEEFlocal:InputStackItems.CHICKENlocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.COOKED_CHICKENlocal:InputStackItems.MUTTONlocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.COOKED_MUTTONlocal:InputStackItems.RABBITlocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.COOKED_RABBITlocal:InputStackItems.FISH#1local:StackSize64local:InAmount1local:Amount1local:OutputStackItems.COOKED_FISH#1local:InputStackItems.FISH#0local:StackSize64local:InAmount1local:Amount1local:OutputStackItems.COOKED_FISH#0local:InputStackBlocks.SAND#0local:StackSize64local:InAmount1local:Amount1local:OutputStackBlocks.GLASSlocal:InputStackItems.CHORUS_FRUITlocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.CHORUS_FRUIT_POPPEDlocal:InputStackBlocks.REEDSlocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.PAPERlocal:InputStackBlocks.END_STONElocal:StackSize64local:InAmount1local:Amount1local:OutputStackBlocks.END_BRICKSlocal:InputStackItems.RAW_IRONlocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.IRON_INGOTlocal:InputStackItems.RAW_COPPERlocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.COPPER_INGOTlocal:InputStackItems.RAW_GOLDlocal:StackSize64local:InAmount1local:Amount1local:OutputStackItems.GOLD_INGOTANDOR1Blocks.AIRAND1local:OutputStackLTE1MINUSlocal:StackSizelocal:AmountGTE0local:InAmountADD1local:Amountlocal:OutputStack1local:InAmount0"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyEnchantmentTable.mod.json b/elements/EasyEnchantmentTable.mod.json
new file mode 100644
index 0000000..d134967
--- /dev/null
+++ b/elements/EasyEnchantmentTable.mod.json
@@ -0,0 +1,157 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "enchantmenttexture",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "enchantmenttable:default",
+ "rotationMode": 1,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Easy Enchantment Table",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "CUSTOM:EasySurvival"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 14.5,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "MISCELLANEOUS"
+ },
+ "tickRate": 10,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "emittedRedstonePower": {
+ "fixedValue": 15.0
+ },
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "WOOD"
+ },
+ "breakSound": {
+ "value": ""
+ },
+ "fallSound": {
+ "value": ""
+ },
+ "hitSound": {
+ "value": ""
+ },
+ "placeSound": {
+ "value": ""
+ },
+ "stepSound": {
+ "value": ""
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": true,
+ "guiBoundTo": "EasyEnchantmentTableGUI",
+ "openGUIOnRightClick": true,
+ "inventorySize": 11,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9
+ ],
+ "inventoryInSlotIDs": [],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "EasyEnchantmentTableUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyEnchantmentTableGUI.mod.json b/elements/EasyEnchantmentTableGUI.mod.json
new file mode 100644
index 0000000..78acd2e
--- /dev/null
+++ b/elements/EasyEnchantmentTableGUI.mod.json
@@ -0,0 +1,325 @@
+{
+ "_fv": 60,
+ "_type": "gui",
+ "definition": {
+ "type": 1,
+ "width": 176,
+ "height": 166,
+ "inventoryOffsetX": 0,
+ "inventoryOffsetY": 0,
+ "renderBgLayer": true,
+ "doesPauseGame": false,
+ "components": [
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 0,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "onTakenFromSlot": {
+ "name": "EasyEnchantmentTableGUIreset"
+ },
+ "onStackTransfer": {
+ "name": "EasyEnchantmentTableGUIreset"
+ },
+ "x": 276,
+ "y": 48
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 1,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "onTakenFromSlot": {
+ "name": "EasyEnchantmentTableGUItakeItem1"
+ },
+ "onStackTransfer": {
+ "name": "EasyEnchantmentTableGUItakeItem1"
+ },
+ "x": 132,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 2,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "onTakenFromSlot": {
+ "name": "EasyEnchantmentTableGUItakeItem2"
+ },
+ "onStackTransfer": {
+ "name": "EasyEnchantmentTableGUItakeItem2"
+ },
+ "x": 150,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 3,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "onTakenFromSlot": {
+ "name": "EasyEnchantmentTableGUItakeItem3"
+ },
+ "onStackTransfer": {
+ "name": "EasyEnchantmentTableGUItakeItem3"
+ },
+ "x": 168,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 4,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "onTakenFromSlot": {
+ "name": "EasyEnchantmentTableGUItakeItem4"
+ },
+ "onStackTransfer": {
+ "name": "EasyEnchantmentTableGUItakeItem4"
+ },
+ "x": 186,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 5,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "onTakenFromSlot": {
+ "name": "EasyEnchantmentTableGUItakeItem5"
+ },
+ "onStackTransfer": {
+ "name": "EasyEnchantmentTableGUItakeItem5"
+ },
+ "x": 204,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 6,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "onTakenFromSlot": {
+ "name": "EasyEnchantmentTableGUItakeItem6"
+ },
+ "onStackTransfer": {
+ "name": "EasyEnchantmentTableGUItakeItem6"
+ },
+ "x": 222,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 7,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "onTakenFromSlot": {
+ "name": "EasyEnchantmentTableGUItakeItem7"
+ },
+ "onStackTransfer": {
+ "name": "EasyEnchantmentTableGUItakeItem7"
+ },
+ "x": 240,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 8,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "onTakenFromSlot": {
+ "name": "EasyEnchantmentTableGUItakeItem8"
+ },
+ "onStackTransfer": {
+ "name": "EasyEnchantmentTableGUItakeItem8"
+ },
+ "x": 258,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 9,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "onTakenFromSlot": {
+ "name": "EasyEnchantmentTableGUItakeItem9"
+ },
+ "onStackTransfer": {
+ "name": "EasyEnchantmentTableGUItakeItem9"
+ },
+ "x": 276,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": "Items.DYE#4"
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 10,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "onTakenFromSlot": {
+ "name": "EasyEnchantmentTableGUIreset"
+ },
+ "onStackTransfer": {
+ "name": "EasyEnchantmentTableGUIreset"
+ },
+ "x": 276,
+ "y": 71
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_easyenchant",
+ "text": {
+ "fixedValue": "EasyEnchant"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 132,
+ "y": 44
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_item",
+ "text": {
+ "fixedValue": "Item"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 252,
+ "y": 51
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_lapis_lazuli",
+ "text": {
+ "fixedValue": "Lapis Lazuli"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 213,
+ "y": 74
+ }
+ }
+ ],
+ "gridSettings": {
+ "sx": 18,
+ "sy": 18,
+ "ox": 11,
+ "oy": 15,
+ "snapOnGrid": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyEnchantmentTableGUIClear.mod.json b/elements/EasyEnchantmentTableGUIClear.mod.json
new file mode 100644
index 0000000..e04a15e
--- /dev/null
+++ b/elements/EasyEnchantmentTableGUIClear.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "counterno_ext_triggerlocal:counter0101Blocks.AIRlocal:counterlocal:counterADDlocal:counter1"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyEnchantmentTableGUIreset.mod.json b/elements/EasyEnchantmentTableGUIreset.mod.json
new file mode 100644
index 0000000..5edafe4
--- /dev/null
+++ b/elements/EasyEnchantmentTableGUIreset.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "countno_ext_triggerlocal:count191Blocks.AIRlocal:countlocal:countADDlocal:count1"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyEnchantmentTableGUItakeItem1.mod.json b/elements/EasyEnchantmentTableGUItakeItem1.mod.json
new file mode 100644
index 0000000..725b008
--- /dev/null
+++ b/elements/EasyEnchantmentTableGUItakeItem1.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "counterselfno_ext_triggerlocal:self1local:counter010NEQlocal:counterlocal:self1Blocks.AIRlocal:counterlocal:counterADDlocal:counter1510"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyEnchantmentTableGUItakeItem2.mod.json b/elements/EasyEnchantmentTableGUItakeItem2.mod.json
new file mode 100644
index 0000000..34f8ddf
--- /dev/null
+++ b/elements/EasyEnchantmentTableGUItakeItem2.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "counterselfno_ext_triggerlocal:self2local:counter010NEQlocal:counterlocal:self1Blocks.AIRlocal:counterlocal:counterADDlocal:counter1510"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyEnchantmentTableGUItakeItem3.mod.json b/elements/EasyEnchantmentTableGUItakeItem3.mod.json
new file mode 100644
index 0000000..a2a3c6f
--- /dev/null
+++ b/elements/EasyEnchantmentTableGUItakeItem3.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "counterselfno_ext_triggerlocal:self3local:counter010NEQlocal:counterlocal:self1Blocks.AIRlocal:counterlocal:counterADDlocal:counter1510"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyEnchantmentTableGUItakeItem4.mod.json b/elements/EasyEnchantmentTableGUItakeItem4.mod.json
new file mode 100644
index 0000000..84563b1
--- /dev/null
+++ b/elements/EasyEnchantmentTableGUItakeItem4.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "counterselfno_ext_triggerlocal:self4local:counter010NEQlocal:counterlocal:self1Blocks.AIRlocal:counterlocal:counterADDlocal:counter1510"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyEnchantmentTableGUItakeItem5.mod.json b/elements/EasyEnchantmentTableGUItakeItem5.mod.json
new file mode 100644
index 0000000..dfc5c81
--- /dev/null
+++ b/elements/EasyEnchantmentTableGUItakeItem5.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "counterselfno_ext_triggerlocal:self5local:counter010NEQlocal:counterlocal:self1Blocks.AIRlocal:counterlocal:counterADDlocal:counter1510"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyEnchantmentTableGUItakeItem6.mod.json b/elements/EasyEnchantmentTableGUItakeItem6.mod.json
new file mode 100644
index 0000000..5b05775
--- /dev/null
+++ b/elements/EasyEnchantmentTableGUItakeItem6.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "counterselfno_ext_triggerlocal:self6local:counter010NEQlocal:counterlocal:self1Blocks.AIRlocal:counterlocal:counterADDlocal:counter1510"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyEnchantmentTableGUItakeItem7.mod.json b/elements/EasyEnchantmentTableGUItakeItem7.mod.json
new file mode 100644
index 0000000..56c1504
--- /dev/null
+++ b/elements/EasyEnchantmentTableGUItakeItem7.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "counterselfno_ext_triggerlocal:self7local:counter010NEQlocal:counterlocal:self1Blocks.AIRlocal:counterlocal:counterADDlocal:counter1510"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyEnchantmentTableGUItakeItem8.mod.json b/elements/EasyEnchantmentTableGUItakeItem8.mod.json
new file mode 100644
index 0000000..8435685
--- /dev/null
+++ b/elements/EasyEnchantmentTableGUItakeItem8.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "counterselfno_ext_triggerlocal:self8local:counter010NEQlocal:counterlocal:self1Blocks.AIRlocal:counterlocal:counterADDlocal:counter1510"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyEnchantmentTableGUItakeItem9.mod.json b/elements/EasyEnchantmentTableGUItakeItem9.mod.json
new file mode 100644
index 0000000..7345abc
--- /dev/null
+++ b/elements/EasyEnchantmentTableGUItakeItem9.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "counterselfno_ext_triggerlocal:self9local:counter010NEQlocal:counterlocal:self1Blocks.AIRlocal:counterlocal:counterADDlocal:counter1510"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyEnchantmentTableRecipe.mod.json b/elements/EasyEnchantmentTableRecipe.mod.json
new file mode 100644
index 0000000..d7da63d
--- /dev/null
+++ b/elements/EasyEnchantmentTableRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.GHAST_TEAR"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.DIAMOND"
+ },
+ {
+ "value": "Items.ENDER_EYE"
+ },
+ {
+ "value": "Items.DIAMOND"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:EasyEnchantmentTable"
+ },
+ "name": "easy_enchantment_table_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyEnchantmentTableUpdateTick.mod.json b/elements/EasyEnchantmentTableUpdateTick.mod.json
new file mode 100644
index 0000000..4983335
--- /dev/null
+++ b/elements/EasyEnchantmentTableUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "toolno_ext_triggerlocal:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantGTE105EQThis is required to prevent issues with bookslocal:tool1Swordlocal:toolEQSHARPNESSlocal:tool0SHARPNESS5local:tool1local:tool1local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQLOOTINGlocal:tool0LOOTING3local:tool1local:tool2local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQFIRE_ASPECTlocal:tool0FIRE_ASPECT2local:tool1local:tool3local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQKNOCKBACKlocal:tool0KNOCKBACK2local:tool1local:tool4local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQUNBREAKINGlocal:tool0UNBREAKING3local:tool1local:tool5local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQSWEEPINGlocal:tool0SWEEPING3local:tool1local:tool6local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQMENDINGlocal:tool0MENDING1local:tool1local:tool7local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQVANISHING_CURSElocal:tool0VANISHING_CURSE1local:tool1local:tool8local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantORORPickaxelocal:toolAxelocal:toolORShovellocal:toolHoelocal:toolEQEFFICIENCYlocal:tool0EFFICIENCY5local:tool1local:tool1local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQFORTUNElocal:tool0FORTUNE3local:tool1local:tool2local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQSILK_TOUCHlocal:tool0SILK_TOUCH1local:tool1local:tool3local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQUNBREAKINGlocal:tool0UNBREAKING3local:tool1local:tool4local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQMENDINGlocal:tool0MENDING1local:tool1local:tool5local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantAxelocal:toolEQBANE_OF_ARTHROPODSlocal:tool0BANE_OF_ARTHROPODS5local:tool1local:tool6local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQSMITElocal:tool0SMITE5local:tool1local:tool7local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQSHARPNESSlocal:tool0SHARPNESS5local:tool1local:tool8local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantlocal:toolforge:tag_armorEQFIRE_PROTECTIONlocal:tool0FIRE_PROTECTION4local:tool1local:tool1local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQPROJECTILE_PROTECTIONlocal:tool0PROJECTILE_PROTECTION4local:tool1local:tool2local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQMENDINGlocal:tool0MENDING1local:tool1local:tool3local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQPROTECTIONlocal:tool0PROTECTION4local:tool1local:tool4local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQFIRE_PROTECTIONlocal:tool0FIRE_PROTECTION4local:tool1local:tool5local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQUNBREAKINGlocal:tool0UNBREAKING3local:tool1local:tool6local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQBLAST_PROTECTIONlocal:tool0BLAST_PROTECTION4local:tool1local:tool7local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantlocal:toolforge:tag_helmetEQRESPIRATIONlocal:tool0RESPIRATION3local:tool1local:tool8local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQAQUA_AFFINITYlocal:tool0AQUA_AFFINITY1local:tool1local:tool9local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantlocal:toolforge:tag_bootsEQSOUL_SPEEDlocal:tool0SOUL_SPEED3local:tool1local:tool8local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQFROST_WALKERlocal:tool0FROST_WALKER2local:tool1local:tool9local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantlocal:toolforge:tag_leggingsEQSWIFT_SNEAKlocal:tool0SWIFT_SNEAK3local:tool1local:tool8local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantlocal:toolforge:tag_chestEQTHORNSlocal:tool0THORNS3local:tool1local:tool9local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantlocal:toolItems.TRIDENTEQUNBREAKINGlocal:tool0UNBREAKING3local:tool1local:tool1local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQMENDINGlocal:tool0MENDING1local:tool1local:tool2local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQLOYALTYlocal:tool0LOYALTY3local:tool1local:tool3local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQIMPALINGlocal:tool0IMPALING5local:tool1local:tool4local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQCHANNELINGlocal:tool0CHANNELING1local:tool1local:tool5local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQRIPTIDElocal:tool0RIPTIDE3local:tool1local:tool6local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantlocal:toolItems.BOWEQINFINITYlocal:tool0INFINITY1local:tool1local:tool1local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQFLAMElocal:tool0FLAME1local:tool1local:tool2local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQPOWERlocal:tool0POWER4local:tool1local:tool3local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQPUNCHlocal:tool0PUNCH2local:tool1local:tool4local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQUNBREAKINGlocal:tool0UNBREAKING3local:tool1local:tool5local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQMENDINGlocal:tool0MENDING1local:tool1local:tool6local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantlocal:toolItems.FISHING_RODEQLUCK_OF_THE_SEAlocal:tool0PROTECTION3local:tool1local:tool1local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQLURElocal:tool0LURE3local:tool1local:tool2local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQUNBREAKINGlocal:tool0UNBREAKING3local:tool1local:tool3local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQMENDINGlocal:tool0MENDING1local:tool1local:tool4local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantlocal:toolItems.CROSSBOWEQQUICK_CHARGElocal:tool0QUICK_CHARGE3local:tool1local:tool1local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQPIERCINGlocal:tool0PIERCING4local:tool1local:tool2local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQMULTISHOTlocal:tool0MULTISHOT1local:tool1local:tool3local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQUNBREAKINGlocal:tool0UNBREAKING3local:tool1local:tool4local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantEQMENDINGlocal:tool0MENDING1local:tool1local:tool5local:toolThis template is used to recreate an enchanting table, using items instead of XP. It should be called on a block with at least two inventory slots0The first slot contains the item to enchantENCHANTMENT_TABLE010"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyForge.mod.json b/elements/EasyForge.mod.json
new file mode 100644
index 0000000..962ac4e
--- /dev/null
+++ b/elements/EasyForge.mod.json
@@ -0,0 +1,147 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "forgefront",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "forge:default",
+ "rotationMode": 1,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Easy Forge",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "CUSTOM:EasySurvival"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ROCK"
+ },
+ "tickRate": 10,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "emittedRedstonePower": {
+ "fixedValue": 15.0
+ },
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "STONE"
+ },
+ "breakSound": {
+ "value": ""
+ },
+ "fallSound": {
+ "value": ""
+ },
+ "hitSound": {
+ "value": ""
+ },
+ "placeSound": {
+ "value": ""
+ },
+ "stepSound": {
+ "value": ""
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": true,
+ "guiBoundTo": "EasyForgeGUI",
+ "openGUIOnRightClick": true,
+ "inventorySize": 2,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [],
+ "inventoryInSlotIDs": [],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "EasyForgeUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyForgeAuto.mod.json b/elements/EasyForgeAuto.mod.json
new file mode 100644
index 0000000..a3d0dfd
--- /dev/null
+++ b/elements/EasyForgeAuto.mod.json
@@ -0,0 +1,151 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "forgefront",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "forge:default",
+ "rotationMode": 1,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Easy Forge",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "CUSTOM:EasySurvival"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ROCK"
+ },
+ "tickRate": 10,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "emittedRedstonePower": {
+ "fixedValue": 15.0
+ },
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "STONE"
+ },
+ "breakSound": {
+ "value": ""
+ },
+ "fallSound": {
+ "value": ""
+ },
+ "hitSound": {
+ "value": ""
+ },
+ "placeSound": {
+ "value": ""
+ },
+ "stepSound": {
+ "value": ""
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": true,
+ "guiBoundTo": "EasyForgeGUI",
+ "openGUIOnRightClick": true,
+ "inventorySize": 2,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [
+ 1
+ ],
+ "inventoryInSlotIDs": [
+ 0
+ ],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "EasyForgeUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyForgeAutoRecipe.mod.json b/elements/EasyForgeAutoRecipe.mod.json
new file mode 100644
index 0000000..38ff292
--- /dev/null
+++ b/elements/EasyForgeAutoRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Items.REDSTONE"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Items.LAVA_BUCKET"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Items.REDSTONE"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:EasyForge"
+ },
+ "name": "easy_forge_auto_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyForgeGUI.mod.json b/elements/EasyForgeGUI.mod.json
new file mode 100644
index 0000000..a47ca0f
--- /dev/null
+++ b/elements/EasyForgeGUI.mod.json
@@ -0,0 +1,82 @@
+{
+ "_fv": 60,
+ "_type": "gui",
+ "definition": {
+ "type": 1,
+ "width": 176,
+ "height": 166,
+ "inventoryOffsetX": 0,
+ "inventoryOffsetY": 0,
+ "renderBgLayer": true,
+ "doesPauseGame": false,
+ "components": [
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 0,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 168,
+ "y": 84
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 1,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 240,
+ "y": 84
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_easyforge",
+ "text": {
+ "fixedValue": "EasyForge"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 132,
+ "y": 48
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_empty",
+ "text": {
+ "fixedValue": ">>"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 208,
+ "y": 88
+ }
+ }
+ ],
+ "gridSettings": {
+ "sx": 18,
+ "sy": 18,
+ "ox": 11,
+ "oy": 15,
+ "snapOnGrid": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyForgeRecipe.mod.json b/elements/EasyForgeRecipe.mod.json
new file mode 100644
index 0000000..252d2ef
--- /dev/null
+++ b/elements/EasyForgeRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Items.LAVA_BUCKET"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:EasyForge"
+ },
+ "name": "easy_forge_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyForgeUpdateTick.mod.json b/elements/EasyForgeUpdateTick.mod.json
new file mode 100644
index 0000000..727cfdc
--- /dev/null
+++ b/elements/EasyForgeUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "fireHeightpreviousRecipeno_ext_trigger0Blocks.IRON_OREOR1Blocks.AIR1Items.IRON_INGOTADD11Items.IRON_INGOT1100Blocks.GOLD_OREOR1Blocks.AIR1Items.GOLD_INGOTADD11Items.GOLD_INGOT1100Blocks.ANCIENT_DEBRISOR1Blocks.AIR1Items.NETHERITE_SCRAPADD11Items.NETHERITE_SCRAP1100Blocks.COBBLESTONEOR1Blocks.AIR1Blocks.STONE#0ADD11Blocks.STONE#01100Blocks.STONE#0OR1Blocks.AIR1Blocks.SMOOTH_STONEADD11Blocks.SMOOTH_STONE1100Blocks.LOGOR1Blocks.AIR1Items.COAL#0ADD11Items.COAL#01100Blocks.SAND#0OR1Blocks.AIR1Blocks.GLASSADD11Blocks.GLASS1100Items.CHICKENOR1Blocks.AIR1Items.COOKED_CHICKENADD11Items.COOKED_CHICKEN1100Items.BEEFOR1Blocks.AIR1Items.COOKED_BEEFADD11Items.COOKED_BEEF1100Items.PORKCHOPOR1Blocks.AIR1Items.COOKED_PORKCHOPADD11Items.COOKED_PORKCHOP1100Items.POTATOOR1Blocks.AIR1Items.BAKED_POTATOADD11Items.BAKED_POTATO1100Items.FISH#0OR1Blocks.AIR1Items.COOKED_FISH#0ADD11Items.COOKED_FISH#01100Items.FISH#1OR1Blocks.AIR1Items.COOKED_FISH#1ADD11Items.COOKED_FISH#11100Items.CHORUS_FRUITOR1Blocks.AIR1Items.CHORUS_FRUITADD11Items.CHORUS_FRUIT_POPPED1100Items.QUARTZOR1Blocks.AIR1Items.IRON_INGOTADD11Items.IRON_INGOT1100Items.RAW_IRONOR1Blocks.AIR1Items.IRON_INGOTADD11Items.IRON_INGOT1100Items.RAW_COPPEROR1Blocks.AIR1Items.COPPER_INGOTADD11Items.COPPER_INGOT1100Items.RAW_GOLDOR1Blocks.AIR1Items.GOLD_INGOTADD11Items.GOLD_INGOT110NORTHFLAMEADD0.5ADD0.2MINUS0.1030SOUTHFLAMEADD0.5ADD0.2ADD1.1030WESTFLAMEMINUS0.1ADD0.2ADD0.5030EASTFLAMEADD1.1ADD0.2ADD0.5030This example will test if the random number is less than 0.7 (70%). Random numbers range between (0.0 and 1.0). If it is true, then it will run what is in the \"do\" section of the if statement.LTRANDOM0.2block.furnace.fire_crackleneutral11"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyFridge.mod.json b/elements/EasyFridge.mod.json
new file mode 100644
index 0000000..b1a2242
--- /dev/null
+++ b/elements/EasyFridge.mod.json
@@ -0,0 +1,151 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "fridgefront",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "fridge_oriented:default",
+ "rotationMode": 1,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Easy Fridge",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "CUSTOM:EasySurvival"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "IRON"
+ },
+ "tickRate": 10,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "emittedRedstonePower": {
+ "fixedValue": 15.0
+ },
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "METAL"
+ },
+ "breakSound": {
+ "value": ""
+ },
+ "fallSound": {
+ "value": ""
+ },
+ "hitSound": {
+ "value": ""
+ },
+ "placeSound": {
+ "value": ""
+ },
+ "stepSound": {
+ "value": ""
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": true,
+ "guiBoundTo": "EasyFridgeGUI",
+ "openGUIOnRightClick": true,
+ "inventorySize": 2,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [
+ 1
+ ],
+ "inventoryInSlotIDs": [
+ 0
+ ],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "EasyFridgeUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyFridgeGUI.mod.json b/elements/EasyFridgeGUI.mod.json
new file mode 100644
index 0000000..fb70737
--- /dev/null
+++ b/elements/EasyFridgeGUI.mod.json
@@ -0,0 +1,67 @@
+{
+ "_fv": 60,
+ "_type": "gui",
+ "definition": {
+ "type": 1,
+ "width": 176,
+ "height": 166,
+ "inventoryOffsetX": 0,
+ "inventoryOffsetY": 0,
+ "renderBgLayer": true,
+ "doesPauseGame": false,
+ "components": [
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 0,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 150,
+ "y": 84
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 1,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 258,
+ "y": 84
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_easyfridge",
+ "text": {
+ "fixedValue": "EasyFridge"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 132,
+ "y": 48
+ }
+ }
+ ],
+ "gridSettings": {
+ "sx": 18,
+ "sy": 18,
+ "ox": 11,
+ "oy": 15,
+ "snapOnGrid": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyFridgeRecipe.mod.json b/elements/EasyFridgeRecipe.mod.json
new file mode 100644
index 0000000..007fc3c
--- /dev/null
+++ b/elements/EasyFridgeRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.COBBLESTONE"
+ },
+ {
+ "value": "Blocks.COBBLESTONE"
+ },
+ {
+ "value": "Blocks.COBBLESTONE"
+ },
+ {
+ "value": "Blocks.COBBLESTONE"
+ },
+ {
+ "value": "Items.WATER_BUCKET"
+ },
+ {
+ "value": "Blocks.COBBLESTONE"
+ },
+ {
+ "value": "Blocks.COBBLESTONE"
+ },
+ {
+ "value": "Blocks.COBBLESTONE"
+ },
+ {
+ "value": "Blocks.COBBLESTONE"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:EasyFridge"
+ },
+ "name": "easy_fridge_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyFridgeUpdateTick.mod.json b/elements/EasyFridgeUpdateTick.mod.json
new file mode 100644
index 0000000..76f9241
--- /dev/null
+++ b/elements/EasyFridgeUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "no_ext_triggerAND0Items.WATER_BUCKETANDOR1Blocks.AIR1Blocks.PACKED_ICELT164ADD11Blocks.PACKED_ICE1AND0Blocks.PACKED_ICEANDOR1Blocks.AIR1Items.SNOWBALLLT116ADD11Items.SNOWBALL110"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyIntake.mod.json b/elements/EasyIntake.mod.json
new file mode 100644
index 0000000..b96cc02
--- /dev/null
+++ b/elements/EasyIntake.mod.json
@@ -0,0 +1,147 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "barrel",
+ "textureTop": "metal",
+ "textureLeft": "metal",
+ "textureFront": "metal",
+ "textureRight": "metal",
+ "textureBack": "metal",
+ "renderType": 2,
+ "customModelName": "barrelintake:default",
+ "rotationMode": 2,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Easy Intake",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "CUSTOM:EasySurvival"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ROCK"
+ },
+ "tickRate": 10,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "emittedRedstonePower": {
+ "fixedValue": 15.0
+ },
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "GROUND"
+ },
+ "breakSound": {
+ "value": ""
+ },
+ "fallSound": {
+ "value": ""
+ },
+ "hitSound": {
+ "value": ""
+ },
+ "placeSound": {
+ "value": ""
+ },
+ "stepSound": {
+ "value": ""
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": true,
+ "guiBoundTo": "EasyIntakeGUI",
+ "openGUIOnRightClick": true,
+ "inventorySize": 27,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [],
+ "inventoryInSlotIDs": [],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onRightClicked": {
+ "name": "EasyIntakeOnBlockRightClicked"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyIntakeGUI.mod.json b/elements/EasyIntakeGUI.mod.json
new file mode 100644
index 0000000..c2ef0de
--- /dev/null
+++ b/elements/EasyIntakeGUI.mod.json
@@ -0,0 +1,523 @@
+{
+ "_fv": 60,
+ "_type": "gui",
+ "definition": {
+ "type": 1,
+ "width": 178,
+ "height": 166,
+ "inventoryOffsetX": 0,
+ "inventoryOffsetY": 0,
+ "renderBgLayer": true,
+ "doesPauseGame": false,
+ "components": [
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 0,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 132,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 1,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 150,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 2,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 168,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 3,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 186,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 4,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 204,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 5,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 222,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 6,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 240,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 7,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 258,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 8,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 276,
+ "y": 57
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 9,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 132,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 10,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 150,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 11,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 168,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 12,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 186,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 13,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 204,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 14,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 222,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 15,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 240,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 16,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 258,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 17,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 276,
+ "y": 75
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 18,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 132,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 19,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 150,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 20,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 168,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 21,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 186,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 22,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 204,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 23,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 222,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 24,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 240,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 25,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 258,
+ "y": 93
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 26,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 276,
+ "y": 93
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_easyintake",
+ "text": {
+ "fixedValue": "EasyIntake"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 132,
+ "y": 39
+ }
+ }
+ ],
+ "gridSettings": {
+ "sx": 18,
+ "sy": 18,
+ "ox": 11,
+ "oy": 15,
+ "snapOnGrid": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyIntakeOnBlockRightClicked.mod.json b/elements/EasyIntakeOnBlockRightClicked.mod.json
new file mode 100644
index 0000000..c4a1675
--- /dev/null
+++ b/elements/EasyIntakeOnBlockRightClicked.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "slotnoinvslotfreeslottempstackno_ext_triggerlocal:slotno0EasyIntakeGUI36local:slotnoforge:tag_intakelocal:tempstacklocal:slotnolocal:invslot027local:invslotBlocks.AIRlocal:freeslotlocal:invslotBREAKlocal:invslotADDlocal:invslot1local:slotnolocal:tempstacklocal:freeslot1Blocks.AIRlocal:slotnolocal:slotnoADDlocal:slotno1"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyIntakeRecipe.mod.json b/elements/EasyIntakeRecipe.mod.json
new file mode 100644
index 0000000..03bc656
--- /dev/null
+++ b/elements/EasyIntakeRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.HOPPER"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.REDSTONE"
+ },
+ {
+ "value": "Blocks.CHEST"
+ },
+ {
+ "value": "Items.REDSTONE"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.PLANKS"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:EasyIntake"
+ },
+ "name": "easy_intake_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasySaw.mod.json b/elements/EasySaw.mod.json
new file mode 100644
index 0000000..ef31a00
--- /dev/null
+++ b/elements/EasySaw.mod.json
@@ -0,0 +1,147 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "sawblock",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "sawblock:default",
+ "rotationMode": 0,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Easy Saw",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "CUSTOM:EasySurvival"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ROCK"
+ },
+ "tickRate": 10,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "emittedRedstonePower": {
+ "fixedValue": 15.0
+ },
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "GROUND"
+ },
+ "breakSound": {
+ "value": ""
+ },
+ "fallSound": {
+ "value": ""
+ },
+ "hitSound": {
+ "value": ""
+ },
+ "placeSound": {
+ "value": ""
+ },
+ "stepSound": {
+ "value": ""
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": true,
+ "guiBoundTo": "EasySawGUI",
+ "openGUIOnRightClick": true,
+ "inventorySize": 3,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [],
+ "inventoryInSlotIDs": [],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "EasySawUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/EasySawGUI.mod.json b/elements/EasySawGUI.mod.json
new file mode 100644
index 0000000..fa2fe46
--- /dev/null
+++ b/elements/EasySawGUI.mod.json
@@ -0,0 +1,100 @@
+{
+ "_fv": 60,
+ "_type": "gui",
+ "definition": {
+ "type": 1,
+ "width": 176,
+ "height": 166,
+ "inventoryOffsetX": 0,
+ "inventoryOffsetY": 0,
+ "renderBgLayer": true,
+ "doesPauseGame": false,
+ "components": [
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 0,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 150,
+ "y": 84
+ }
+ },
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 1,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 204,
+ "y": 66
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 2,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 258,
+ "y": 84
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_easysaw",
+ "text": {
+ "fixedValue": "EasySaw"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 132,
+ "y": 48
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_template",
+ "text": {
+ "fixedValue": "Template"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 193,
+ "y": 84
+ }
+ }
+ ],
+ "gridSettings": {
+ "sx": 18,
+ "sy": 18,
+ "ox": 11,
+ "oy": 15,
+ "snapOnGrid": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/elements/EasySawRecipe.mod.json b/elements/EasySawRecipe.mod.json
new file mode 100644
index 0000000..b54c778
--- /dev/null
+++ b/elements/EasySawRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.IRON_INGOT"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.PLANKS"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:EasySaw"
+ },
+ "name": "easy_saw_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasySawUpdateTick.mod.json b/elements/EasySawUpdateTick.mod.json
new file mode 100644
index 0000000..565c7a6
--- /dev/null
+++ b/elements/EasySawUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "woodtyperecipeno_ext_triggerlocal:woodtypenonelocal:recipenoneANDOR0Blocks.LOG#00Blocks.STRIPPED_OAK_LOGLTE260ADD24Blocks.PLANKS#02ANDOR0Blocks.LOG#10Blocks.STRIPPED_SPRUCE_LOGLTE260ADD24Blocks.PLANKS#12ANDOR0Blocks.LOG#20Blocks.STRIPPED_BIRCH_LOGLTE260ADD24Blocks.PLANKS#22ANDOR0Blocks.LOG#30Blocks.STRIPPED_JUNGLE_LOGLTE260ADD24Blocks.PLANKS#32ANDOR0Blocks.LOG2#00Blocks.STRIPPED_ACACIA_LOGLTE260ADD24Blocks.PLANKS#42ANDOR0Blocks.LOG2#10Blocks.STRIPPED_DARK_OAK_LOGLTE260ADD24Blocks.PLANKS#52LT2640Blocks.PLANKS#0local:woodtypeoak0Blocks.PLANKS#1local:woodtypespruce0Blocks.PLANKS#2local:woodtypebirch0Blocks.PLANKS#3local:woodtypejungle0Blocks.PLANKS#4local:woodtypeacacia0Blocks.PLANKS#5local:woodtypedarkoak0Blocks.CRIMSON_PLANKSlocal:woodtypecrimson0Blocks.WARPED_PLANKSlocal:woodtypewarpedOR1Blocks.WOODEN_SLAB#0OR1Blocks.WOODEN_SLAB#1OR1Blocks.WOODEN_SLAB#2OR1Blocks.WOODEN_SLAB#3OR1Blocks.WOODEN_SLAB#4OR1Blocks.WOODEN_SLAB#5OR1Blocks.CRIMSON_SLAB1Blocks.WARPED_SLABlocal:recipeslabOR1Blocks.OAK_STAIRSOR1Blocks.SPRUCE_STAIRSOR1Blocks.BIRCH_STAIRSOR1Blocks.JUNGLE_STAIRSOR1Blocks.ACACIA_STAIRSOR1Blocks.DARK_OAK_STAIRSOR1Blocks.CRIMSON_STAIRS1Blocks.WARPED_STAIRSlocal:recipestairsOR1Blocks.STANDING_SIGNOR1Blocks.SPRUCE_SIGNOR1Blocks.BIRCH_SIGNOR1Blocks.ACACIA_SIGNOR1Blocks.JUNGLE_SIGNOR1Blocks.DARK_OAK_SIGNOR1Blocks.CRIMSON_SIGN1Blocks.WARPED_SIGNlocal:recipesignOR1Blocks.OAK_DOOROR1Blocks.SPRUCE_DOOROR1Blocks.BIRCH_DOOROR1Blocks.JUNGLE_DOOROR1Blocks.ACACIA_DOOROR1Blocks.DARK_OAK_DOOROR1Blocks.CRIMSON_DOOR1Blocks.WARPED_DOORlocal:recipedoorOR1Blocks.TRAPDOOROR1Blocks.SPRUCE_TRAPDOOROR1Blocks.BIRCH_TRAPDOOROR1Blocks.JUNGLE_TRAPDOOROR1Blocks.ACACIA_TRAPDOOROR1Blocks.DARK_OAK_TRAPDOOROR1Blocks.CRIMSON_TRAPDOOR1Blocks.WARPED_TRAPDOORlocal:recipetrapdoorOR1Blocks.WOODEN_BUTTONOR1Blocks.SPRUCE_BUTTONOR1Blocks.BIRCH_BUTTONOR1Blocks.JUNGLE_BUTTONOR1Blocks.ACACIA_BUTTONOR1Blocks.DARK_OAK_BUTTONOR1Blocks.CRIMSON_BUTTON1Blocks.WARPED_BUTTONlocal:recipebuttonOR1Blocks.WOODEN_PRESSURE_PLATEOR1Blocks.SPRUCE_PRESSURE_PLATEOR1Blocks.BIRCH_PRESSURE_PLATEOR1Blocks.JUNGLE_PRESSURE_PLATEOR1Blocks.ACACIA_PRESSURE_PLATEOR1Blocks.DARK_OAK_PRESSURE_PLATEOR1Blocks.CRIMSON_PRESSURE_PLATE1Blocks.WARPED_PRESSURE_PLATElocal:recipepressureplateOR1Blocks.OAK_FENCEOR1Blocks.SPRUCE_FENCEOR1Blocks.BIRCH_FENCEOR1Blocks.JUNGLE_FENCEOR1Blocks.ACACIA_FENCEOR1Blocks.DARK_OAK_FENCEOR1Blocks.CRIMSON_FENCE1Blocks.WARPED_FENCElocal:recipefenceOR1Blocks.OAK_FENCE_GATEOR1Blocks.SPRUCE_FENCE_GATEOR1Blocks.BIRCH_FENCE_GATEOR1Blocks.JUNGLE_FENCE_GATEOR1Blocks.ACACIA_FENCE_GATEOR1Blocks.DARK_OAK_FENCE_GATEOR1Blocks.CRIMSON_FENCE_GATE1Blocks.WARPED_FENCE_GATElocal:recipegateOR1Items.BOATOR1Items.SPRUCE_BOATOR1Items.BIRCH_BOATOR1Items.JUNGLE_BOATOR1Items.ACACIA_BOAT1Items.DARK_OAK_BOATlocal:recipeboatlocal:woodtypeoaklocal:recipeslabADD21Blocks.WOODEN_SLAB#0210local:recipestairsADD21Blocks.OAK_STAIRS210local:recipesignADD21Blocks.STANDING_SIGN210local:recipedoorADD21Blocks.OAK_DOOR210local:recipetrapdoorADD21Blocks.TRAPDOOR210local:recipebuttonADD21Blocks.WOODEN_BUTTON210local:recipepressureplateADD21Blocks.WOODEN_PRESSURE_PLATE210local:recipefenceADD21Blocks.OAK_FENCE210local:recipegateADD21Blocks.OAK_FENCE_GATE210local:recipeboatADD21Items.BOAT210local:woodtypesprucelocal:recipeslabADD21Blocks.WOODEN_SLAB#1210local:recipestairsADD21Blocks.SPRUCE_STAIRS210local:recipesignADD21Blocks.SPRUCE_SIGN210local:recipedoorADD21Blocks.SPRUCE_DOOR210local:recipetrapdoorADD21Blocks.SPRUCE_TRAPDOOR210local:recipebuttonADD21Blocks.SPRUCE_BUTTON210local:recipepressureplateADD21Blocks.SPRUCE_PRESSURE_PLATE210local:recipefenceADD21Blocks.SPRUCE_FENCE210local:recipegateADD21Blocks.SPRUCE_FENCE_GATE210local:recipeboatADD21Items.SPRUCE_BOAT210local:woodtypebirchlocal:recipeslabADD21Blocks.WOODEN_SLAB#2210local:recipestairsADD21Blocks.BIRCH_STAIRS210local:recipesignADD21Blocks.BIRCH_SIGN210local:recipedoorADD21Blocks.BIRCH_DOOR210local:recipetrapdoorADD21Blocks.BIRCH_TRAPDOOR210local:recipebuttonADD21Blocks.BIRCH_BUTTON210local:recipepressureplateADD21Blocks.BIRCH_PRESSURE_PLATE210local:recipefenceADD21Blocks.BIRCH_FENCE210local:recipegateADD21Blocks.BIRCH_FENCE_GATE210local:recipeboatADD21Items.BIRCH_BOAT210local:woodtypejunglelocal:recipeslabADD21Blocks.WOODEN_SLAB#3210local:recipestairsADD21Blocks.JUNGLE_STAIRS210local:recipesignADD21Blocks.JUNGLE_SIGN210local:recipedoorADD21Blocks.JUNGLE_DOOR210local:recipetrapdoorADD21Blocks.JUNGLE_TRAPDOOR210local:recipebuttonADD21Blocks.JUNGLE_BUTTON210local:recipepressureplateADD21Blocks.JUNGLE_PRESSURE_PLATE210local:recipefenceADD21Blocks.JUNGLE_FENCE210local:recipegateADD21Blocks.JUNGLE_FENCE_GATE210local:recipeboatADD21Items.JUNGLE_BOAT210local:woodtypeacacialocal:recipeslabADD21Blocks.WOODEN_SLAB#4210local:recipestairsADD21Blocks.ACACIA_STAIRS210local:recipesignADD21Blocks.ACACIA_SIGN210local:recipedoorADD21Blocks.ACACIA_DOOR210local:recipetrapdoorADD21Blocks.ACACIA_TRAPDOOR210local:recipebuttonADD21Blocks.ACACIA_BUTTON210local:recipepressureplateADD21Blocks.ACACIA_PRESSURE_PLATE210local:recipefenceADD21Blocks.ACACIA_FENCE210local:recipegateADD21Blocks.ACACIA_FENCE_GATE210local:recipeboatADD21Items.ACACIA_BOAT210local:woodtypedarkoaklocal:recipeslabADD21Blocks.WOODEN_SLAB#5210local:recipestairsADD21Blocks.DARK_OAK_STAIRS210local:recipesignADD21Blocks.DARK_OAK_WALL_SIGN210local:recipedoorADD21Blocks.DARK_OAK_DOOR210local:recipetrapdoorADD21Blocks.DARK_OAK_TRAPDOOR210local:recipebuttonADD21Blocks.DARK_OAK_BUTTON210local:recipepressureplateADD21Blocks.DARK_OAK_PRESSURE_PLATE210local:recipefenceADD21Blocks.DARK_OAK_FENCE210local:recipegateADD21Blocks.DARK_OAK_FENCE_GATE210local:recipeboatADD21Items.DARK_OAK_BOAT210local:woodtypecrimsonlocal:recipeslabADD21Blocks.CRIMSON_SLAB210local:recipestairsADD21Blocks.CRIMSON_STAIRS210local:recipesignADD21Blocks.CRIMSON_SIGN210local:recipedoorADD21Blocks.CRIMSON_DOOR210local:recipetrapdoorADD21Blocks.CRIMSON_TRAPDOOR210local:recipebuttonADD21Blocks.CRIMSON_BUTTON210local:recipepressureplateADD21Blocks.CRIMSON_PRESSURE_PLATE210local:recipefenceADD21Blocks.CRIMSON_FENCE210local:recipegateADD21Blocks.CRIMSON_FENCE_GATE210local:woodtypewarpedlocal:recipeslabADD21Blocks.WARPED_SLAB210local:recipestairsADD21Blocks.WARPED_STAIRS210local:recipesignADD21Blocks.WARPED_SIGN210local:recipedoorADD21Blocks.WARPED_DOOR210local:recipetrapdoorADD21Blocks.WARPED_TRAPDOOR210local:recipebuttonADD21Blocks.WARPED_BUTTON210local:recipepressureplateADD21Blocks.WARPED_PRESSURE_PLATE210local:recipefenceADD21Blocks.WARPED_FENCE210local:recipegateADD21Blocks.WARPED_FENCE_GATE210Message"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasySmelter.mod.json b/elements/EasySmelter.mod.json
new file mode 100644
index 0000000..0adc015
--- /dev/null
+++ b/elements/EasySmelter.mod.json
@@ -0,0 +1,147 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "metal",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "smeltblock:default",
+ "rotationMode": 1,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Easy Smelter",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "CUSTOM:EasySurvival"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ROCK"
+ },
+ "tickRate": 10,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "emittedRedstonePower": {
+ "fixedValue": 15.0
+ },
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "GROUND"
+ },
+ "breakSound": {
+ "value": ""
+ },
+ "fallSound": {
+ "value": ""
+ },
+ "hitSound": {
+ "value": ""
+ },
+ "placeSound": {
+ "value": ""
+ },
+ "stepSound": {
+ "value": ""
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": true,
+ "guiBoundTo": "EasySmelterGUI",
+ "openGUIOnRightClick": true,
+ "inventorySize": 2,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [],
+ "inventoryInSlotIDs": [],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "EasySmelterUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/EasySmelterGUI.mod.json b/elements/EasySmelterGUI.mod.json
new file mode 100644
index 0000000..7ac32af
--- /dev/null
+++ b/elements/EasySmelterGUI.mod.json
@@ -0,0 +1,67 @@
+{
+ "_fv": 60,
+ "_type": "gui",
+ "definition": {
+ "type": 1,
+ "width": 176,
+ "height": 166,
+ "inventoryOffsetX": 0,
+ "inventoryOffsetY": 0,
+ "renderBgLayer": true,
+ "doesPauseGame": false,
+ "components": [
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": "Items.GOLD_NUGGET"
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 0,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 150,
+ "y": 84
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 1,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 258,
+ "y": 84
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_easysmelter",
+ "text": {
+ "fixedValue": "EasySmelter"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 132,
+ "y": 48
+ }
+ }
+ ],
+ "gridSettings": {
+ "sx": 18,
+ "sy": 18,
+ "ox": 11,
+ "oy": 15,
+ "snapOnGrid": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/elements/EasySmelterRecipe.mod.json b/elements/EasySmelterRecipe.mod.json
new file mode 100644
index 0000000..8990da8
--- /dev/null
+++ b/elements/EasySmelterRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Items.IRON_INGOT"
+ },
+ {
+ "value": "Items.LAVA_BUCKET"
+ },
+ {
+ "value": "Items.IRON_INGOT"
+ },
+ {
+ "value": "Blocks.STONE"
+ },
+ {
+ "value": "Blocks.STONE"
+ },
+ {
+ "value": "Blocks.STONE"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:EasySmelter"
+ },
+ "name": "easy_smelter_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasySmelterUpdateTick.mod.json b/elements/EasySmelterUpdateTick.mod.json
new file mode 100644
index 0000000..0e06105
--- /dev/null
+++ b/elements/EasySmelterUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "no_ext_triggerAND0Items.GOLD_NUGGETANDGTE09LT16490ADD11Items.GOLD_INGOT1"
+ }
+}
\ No newline at end of file
diff --git a/elements/EasySurvival.mod.json b/elements/EasySurvival.mod.json
new file mode 100644
index 0000000..b1122b8
--- /dev/null
+++ b/elements/EasySurvival.mod.json
@@ -0,0 +1,11 @@
+{
+ "_fv": 60,
+ "_type": "tab",
+ "definition": {
+ "name": "Easy Survival",
+ "icon": {
+ "value": "Blocks.SAPLING#3"
+ },
+ "showSearch": true
+ }
+}
\ No newline at end of file
diff --git a/elements/EasyTeleportRecipe.mod.json b/elements/EasyTeleportRecipe.mod.json
new file mode 100644
index 0000000..ceaf870
--- /dev/null
+++ b/elements/EasyTeleportRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.IRON_INGOT"
+ },
+ {
+ "value": "Items.ENDER_PEARL"
+ },
+ {
+ "value": "Items.IRON_INGOT"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:TeleporterPlate"
+ },
+ "name": "easy_teleport_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/Elytra.mod.json b/elements/Elytra.mod.json
new file mode 100644
index 0000000..4f1cfe5
--- /dev/null
+++ b/elements/Elytra.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Items.FEATHER"
+ },
+ {
+ "value": "Items.GHAST_TEAR"
+ },
+ {
+ "value": "Items.FEATHER"
+ },
+ {
+ "value": "Items.FEATHER"
+ },
+ {
+ "value": "Blocks.END_STONE"
+ },
+ {
+ "value": "Items.FEATHER"
+ },
+ {
+ "value": "Items.FEATHER"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.FEATHER"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "Items.ELYTRA"
+ },
+ "name": "elytra",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/EnderpPearlRecipe.mod.json b/elements/EnderpPearlRecipe.mod.json
new file mode 100644
index 0000000..8c19082
--- /dev/null
+++ b/elements/EnderpPearlRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.DYE#15"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.DYE#15"
+ },
+ {
+ "value": "Items.DYE#4"
+ },
+ {
+ "value": "Items.DYE#15"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.DYE#15"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "Items.ENDER_PEARL"
+ },
+ "name": "enderp_pearl_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherBucket.mod.json b/elements/NetherBucket.mod.json
new file mode 100644
index 0000000..a5023a7
--- /dev/null
+++ b/elements/NetherBucket.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "Items.BUCKET"
+ },
+ "name": "nether_bucket",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherForge.mod.json b/elements/NetherForge.mod.json
new file mode 100644
index 0000000..b055b60
--- /dev/null
+++ b/elements/NetherForge.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "Blocks.FURNACE"
+ },
+ "name": "nether_forge",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherLadderRecipe.mod.json b/elements/NetherLadderRecipe.mod.json
new file mode 100644
index 0000000..0288bbc
--- /dev/null
+++ b/elements/NetherLadderRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 4,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "CUSTOM:NetherStick"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "CUSTOM:NetherStick"
+ },
+ {
+ "value": "CUSTOM:NetherStick"
+ },
+ {
+ "value": "CUSTOM:NetherStick"
+ },
+ {
+ "value": "CUSTOM:NetherStick"
+ },
+ {
+ "value": "CUSTOM:NetherStick"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "CUSTOM:NetherStick"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "Blocks.LADDER"
+ },
+ "name": "nether_ladder_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherStick.mod.json b/elements/NetherStick.mod.json
new file mode 100644
index 0000000..dae7730
--- /dev/null
+++ b/elements/NetherStick.mod.json
@@ -0,0 +1,44 @@
+{
+ "_fv": 60,
+ "_type": "item",
+ "definition": {
+ "renderType": 0,
+ "texture": "netherstick",
+ "customModelName": "Normal",
+ "customProperties": {},
+ "states": [],
+ "name": "Nether Stick",
+ "rarity": "COMMON",
+ "creativeTab": {
+ "value": "MISC"
+ },
+ "stackSize": 64,
+ "enchantability": 0,
+ "useDuration": 0,
+ "toolType": 1.0,
+ "damageCount": 0,
+ "recipeRemainder": {
+ "value": ""
+ },
+ "destroyAnyBlock": false,
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false,
+ "enableMeleeDamage": false,
+ "damageVsEntity": 0.0,
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "guiBoundTo": "",
+ "inventorySize": 9,
+ "inventoryStackSize": 64,
+ "enableRanged": false,
+ "shootConstantly": false,
+ "isFood": false,
+ "nutritionalValue": 0,
+ "saturation": 0.30000001192092896,
+ "isMeat": false,
+ "isAlwaysEdible": false,
+ "animation": "eat"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherStickRecipe.mod.json b/elements/NetherStickRecipe.mod.json
new file mode 100644
index 0000000..1a306f5
--- /dev/null
+++ b/elements/NetherStickRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 4,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:NetherStick"
+ },
+ "name": "nether_stick_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherWartRecipe.mod.json b/elements/NetherWartRecipe.mod.json
new file mode 100644
index 0000000..b7b3c41
--- /dev/null
+++ b/elements/NetherWartRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 10,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHER_WART_BLOCK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "Items.NETHER_WART"
+ },
+ "name": "nether_wart_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherWorkbench.mod.json b/elements/NetherWorkbench.mod.json
new file mode 100644
index 0000000..c022240
--- /dev/null
+++ b/elements/NetherWorkbench.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "Blocks.CRAFTING_TABLE"
+ },
+ "name": "nether_workbench",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherrackArmor.mod.json b/elements/NetherrackArmor.mod.json
new file mode 100644
index 0000000..60b7232
--- /dev/null
+++ b/elements/NetherrackArmor.mod.json
@@ -0,0 +1,78 @@
+{
+ "_fv": 60,
+ "_type": "armor",
+ "definition": {
+ "enableHelmet": true,
+ "textureHelmet": "netherrack_head",
+ "enableBody": true,
+ "textureBody": "netherrack_body",
+ "enableLeggings": true,
+ "textureLeggings": "netherrack_leggings",
+ "enableBoots": true,
+ "textureBoots": "netherrack_boots",
+ "creativeTab": {
+ "value": "COMBAT"
+ },
+ "armorTextureFile": "netherrack",
+ "helmetName": "Netherrack Helmet",
+ "bodyName": "Netherrack Chestplate",
+ "leggingsName": "Netherrack Leggings",
+ "bootsName": "Netherrack Boots",
+ "helmetSpecialInformation": {
+ "fixedValue": []
+ },
+ "bodySpecialInformation": {
+ "fixedValue": []
+ },
+ "leggingsSpecialInformation": {
+ "fixedValue": []
+ },
+ "bootsSpecialInformation": {
+ "fixedValue": []
+ },
+ "helmetModelName": "Default",
+ "helmetModelPart": "Helmet",
+ "helmetModelTexture": "From armor",
+ "bodyModelName": "Default",
+ "bodyModelPart": "Body",
+ "armsModelPartL": "Arms L",
+ "armsModelPartR": "Arms R",
+ "bodyModelTexture": "From armor",
+ "leggingsModelName": "Default",
+ "leggingsModelPartL": "Leggings L",
+ "leggingsModelPartR": "Leggings R",
+ "leggingsModelTexture": "From armor",
+ "bootsModelName": "Default",
+ "bootsModelPartL": "Boots L",
+ "bootsModelPartR": "Boots R",
+ "bootsModelTexture": "From armor",
+ "helmetItemRenderType": 0,
+ "helmetItemCustomModelName": "Normal",
+ "bodyItemRenderType": 0,
+ "bodyItemCustomModelName": "Normal",
+ "leggingsItemRenderType": 0,
+ "leggingsItemCustomModelName": "Normal",
+ "bootsItemRenderType": 0,
+ "bootsItemCustomModelName": "Normal",
+ "helmetImmuneToFire": false,
+ "bodyImmuneToFire": false,
+ "leggingsImmuneToFire": false,
+ "bootsImmuneToFire": false,
+ "maxDamage": 8,
+ "damageValueHelmet": 1,
+ "damageValueBody": 3,
+ "damageValueLeggings": 3,
+ "damageValueBoots": 1,
+ "enchantability": 5,
+ "toughness": 0.0,
+ "knockbackResistance": 0.0,
+ "equipSound": {
+ "value": ""
+ },
+ "repairItems": [
+ {
+ "value": "Blocks.NETHERRACK"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherrackArmorBodyRecipe.mod.json b/elements/NetherrackArmorBodyRecipe.mod.json
new file mode 100644
index 0000000..e33122f
--- /dev/null
+++ b/elements/NetherrackArmorBodyRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:NetherrackArmor.body"
+ },
+ "name": "netherrack_armor_body_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherrackArmorBootsRecipe.mod.json b/elements/NetherrackArmorBootsRecipe.mod.json
new file mode 100644
index 0000000..8cc668c
--- /dev/null
+++ b/elements/NetherrackArmorBootsRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:NetherrackArmor.boots"
+ },
+ "name": "netherrack_armor_boots_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherrackArmorHelmetRecipe.mod.json b/elements/NetherrackArmorHelmetRecipe.mod.json
new file mode 100644
index 0000000..aade2a1
--- /dev/null
+++ b/elements/NetherrackArmorHelmetRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:NetherrackArmor.helmet"
+ },
+ "name": "netherrack_armor_helmet_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherrackArmorLeggingsRecipe.mod.json b/elements/NetherrackArmorLeggingsRecipe.mod.json
new file mode 100644
index 0000000..d2be2c2
--- /dev/null
+++ b/elements/NetherrackArmorLeggingsRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:NetherrackArmor.legs"
+ },
+ "name": "netherrack_armor_leggings_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherrackAxe.mod.json b/elements/NetherrackAxe.mod.json
new file mode 100644
index 0000000..efeb275
--- /dev/null
+++ b/elements/NetherrackAxe.mod.json
@@ -0,0 +1,34 @@
+{
+ "_fv": 60,
+ "_type": "tool",
+ "definition": {
+ "toolType": "Axe",
+ "renderType": 0,
+ "blockingRenderType": 0,
+ "texture": "netherrack_axe",
+ "customModelName": "Normal",
+ "blockingModelName": "Normal blocking",
+ "name": "Netherrack Axe",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "creativeTab": {
+ "value": "TOOLS"
+ },
+ "harvestLevel": 1,
+ "efficiency": 4.0,
+ "attackSpeed": 1.0,
+ "enchantability": 7,
+ "damageVsEntity": 1.0,
+ "usageCount": 95,
+ "blocksAffected": [],
+ "repairItems": [
+ {
+ "value": "Blocks.NETHERRACK"
+ }
+ ],
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherrackAxeRecipe.mod.json b/elements/NetherrackAxeRecipe.mod.json
new file mode 100644
index 0000000..4029d64
--- /dev/null
+++ b/elements/NetherrackAxeRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:NetherrackAxe"
+ },
+ "name": "netherrack_axe_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherrackHoe.mod.json b/elements/NetherrackHoe.mod.json
new file mode 100644
index 0000000..b4b8330
--- /dev/null
+++ b/elements/NetherrackHoe.mod.json
@@ -0,0 +1,34 @@
+{
+ "_fv": 60,
+ "_type": "tool",
+ "definition": {
+ "toolType": "Hoe",
+ "renderType": 0,
+ "blockingRenderType": 0,
+ "texture": "netherrack_hoe",
+ "customModelName": "Normal",
+ "blockingModelName": "Normal blocking",
+ "name": "Netherrack Hoe",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "creativeTab": {
+ "value": "TOOLS"
+ },
+ "harvestLevel": 1,
+ "efficiency": 4.0,
+ "attackSpeed": 1.0,
+ "enchantability": 7,
+ "damageVsEntity": 1.0,
+ "usageCount": 95,
+ "blocksAffected": [],
+ "repairItems": [
+ {
+ "value": "Blocks.NETHERRACK"
+ }
+ ],
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherrackHoeRecipe.mod.json b/elements/NetherrackHoeRecipe.mod.json
new file mode 100644
index 0000000..51351e6
--- /dev/null
+++ b/elements/NetherrackHoeRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:NetherrackHoe"
+ },
+ "name": "netherrack_hoe_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherrackPickaxe.mod.json b/elements/NetherrackPickaxe.mod.json
new file mode 100644
index 0000000..e102bd6
--- /dev/null
+++ b/elements/NetherrackPickaxe.mod.json
@@ -0,0 +1,34 @@
+{
+ "_fv": 60,
+ "_type": "tool",
+ "definition": {
+ "toolType": "Pickaxe",
+ "renderType": 0,
+ "blockingRenderType": 0,
+ "texture": "netherrack_pickaxe",
+ "customModelName": "Normal",
+ "blockingModelName": "Normal blocking",
+ "name": "Netherrack Pickaxe",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "creativeTab": {
+ "value": "TOOLS"
+ },
+ "harvestLevel": 1,
+ "efficiency": 4.0,
+ "attackSpeed": 1.0,
+ "enchantability": 7,
+ "damageVsEntity": 1.0,
+ "usageCount": 95,
+ "blocksAffected": [],
+ "repairItems": [
+ {
+ "value": "Blocks.NETHERRACK"
+ }
+ ],
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherrackPickaxeRecipe.mod.json b/elements/NetherrackPickaxeRecipe.mod.json
new file mode 100644
index 0000000..558ba9f
--- /dev/null
+++ b/elements/NetherrackPickaxeRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:NetherrackPickaxe"
+ },
+ "name": "netherrack_pickaxe_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherrackShovel.mod.json b/elements/NetherrackShovel.mod.json
new file mode 100644
index 0000000..5f5eb15
--- /dev/null
+++ b/elements/NetherrackShovel.mod.json
@@ -0,0 +1,34 @@
+{
+ "_fv": 60,
+ "_type": "tool",
+ "definition": {
+ "toolType": "Spade",
+ "renderType": 0,
+ "blockingRenderType": 0,
+ "texture": "netherrack_shovel",
+ "customModelName": "Normal",
+ "blockingModelName": "Normal blocking",
+ "name": "Netherrack Shovel",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "creativeTab": {
+ "value": "TOOLS"
+ },
+ "harvestLevel": 1,
+ "efficiency": 4.0,
+ "attackSpeed": 1.0,
+ "enchantability": 7,
+ "damageVsEntity": 1.0,
+ "usageCount": 95,
+ "blocksAffected": [],
+ "repairItems": [
+ {
+ "value": "Blocks.NETHERRACK"
+ }
+ ],
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherrackShovelRecipe.mod.json b/elements/NetherrackShovelRecipe.mod.json
new file mode 100644
index 0000000..067cad3
--- /dev/null
+++ b/elements/NetherrackShovelRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:NetherrackShovel"
+ },
+ "name": "netherrack_shovel_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherrackSword.mod.json b/elements/NetherrackSword.mod.json
new file mode 100644
index 0000000..ab11728
--- /dev/null
+++ b/elements/NetherrackSword.mod.json
@@ -0,0 +1,34 @@
+{
+ "_fv": 60,
+ "_type": "tool",
+ "definition": {
+ "toolType": "Sword",
+ "renderType": 0,
+ "blockingRenderType": 0,
+ "texture": "netherrack_sword",
+ "customModelName": "Normal",
+ "blockingModelName": "Normal blocking",
+ "name": "Netherrack Sword",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "creativeTab": {
+ "value": "COMBAT"
+ },
+ "harvestLevel": 1,
+ "efficiency": 4.0,
+ "attackSpeed": 1.0,
+ "enchantability": 7,
+ "damageVsEntity": 1.0,
+ "usageCount": 95,
+ "blocksAffected": [],
+ "repairItems": [
+ {
+ "value": "Blocks.NETHERRACK"
+ }
+ ],
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false
+ }
+}
\ No newline at end of file
diff --git a/elements/NetherrackSwordRecipe.mod.json b/elements/NetherrackSwordRecipe.mod.json
new file mode 100644
index 0000000..139d9f5
--- /dev/null
+++ b/elements/NetherrackSwordRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.NETHERRACK"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:NetherrackSword"
+ },
+ "name": "netherrack_sword_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/OpenCraftingGUI.mod.json b/elements/OpenCraftingGUI.mod.json
new file mode 100644
index 0000000..187414c
--- /dev/null
+++ b/elements/OpenCraftingGUI.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "no_ext_triggerCropGUI"
+ }
+}
\ No newline at end of file
diff --git a/elements/PlaceCraftingTable.mod.json b/elements/PlaceCraftingTable.mod.json
new file mode 100644
index 0000000..17b8e6a
--- /dev/null
+++ b/elements/PlaceCraftingTable.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "no_ext_triggerNONEOUTLINE1NONEOUTLINE1NONEOUTLINE1Blocks.CRAFTING_TABLENONEOUTLINE1NONEOUTLINE1NONEOUTLINE1Blocks.CRAFTING_TABLENONEOUTLINE1NONEOUTLINE1NONEOUTLINE1NONEOUTLINE1NONEOUTLINE1NONEOUTLINE1portabletagNONEOUTLINE1NONEOUTLINE1NONEOUTLINE1"
+ }
+}
\ No newline at end of file
diff --git a/elements/PortableCraftingTable.mod.json b/elements/PortableCraftingTable.mod.json
new file mode 100644
index 0000000..ba00717
--- /dev/null
+++ b/elements/PortableCraftingTable.mod.json
@@ -0,0 +1,56 @@
+{
+ "_fv": 60,
+ "_type": "item",
+ "definition": {
+ "renderType": 0,
+ "texture": "netherstick",
+ "customModelName": "Normal",
+ "customProperties": {},
+ "states": [],
+ "name": "Portable Crafting Table",
+ "rarity": "COMMON",
+ "creativeTab": {
+ "value": "CUSTOM:EasySurvival"
+ },
+ "stackSize": 64,
+ "enchantability": 0,
+ "useDuration": 0,
+ "toolType": 1.0,
+ "damageCount": 0,
+ "recipeRemainder": {
+ "value": ""
+ },
+ "destroyAnyBlock": false,
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false,
+ "enableMeleeDamage": false,
+ "damageVsEntity": 0.0,
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "glowCondition": {
+ "fixedValue": false
+ },
+ "guiBoundTo": "CraftingStickGUI",
+ "inventorySize": 10,
+ "inventoryStackSize": 64,
+ "onRightClickedInAir": {
+ "name": "OpenCraftingGUI"
+ },
+ "enableRanged": false,
+ "shootConstantly": false,
+ "projectile": {
+ "value": "Arrow"
+ },
+ "isFood": false,
+ "nutritionalValue": 0,
+ "saturation": 0.30000001192092896,
+ "eatResultItem": {
+ "value": ""
+ },
+ "isMeat": false,
+ "isAlwaysEdible": false,
+ "animation": "eat"
+ }
+}
\ No newline at end of file
diff --git a/elements/QuarzAxe.mod.json b/elements/QuarzAxe.mod.json
new file mode 100644
index 0000000..7fa40d1
--- /dev/null
+++ b/elements/QuarzAxe.mod.json
@@ -0,0 +1,34 @@
+{
+ "_fv": 60,
+ "_type": "tool",
+ "definition": {
+ "toolType": "Axe",
+ "renderType": 0,
+ "blockingRenderType": 0,
+ "texture": "quarz_axe",
+ "customModelName": "Normal",
+ "blockingModelName": "Normal blocking",
+ "name": "Quarz Axe",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "creativeTab": {
+ "value": "TOOLS"
+ },
+ "harvestLevel": 2,
+ "efficiency": 6.0,
+ "attackSpeed": 1.0,
+ "enchantability": 14,
+ "damageVsEntity": 2.0,
+ "usageCount": 250,
+ "blocksAffected": [],
+ "repairItems": [
+ {
+ "value": "Items.QUARTZ"
+ }
+ ],
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false
+ }
+}
\ No newline at end of file
diff --git a/elements/QuarzAxeRecipe.mod.json b/elements/QuarzAxeRecipe.mod.json
new file mode 100644
index 0000000..d243d10
--- /dev/null
+++ b/elements/QuarzAxeRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:QuarzAxe"
+ },
+ "name": "quarz_axe_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/QuarzBlock.mod.json b/elements/QuarzBlock.mod.json
new file mode 100644
index 0000000..3248ffb
--- /dev/null
+++ b/elements/QuarzBlock.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": "Items.QUARTZ"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "Blocks.IRON_BLOCK"
+ },
+ "name": "quarz_block",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/QuarzHoe.mod.json b/elements/QuarzHoe.mod.json
new file mode 100644
index 0000000..174be99
--- /dev/null
+++ b/elements/QuarzHoe.mod.json
@@ -0,0 +1,34 @@
+{
+ "_fv": 60,
+ "_type": "tool",
+ "definition": {
+ "toolType": "Hoe",
+ "renderType": 0,
+ "blockingRenderType": 0,
+ "texture": "quarz_hoe",
+ "customModelName": "Normal",
+ "blockingModelName": "Normal blocking",
+ "name": "Quarz Hoe",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "creativeTab": {
+ "value": "TOOLS"
+ },
+ "harvestLevel": 2,
+ "efficiency": 6.0,
+ "attackSpeed": 1.0,
+ "enchantability": 14,
+ "damageVsEntity": 2.0,
+ "usageCount": 250,
+ "blocksAffected": [],
+ "repairItems": [
+ {
+ "value": "Items.QUARTZ"
+ }
+ ],
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false
+ }
+}
\ No newline at end of file
diff --git a/elements/QuarzHoeRecipe.mod.json b/elements/QuarzHoeRecipe.mod.json
new file mode 100644
index 0000000..ae001e6
--- /dev/null
+++ b/elements/QuarzHoeRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:QuarzHoe"
+ },
+ "name": "quarz_hoe_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/QuarzPickaxe.mod.json b/elements/QuarzPickaxe.mod.json
new file mode 100644
index 0000000..1e5053b
--- /dev/null
+++ b/elements/QuarzPickaxe.mod.json
@@ -0,0 +1,34 @@
+{
+ "_fv": 60,
+ "_type": "tool",
+ "definition": {
+ "toolType": "Pickaxe",
+ "renderType": 0,
+ "blockingRenderType": 0,
+ "texture": "quarz_pickaxe",
+ "customModelName": "Normal",
+ "blockingModelName": "Normal blocking",
+ "name": "Quarz Pickaxe",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "creativeTab": {
+ "value": "TOOLS"
+ },
+ "harvestLevel": 2,
+ "efficiency": 6.0,
+ "attackSpeed": 1.0,
+ "enchantability": 14,
+ "damageVsEntity": 2.0,
+ "usageCount": 250,
+ "blocksAffected": [],
+ "repairItems": [
+ {
+ "value": "Items.QUARTZ"
+ }
+ ],
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false
+ }
+}
\ No newline at end of file
diff --git a/elements/QuarzPickaxeRecipe.mod.json b/elements/QuarzPickaxeRecipe.mod.json
new file mode 100644
index 0000000..1fedf9a
--- /dev/null
+++ b/elements/QuarzPickaxeRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:QuarzPickaxe"
+ },
+ "name": "quarz_pickaxe_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/QuarzShovel.mod.json b/elements/QuarzShovel.mod.json
new file mode 100644
index 0000000..0c71cb0
--- /dev/null
+++ b/elements/QuarzShovel.mod.json
@@ -0,0 +1,34 @@
+{
+ "_fv": 60,
+ "_type": "tool",
+ "definition": {
+ "toolType": "Spade",
+ "renderType": 0,
+ "blockingRenderType": 0,
+ "texture": "quarz_shovel",
+ "customModelName": "Normal",
+ "blockingModelName": "Normal blocking",
+ "name": "Quarz Shovel",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "creativeTab": {
+ "value": "TOOLS"
+ },
+ "harvestLevel": 2,
+ "efficiency": 6.0,
+ "attackSpeed": 1.0,
+ "enchantability": 14,
+ "damageVsEntity": 2.0,
+ "usageCount": 250,
+ "blocksAffected": [],
+ "repairItems": [
+ {
+ "value": "Items.QUARTZ"
+ }
+ ],
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false
+ }
+}
\ No newline at end of file
diff --git a/elements/QuarzShovelRecipe.mod.json b/elements/QuarzShovelRecipe.mod.json
new file mode 100644
index 0000000..0a51ea4
--- /dev/null
+++ b/elements/QuarzShovelRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:QuarzShovel"
+ },
+ "name": "quarz_shovel_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/QuarzSword.mod.json b/elements/QuarzSword.mod.json
new file mode 100644
index 0000000..38a2627
--- /dev/null
+++ b/elements/QuarzSword.mod.json
@@ -0,0 +1,34 @@
+{
+ "_fv": 60,
+ "_type": "tool",
+ "definition": {
+ "toolType": "Sword",
+ "renderType": 0,
+ "blockingRenderType": 0,
+ "texture": "quarz_sword",
+ "customModelName": "Normal",
+ "blockingModelName": "Normal blocking",
+ "name": "Quarz Sword",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "creativeTab": {
+ "value": "COMBAT"
+ },
+ "harvestLevel": 2,
+ "efficiency": 6.0,
+ "attackSpeed": 1.0,
+ "enchantability": 14,
+ "damageVsEntity": 2.0,
+ "usageCount": 250,
+ "blocksAffected": [],
+ "repairItems": [
+ {
+ "value": "Items.QUARTZ"
+ }
+ ],
+ "immuneToFire": false,
+ "stayInGridWhenCrafting": false,
+ "damageOnCrafting": false
+ }
+}
\ No newline at end of file
diff --git a/elements/QuarzSwordRecipe.mod.json b/elements/QuarzSwordRecipe.mod.json
new file mode 100644
index 0000000..3c56442
--- /dev/null
+++ b/elements/QuarzSwordRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.QUARTZ"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "TAG:forge:tag_stick"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:QuarzSword"
+ },
+ "name": "quarz_sword_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/ShulkerBoxRecipe.mod.json b/elements/ShulkerBoxRecipe.mod.json
new file mode 100644
index 0000000..adf9d1f
--- /dev/null
+++ b/elements/ShulkerBoxRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.HOPPER"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.CHEST"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.HOPPER"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "Blocks.BLACK_SHULKER_BOX"
+ },
+ "name": "shulker_box_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerBlaze.mod.json b/elements/SpawnerBlaze.mod.json
new file mode 100644
index 0000000..6f39233
--- /dev/null
+++ b/elements/SpawnerBlaze.mod.json
@@ -0,0 +1,129 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "monster_spawner",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "spawner:default",
+ "rotationMode": 0,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Spawner Blaze",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "BUILDING_BLOCKS"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ROCK"
+ },
+ "tickRate": 100,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "GROUND"
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": false,
+ "guiBoundTo": "",
+ "openGUIOnRightClick": false,
+ "inventorySize": 9,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [],
+ "inventoryInSlotIDs": [],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "SpawnerBlazeUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerBlazeRecipe.mod.json b/elements/SpawnerBlazeRecipe.mod.json
new file mode 100644
index 0000000..7535d67
--- /dev/null
+++ b/elements/SpawnerBlazeRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.GLOWSTONE_DUST"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.GLOWSTONE_DUST"
+ },
+ {
+ "value": "Blocks.TORCH"
+ },
+ {
+ "value": "Items.GLOWSTONE_DUST"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.GLOWSTONE_DUST"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:SpawnerBlaze"
+ },
+ "name": "spawner_blaze_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerBlazeUpdateTick.mod.json b/elements/SpawnerBlazeUpdateTick.mod.json
new file mode 100644
index 0000000..c739a7f
--- /dev/null
+++ b/elements/SpawnerBlazeUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "no_ext_triggerEQCUSTOM:SpawnersActiveTRUEEntityBlazeADD1"
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerCreeper.mod.json b/elements/SpawnerCreeper.mod.json
new file mode 100644
index 0000000..3e9920e
--- /dev/null
+++ b/elements/SpawnerCreeper.mod.json
@@ -0,0 +1,129 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "monster_spawner",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "spawner:default",
+ "rotationMode": 0,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Spawner Creeper",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "BUILDING_BLOCKS"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ROCK"
+ },
+ "tickRate": 100,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "GROUND"
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": false,
+ "guiBoundTo": "",
+ "openGUIOnRightClick": false,
+ "inventorySize": 9,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [],
+ "inventoryInSlotIDs": [],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "SpawnerCreeperUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerCreeperRecipe.mod.json b/elements/SpawnerCreeperRecipe.mod.json
new file mode 100644
index 0000000..1339e78
--- /dev/null
+++ b/elements/SpawnerCreeperRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Items.PAPER"
+ },
+ {
+ "value": "Items.GUNPOWDER"
+ },
+ {
+ "value": "Items.PAPER"
+ },
+ {
+ "value": "Items.GUNPOWDER"
+ },
+ {
+ "value": "Items.PAPER"
+ },
+ {
+ "value": "Items.GUNPOWDER"
+ },
+ {
+ "value": "Items.PAPER"
+ },
+ {
+ "value": "Items.GUNPOWDER"
+ },
+ {
+ "value": "Items.PAPER"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:SpawnerCreeper"
+ },
+ "name": "spawner_creeper_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerCreeperUpdateTick.mod.json b/elements/SpawnerCreeperUpdateTick.mod.json
new file mode 100644
index 0000000..aaf3cbd
--- /dev/null
+++ b/elements/SpawnerCreeperUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "no_ext_triggerEQCUSTOM:SpawnersActiveTRUEEntityCreeperADD1"
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerEvoker.mod.json b/elements/SpawnerEvoker.mod.json
new file mode 100644
index 0000000..fcc22a4
--- /dev/null
+++ b/elements/SpawnerEvoker.mod.json
@@ -0,0 +1,129 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "monster_spawner",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "spawner:default",
+ "rotationMode": 0,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Spawner Evoker",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "BUILDING_BLOCKS"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ROCK"
+ },
+ "tickRate": 100,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "GROUND"
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": false,
+ "guiBoundTo": "",
+ "openGUIOnRightClick": false,
+ "inventorySize": 9,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [],
+ "inventoryInSlotIDs": [],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "SpawnerEvokerUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerEvokerRecipe.mod.json b/elements/SpawnerEvokerRecipe.mod.json
new file mode 100644
index 0000000..adfc5fe
--- /dev/null
+++ b/elements/SpawnerEvokerRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.GOLD_INGOT"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.GOLD_INGOT"
+ },
+ {
+ "value": "Items.EMERALD"
+ },
+ {
+ "value": "Items.GOLD_INGOT"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.GOLD_NUGGET"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:SpawnerEvoker"
+ },
+ "name": "spawner_evoker_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerEvokerUpdateTick.mod.json b/elements/SpawnerEvokerUpdateTick.mod.json
new file mode 100644
index 0000000..31802c5
--- /dev/null
+++ b/elements/SpawnerEvokerUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "no_ext_triggerEQCUSTOM:SpawnersActiveTRUEEntityEvokerADD1"
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerGhasRecipe.mod.json b/elements/SpawnerGhasRecipe.mod.json
new file mode 100644
index 0000000..008ff19
--- /dev/null
+++ b/elements/SpawnerGhasRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": "Items.GHAST_TEAR"
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.OBSIDIAN"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:SpawnerGhast"
+ },
+ "name": "spawner_ghas_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerGhast.mod.json b/elements/SpawnerGhast.mod.json
new file mode 100644
index 0000000..7573df9
--- /dev/null
+++ b/elements/SpawnerGhast.mod.json
@@ -0,0 +1,129 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "monster_spawner",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "spawner:default",
+ "rotationMode": 0,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Spawner Ghast",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "BUILDING_BLOCKS"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ROCK"
+ },
+ "tickRate": 100,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "GROUND"
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": false,
+ "guiBoundTo": "",
+ "openGUIOnRightClick": false,
+ "inventorySize": 9,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [],
+ "inventoryInSlotIDs": [],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "SpawnerGhastUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerGhastUpdateTick.mod.json b/elements/SpawnerGhastUpdateTick.mod.json
new file mode 100644
index 0000000..bbfd328
--- /dev/null
+++ b/elements/SpawnerGhastUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "no_ext_triggerEQCUSTOM:SpawnersActiveTRUEEntityGhastADD1"
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerPillager.mod.json b/elements/SpawnerPillager.mod.json
new file mode 100644
index 0000000..09f971f
--- /dev/null
+++ b/elements/SpawnerPillager.mod.json
@@ -0,0 +1,129 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "monster_spawner",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "spawner:default",
+ "rotationMode": 0,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Spawner Pillager",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "BUILDING_BLOCKS"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ROCK"
+ },
+ "tickRate": 100,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "GROUND"
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": false,
+ "guiBoundTo": "",
+ "openGUIOnRightClick": false,
+ "inventorySize": 9,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [],
+ "inventoryInSlotIDs": [],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "SpawnerPillagerUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerPillagerRecipe.mod.json b/elements/SpawnerPillagerRecipe.mod.json
new file mode 100644
index 0000000..960c50c
--- /dev/null
+++ b/elements/SpawnerPillagerRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.EMERALD"
+ },
+ {
+ "value": "Items.CROSSBOW"
+ },
+ {
+ "value": "Items.EMERALD"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.COBBLESTONE"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:SpawnerPillager"
+ },
+ "name": "spawner_pillager_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerPillagerUpdateTick.mod.json b/elements/SpawnerPillagerUpdateTick.mod.json
new file mode 100644
index 0000000..0dcdd19
--- /dev/null
+++ b/elements/SpawnerPillagerUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "no_ext_triggerEQCUSTOM:SpawnersActiveTRUEEntityPillagerADD1"
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerSlime.mod.json b/elements/SpawnerSlime.mod.json
new file mode 100644
index 0000000..d8385f9
--- /dev/null
+++ b/elements/SpawnerSlime.mod.json
@@ -0,0 +1,129 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "monster_spawner",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "spawner:default",
+ "rotationMode": 0,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Spawner Slime",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "BUILDING_BLOCKS"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ROCK"
+ },
+ "tickRate": 100,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "GROUND"
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": false,
+ "guiBoundTo": "",
+ "openGUIOnRightClick": false,
+ "inventorySize": 9,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [],
+ "inventoryInSlotIDs": [],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "SpawnerSlimeUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerSlimeRecipe.mod.json b/elements/SpawnerSlimeRecipe.mod.json
new file mode 100644
index 0000000..4427ea2
--- /dev/null
+++ b/elements/SpawnerSlimeRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.KELP"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Blocks.LEAVES"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:SpawnerSlime"
+ },
+ "name": "spawner_slime_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerSlimeUpdateTick.mod.json b/elements/SpawnerSlimeUpdateTick.mod.json
new file mode 100644
index 0000000..8dc317b
--- /dev/null
+++ b/elements/SpawnerSlimeUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "no_ext_triggerEQCUSTOM:SpawnersActiveTRUEEntitySlimeADD1"
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerWitherSkelett.mod.json b/elements/SpawnerWitherSkelett.mod.json
new file mode 100644
index 0000000..5f7e15f
--- /dev/null
+++ b/elements/SpawnerWitherSkelett.mod.json
@@ -0,0 +1,129 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "monster_spawner",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "spawner:default",
+ "rotationMode": 0,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Spawner Wither Skeleton",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "BUILDING_BLOCKS"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ROCK"
+ },
+ "tickRate": 100,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "GROUND"
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": false,
+ "guiBoundTo": "",
+ "openGUIOnRightClick": false,
+ "inventorySize": 9,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [],
+ "inventoryInSlotIDs": [],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "SpawnerWitherSkelettUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnerWitherSkelettUpdateTick.mod.json b/elements/SpawnerWitherSkelettUpdateTick.mod.json
new file mode 100644
index 0000000..8edd228
--- /dev/null
+++ b/elements/SpawnerWitherSkelettUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "no_ext_triggerEQCUSTOM:SpawnersActiveTRUEEntityWitherSkeletonADD1"
+ }
+}
\ No newline at end of file
diff --git a/elements/SpawnersActive.mod.json b/elements/SpawnersActive.mod.json
new file mode 100644
index 0000000..6f7f92d
--- /dev/null
+++ b/elements/SpawnersActive.mod.json
@@ -0,0 +1,12 @@
+{
+ "_fv": 60,
+ "_type": "gamerule",
+ "definition": {
+ "type": "Logic",
+ "displayName": "Spawners active",
+ "description": "Sets if custom spawners are active or inactive",
+ "category": "SPAWNING",
+ "defaultValueLogic": false,
+ "defaultValueNumber": 0
+ }
+}
\ No newline at end of file
diff --git a/elements/TeleportSetGUI.mod.json b/elements/TeleportSetGUI.mod.json
new file mode 100644
index 0000000..b426af9
--- /dev/null
+++ b/elements/TeleportSetGUI.mod.json
@@ -0,0 +1,60 @@
+{
+ "_fv": 60,
+ "_type": "gui",
+ "definition": {
+ "type": 0,
+ "width": 176,
+ "height": 166,
+ "inventoryOffsetX": 0,
+ "inventoryOffsetY": 0,
+ "renderBgLayer": true,
+ "doesPauseGame": false,
+ "components": [
+ {
+ "type": "textfield",
+ "data": {
+ "placeholder": "Name",
+ "name": "TeleportName",
+ "width": 120,
+ "height": 20,
+ "x": 153,
+ "y": 98
+ }
+ },
+ {
+ "type": "button",
+ "data": {
+ "name": "button_set",
+ "text": "Set",
+ "isUndecorated": false,
+ "width": 40,
+ "height": 20,
+ "x": 192,
+ "y": 143
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_set_teleport",
+ "text": {
+ "fixedValue": "Set Teleport"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 182,
+ "y": 52
+ }
+ }
+ ],
+ "gridSettings": {
+ "sx": 18,
+ "sy": 18,
+ "ox": 11,
+ "oy": 15,
+ "snapOnGrid": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/elements/TeleporterGUI.mod.json b/elements/TeleporterGUI.mod.json
new file mode 100644
index 0000000..070061e
--- /dev/null
+++ b/elements/TeleporterGUI.mod.json
@@ -0,0 +1,91 @@
+{
+ "_fv": 60,
+ "_type": "gui",
+ "definition": {
+ "type": 0,
+ "width": 176,
+ "height": 166,
+ "inventoryOffsetX": 0,
+ "inventoryOffsetY": 0,
+ "renderBgLayer": true,
+ "doesPauseGame": false,
+ "components": [
+ {
+ "type": "label",
+ "data": {
+ "name": "label_teleport_1",
+ "text": {
+ "fixedValue": "Teleport 1"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 132,
+ "y": 62
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_teleport_2",
+ "text": {
+ "fixedValue": "Teleport 2"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 132,
+ "y": 89
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_easyteleport",
+ "text": {
+ "fixedValue": "EasyTeleport"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 132,
+ "y": 44
+ }
+ },
+ {
+ "type": "button",
+ "data": {
+ "name": "button_teleport",
+ "text": "Teleport",
+ "isUndecorated": false,
+ "width": 65,
+ "height": 20,
+ "x": 204,
+ "y": 62
+ }
+ },
+ {
+ "type": "button",
+ "data": {
+ "name": "button_teleport1",
+ "text": "Teleport",
+ "isUndecorated": false,
+ "width": 65,
+ "height": 20,
+ "x": 204,
+ "y": 89
+ }
+ }
+ ],
+ "gridSettings": {
+ "sx": 18,
+ "sy": 18,
+ "ox": 11,
+ "oy": 15,
+ "snapOnGrid": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/elements/TeleporterPlate.mod.json b/elements/TeleporterPlate.mod.json
new file mode 100644
index 0000000..a7e2a5c
--- /dev/null
+++ b/elements/TeleporterPlate.mod.json
@@ -0,0 +1,129 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "plate",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "teleporter:default",
+ "rotationMode": 0,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Teleporter Plate",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "TRANSPORTATION"
+ },
+ "destroyTool": "Not specified",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": false,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ANVIL"
+ },
+ "tickRate": 10,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "ANVIL"
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": true,
+ "guiBoundTo": "",
+ "openGUIOnRightClick": false,
+ "inventorySize": 0,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [],
+ "inventoryInSlotIDs": [],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onRightClicked": {
+ "name": "TeleporterProc"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/TeleporterProc.mod.json b/elements/TeleporterProc.mod.json
new file mode 100644
index 0000000..835fa66
--- /dev/null
+++ b/elements/TeleporterProc.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "no_ext_triggerItems.ENDER_EYEEQisBlockLinkedFALSEEQplayerHasStoredTeleporterTRUEANDEQplayerTeleporterPosXANDEQplayerTeleporterPosYEQplayerTeleporterPosZYou can't link the portal to it's selfFALSEblockTeleporterPosXplayerTeleporterPosXblockTeleporterPosYplayerTeleporterPosYblockTeleporterPosZplayerTeleporterPosZblockTeleporterPosXblockTeleporterPosXblockTeleporterPosYblockTeleporterPosZblockTeleporterPosYblockTeleporterPosXblockTeleporterPosYblockTeleporterPosZblockTeleporterPosZblockTeleporterPosXblockTeleporterPosYblockTeleporterPosZisBlockLinkedTRUEisBlockLinkedblockTeleporterPosXblockTeleporterPosYblockTeleporterPosZTRUEplayerHasStoredTeleporterFALSEThe teleporter has been linkedFALSEplayerTeleporterPosXplayerTeleporterPosYplayerTeleporterPosZplayerHasStoredTeleporterTRUECurrent Portal Location: X: playerTeleporterPosXY: playerTeleporterPosYZ: playerTeleporterPosZFALSEEQisBlockLinkedTRUEADDblockTeleporterPosX0.5blockTeleporterPosYADDblockTeleporterPosZ0.5You have been teleportedFALSE"
+ }
+}
\ No newline at end of file
diff --git a/elements/TreeCrop.mod.json b/elements/TreeCrop.mod.json
new file mode 100644
index 0000000..3416453
--- /dev/null
+++ b/elements/TreeCrop.mod.json
@@ -0,0 +1,157 @@
+{
+ "_fv": 60,
+ "_type": "block",
+ "definition": {
+ "texture": "croptexture",
+ "textureTop": "",
+ "textureLeft": "",
+ "textureFront": "",
+ "textureRight": "",
+ "textureBack": "",
+ "renderType": 2,
+ "customModelName": "cubik_model:default",
+ "rotationMode": 0,
+ "enablePitch": false,
+ "emissiveRendering": false,
+ "displayFluidOverlay": false,
+ "itemTexture": "",
+ "particleTexture": "",
+ "tintType": "No tint",
+ "isItemTinted": false,
+ "hasTransparency": true,
+ "connectedSides": false,
+ "transparencyType": "SOLID",
+ "disableOffset": false,
+ "boundingBoxes": [
+ {
+ "mx": 0.0,
+ "my": 0.0,
+ "mz": 0.0,
+ "Mx": 16.0,
+ "My": 16.0,
+ "Mz": 16.0,
+ "subtract": false
+ }
+ ],
+ "name": "Tree Crop",
+ "specialInformation": {
+ "fixedValue": []
+ },
+ "hardness": 1.0,
+ "resistance": 10.0,
+ "hasGravity": false,
+ "isWaterloggable": false,
+ "creativeTab": {
+ "value": "CUSTOM:EasySurvival"
+ },
+ "destroyTool": "pickaxe",
+ "customDrop": {
+ "value": ""
+ },
+ "dropAmount": 1,
+ "useLootTableForDrops": false,
+ "requiresCorrectTool": true,
+ "enchantPowerBonus": 0.0,
+ "plantsGrowOn": false,
+ "canRedstoneConnect": false,
+ "lightOpacity": 0,
+ "material": {
+ "value": "ROCK"
+ },
+ "tickRate": 25,
+ "tickRandomly": false,
+ "isReplaceable": false,
+ "canProvidePower": false,
+ "emittedRedstonePower": {
+ "fixedValue": 15.0
+ },
+ "colorOnMap": "DEFAULT",
+ "creativePickItem": {
+ "value": ""
+ },
+ "offsetType": "NONE",
+ "aiPathNodeType": "DEFAULT",
+ "flammability": 0,
+ "fireSpreadSpeed": 0,
+ "isLadder": false,
+ "slipperiness": 0.6,
+ "speedFactor": 1.0,
+ "jumpFactor": 1.0,
+ "reactionToPushing": "NORMAL",
+ "isNotColidable": false,
+ "isCustomSoundType": false,
+ "soundOnStep": {
+ "value": "GROUND"
+ },
+ "breakSound": {
+ "value": ""
+ },
+ "fallSound": {
+ "value": ""
+ },
+ "hitSound": {
+ "value": ""
+ },
+ "placeSound": {
+ "value": ""
+ },
+ "stepSound": {
+ "value": ""
+ },
+ "luminance": 0,
+ "unbreakable": false,
+ "breakHarvestLevel": 1,
+ "isBonemealable": false,
+ "hasInventory": true,
+ "guiBoundTo": "TreeCropGUI",
+ "openGUIOnRightClick": true,
+ "inventorySize": 8,
+ "inventoryStackSize": 64,
+ "inventoryDropWhenDestroyed": true,
+ "inventoryComparatorPower": true,
+ "inventoryOutSlotIDs": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7
+ ],
+ "inventoryInSlotIDs": [
+ 0
+ ],
+ "hasEnergyStorage": false,
+ "energyInitial": 0,
+ "energyCapacity": 400000,
+ "energyMaxReceive": 200,
+ "energyMaxExtract": 200,
+ "isFluidTank": false,
+ "fluidCapacity": 8000,
+ "fluidRestrictions": [],
+ "onTickUpdate": {
+ "name": "TreeCropUpdateTick"
+ },
+ "generateFeature": false,
+ "restrictionBiomes": [],
+ "blocksToReplace": [
+ {
+ "value": "Blocks.STONE#0"
+ },
+ {
+ "value": "Blocks.STONE#1"
+ },
+ {
+ "value": "Blocks.STONE#3"
+ },
+ {
+ "value": "Blocks.STONE#5"
+ }
+ ],
+ "generationShape": "UNIFORM",
+ "frequencyPerChunks": 10,
+ "frequencyOnChunk": 16,
+ "minGenerateHeight": 0,
+ "maxGenerateHeight": 64
+ }
+}
\ No newline at end of file
diff --git a/elements/TreeCropGUI.mod.json b/elements/TreeCropGUI.mod.json
new file mode 100644
index 0000000..fcee120
--- /dev/null
+++ b/elements/TreeCropGUI.mod.json
@@ -0,0 +1,139 @@
+{
+ "_fv": 60,
+ "_type": "gui",
+ "definition": {
+ "type": 1,
+ "width": 176,
+ "height": 166,
+ "inventoryOffsetX": 0,
+ "inventoryOffsetY": 0,
+ "renderBgLayer": true,
+ "doesPauseGame": false,
+ "components": [
+ {
+ "type": "inputslot",
+ "data": {
+ "inputLimit": {
+ "value": ""
+ },
+ "disablePlacement": {
+ "fixedValue": false
+ },
+ "id": 0,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 132,
+ "y": 83
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 1,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 168,
+ "y": 83
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 2,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 186,
+ "y": 83
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 3,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 204,
+ "y": 83
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 4,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 222,
+ "y": 83
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 5,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 240,
+ "y": 83
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 6,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 258,
+ "y": 83
+ }
+ },
+ {
+ "type": "outputslot",
+ "data": {
+ "id": 7,
+ "disablePickup": {
+ "fixedValue": false
+ },
+ "dropItemsWhenNotBound": true,
+ "x": 276,
+ "y": 83
+ }
+ },
+ {
+ "type": "label",
+ "data": {
+ "name": "label_treecrop",
+ "text": {
+ "fixedValue": "TreeCrop"
+ },
+ "color": {
+ "value": -12829636,
+ "falpha": 0.0
+ },
+ "x": 132,
+ "y": 47
+ }
+ }
+ ],
+ "gridSettings": {
+ "sx": 18,
+ "sy": 18,
+ "ox": 11,
+ "oy": 15,
+ "snapOnGrid": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/elements/TreeCropRecipe.mod.json b/elements/TreeCropRecipe.mod.json
new file mode 100644
index 0000000..24935cf
--- /dev/null
+++ b/elements/TreeCropRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.GLASS"
+ },
+ {
+ "value": "Blocks.GLASS"
+ },
+ {
+ "value": "Blocks.GLASS"
+ },
+ {
+ "value": "Blocks.DIRT"
+ },
+ {
+ "value": "TAG:minecraft:tagsaplings"
+ },
+ {
+ "value": "Blocks.DIRT"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ },
+ {
+ "value": "Blocks.PLANKS"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:TreeCrop"
+ },
+ "name": "tree_crop_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/TreeCropUpdateTick.mod.json b/elements/TreeCropUpdateTick.mod.json
new file mode 100644
index 0000000..5b8d9fe
--- /dev/null
+++ b/elements/TreeCropUpdateTick.mod.json
@@ -0,0 +1,7 @@
+{
+ "_fv": 60,
+ "_type": "procedure",
+ "definition": {
+ "procedurexml": "Slotnono_ext_trigger0Blocks.SAPLING#0local:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Blocks.LOG#0local:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Blocks.SAPLING#1local:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Blocks.LOG#1local:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Blocks.SAPLING#2local:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Blocks.LOG#2local:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Blocks.SAPLING#3local:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Blocks.LOG#3local:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Blocks.SAPLING#4local:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Blocks.LOG2#0local:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Blocks.SAPLING#5local:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Blocks.LOG2#1local:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Blocks.BAMBOOlocal:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Blocks.BAMBOOlocal:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Blocks.CACTUSlocal:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Blocks.CACTUSlocal:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Blocks.REEDSlocal:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Blocks.REEDSlocal:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Blocks.CHERRY_SAPLINGlocal:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Blocks.CHERRY_LOGlocal:SlotnoBREAKlocal:SlotnoADDlocal:Slotno10Blocks.MANGROVE_PROPAGULElocal:Slotno17LTlocal:Slotno64ADDlocal:Slotno1Blocks.MANGROVE_LOGlocal:SlotnoBREAKlocal:SlotnoADDlocal:Slotno1"
+ }
+}
\ No newline at end of file
diff --git a/elements/Trident.mod.json b/elements/Trident.mod.json
new file mode 100644
index 0000000..941dc14
--- /dev/null
+++ b/elements/Trident.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Items.GHAST_TEAR"
+ },
+ {
+ "value": "Items.GHAST_TEAR"
+ },
+ {
+ "value": "Items.GHAST_TEAR"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.DIAMOND"
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": ""
+ },
+ {
+ "value": "Items.DIAMOND"
+ },
+ {
+ "value": ""
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "Items.TRIDENT"
+ },
+ "name": "trident",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/elements/WitherSkelettonSpawnerRecipe.mod.json b/elements/WitherSkelettonSpawnerRecipe.mod.json
new file mode 100644
index 0000000..a68d1be
--- /dev/null
+++ b/elements/WitherSkelettonSpawnerRecipe.mod.json
@@ -0,0 +1,48 @@
+{
+ "_fv": 60,
+ "_type": "recipe",
+ "definition": {
+ "recipeType": "Crafting",
+ "recipeRetstackSize": 1,
+ "group": "",
+ "cookingBookCategory": "MISC",
+ "xpReward": 0.0,
+ "cookingTime": 200,
+ "craftingBookCategory": "MISC",
+ "recipeShapeless": false,
+ "recipeSlots": [
+ {
+ "value": "Blocks.SOUL_SAND"
+ },
+ {
+ "value": "Blocks.SOUL_SAND"
+ },
+ {
+ "value": "Blocks.SOUL_SAND"
+ },
+ {
+ "value": "Blocks.SOUL_SAND"
+ },
+ {
+ "value": "Items.BLAZE_ROD"
+ },
+ {
+ "value": "Blocks.SOUL_SAND"
+ },
+ {
+ "value": "Blocks.SOUL_SAND"
+ },
+ {
+ "value": "Blocks.SOUL_SAND"
+ },
+ {
+ "value": "Blocks.SOUL_SAND"
+ }
+ ],
+ "recipeReturnStack": {
+ "value": "CUSTOM:SpawnerWitherSkelett"
+ },
+ "name": "wither_skeletton_spawner_recipe",
+ "namespace": "mod"
+ }
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..f237dcf
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,2 @@
+org.gradle.jvmargs=-Xmx3G
+org.gradle.daemon=false
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..943f0cb
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..37aef8d
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
+networkTimeout=10000
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..65dcd68
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,244 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..93e3f59
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,92 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/mcreator.gradle b/mcreator.gradle
new file mode 100644
index 0000000..e69de29
diff --git a/models/anvil.json b/models/anvil.json
new file mode 100644
index 0000000..da35a2c
--- /dev/null
+++ b/models/anvil.json
@@ -0,0 +1,61 @@
+{
+ "__comment": "Designed by Netquick with Cubik Studio - https://cubik.studio",
+ "textures": {
+ "particle": "blocks/particle",
+ "texture": "blocks/texture"
+ },
+ "elements": [
+ {
+ "__comment": "Box1",
+ "from": [ 2, 0, 2 ],
+ "to": [ 14, 3, 14 ],
+ "faces": {
+ "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#texture" },
+ "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#texture" },
+ "north": { "uv": [ 2, 13, 14, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 2, 13, 14, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 2, 13, 14, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 2, 13, 14, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box2",
+ "from": [ 3, 3, 3 ],
+ "to": [ 13, 3.5, 13 ],
+ "faces": {
+ "down": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" },
+ "up": { "uv": [ 3, 3, 13, 13 ], "texture": "#texture" },
+ "north": { "uv": [ 3, 12.5, 13, 13 ], "texture": "#texture" },
+ "south": { "uv": [ 3, 12.5, 13, 13 ], "texture": "#texture" },
+ "west": { "uv": [ 3, 12.5, 13, 13 ], "texture": "#texture" },
+ "east": { "uv": [ 3, 12.5, 13, 13 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 5, 3.5, 6 ],
+ "to": [ 11, 9, 10 ],
+ "faces": {
+ "down": { "uv": [ 5, 6, 11, 10 ], "texture": "#texture" },
+ "up": { "uv": [ 5, 6, 11, 10 ], "texture": "#texture" },
+ "north": { "uv": [ 5, 7, 11, 12.5 ], "texture": "#texture" },
+ "south": { "uv": [ 5, 7, 11, 12.5 ], "texture": "#texture" },
+ "west": { "uv": [ 6, 7, 10, 12.5 ], "texture": "#texture" },
+ "east": { "uv": [ 6, 7, 10, 12.5 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box4",
+ "from": [ 0, 9, 4 ],
+ "to": [ 16, 14, 12 ],
+ "faces": {
+ "down": { "uv": [ 0, 4, 16, 12 ], "texture": "#texture" },
+ "up": { "uv": [ 0, 4, 16, 12 ], "texture": "#texture" },
+ "north": { "uv": [ 0, 2, 16, 7 ], "texture": "#texture" },
+ "south": { "uv": [ 0, 2, 16, 7 ], "texture": "#texture" },
+ "west": { "uv": [ 4, 2, 12, 7 ], "texture": "#texture" },
+ "east": { "uv": [ 4, 2, 12, 7 ], "texture": "#texture" }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/models/anvil.json.textures b/models/anvil.json.textures
new file mode 100644
index 0000000..dad3556
--- /dev/null
+++ b/models/anvil.json.textures
@@ -0,0 +1,10 @@
+{
+ "mappings": {
+ "default": {
+ "map": {
+ "texture": "anviltexture"
+ },
+ "name": "default"
+ }
+ }
+}
\ No newline at end of file
diff --git a/models/barrelintake.json b/models/barrelintake.json
new file mode 100644
index 0000000..4ddd8db
--- /dev/null
+++ b/models/barrelintake.json
@@ -0,0 +1,128 @@
+{
+ "__comment": "Designed by Netquick with Cubik Studio - https://cubik.studio",
+ "textures": {
+ "particle": "blocks/particle",
+ "wood": "blocks/wood",
+ "barrel": "barrel",
+ "barreltop": "wood"
+ },
+ "elements": [
+ {
+ "__comment": "Box1",
+ "from": [ 0, 1, 0 ],
+ "to": [ 16, 15, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#barreltop" },
+ "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#barreltop" },
+ "north": { "uv": [ 0, 1, 16, 15 ], "texture": "#barrel" },
+ "south": { "uv": [ 0, 1, 16, 15 ], "texture": "#barrel" },
+ "west": { "uv": [ 0, 1, 16, 15 ], "texture": "#barrel" },
+ "east": { "uv": [ 0, 1, 16, 15 ], "texture": "#barrel" }
+ }
+ },
+ {
+ "__comment": "Box2",
+ "from": [ 0, 15, 0 ],
+ "to": [ 16, 16, 1 ],
+ "faces": {
+ "down": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" },
+ "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#wood" },
+ "north": { "uv": [ 0, 0, 16, 1 ], "texture": "#wood" },
+ "south": { "uv": [ 0, 0, 16, 1 ], "texture": "#wood" },
+ "west": { "uv": [ 0, 0, 1, 1 ], "texture": "#wood" },
+ "east": { "uv": [ 15, 0, 16, 1 ], "texture": "#wood" }
+ }
+ },
+ {
+ "__comment": "Box2",
+ "from": [ 0, 15, 15 ],
+ "to": [ 16, 16, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" },
+ "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#wood" },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" },
+ "west": { "uv": [ 0, 15, 1, 16 ], "texture": "#wood" },
+ "east": { "uv": [ 15, 15, 16, 16 ], "texture": "#wood" }
+ }
+ },
+ {
+ "__comment": "Box2",
+ "from": [ 0, 0, 0 ],
+ "to": [ 16, 1, 1 ],
+ "faces": {
+ "down": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" },
+ "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#wood" },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" },
+ "west": { "uv": [ 0, 15, 1, 16 ], "texture": "#wood" },
+ "east": { "uv": [ 15, 15, 16, 16 ], "texture": "#wood" }
+ }
+ },
+ {
+ "__comment": "Box2",
+ "from": [ 0, 0, 15 ],
+ "to": [ 16, 1, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" },
+ "up": { "uv": [ 0, 0, 16, 1 ], "texture": "#wood" },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#wood" },
+ "west": { "uv": [ 0, 15, 1, 16 ], "texture": "#wood" },
+ "east": { "uv": [ 15, 15, 16, 16 ], "texture": "#wood" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 0, 0, 1 ],
+ "to": [ 1, 1, 15 ],
+ "faces": {
+ "down": { "uv": [ 0, 1, 1, 15 ], "texture": "#wood" },
+ "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#wood" },
+ "north": { "uv": [ 15, 15, 16, 16 ], "texture": "#wood" },
+ "south": { "uv": [ 0, 15, 1, 16 ], "texture": "#wood" },
+ "west": { "uv": [ 1, 15, 15, 16 ], "texture": "#wood" },
+ "east": { "uv": [ 1, 15, 15, 16 ], "texture": "#wood" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 15, 0, 1 ],
+ "to": [ 16, 1, 15 ],
+ "faces": {
+ "down": { "uv": [ 15, 1, 16, 15 ], "texture": "#wood" },
+ "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#wood" },
+ "north": { "uv": [ 0, 15, 1, 16 ], "texture": "#wood" },
+ "south": { "uv": [ 15, 15, 16, 16 ], "texture": "#wood" },
+ "west": { "uv": [ 1, 15, 15, 16 ], "texture": "#wood" },
+ "east": { "uv": [ 1, 15, 15, 16 ], "texture": "#wood" }
+ }
+ },
+ {
+ "__comment": "Box15",
+ "from": [ 0, 15, 1 ],
+ "to": [ 1, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 0, 1, 1, 15 ], "texture": "#wood" },
+ "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#wood" },
+ "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#wood" },
+ "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#wood" },
+ "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#wood" },
+ "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#wood" }
+ }
+ },
+ {
+ "__comment": "Box16",
+ "from": [ 15, 15, 1 ],
+ "to": [ 16, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 15, 1, 16, 15 ], "texture": "#wood" },
+ "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#wood" },
+ "north": { "uv": [ 0, 0, 1, 1 ], "texture": "#wood" },
+ "south": { "uv": [ 15, 0, 16, 1 ], "texture": "#wood" },
+ "west": { "uv": [ 1, 0, 15, 1 ], "texture": "#wood" },
+ "east": { "uv": [ 1, 0, 15, 1 ], "texture": "#wood" }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/models/barrelintake.json.textures b/models/barrelintake.json.textures
new file mode 100644
index 0000000..7855208
--- /dev/null
+++ b/models/barrelintake.json.textures
@@ -0,0 +1,12 @@
+{
+ "mappings": {
+ "default": {
+ "map": {
+ "barrel": "barrel",
+ "barreltop": "barreltop",
+ "wood": "wood"
+ },
+ "name": "default"
+ }
+ }
+}
\ No newline at end of file
diff --git a/models/crafter.json b/models/crafter.json
new file mode 100644
index 0000000..0744357
--- /dev/null
+++ b/models/crafter.json
@@ -0,0 +1,676 @@
+{
+ "__comment": "Designed by Netquick with Cubik Studio - https://cubik.studio",
+ "textures": {
+ "particle": "blocks/particle",
+ "Box": "blocks/Box",
+ "Energy": "blocks/Energy",
+ "Bowl": "blocks/Bowl"
+ },
+ "elements": [
+ {
+ "__comment": "Box2",
+ "from": [ 0, 1, 0 ],
+ "to": [ 1, 15, 1 ],
+ "faces": {
+ "north": { "uv": [ 15, 1, 16, 15 ], "texture": "#Box", "cullface": "north" },
+ "south": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box" },
+ "west": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box", "cullface": "west" },
+ "east": { "uv": [ 15, 1, 16, 15 ], "texture": "#Box" }
+ }
+ },
+ {
+ "__comment": "Box2",
+ "from": [ 0, 1, 15 ],
+ "to": [ 1, 15, 16 ],
+ "faces": {
+ "north": { "uv": [ 15, 0, 16, 15 ], "texture": "#Box" },
+ "south": { "uv": [ 0, 0, 1, 15 ], "texture": "#Box", "cullface": "south" },
+ "west": { "uv": [ 0, 0, 1, 15 ], "texture": "#Box", "cullface": "west" },
+ "east": { "uv": [ 15, 0, 16, 15 ], "texture": "#Box" }
+ }
+ },
+ {
+ "__comment": "Box2",
+ "from": [ 15, 1, 0 ],
+ "to": [ 16, 15, 1 ],
+ "faces": {
+ "north": { "uv": [ 15, 0, 16, 15 ], "texture": "#Box", "cullface": "north" },
+ "south": { "uv": [ 0, 0, 1, 15 ], "texture": "#Box" },
+ "west": { "uv": [ 0, 0, 1, 15 ], "texture": "#Box" },
+ "east": { "uv": [ 15, 0, 16, 15 ], "texture": "#Box", "cullface": "east" }
+ }
+ },
+ {
+ "__comment": "Box2",
+ "from": [ 15, 1, 15 ],
+ "to": [ 16, 15, 16 ],
+ "faces": {
+ "north": { "uv": [ 15, 0, 16, 15 ], "texture": "#Box" },
+ "south": { "uv": [ 0, 0, 1, 15 ], "texture": "#Box", "cullface": "south" },
+ "west": { "uv": [ 0, 0, 1, 15 ], "texture": "#Box" },
+ "east": { "uv": [ 15, 0, 16, 15 ], "texture": "#Box", "cullface": "east" }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0, 15, 0 ],
+ "to": [ 16, 16, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#Box" },
+ "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#Box", "cullface": "up" },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#Box", "cullface": "north" },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#Box", "cullface": "south" },
+ "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#Box", "cullface": "west" },
+ "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#Box", "cullface": "east" }
+ }
+ },
+ {
+ "__comment": "Box7",
+ "from": [ 7, 4.5, 7 ],
+ "to": [ 9, 5.5, 9 ],
+ "faces": {
+ "down": { "uv": [ 7, 7, 9, 9 ], "texture": "#Bowl" },
+ "north": { "uv": [ 7, 10.5, 9, 11.5 ], "texture": "#Bowl" },
+ "south": { "uv": [ 7, 10.5, 9, 11.5 ], "texture": "#Bowl" },
+ "west": { "uv": [ 7, 10.5, 9, 11.5 ], "texture": "#Bowl" },
+ "east": { "uv": [ 7, 10.5, 9, 11.5 ], "texture": "#Bowl" }
+ }
+ },
+ {
+ "__comment": "Box7",
+ "from": [ 6.5, 5.5, 6.5 ],
+ "to": [ 9.5, 6.5, 9.5 ],
+ "faces": {
+ "down": { "uv": [ 7, 7.5, 9, 9.5 ], "texture": "#Bowl" },
+ "north": { "uv": [ 7, 14, 9, 15 ], "texture": "#Bowl" },
+ "south": { "uv": [ 7, 14, 9, 15 ], "texture": "#Bowl" },
+ "west": { "uv": [ 6.5, 14, 8.5, 15 ], "texture": "#Bowl" },
+ "east": { "uv": [ 7.5, 14, 9.5, 15 ], "texture": "#Bowl" }
+ }
+ },
+ {
+ "__comment": "Box7",
+ "from": [ 6, 6.5, 6 ],
+ "to": [ 10, 7.5, 10 ],
+ "faces": {
+ "down": { "uv": [ 7, 7.5, 9, 9.5 ], "texture": "#Bowl" },
+ "north": { "uv": [ 7, 14, 9, 15 ], "texture": "#Bowl" },
+ "south": { "uv": [ 7, 14, 9, 15 ], "texture": "#Bowl" },
+ "west": { "uv": [ 6.5, 14, 8.5, 15 ], "texture": "#Bowl" },
+ "east": { "uv": [ 7.5, 14, 9.5, 15 ], "texture": "#Bowl" }
+ }
+ },
+ {
+ "__comment": "Box7",
+ "from": [ 5.5, 7.5, 5.5 ],
+ "to": [ 10.5, 8.5, 10.5 ],
+ "faces": {
+ "down": { "uv": [ 7, 7.5, 9, 9.5 ], "texture": "#Bowl" },
+ "up": { "uv": [ 7, 6.5, 9, 8.5 ], "texture": "#Bowl" },
+ "north": { "uv": [ 7, 14, 9, 15 ], "texture": "#Bowl" },
+ "south": { "uv": [ 7, 14, 9, 15 ], "texture": "#Bowl" },
+ "west": { "uv": [ 6.5, 14, 8.5, 15 ], "texture": "#Bowl" },
+ "east": { "uv": [ 7.5, 14, 9.5, 15 ], "texture": "#Bowl" }
+ }
+ },
+ {
+ "__comment": "Box7",
+ "from": [ 6, 8.5, 6 ],
+ "to": [ 10, 9.5, 10 ],
+ "faces": {
+ "up": { "uv": [ 7, 6.5, 9, 8.5 ], "texture": "#Bowl" },
+ "north": { "uv": [ 7, 14, 9, 15 ], "texture": "#Bowl" },
+ "south": { "uv": [ 7, 14, 9, 15 ], "texture": "#Bowl" },
+ "west": { "uv": [ 6.5, 14, 8.5, 15 ], "texture": "#Bowl" },
+ "east": { "uv": [ 7.5, 14, 9.5, 15 ], "texture": "#Bowl" }
+ }
+ },
+ {
+ "__comment": "Box7",
+ "from": [ 6.5, 9.5, 6.5 ],
+ "to": [ 9.5, 10.5, 9.5 ],
+ "faces": {
+ "up": { "uv": [ 7, 6.5, 9, 8.5 ], "texture": "#Bowl" },
+ "north": { "uv": [ 7, 14, 9, 15 ], "texture": "#Bowl" },
+ "south": { "uv": [ 7, 14, 9, 15 ], "texture": "#Bowl" },
+ "west": { "uv": [ 6.5, 14, 8.5, 15 ], "texture": "#Bowl" },
+ "east": { "uv": [ 7.5, 14, 9.5, 15 ], "texture": "#Bowl" }
+ }
+ },
+ {
+ "__comment": "Box7",
+ "from": [ 7, 10.5, 7 ],
+ "to": [ 9, 11.5, 9 ],
+ "faces": {
+ "up": { "uv": [ 7, 6.5, 9, 8.5 ], "texture": "#Bowl" },
+ "north": { "uv": [ 7, 14, 9, 15 ], "texture": "#Bowl" },
+ "south": { "uv": [ 7, 14, 9, 15 ], "texture": "#Bowl" },
+ "west": { "uv": [ 6.5, 14, 8.5, 15 ], "texture": "#Bowl" },
+ "east": { "uv": [ 7.5, 14, 9.5, 15 ], "texture": "#Bowl" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 8.5, 3.5, 9 ],
+ "to": [ 9.5, 4.5, 10 ],
+ "faces": {
+ "down": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy", "rotation": 270 },
+ "up": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 90 },
+ "north": { "uv": [ 9.5, 4.5, 8.5, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 7.5, 4.5, 6.5, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 9.5, 2.5, 10 ],
+ "to": [ 10.5, 3.5, 11 ],
+ "faces": {
+ "up": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 270 },
+ "north": { "uv": [ 7.5, 4.5, 6.5, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 9.5, 4.5, 8.5, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 10.5, 1.5, 11 ],
+ "to": [ 11.5, 2.5, 12 ],
+ "faces": {
+ "up": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 270 },
+ "north": { "uv": [ 7.5, 4.5, 6.5, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 9.5, 4.5, 8.5, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 11.5, 0.5, 11.5 ],
+ "to": [ 12.5, 1.5, 12.5 ],
+ "faces": {
+ "up": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 270 },
+ "north": { "uv": [ 7.5, 4.5, 6.5, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 9.5, 4.5, 8.5, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 6, 3.5, 9 ],
+ "to": [ 7, 4.5, 10 ],
+ "faces": {
+ "down": { "uv": [ 9, 9, 10, 10 ], "texture": "#Energy", "rotation": 180 },
+ "up": { "uv": [ 9, 6, 10, 7 ], "texture": "#Energy", "rotation": 180 },
+ "north": { "uv": [ 7, 4.5, 6, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 10, 4.5, 9, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 5, 2.5, 10 ],
+ "to": [ 6, 3.5, 11 ],
+ "faces": {
+ "down": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy", "rotation": 180 },
+ "up": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 180 },
+ "north": { "uv": [ 7, 4.5, 6, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 10, 4.5, 9, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 4, 1.5, 11 ],
+ "to": [ 5, 2.5, 12 ],
+ "faces": {
+ "down": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy", "rotation": 180 },
+ "up": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 180 },
+ "north": { "uv": [ 7, 4.5, 6, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 10, 4.5, 9, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 3, 0.5, 11.5 ],
+ "to": [ 4, 1.5, 12.5 ],
+ "faces": {
+ "up": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 180 },
+ "north": { "uv": [ 7, 4.5, 6, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 10, 4.5, 9, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 6.5, 3.5, 6 ],
+ "to": [ 7.5, 4.5, 7 ],
+ "faces": {
+ "down": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy", "rotation": 90 },
+ "up": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 270 },
+ "north": { "uv": [ 7.5, 4.5, 6.5, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 9.5, 4.5, 8.5, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 5.5, 2.5, 5 ],
+ "to": [ 6.5, 3.5, 6 ],
+ "faces": {
+ "down": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy", "rotation": 270 },
+ "up": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 90 },
+ "north": { "uv": [ 9.5, 4.5, 8.5, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 7.5, 4.5, 6.5, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 4.5, 1.5, 4 ],
+ "to": [ 5.5, 2.5, 5 ],
+ "faces": {
+ "down": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy", "rotation": 270 },
+ "up": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 90 },
+ "north": { "uv": [ 9.5, 4.5, 8.5, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 7.5, 4.5, 6.5, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 3.5, 0.5, 3.5 ],
+ "to": [ 4.5, 1.5, 4.5 ],
+ "faces": {
+ "up": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 90 },
+ "north": { "uv": [ 9.5, 4.5, 8.5, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 7.5, 4.5, 6.5, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 9, 3.5, 6 ],
+ "to": [ 10, 4.5, 7 ],
+ "faces": {
+ "down": { "uv": [ 9, 9, 10, 10 ], "texture": "#Energy" },
+ "up": { "uv": [ 9, 6, 10, 7 ], "texture": "#Energy" },
+ "north": { "uv": [ 10, 4.5, 9, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 7, 4.5, 6, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 10, 2.5, 5 ],
+ "to": [ 11, 3.5, 6 ],
+ "faces": {
+ "down": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy" },
+ "up": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy" },
+ "north": { "uv": [ 10, 4.5, 9, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 7, 4.5, 6, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 11, 1.5, 4 ],
+ "to": [ 12, 2.5, 5 ],
+ "faces": {
+ "down": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy" },
+ "up": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy" },
+ "north": { "uv": [ 10, 4.5, 9, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 7, 4.5, 6, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 12, 0.5, 3.5 ],
+ "to": [ 13, 1.5, 4.5 ],
+ "faces": {
+ "up": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy" },
+ "north": { "uv": [ 10, 4.5, 9, 3.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 7, 4.5, 6, 3.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy", "rotation": 180 },
+ "east": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 8.5, 11.5, 6 ],
+ "to": [ 9.5, 12.5, 7 ],
+ "faces": {
+ "down": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 90 },
+ "up": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy", "rotation": 270 },
+ "north": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 9.5, 12.5, 5 ],
+ "to": [ 10.5, 13.5, 6 ],
+ "faces": {
+ "down": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 270 },
+ "up": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy", "rotation": 90 },
+ "north": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 10.5, 13.5, 4 ],
+ "to": [ 11.5, 14.5, 5 ],
+ "faces": {
+ "down": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 270 },
+ "up": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy", "rotation": 90 },
+ "north": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 11.5, 14.5, 3.5 ],
+ "to": [ 12.5, 15.5, 4.5 ],
+ "faces": {
+ "down": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 270 },
+ "north": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 6, 11.5, 6 ],
+ "to": [ 7, 12.5, 7 ],
+ "faces": {
+ "down": { "uv": [ 9, 6, 10, 7 ], "texture": "#Energy", "rotation": 180 },
+ "up": { "uv": [ 9, 9, 10, 10 ], "texture": "#Energy", "rotation": 180 },
+ "north": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 5, 12.5, 5 ],
+ "to": [ 6, 13.5, 6 ],
+ "faces": {
+ "down": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 180 },
+ "up": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy", "rotation": 180 },
+ "north": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 4, 13.5, 4 ],
+ "to": [ 5, 14.5, 5 ],
+ "faces": {
+ "down": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 180 },
+ "up": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy", "rotation": 180 },
+ "north": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 3, 14.5, 3.5 ],
+ "to": [ 4, 15.5, 4.5 ],
+ "faces": {
+ "down": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 180 },
+ "north": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 6.5, 11.5, 9 ],
+ "to": [ 7.5, 12.5, 10 ],
+ "faces": {
+ "down": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 270 },
+ "up": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy", "rotation": 90 },
+ "north": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 5.5, 12.5, 10 ],
+ "to": [ 6.5, 13.5, 11 ],
+ "faces": {
+ "down": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 90 },
+ "up": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy", "rotation": 270 },
+ "north": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 4.5, 13.5, 11 ],
+ "to": [ 5.5, 14.5, 12 ],
+ "faces": {
+ "down": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 90 },
+ "up": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy", "rotation": 270 },
+ "north": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 3.5, 14.5, 11.5 ],
+ "to": [ 4.5, 15.5, 12.5 ],
+ "faces": {
+ "down": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy", "rotation": 90 },
+ "north": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 9, 11.5, 9 ],
+ "to": [ 10, 12.5, 10 ],
+ "faces": {
+ "down": { "uv": [ 9, 6, 10, 7 ], "texture": "#Energy" },
+ "up": { "uv": [ 9, 9, 10, 10 ], "texture": "#Energy" },
+ "north": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 10, 12.5, 10 ],
+ "to": [ 11, 13.5, 11 ],
+ "faces": {
+ "down": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy" },
+ "up": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy" },
+ "north": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 11, 13.5, 11 ],
+ "to": [ 12, 14.5, 12 ],
+ "faces": {
+ "down": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy" },
+ "up": { "uv": [ 9, 8.5, 10, 9.5 ], "texture": "#Energy" },
+ "north": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box14",
+ "from": [ 12, 14.5, 11.5 ],
+ "to": [ 13, 15.5, 12.5 ],
+ "faces": {
+ "down": { "uv": [ 9, 6.5, 10, 7.5 ], "texture": "#Energy" },
+ "north": { "uv": [ 6, 3.5, 7, 4.5 ], "texture": "#Energy" },
+ "south": { "uv": [ 9, 3.5, 10, 4.5 ], "texture": "#Energy" },
+ "west": { "uv": [ 8.5, 3.5, 9.5, 4.5 ], "texture": "#Energy" },
+ "east": { "uv": [ 6.5, 3.5, 7.5, 4.5 ], "texture": "#Energy" }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0, 0, 0 ],
+ "to": [ 16, 1, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#Box" },
+ "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#Box", "cullface": "up" },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#Box", "cullface": "north" },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#Box", "cullface": "south" },
+ "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#Box", "cullface": "west" },
+ "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#Box", "cullface": "east" }
+ }
+ },
+ {
+ "__comment": "Box49",
+ "from": [ 0, 1, 1 ],
+ "to": [ 1, 2, 15 ],
+ "faces": {
+ "down": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box" },
+ "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box" },
+ "north": { "uv": [ 15, 14, 16, 15 ], "texture": "#Box" },
+ "south": { "uv": [ 0, 14, 1, 15 ], "texture": "#Box" },
+ "west": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" },
+ "east": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" }
+ }
+ },
+ {
+ "__comment": "Box49",
+ "from": [ 15, 1, 1 ],
+ "to": [ 16, 2, 15 ],
+ "faces": {
+ "down": { "uv": [ 15, 1, 16, 15 ], "texture": "#Box" },
+ "up": { "uv": [ 15, 1, 16, 15 ], "texture": "#Box" },
+ "north": { "uv": [ 0, 14, 1, 15 ], "texture": "#Box" },
+ "south": { "uv": [ 15, 14, 16, 15 ], "texture": "#Box" },
+ "west": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" },
+ "east": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" }
+ }
+ },
+ {
+ "__comment": "Box49",
+ "from": [ 0, 14, 1 ],
+ "to": [ 1, 15, 15 ],
+ "faces": {
+ "down": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box" },
+ "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box" },
+ "north": { "uv": [ 15, 14, 16, 15 ], "texture": "#Box" },
+ "south": { "uv": [ 0, 14, 1, 15 ], "texture": "#Box" },
+ "west": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" },
+ "east": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" }
+ }
+ },
+ {
+ "__comment": "Box49",
+ "from": [ 15, 14, 1 ],
+ "to": [ 16, 15, 15 ],
+ "faces": {
+ "down": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box" },
+ "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box" },
+ "north": { "uv": [ 15, 14, 16, 15 ], "texture": "#Box" },
+ "south": { "uv": [ 0, 14, 1, 15 ], "texture": "#Box" },
+ "west": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" },
+ "east": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" }
+ }
+ },
+ {
+ "__comment": "Box49",
+ "from": [ 1, 1, 0 ],
+ "to": [ 15, 2, 1 ],
+ "faces": {
+ "down": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box", "rotation": 270 },
+ "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box", "rotation": 90 },
+ "north": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" },
+ "south": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" },
+ "west": { "uv": [ 0, 14, 1, 15 ], "texture": "#Box" },
+ "east": { "uv": [ 15, 14, 16, 15 ], "texture": "#Box" }
+ }
+ },
+ {
+ "__comment": "Box49",
+ "from": [ 1, 1, 15 ],
+ "to": [ 15, 2, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box", "rotation": 270 },
+ "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box", "rotation": 90 },
+ "north": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" },
+ "south": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" },
+ "west": { "uv": [ 0, 14, 1, 15 ], "texture": "#Box" },
+ "east": { "uv": [ 15, 14, 16, 15 ], "texture": "#Box" }
+ }
+ },
+ {
+ "__comment": "Box49",
+ "from": [ 1, 14, 15 ],
+ "to": [ 15, 15, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box", "rotation": 270 },
+ "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box", "rotation": 90 },
+ "north": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" },
+ "south": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" },
+ "west": { "uv": [ 0, 14, 1, 15 ], "texture": "#Box" },
+ "east": { "uv": [ 15, 14, 16, 15 ], "texture": "#Box" }
+ }
+ },
+ {
+ "__comment": "Box49",
+ "from": [ 0, 14, 0 ],
+ "to": [ 14, 15, 1 ],
+ "faces": {
+ "down": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box", "rotation": 270 },
+ "up": { "uv": [ 0, 1, 1, 15 ], "texture": "#Box", "rotation": 90 },
+ "north": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" },
+ "south": { "uv": [ 1, 14, 15, 15 ], "texture": "#Box" },
+ "west": { "uv": [ 0, 14, 1, 15 ], "texture": "#Box" },
+ "east": { "uv": [ 15, 14, 16, 15 ], "texture": "#Box" }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/models/crafter.json.textures b/models/crafter.json.textures
new file mode 100644
index 0000000..de50e46
--- /dev/null
+++ b/models/crafter.json.textures
@@ -0,0 +1,12 @@
+{
+ "mappings": {
+ "default": {
+ "map": {
+ "Energy": "energy",
+ "Box": "box",
+ "Bowl": "bowl"
+ },
+ "name": "default"
+ }
+ }
+}
\ No newline at end of file
diff --git a/models/cubik_model.json b/models/cubik_model.json
new file mode 100644
index 0000000..af3fbdd
--- /dev/null
+++ b/models/cubik_model.json
@@ -0,0 +1,143 @@
+{
+ "__comment": "Designed by Nunocraft with Cubik Studio - https://cubik.studio",
+ "textures": {
+ "particle": "blocks/particle",
+ "texture": "blocks/texture",
+ "texture1": "blocks/texture1",
+ "texture2": "blocks/texture2",
+ "schwarz": "blocks/schwarz",
+ "Glas": "blocks/glas"
+ },
+ "elements": [
+ {
+ "__comment": "Box1",
+ "from": [ 0, 0, 0 ],
+ "to": [ 16, 8, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture2" },
+ "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture1" },
+ "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 1, 8, 1 ],
+ "to": [ 1.5, 16, 1.5 ],
+ "faces": {
+ "down": { "uv": [ 1, 14.5, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 1.5 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "east": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 14.5, 8, 14.5 ],
+ "to": [ 15, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 1, 14.5, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 1.5 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "east": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 14.5, 8, 1 ],
+ "to": [ 15, 16, 1.5 ],
+ "faces": {
+ "down": { "uv": [ 1, 14.5, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 1.5 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "east": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 1, 8, 14.5 ],
+ "to": [ 1.5, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 1, 14.5, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 1.5 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "east": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 1, 15.5, 14.5 ],
+ "to": [ 15, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 1, 14.5, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 1.5 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "east": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 1, 15.5, 1 ],
+ "to": [ 15, 16, 1.5 ],
+ "faces": {
+ "down": { "uv": [ 1, 14.5, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 1.5 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "east": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Box15",
+ "from": [ 1, 15.5, 1 ],
+ "to": [ 1.5, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 1, 1, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 15 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 0.5 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 0.5 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#schwarz" },
+ "east": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Box15",
+ "from": [ 14.5, 15.5, 1 ],
+ "to": [ 15, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 1, 1, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 15 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 0.5 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 0.5 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#schwarz" },
+ "east": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Glas",
+ "from": [ 1.5, 8, 1.5 ],
+ "to": [ 14.5, 15.5, 14.5 ],
+ "faces": {
+ "down": { "uv": [ 1.5, 1.5, 14.5, 14.5 ], "texture": "#Glas" },
+ "up": { "uv": [ 1.5, 1.5, 14.5, 14.5 ], "texture": "#Glas" },
+ "north": { "uv": [ 1.5, 0.5, 14.5, 8 ], "texture": "#Glas" },
+ "south": { "uv": [ 1.5, 0.5, 14.5, 8 ], "texture": "#Glas" },
+ "west": { "uv": [ 1.5, 0.5, 14.5, 8 ], "texture": "#Glas" },
+ "east": { "uv": [ 1.5, 0.5, 14.5, 8 ], "texture": "#Glas" }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/models/cubik_model.json.textures b/models/cubik_model.json.textures
new file mode 100644
index 0000000..6e312bb
--- /dev/null
+++ b/models/cubik_model.json.textures
@@ -0,0 +1,14 @@
+{
+ "mappings": {
+ "default": {
+ "map": {
+ "texture": "croptexture",
+ "Glas": "glastexture",
+ "schwarz": "schwarz",
+ "texture1": "upcrop",
+ "texture2": "cropdown"
+ },
+ "name": "default"
+ }
+ }
+}
\ No newline at end of file
diff --git a/models/enchantmenttable.json b/models/enchantmenttable.json
new file mode 100644
index 0000000..d922d35
--- /dev/null
+++ b/models/enchantmenttable.json
@@ -0,0 +1,221 @@
+{
+ "__comment": "Designed by Netquick with Cubik Studio - https://cubik.studio",
+ "textures": {
+ "particle": "blocks/particle",
+ "texture": "blocks/texture",
+ "TopTexture": "blocks/toptexture",
+ "BookCover": "blocks/bookcover",
+ "Cover": "blocks/cover",
+ "Paper": "blocks/paper"
+ },
+ "elements": [
+ {
+ "__comment": "Box1",
+ "from": [ 0, 0, 0 ],
+ "to": [ 16, 12, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" },
+ "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#TopTexture" },
+ "north": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 0, 4, 16, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box8",
+ "from": [ 7, 12, 4 ],
+ "to": [ 8, 12.5, 12 ],
+ "faces": {
+ "down": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover", "rotation": 180 },
+ "up": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover", "rotation": 180 },
+ "north": { "uv": [ 2, 15.5, 3, 16 ], "texture": "#Cover" },
+ "south": { "uv": [ 13, 15.5, 14, 16 ], "texture": "#Cover" },
+ "west": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" },
+ "east": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" }
+ }
+ },
+ {
+ "__comment": "Box8",
+ "from": [ 5, 12.5, 4 ],
+ "to": [ 7, 13, 12 ],
+ "faces": {
+ "down": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover", "rotation": 180 },
+ "up": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover", "rotation": 180 },
+ "north": { "uv": [ 2, 15.5, 3, 16 ], "texture": "#Cover" },
+ "south": { "uv": [ 13, 15.5, 14, 16 ], "texture": "#Cover" },
+ "west": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" },
+ "east": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" }
+ }
+ },
+ {
+ "__comment": "Box8",
+ "from": [ 3, 13, 4 ],
+ "to": [ 5, 13.5, 12 ],
+ "faces": {
+ "down": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover", "rotation": 180 },
+ "up": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover", "rotation": 180 },
+ "north": { "uv": [ 2, 15.5, 3, 16 ], "texture": "#Cover" },
+ "south": { "uv": [ 13, 15.5, 14, 16 ], "texture": "#Cover" },
+ "west": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" },
+ "east": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" }
+ }
+ },
+ {
+ "__comment": "Box8",
+ "from": [ 1, 13.5, 4 ],
+ "to": [ 3, 14, 12 ],
+ "faces": {
+ "down": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover", "rotation": 180 },
+ "up": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover", "rotation": 180 },
+ "north": { "uv": [ 2, 15.5, 3, 16 ], "texture": "#Cover" },
+ "south": { "uv": [ 13, 15.5, 14, 16 ], "texture": "#Cover" },
+ "west": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" },
+ "east": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" }
+ }
+ },
+ {
+ "__comment": "Box8",
+ "from": [ 8, 12, 4 ],
+ "to": [ 9, 12.5, 12 ],
+ "faces": {
+ "down": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover" },
+ "up": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover" },
+ "north": { "uv": [ 13, 15.5, 14, 16 ], "texture": "#Cover" },
+ "south": { "uv": [ 2, 15.5, 3, 16 ], "texture": "#Cover" },
+ "west": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" },
+ "east": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" }
+ }
+ },
+ {
+ "__comment": "Box8",
+ "from": [ 9, 12.5, 4 ],
+ "to": [ 11, 13, 12 ],
+ "faces": {
+ "down": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover" },
+ "up": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover" },
+ "north": { "uv": [ 13, 15.5, 14, 16 ], "texture": "#Cover" },
+ "south": { "uv": [ 2, 15.5, 3, 16 ], "texture": "#Cover" },
+ "west": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" },
+ "east": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" }
+ }
+ },
+ {
+ "__comment": "Box8",
+ "from": [ 11, 13, 4 ],
+ "to": [ 13, 13.5, 12 ],
+ "faces": {
+ "down": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover" },
+ "up": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover" },
+ "north": { "uv": [ 13, 15.5, 14, 16 ], "texture": "#Cover" },
+ "south": { "uv": [ 2, 15.5, 3, 16 ], "texture": "#Cover" },
+ "west": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" },
+ "east": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" }
+ }
+ },
+ {
+ "__comment": "Box8",
+ "from": [ 13, 13.5, 4 ],
+ "to": [ 15, 14, 12 ],
+ "faces": {
+ "down": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover" },
+ "up": { "uv": [ 2, 4, 3, 12 ], "texture": "#Cover" },
+ "north": { "uv": [ 13, 15.5, 14, 16 ], "texture": "#Cover" },
+ "south": { "uv": [ 2, 15.5, 3, 16 ], "texture": "#Cover" },
+ "west": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" },
+ "east": { "uv": [ 4, 15.5, 12, 16 ], "texture": "#Cover" }
+ }
+ },
+ {
+ "__comment": "Box11",
+ "from": [ 7, 12.5, 4.5 ],
+ "to": [ 9, 13, 11.5 ],
+ "faces": {
+ "down": { "uv": [ 7, 4.5, 9, 11.5 ], "texture": "#Paper" },
+ "up": { "uv": [ 7, 4.5, 9, 11.5 ], "texture": "#Paper" },
+ "north": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#Paper" },
+ "south": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#Paper" },
+ "west": { "uv": [ 4.5, 3, 11.5, 3.5 ], "texture": "#Paper" },
+ "east": { "uv": [ 4.5, 3, 11.5, 3.5 ], "texture": "#Paper" }
+ }
+ },
+ {
+ "__comment": "Box11",
+ "from": [ 9, 13, 4.5 ],
+ "to": [ 11, 13.5, 11.5 ],
+ "faces": {
+ "down": { "uv": [ 7, 4.5, 9, 11.5 ], "texture": "#Paper" },
+ "up": { "uv": [ 7, 4.5, 9, 11.5 ], "texture": "#Paper" },
+ "north": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#Paper" },
+ "south": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#Paper" },
+ "west": { "uv": [ 4.5, 3, 11.5, 3.5 ], "texture": "#Paper" },
+ "east": { "uv": [ 4.5, 3, 11.5, 3.5 ], "texture": "#Paper" }
+ }
+ },
+ {
+ "__comment": "Box11",
+ "from": [ 11, 13.5, 4.5 ],
+ "to": [ 13, 14, 11.5 ],
+ "faces": {
+ "down": { "uv": [ 7, 4.5, 9, 11.5 ], "texture": "#Paper" },
+ "up": { "uv": [ 7, 4.5, 9, 11.5 ], "texture": "#Paper" },
+ "north": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#Paper" },
+ "south": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#Paper" },
+ "west": { "uv": [ 4.5, 3, 11.5, 3.5 ], "texture": "#Paper" },
+ "east": { "uv": [ 4.5, 3, 11.5, 3.5 ], "texture": "#Paper" }
+ }
+ },
+ {
+ "__comment": "Box11",
+ "from": [ 13, 14, 4.5 ],
+ "to": [ 14.5, 14.5, 11.5 ],
+ "faces": {
+ "down": { "uv": [ 7, 4.5, 9, 11.5 ], "texture": "#Paper" },
+ "up": { "uv": [ 7, 4.5, 9, 11.5 ], "texture": "#Paper" },
+ "north": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#Paper" },
+ "south": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#Paper" },
+ "west": { "uv": [ 4.5, 3, 11.5, 3.5 ], "texture": "#Paper" },
+ "east": { "uv": [ 4.5, 3, 11.5, 3.5 ], "texture": "#Paper" }
+ }
+ },
+ {
+ "__comment": "Box11",
+ "from": [ 5, 13, 4.5 ],
+ "to": [ 7, 13.5, 11.5 ],
+ "faces": {
+ "down": { "uv": [ 7, 4.5, 9, 11.5 ], "texture": "#Paper" },
+ "up": { "uv": [ 7, 4.5, 9, 11.5 ], "texture": "#Paper" },
+ "north": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#Paper" },
+ "south": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#Paper" },
+ "west": { "uv": [ 4.5, 3, 11.5, 3.5 ], "texture": "#Paper" },
+ "east": { "uv": [ 4.5, 3, 11.5, 3.5 ], "texture": "#Paper" }
+ }
+ },
+ {
+ "__comment": "Box11",
+ "from": [ 3, 13.5, 4.5 ],
+ "to": [ 5, 14, 11.5 ],
+ "faces": {
+ "down": { "uv": [ 7, 4.5, 9, 11.5 ], "texture": "#Paper" },
+ "up": { "uv": [ 7, 4.5, 9, 11.5 ], "texture": "#Paper" },
+ "north": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#Paper" },
+ "south": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#Paper" },
+ "west": { "uv": [ 4.5, 3, 11.5, 3.5 ], "texture": "#Paper" },
+ "east": { "uv": [ 4.5, 3, 11.5, 3.5 ], "texture": "#Paper" }
+ }
+ },
+ {
+ "__comment": "Box11",
+ "from": [ 1.5, 14, 4.5 ],
+ "to": [ 3, 14.5, 11.5 ],
+ "faces": {
+ "down": { "uv": [ 7, 4.5, 9, 11.5 ], "texture": "#Paper" },
+ "up": { "uv": [ 7, 4.5, 9, 11.5 ], "texture": "#Paper" },
+ "north": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#Paper" },
+ "south": { "uv": [ 7, 3, 9, 3.5 ], "texture": "#Paper" },
+ "west": { "uv": [ 4.5, 3, 11.5, 3.5 ], "texture": "#Paper" },
+ "east": { "uv": [ 4.5, 3, 11.5, 3.5 ], "texture": "#Paper" }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/models/enchantmenttable.json.textures b/models/enchantmenttable.json.textures
new file mode 100644
index 0000000..142358e
--- /dev/null
+++ b/models/enchantmenttable.json.textures
@@ -0,0 +1,13 @@
+{
+ "mappings": {
+ "default": {
+ "map": {
+ "Cover": "cover",
+ "texture": "enchantmenttexture",
+ "TopTexture": "toptexture",
+ "Paper": "paper"
+ },
+ "name": "default"
+ }
+ }
+}
\ No newline at end of file
diff --git a/models/forge.json b/models/forge.json
new file mode 100644
index 0000000..c6b7dd7
--- /dev/null
+++ b/models/forge.json
@@ -0,0 +1,24 @@
+{
+ "__comment": "Designed by Netquick with Cubik Studio - https://cubik.studio",
+ "textures": {
+ "particle": "white",
+ "ForgeFront": "white",
+ "forgeTop": "forge",
+ "ForgeSide": "forge"
+ },
+ "elements": [
+ {
+ "__comment": "Box2",
+ "from": [ 0, 0, 0 ],
+ "to": [ 16, 16, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#forgeTop" },
+ "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#forgeTop" },
+ "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#ForgeFront" },
+ "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#ForgeSide" },
+ "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#ForgeSide" },
+ "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#ForgeSide" }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/models/forge.json.textures b/models/forge.json.textures
new file mode 100644
index 0000000..b177a32
--- /dev/null
+++ b/models/forge.json.textures
@@ -0,0 +1,12 @@
+{
+ "mappings": {
+ "default": {
+ "map": {
+ "forgeTop": "forgetop",
+ "ForgeFront": "forgefront",
+ "ForgeSide": "forgeside"
+ },
+ "name": "default"
+ }
+ }
+}
\ No newline at end of file
diff --git a/models/fridge_oriented.json b/models/fridge_oriented.json
new file mode 100644
index 0000000..4ce3f04
--- /dev/null
+++ b/models/fridge_oriented.json
@@ -0,0 +1,128 @@
+{
+ "__comment": "Designed by Netquick with Cubik Studio - https://cubik.studio",
+ "textures": {
+ "particle": "blocks/particle",
+ "texture": "blocks/texture",
+ "Front": "blocks/front",
+ "Sides": "blocks/sides"
+ },
+ "elements": [
+ {
+ "__comment": "Box1",
+ "from": [ 0, 1, 0 ],
+ "to": [ 16, 15, 15 ],
+ "faces": {
+ "down": { "uv": [ 0, 1, 16, 16 ], "texture": "#Sides" },
+ "up": { "uv": [ 0, 0, 16, 15 ], "texture": "#Sides" },
+ "north": { "uv": [ 0, 1, 16, 15 ], "texture": "#Sides" },
+ "south": { "uv": [ 0, 1, 16, 15 ], "texture": "#Sides" },
+ "west": { "uv": [ 0, 1, 15, 15 ], "texture": "#Sides" },
+ "east": { "uv": [ 1, 1, 16, 15 ], "texture": "#Sides" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 1, 1, -1 ],
+ "to": [ 15, 15, 0 ],
+ "faces": {
+ "down": { "uv": [ 1, 0, 15, 1 ], "texture": "#texture" },
+ "up": { "uv": [ 1, 15, 15, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 1, 1, 15, 15 ], "texture": "#texture" },
+ "south": { "uv": [ 1, 1, 15, 15 ], "texture": "#texture" },
+ "west": { "uv": [ 15, 1, 16, 15 ], "texture": "#texture" },
+ "east": { "uv": [ 0, 1, 1, 15 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box4",
+ "from": [ 1, 0, 13 ],
+ "to": [ 2, 1, 14 ],
+ "faces": {
+ "down": { "uv": [ 1, 2, 2, 3 ], "texture": "#Sides" },
+ "up": { "uv": [ 1, 13, 2, 14 ], "texture": "#Sides" },
+ "north": { "uv": [ 14, 15, 15, 16 ], "texture": "#Sides" },
+ "south": { "uv": [ 1, 15, 2, 16 ], "texture": "#Sides" },
+ "west": { "uv": [ 13, 15, 14, 16 ], "texture": "#Sides" },
+ "east": { "uv": [ 2, 15, 3, 16 ], "texture": "#Sides" }
+ }
+ },
+ {
+ "__comment": "Box4",
+ "from": [ 14, 0, 13 ],
+ "to": [ 15, 1, 14 ],
+ "faces": {
+ "down": { "uv": [ 1, 2, 2, 3 ], "texture": "#Sides" },
+ "up": { "uv": [ 1, 13, 2, 14 ], "texture": "#Sides" },
+ "north": { "uv": [ 14, 15, 15, 16 ], "texture": "#Sides" },
+ "south": { "uv": [ 1, 15, 2, 16 ], "texture": "#Sides" },
+ "west": { "uv": [ 13, 15, 14, 16 ], "texture": "#Sides" },
+ "east": { "uv": [ 2, 15, 3, 16 ], "texture": "#Sides" }
+ }
+ },
+ {
+ "__comment": "Box4",
+ "from": [ 1, 0, 1 ],
+ "to": [ 2, 1, 2 ],
+ "faces": {
+ "down": { "uv": [ 1, 2, 2, 3 ], "texture": "#Sides" },
+ "up": { "uv": [ 1, 13, 2, 14 ], "texture": "#Sides" },
+ "north": { "uv": [ 14, 15, 15, 16 ], "texture": "#Sides" },
+ "south": { "uv": [ 1, 15, 2, 16 ], "texture": "#Sides" },
+ "west": { "uv": [ 13, 15, 14, 16 ], "texture": "#Sides" },
+ "east": { "uv": [ 2, 15, 3, 16 ], "texture": "#Sides" }
+ }
+ },
+ {
+ "__comment": "Box4",
+ "from": [ 14, 0, 1 ],
+ "to": [ 15, 1, 2 ],
+ "faces": {
+ "down": { "uv": [ 1, 2, 2, 3 ], "texture": "#Sides" },
+ "up": { "uv": [ 1, 13, 2, 14 ], "texture": "#Sides" },
+ "north": { "uv": [ 14, 15, 15, 16 ], "texture": "#Sides" },
+ "south": { "uv": [ 1, 15, 2, 16 ], "texture": "#Sides" },
+ "west": { "uv": [ 13, 15, 14, 16 ], "texture": "#Sides" },
+ "east": { "uv": [ 2, 15, 3, 16 ], "texture": "#Sides" }
+ }
+ },
+ {
+ "__comment": "Box8",
+ "from": [ 1, 15, 0 ],
+ "to": [ 15, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 1, 1, 15, 16 ], "texture": "#Sides" },
+ "up": { "uv": [ 1, 0, 15, 15 ], "texture": "#Sides" },
+ "north": { "uv": [ 1, 0, 15, 1 ], "texture": "#Sides" },
+ "south": { "uv": [ 1, 0, 15, 1 ], "texture": "#Sides" },
+ "west": { "uv": [ 0, 0, 15, 1 ], "texture": "#Sides" },
+ "east": { "uv": [ 1, 0, 16, 1 ], "texture": "#Sides" }
+ }
+ },
+ {
+ "__comment": "Box9",
+ "from": [ 0, 15, 1 ],
+ "to": [ 1, 16, 14 ],
+ "faces": {
+ "down": { "uv": [ 0, 2, 1, 15 ], "texture": "#Sides" },
+ "up": { "uv": [ 0, 1, 1, 14 ], "texture": "#Sides" },
+ "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#Sides" },
+ "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#Sides" },
+ "west": { "uv": [ 1, 0, 14, 1 ], "texture": "#Sides" },
+ "east": { "uv": [ 2, 0, 15, 1 ], "texture": "#Sides" }
+ }
+ },
+ {
+ "__comment": "Box9",
+ "from": [ 15, 15, 1 ],
+ "to": [ 16, 16, 14 ],
+ "faces": {
+ "down": { "uv": [ 0, 2, 1, 15 ], "texture": "#Sides" },
+ "up": { "uv": [ 0, 1, 1, 14 ], "texture": "#Sides" },
+ "north": { "uv": [ 15, 0, 16, 1 ], "texture": "#Sides" },
+ "south": { "uv": [ 0, 0, 1, 1 ], "texture": "#Sides" },
+ "west": { "uv": [ 1, 0, 14, 1 ], "texture": "#Sides" },
+ "east": { "uv": [ 2, 0, 15, 1 ], "texture": "#Sides" }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/models/fridge_oriented.json.textures b/models/fridge_oriented.json.textures
new file mode 100644
index 0000000..44b114d
--- /dev/null
+++ b/models/fridge_oriented.json.textures
@@ -0,0 +1,11 @@
+{
+ "mappings": {
+ "default": {
+ "map": {
+ "texture": "fridgefront",
+ "Sides": "sides"
+ },
+ "name": "default"
+ }
+ }
+}
\ No newline at end of file
diff --git a/models/sawblock.json b/models/sawblock.json
new file mode 100644
index 0000000..548e79a
--- /dev/null
+++ b/models/sawblock.json
@@ -0,0 +1,90 @@
+{
+ "__comment": "Designed by Netquick with Cubik Studio - https://cubik.studio",
+ "textures": {
+ "particle": "blocks/particle",
+ "sawblock": "blocks/sawblock",
+ "sawblade": "plate",
+ "sawblockside": "blocks/sawblockside"
+ },
+ "elements": [
+ {
+ "__comment": "Box1",
+ "from": [ 8, 11, 2 ],
+ "to": [ 8.5, 11.5, 14 ],
+ "rotation": { "origin": [ 8, 11, 2 ], "axis": "x", "angle": 0 },
+ "faces": {
+ "down": { "uv": [ 0, 4, 0.5, 16 ], "texture": "#sawblade" },
+ "up": { "uv": [ 0, 0, 0.5, 12 ], "texture": "#sawblade" },
+ "north": { "uv": [ 15.5, 15, 16, 16 ], "texture": "#sawblade" },
+ "south": { "uv": [ 0, 15, 0.5, 16 ], "texture": "#sawblade" },
+ "west": { "uv": [ 0, 15, 12, 16 ], "texture": "#sawblade" },
+ "east": { "uv": [ 4, 15, 16, 16 ], "texture": "#sawblade" }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 8, 11.5, 2.5 ],
+ "to": [ 8.5, 12, 13.5 ],
+ "faces": {
+ "down": { "uv": [ 0, 4, 0.5, 16 ], "texture": "#sawblade" },
+ "up": { "uv": [ 0, 0, 0.5, 12 ], "texture": "#sawblade" },
+ "north": { "uv": [ 15.5, 15, 16, 16 ], "texture": "#sawblade" },
+ "south": { "uv": [ 0, 15, 0.5, 16 ], "texture": "#sawblade" },
+ "west": { "uv": [ 0, 15, 12, 16 ], "texture": "#sawblade" },
+ "east": { "uv": [ 4, 15, 16, 16 ], "texture": "#sawblade" }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 8, 12, 3.5 ],
+ "to": [ 8.5, 12.5, 12.5 ],
+ "faces": {
+ "down": { "uv": [ 0, 4, 0.5, 16 ], "texture": "#sawblade" },
+ "up": { "uv": [ 0, 0, 0.5, 12 ], "texture": "#sawblade" },
+ "north": { "uv": [ 15.5, 15, 16, 16 ], "texture": "#sawblade" },
+ "south": { "uv": [ 0, 15, 0.5, 16 ], "texture": "#sawblade" },
+ "west": { "uv": [ 0, 15, 12, 16 ], "texture": "#sawblade" },
+ "east": { "uv": [ 4, 15, 16, 16 ], "texture": "#sawblade" }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 8, 12.5, 5 ],
+ "to": [ 8.5, 13, 11 ],
+ "faces": {
+ "down": { "uv": [ 0, 4, 0.5, 16 ], "texture": "#sawblade" },
+ "up": { "uv": [ 0, 0, 0.5, 12 ], "texture": "#sawblade" },
+ "north": { "uv": [ 15.5, 15, 16, 16 ], "texture": "#sawblade" },
+ "south": { "uv": [ 0, 15, 0.5, 16 ], "texture": "#sawblade" },
+ "west": { "uv": [ 0, 15, 12, 16 ], "texture": "#sawblade" },
+ "east": { "uv": [ 4, 15, 16, 16 ], "texture": "#sawblade" }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 8, 13, 6.5 ],
+ "to": [ 8.5, 13.5, 9.5 ],
+ "faces": {
+ "down": { "uv": [ 0, 4, 0.5, 16 ], "texture": "#sawblade" },
+ "up": { "uv": [ 0, 0, 0.5, 12 ], "texture": "#sawblade" },
+ "north": { "uv": [ 15.5, 15, 16, 16 ], "texture": "#sawblade" },
+ "south": { "uv": [ 0, 15, 0.5, 16 ], "texture": "#sawblade" },
+ "west": { "uv": [ 0, 15, 12, 16 ], "texture": "#sawblade" },
+ "east": { "uv": [ 4, 15, 16, 16 ], "texture": "#sawblade" }
+ }
+ },
+ {
+ "__comment": "Box7",
+ "from": [ 0, 0, 0 ],
+ "to": [ 16, 11, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#sawblock" },
+ "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#sawblock" },
+ "north": { "uv": [ 0, 5, 16, 16 ], "texture": "#sawblockside" },
+ "south": { "uv": [ 0, 5, 16, 16 ], "texture": "#sawblockside" },
+ "west": { "uv": [ 0, 5, 16, 16 ], "texture": "#sawblockside" },
+ "east": { "uv": [ 0, 5, 16, 16 ], "texture": "#sawblockside" }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/models/sawblock.json.textures b/models/sawblock.json.textures
new file mode 100644
index 0000000..a690f6e
--- /dev/null
+++ b/models/sawblock.json.textures
@@ -0,0 +1,12 @@
+{
+ "mappings": {
+ "default": {
+ "map": {
+ "sawblade": "sawblade",
+ "sawblock": "sawblock",
+ "sawblockside": "sawblockside"
+ },
+ "name": "default"
+ }
+ }
+}
\ No newline at end of file
diff --git a/models/seedcrop.json b/models/seedcrop.json
new file mode 100644
index 0000000..af3fbdd
--- /dev/null
+++ b/models/seedcrop.json
@@ -0,0 +1,143 @@
+{
+ "__comment": "Designed by Nunocraft with Cubik Studio - https://cubik.studio",
+ "textures": {
+ "particle": "blocks/particle",
+ "texture": "blocks/texture",
+ "texture1": "blocks/texture1",
+ "texture2": "blocks/texture2",
+ "schwarz": "blocks/schwarz",
+ "Glas": "blocks/glas"
+ },
+ "elements": [
+ {
+ "__comment": "Box1",
+ "from": [ 0, 0, 0 ],
+ "to": [ 16, 8, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture2" },
+ "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture1" },
+ "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 1, 8, 1 ],
+ "to": [ 1.5, 16, 1.5 ],
+ "faces": {
+ "down": { "uv": [ 1, 14.5, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 1.5 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "east": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 14.5, 8, 14.5 ],
+ "to": [ 15, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 1, 14.5, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 1.5 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "east": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 14.5, 8, 1 ],
+ "to": [ 15, 16, 1.5 ],
+ "faces": {
+ "down": { "uv": [ 1, 14.5, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 1.5 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "east": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 1, 8, 14.5 ],
+ "to": [ 1.5, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 1, 14.5, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 1.5 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "east": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 1, 15.5, 14.5 ],
+ "to": [ 15, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 1, 14.5, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 1.5 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "east": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 1, 15.5, 1 ],
+ "to": [ 15, 16, 1.5 ],
+ "faces": {
+ "down": { "uv": [ 1, 14.5, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 1.5 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 1.5, 8 ], "texture": "#schwarz" },
+ "east": { "uv": [ 14.5, 0, 15, 8 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Box15",
+ "from": [ 1, 15.5, 1 ],
+ "to": [ 1.5, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 1, 1, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 15 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 0.5 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 0.5 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#schwarz" },
+ "east": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Box15",
+ "from": [ 14.5, 15.5, 1 ],
+ "to": [ 15, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 1, 1, 1.5, 15 ], "texture": "#schwarz" },
+ "up": { "uv": [ 1, 1, 1.5, 15 ], "texture": "#schwarz" },
+ "north": { "uv": [ 14.5, 0, 15, 0.5 ], "texture": "#schwarz" },
+ "south": { "uv": [ 1, 0, 1.5, 0.5 ], "texture": "#schwarz" },
+ "west": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#schwarz" },
+ "east": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#schwarz" }
+ }
+ },
+ {
+ "__comment": "Glas",
+ "from": [ 1.5, 8, 1.5 ],
+ "to": [ 14.5, 15.5, 14.5 ],
+ "faces": {
+ "down": { "uv": [ 1.5, 1.5, 14.5, 14.5 ], "texture": "#Glas" },
+ "up": { "uv": [ 1.5, 1.5, 14.5, 14.5 ], "texture": "#Glas" },
+ "north": { "uv": [ 1.5, 0.5, 14.5, 8 ], "texture": "#Glas" },
+ "south": { "uv": [ 1.5, 0.5, 14.5, 8 ], "texture": "#Glas" },
+ "west": { "uv": [ 1.5, 0.5, 14.5, 8 ], "texture": "#Glas" },
+ "east": { "uv": [ 1.5, 0.5, 14.5, 8 ], "texture": "#Glas" }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/models/seedcrop.json.textures b/models/seedcrop.json.textures
new file mode 100644
index 0000000..126fdc8
--- /dev/null
+++ b/models/seedcrop.json.textures
@@ -0,0 +1,14 @@
+{
+ "mappings": {
+ "default": {
+ "map": {
+ "texture": "texture",
+ "Glas": "glas",
+ "schwarz": "schwarz",
+ "texture1": "texture1",
+ "texture2": "texture2"
+ },
+ "name": "default"
+ }
+ }
+}
\ No newline at end of file
diff --git a/models/smeltblock.json b/models/smeltblock.json
new file mode 100644
index 0000000..71a5436
--- /dev/null
+++ b/models/smeltblock.json
@@ -0,0 +1,635 @@
+{
+ "__comment": "Designed by Netquick with Cubik Studio - https://cubik.studio",
+ "textures": {
+ "particle": "blocks/particle",
+ "pottexture": "blocks/pottexture",
+ "smeltblock": "blocks/smeltblock",
+ "metal": "plate"
+ },
+ "elements": [
+ {
+ "__comment": "Box1",
+ "from": [ 0, 0, 0 ],
+ "to": [ 16, 7, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#metal" },
+ "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#metal" },
+ "north": { "uv": [ 0, 9, 16, 16 ], "texture": "#smeltblock" },
+ "south": { "uv": [ 0, 9, 16, 16 ], "texture": "#smeltblock" },
+ "west": { "uv": [ 0, 9, 16, 16 ], "texture": "#smeltblock" },
+ "east": { "uv": [ 0, 9, 16, 16 ], "texture": "#smeltblock" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 3, 13, 7 ],
+ "to": [ 4, 16, 9 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 0, 13, 3 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 0, 4, 3 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 0, 9, 3 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 0, 9, 3 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 12, 13, 7 ],
+ "to": [ 13, 16, 9 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 6, 13, 3 ],
+ "to": [ 7.5, 16, 4 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 6, 13, 12 ],
+ "to": [ 10, 16, 13 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 5, 13, 11 ],
+ "to": [ 7, 16, 12 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 9, 13, 11 ],
+ "to": [ 11, 16, 12 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 4, 13, 10 ],
+ "to": [ 6, 16, 11 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 3, 13, 9 ],
+ "to": [ 5, 16, 10 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 3, 13, 6 ],
+ "to": [ 5, 16, 7 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 4, 13, 5 ],
+ "to": [ 6, 16, 6 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 5, 13, 4 ],
+ "to": [ 7, 16, 5 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 9, 13, 4 ],
+ "to": [ 11, 16, 5 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 10, 13, 5 ],
+ "to": [ 12, 16, 6 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 11, 13, 6 ],
+ "to": [ 13, 16, 7 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 11, 13, 9 ],
+ "to": [ 13, 16, 10 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 10, 13, 10 ],
+ "to": [ 12, 16, 11 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 6, 12, 11 ],
+ "to": [ 10, 13, 12 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 5, 12, 10 ],
+ "to": [ 7, 13, 11 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 4, 12, 9 ],
+ "to": [ 6, 13, 10 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 4, 12, 6 ],
+ "to": [ 6, 13, 7 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 4, 12, 7 ],
+ "to": [ 5, 13, 9 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 5, 12, 5 ],
+ "to": [ 7, 13, 6 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 6, 12, 4 ],
+ "to": [ 10, 13, 5 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 9, 12, 5 ],
+ "to": [ 11, 13, 6 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 10, 12, 6 ],
+ "to": [ 12, 13, 7 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 10, 12, 9 ],
+ "to": [ 12, 13, 10 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 11, 12, 7 ],
+ "to": [ 12, 13, 9 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 9, 12, 10 ],
+ "to": [ 11, 13, 11 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 7, 11, 10 ],
+ "to": [ 9, 12, 11 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 7, 11, 5 ],
+ "to": [ 9, 12, 6 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 6, 11, 6 ],
+ "to": [ 10, 12, 10 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 5, 11, 7 ],
+ "to": [ 6, 12, 9 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 10, 11, 7 ],
+ "to": [ 11, 12, 9 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 8.5, 13, 3 ],
+ "to": [ 10, 16, 4 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box13",
+ "from": [ 7.5, 13, 3 ],
+ "to": [ 8.5, 15, 4 ],
+ "faces": {
+ "down": { "uv": [ 7, 12, 9, 13 ], "texture": "#pottexture", "rotation": 90 },
+ "up": { "uv": [ 7, 3, 9, 4 ], "texture": "#pottexture", "rotation": 270 },
+ "north": { "uv": [ 12, 15, 13, 16 ], "texture": "#pottexture" },
+ "south": { "uv": [ 3, 15, 4, 16 ], "texture": "#pottexture" },
+ "west": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" },
+ "east": { "uv": [ 7, 15, 9, 16 ], "texture": "#pottexture" }
+ }
+ },
+ {
+ "__comment": "Box37",
+ "from": [ 0, 13.5, 7.5 ],
+ "to": [ 3, 14.5, 8.5 ],
+ "faces": {
+ "down": { "uv": [ 0, 7.5, 3, 8.5 ], "texture": "#metal" },
+ "up": { "uv": [ 0, 7.5, 3, 8.5 ], "texture": "#metal" },
+ "north": { "uv": [ 13, 1.5, 16, 2.5 ], "texture": "#metal" },
+ "south": { "uv": [ 0, 1.5, 3, 2.5 ], "texture": "#metal" },
+ "west": { "uv": [ 7.5, 1.5, 8.5, 2.5 ], "texture": "#metal" },
+ "east": { "uv": [ 7.5, 1.5, 8.5, 2.5 ], "texture": "#metal" }
+ }
+ },
+ {
+ "__comment": "Box37",
+ "from": [ 13, 13.5, 7.5 ],
+ "to": [ 16, 14.5, 8.5 ],
+ "faces": {
+ "down": { "uv": [ 0, 7.5, 3, 8.5 ], "texture": "#metal" },
+ "up": { "uv": [ 0, 7.5, 3, 8.5 ], "texture": "#metal" },
+ "north": { "uv": [ 13, 1.5, 16, 2.5 ], "texture": "#metal" },
+ "south": { "uv": [ 0, 1.5, 3, 2.5 ], "texture": "#metal" },
+ "west": { "uv": [ 7.5, 1.5, 8.5, 2.5 ], "texture": "#metal" },
+ "east": { "uv": [ 7.5, 1.5, 8.5, 2.5 ], "texture": "#metal" }
+ }
+ },
+ {
+ "__comment": "Box37",
+ "from": [ 0, 8, 7.5 ],
+ "to": [ 1, 14.5, 8.5 ],
+ "faces": {
+ "down": { "uv": [ 0, 7.5, 3, 8.5 ], "texture": "#metal" },
+ "up": { "uv": [ 0, 7.5, 3, 8.5 ], "texture": "#metal" },
+ "north": { "uv": [ 13, 1.5, 16, 2.5 ], "texture": "#metal" },
+ "south": { "uv": [ 0, 1.5, 3, 2.5 ], "texture": "#metal" },
+ "west": { "uv": [ 7.5, 1.5, 8.5, 2.5 ], "texture": "#metal" },
+ "east": { "uv": [ 7.5, 1.5, 8.5, 2.5 ], "texture": "#metal" }
+ }
+ },
+ {
+ "__comment": "Box37",
+ "from": [ 15, 8, 7.5 ],
+ "to": [ 16, 14.5, 8.5 ],
+ "faces": {
+ "down": { "uv": [ 0, 7.5, 3, 8.5 ], "texture": "#metal" },
+ "up": { "uv": [ 0, 7.5, 3, 8.5 ], "texture": "#metal" },
+ "north": { "uv": [ 13, 1.5, 16, 2.5 ], "texture": "#metal" },
+ "south": { "uv": [ 0, 1.5, 3, 2.5 ], "texture": "#metal" },
+ "west": { "uv": [ 7.5, 1.5, 8.5, 2.5 ], "texture": "#metal" },
+ "east": { "uv": [ 7.5, 1.5, 8.5, 2.5 ], "texture": "#metal" }
+ }
+ },
+ {
+ "__comment": "Box49",
+ "from": [ 0, 7, 6 ],
+ "to": [ 16, 7.5, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 16, 10 ], "texture": "#metal" },
+ "up": { "uv": [ 0, 6, 16, 16 ], "texture": "#metal" },
+ "north": { "uv": [ 0, 8.5, 16, 9 ], "texture": "#metal" },
+ "south": { "uv": [ 0, 8.5, 16, 9 ], "texture": "#metal" },
+ "west": { "uv": [ 6, 8.5, 16, 9 ], "texture": "#metal" },
+ "east": { "uv": [ 0, 8.5, 10, 9 ], "texture": "#metal" }
+ }
+ },
+ {
+ "__comment": "Box52",
+ "from": [ 0, 7, 0 ],
+ "to": [ 16, 7.5, 4 ],
+ "faces": {
+ "down": { "uv": [ 0, 12, 16, 16 ], "texture": "#metal" },
+ "up": { "uv": [ 0, 0, 16, 4 ], "texture": "#metal" },
+ "north": { "uv": [ 0, 8.5, 16, 9 ], "texture": "#metal" },
+ "south": { "uv": [ 0, 8.5, 16, 9 ], "texture": "#metal" },
+ "west": { "uv": [ 0, 8.5, 4, 9 ], "texture": "#metal" },
+ "east": { "uv": [ 12, 8.5, 16, 9 ], "texture": "#metal" }
+ }
+ },
+ {
+ "__comment": "Box54",
+ "from": [ 0, 7, 4 ],
+ "to": [ 6, 7.5, 6 ],
+ "faces": {
+ "down": { "uv": [ 0, 10, 6, 12 ], "texture": "#metal" },
+ "up": { "uv": [ 0, 4, 6, 6 ], "texture": "#metal" },
+ "north": { "uv": [ 10, 8.5, 16, 9 ], "texture": "#metal" },
+ "south": { "uv": [ 0, 8.5, 6, 9 ], "texture": "#metal" },
+ "west": { "uv": [ 4, 8.5, 6, 9 ], "texture": "#metal" },
+ "east": { "uv": [ 10, 8.5, 12, 9 ], "texture": "#metal" }
+ }
+ },
+ {
+ "__comment": "Box54",
+ "from": [ 10, 7, 4 ],
+ "to": [ 16, 7.5, 6 ],
+ "faces": {
+ "down": { "uv": [ 0, 9.5, 5.5, 12.5 ], "texture": "#metal" },
+ "up": { "uv": [ 0, 3.5, 5.5, 6.5 ], "texture": "#metal" },
+ "north": { "uv": [ 10.5, 15, 16, 16 ], "texture": "#metal" },
+ "south": { "uv": [ 0, 15, 5.5, 16 ], "texture": "#metal" },
+ "west": { "uv": [ 3.5, 15, 6.5, 16 ], "texture": "#metal" },
+ "east": { "uv": [ 9.5, 15, 12.5, 16 ], "texture": "#metal" }
+ }
+ },
+ {
+ "__comment": "Box49",
+ "from": [ 0, 7.5, 6.5 ],
+ "to": [ 16, 8, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 16, 9.5 ], "texture": "#metal" },
+ "up": { "uv": [ 0, 6.5, 16, 16 ], "texture": "#metal" },
+ "north": { "uv": [ 0, 8, 16, 8.5 ], "texture": "#metal" },
+ "south": { "uv": [ 0, 8, 16, 8.5 ], "texture": "#metal" },
+ "west": { "uv": [ 6.5, 8, 16, 8.5 ], "texture": "#metal" },
+ "east": { "uv": [ 0, 8, 9.5, 8.5 ], "texture": "#metal" }
+ }
+ },
+ {
+ "__comment": "Box52",
+ "from": [ 0, 7.5, 0 ],
+ "to": [ 16, 8, 3.5 ],
+ "faces": {
+ "down": { "uv": [ 0, 12.5, 16, 16 ], "texture": "#metal" },
+ "up": { "uv": [ 0, 0, 16, 3.5 ], "texture": "#metal" },
+ "north": { "uv": [ 0, 8, 16, 8.5 ], "texture": "#metal" },
+ "south": { "uv": [ 0, 8, 16, 8.5 ], "texture": "#metal" },
+ "west": { "uv": [ 0, 8, 3.5, 8.5 ], "texture": "#metal" },
+ "east": { "uv": [ 12.5, 8, 16, 8.5 ], "texture": "#metal" }
+ }
+ },
+ {
+ "__comment": "Box54",
+ "from": [ 0, 7.5, 3.5 ],
+ "to": [ 5.5, 8, 6.5 ],
+ "faces": {
+ "down": { "uv": [ 0, 9.5, 5.5, 12.5 ], "texture": "#metal" },
+ "up": { "uv": [ 0, 3.5, 5.5, 6.5 ], "texture": "#metal" },
+ "north": { "uv": [ 10.5, 8, 16, 8.5 ], "texture": "#metal" },
+ "south": { "uv": [ 0, 8, 5.5, 8.5 ], "texture": "#metal" },
+ "west": { "uv": [ 3.5, 8, 6.5, 8.5 ], "texture": "#metal" },
+ "east": { "uv": [ 9.5, 8, 12.5, 8.5 ], "texture": "#metal" }
+ }
+ },
+ {
+ "__comment": "Box54",
+ "from": [ 10.5, 7.5, 3.5 ],
+ "to": [ 16, 8, 6.5 ],
+ "faces": {
+ "down": { "uv": [ 0, 9.5, 5.5, 12.5 ], "texture": "#metal" },
+ "up": { "uv": [ 0, 3.5, 5.5, 6.5 ], "texture": "#metal" },
+ "north": { "uv": [ 10.5, 15, 16, 16 ], "texture": "#metal" },
+ "south": { "uv": [ 0, 15, 5.5, 16 ], "texture": "#metal" },
+ "west": { "uv": [ 3.5, 15, 6.5, 16 ], "texture": "#metal" },
+ "east": { "uv": [ 9.5, 15, 12.5, 16 ], "texture": "#metal" }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/models/smeltblock.json.textures b/models/smeltblock.json.textures
new file mode 100644
index 0000000..cb5a7ca
--- /dev/null
+++ b/models/smeltblock.json.textures
@@ -0,0 +1,12 @@
+{
+ "mappings": {
+ "default": {
+ "map": {
+ "pottexture": "pottexture",
+ "metal": "metal",
+ "smeltblock": "smeltblock"
+ },
+ "name": "default"
+ }
+ }
+}
\ No newline at end of file
diff --git a/models/spawner.json b/models/spawner.json
new file mode 100644
index 0000000..0fcc443
--- /dev/null
+++ b/models/spawner.json
@@ -0,0 +1,945 @@
+{
+ "__comment": "Designed by Netquick with Cubik Studio - https://cubik.studio",
+ "textures": {
+ "particle": "blocks/particle",
+ "texture": "blocks/texture"
+ },
+ "elements": [
+ {
+ "__comment": "Box1",
+ "from": [ 0, 15, 0 ],
+ "to": [ 16, 16, 0.5 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "west": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "east": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0, 15.5, 0.5 ],
+ "to": [ 16, 16, 1 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "west": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "east": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0, 15, 0 ],
+ "to": [ 0.5, 16, 16 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture" },
+ "up": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture" },
+ "north": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "south": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0.5, 15.5, 0 ],
+ "to": [ 1, 16, 16 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture" },
+ "up": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture" },
+ "north": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "south": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0, 15, 15.5 ],
+ "to": [ 16, 16, 16 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 90 },
+ "up": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 270 },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0, 15.5, 15 ],
+ "to": [ 16, 16, 15.5 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 90 },
+ "up": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 270 },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 15.5, 15, 0 ],
+ "to": [ 16, 16, 16 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 180 },
+ "up": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 180 },
+ "north": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "south": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 15, 15.5, 0 ],
+ "to": [ 15.5, 16, 16 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 180 },
+ "up": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 180 },
+ "north": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "south": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0, 0, 0 ],
+ "to": [ 16, 1, 0.5 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 90 },
+ "up": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 270 },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0, 0, 0.5 ],
+ "to": [ 16, 0.5, 1 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 90 },
+ "up": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 270 },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 15.5, 0, 0 ],
+ "to": [ 16, 1, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" },
+ "up": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 15, 0, 0 ],
+ "to": [ 15.5, 0.5, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" },
+ "up": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0, 0, 15.5 ],
+ "to": [ 16, 1, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0, 0, 15 ],
+ "to": [ 16, 0.5, 15.5 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 15.5, 0, 15 ],
+ "to": [ 16, 16, 15.5 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture", "rotation": 90 },
+ "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture", "rotation": 270 },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 90 },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 270 },
+ "west": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 180 },
+ "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 15, 0, 15.5 ],
+ "to": [ 16, 16, 16 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture", "rotation": 90 },
+ "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture", "rotation": 270 },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 90 },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 270 },
+ "west": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 180 },
+ "east": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0, 0, 0 ],
+ "to": [ 0.5, 1, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "up": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "north": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0.5, 0, 0 ],
+ "to": [ 1, 0.5, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "up": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "north": { "uv": [ 0, 15, 1, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0, 0, 15 ],
+ "to": [ 0.5, 16, 16 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" },
+ "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 180 },
+ "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0.5, 0, 15.5 ],
+ "to": [ 1, 16, 16 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture" },
+ "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 180 },
+ "south": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0, 0, 0.5 ],
+ "to": [ 0.5, 16, 1 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "east": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 0, 0, 0 ],
+ "to": [ 1, 16, 0.5 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "east": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 180 }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 15, 0, 0 ],
+ "to": [ 15.5, 16, 0.5 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture", "rotation": 180 },
+ "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "south": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 180 },
+ "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 90 },
+ "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 270 }
+ }
+ },
+ {
+ "__comment": "Box1",
+ "from": [ 15.5, 0, 0 ],
+ "to": [ 16, 16, 1 ],
+ "faces": {
+ "down": { "uv": [ 1, 16, 0, 15 ], "texture": "#texture", "rotation": 180 },
+ "up": { "uv": [ 15, 15, 16, 16 ], "texture": "#texture", "rotation": 180 },
+ "north": { "uv": [ 0, 0, 1, 16 ], "texture": "#texture", "rotation": 180 },
+ "south": { "uv": [ 1, 16, 0, 0 ], "texture": "#texture", "rotation": 180 },
+ "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 90 },
+ "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#texture", "rotation": 270 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 15.5, 10, 1 ],
+ "to": [ 16, 10.5, 15 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 10.5, 15, 10, 1 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 15.5, 13, 1 ],
+ "to": [ 16, 13.5, 15 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 13.5, 15, 13, 1 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 15.5, 2.5, 1 ],
+ "to": [ 16, 3, 15 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 3, 15, 2.5, 1 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 15.5, 5.5, 1 ],
+ "to": [ 16, 6, 15 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 6, 15, 5.5, 1 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 15.5, 1, 2.5 ],
+ "to": [ 16, 15, 3 ],
+ "faces": {
+ "down": { "uv": [ 13.5, 16, 13, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture" },
+ "east": { "uv": [ 3, 15, 2.5, 1 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 15.5, 1, 5.5 ],
+ "to": [ 16, 15, 6 ],
+ "faces": {
+ "down": { "uv": [ 10.5, 16, 10, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture" },
+ "east": { "uv": [ 6, 15, 5.5, 1 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 15.5, 1, 10 ],
+ "to": [ 16, 15, 10.5 ],
+ "faces": {
+ "down": { "uv": [ 6, 16, 5.5, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture" },
+ "east": { "uv": [ 10.5, 15, 10, 1 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 15.5, 1, 13 ],
+ "to": [ 16, 15, 13.5 ],
+ "faces": {
+ "down": { "uv": [ 3, 16, 2.5, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture" },
+ "east": { "uv": [ 13.5, 15, 13, 1 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 0, 10, 1 ],
+ "to": [ 0.5, 10.5, 15 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 10.5, 15, 10, 1 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 0, 13, 1 ],
+ "to": [ 0.5, 13.5, 15 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 13.5, 15, 13, 1 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 0, 2.5, 1 ],
+ "to": [ 0.5, 3, 15 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 3, 15, 2.5, 1 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 0, 5.5, 1 ],
+ "to": [ 0.5, 6, 15 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 6, 15, 5.5, 1 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 0, 1, 2.5 ],
+ "to": [ 0.5, 15, 3 ],
+ "faces": {
+ "down": { "uv": [ 13.5, 16, 13, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture" },
+ "east": { "uv": [ 3, 15, 2.5, 1 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 0, 1, 5.5 ],
+ "to": [ 0.5, 15, 6 ],
+ "faces": {
+ "down": { "uv": [ 10.5, 16, 10, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture" },
+ "east": { "uv": [ 6, 15, 5.5, 1 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 0, 1, 10 ],
+ "to": [ 0.5, 15, 10.5 ],
+ "faces": {
+ "down": { "uv": [ 6, 16, 5.5, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture" },
+ "east": { "uv": [ 10.5, 15, 10, 1 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 0, 1, 13 ],
+ "to": [ 0.5, 15, 13.5 ],
+ "faces": {
+ "down": { "uv": [ 3, 16, 2.5, 15.5 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 },
+ "west": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture" },
+ "east": { "uv": [ 13.5, 15, 13, 1 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 15.5, 10 ],
+ "to": [ 15, 16, 10.5 ],
+ "faces": {
+ "down": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 15.5, 13 ],
+ "to": [ 15, 16, 13.5 ],
+ "faces": {
+ "down": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 15.5, 2.5 ],
+ "to": [ 15, 16, 3 ],
+ "faces": {
+ "down": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 15.5, 5.5 ],
+ "to": [ 15, 16, 6 ],
+ "faces": {
+ "down": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 2.5, 15.5, 1 ],
+ "to": [ 3, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture" },
+ "up": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture" },
+ "north": { "uv": [ 13, 0, 13.5, 0.5 ], "texture": "#texture" },
+ "south": { "uv": [ 2.5, 0, 3, 0.5 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#texture" },
+ "east": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 5.5, 15.5, 1 ],
+ "to": [ 6, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture" },
+ "up": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture" },
+ "north": { "uv": [ 10, 0, 10.5, 0.5 ], "texture": "#texture" },
+ "south": { "uv": [ 5.5, 0, 6, 0.5 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#texture" },
+ "east": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 10, 15.5, 1 ],
+ "to": [ 10.5, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture" },
+ "up": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture" },
+ "north": { "uv": [ 5.5, 0, 6, 0.5 ], "texture": "#texture" },
+ "south": { "uv": [ 10, 0, 10.5, 0.5 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#texture" },
+ "east": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 13, 15.5, 1 ],
+ "to": [ 13.5, 16, 15 ],
+ "faces": {
+ "down": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture" },
+ "up": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture" },
+ "north": { "uv": [ 2.5, 0, 3, 0.5 ], "texture": "#texture" },
+ "south": { "uv": [ 13, 0, 13.5, 0.5 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#texture" },
+ "east": { "uv": [ 1, 0, 15, 0.5 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 0, 10 ],
+ "to": [ 15, 0.5, 10.5 ],
+ "faces": {
+ "down": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 0, 13 ],
+ "to": [ 15, 0.5, 13.5 ],
+ "faces": {
+ "down": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 0, 2.5 ],
+ "to": [ 15, 0.5, 3 ],
+ "faces": {
+ "down": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 0, 5.5 ],
+ "to": [ 15, 0.5, 6 ],
+ "faces": {
+ "down": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture", "rotation": 270 },
+ "up": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture", "rotation": 90 },
+ "north": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 2.5, 0, 1 ],
+ "to": [ 3, 0.5, 15 ],
+ "faces": {
+ "down": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture" },
+ "up": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture" },
+ "north": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 5.5, 0, 1 ],
+ "to": [ 6, 0.5, 15 ],
+ "faces": {
+ "down": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture" },
+ "up": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture" },
+ "north": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 10, 0, 1 ],
+ "to": [ 10.5, 0.5, 15 ],
+ "faces": {
+ "down": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture" },
+ "up": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture" },
+ "north": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 13, 0, 1 ],
+ "to": [ 13.5, 0.5, 15 ],
+ "faces": {
+ "down": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture" },
+ "up": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture" },
+ "north": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture" },
+ "south": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "east": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 10, 0 ],
+ "to": [ 15, 10.5, 0.5 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 10.5, 15, 10, 1 ], "texture": "#texture", "rotation": 90 },
+ "south": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture", "rotation": 270 },
+ "west": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 13, 0 ],
+ "to": [ 15, 13.5, 0.5 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 13.5, 15, 13, 1 ], "texture": "#texture", "rotation": 90 },
+ "south": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture", "rotation": 270 },
+ "west": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 2.5, 0 ],
+ "to": [ 15, 3, 0.5 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 3, 15, 2.5, 1 ], "texture": "#texture", "rotation": 90 },
+ "south": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture", "rotation": 270 },
+ "west": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 5.5, 0 ],
+ "to": [ 15, 6, 0.5 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 6, 15, 5.5, 1 ], "texture": "#texture", "rotation": 90 },
+ "south": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture", "rotation": 270 },
+ "west": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 2.5, 1, 0 ],
+ "to": [ 3, 15, 0.5 ],
+ "faces": {
+ "down": { "uv": [ 13.5, 16, 13, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 3, 15, 2.5, 1 ], "texture": "#texture" },
+ "south": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 5.5, 1, 0 ],
+ "to": [ 6, 15, 0.5 ],
+ "faces": {
+ "down": { "uv": [ 10.5, 16, 10, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 6, 15, 5.5, 1 ], "texture": "#texture" },
+ "south": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 10, 1, 0 ],
+ "to": [ 10.5, 15, 0.5 ],
+ "faces": {
+ "down": { "uv": [ 6, 16, 5.5, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 10.5, 15, 10, 1 ], "texture": "#texture" },
+ "south": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 13, 1, 0 ],
+ "to": [ 13.5, 15, 0.5 ],
+ "faces": {
+ "down": { "uv": [ 3, 16, 2.5, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 13.5, 15, 13, 1 ], "texture": "#texture" },
+ "south": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 10, 15.5 ],
+ "to": [ 15, 10.5, 16 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 10.5, 15, 10, 1 ], "texture": "#texture", "rotation": 90 },
+ "south": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture", "rotation": 270 },
+ "west": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 13, 15.5 ],
+ "to": [ 15, 13.5, 16 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 13.5, 15, 13, 1 ], "texture": "#texture", "rotation": 90 },
+ "south": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture", "rotation": 270 },
+ "west": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 2.5, 15.5 ],
+ "to": [ 15, 3, 16 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 3, 15, 2.5, 1 ], "texture": "#texture", "rotation": 90 },
+ "south": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture", "rotation": 270 },
+ "west": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 1, 5.5, 15.5 ],
+ "to": [ 15, 6, 16 ],
+ "faces": {
+ "down": { "uv": [ 15, 16, 1, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 6, 15, 5.5, 1 ], "texture": "#texture", "rotation": 90 },
+ "south": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture", "rotation": 270 },
+ "west": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 2.5, 1, 15.5 ],
+ "to": [ 3, 15, 16 ],
+ "faces": {
+ "down": { "uv": [ 13.5, 16, 13, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 2.5, 15.5, 3, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 3, 15, 2.5, 1 ], "texture": "#texture" },
+ "south": { "uv": [ 2.5, 1, 3, 15 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 5.5, 1, 15.5 ],
+ "to": [ 6, 15, 16 ],
+ "faces": {
+ "down": { "uv": [ 10.5, 16, 10, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 5.5, 15.5, 6, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 6, 15, 5.5, 1 ], "texture": "#texture" },
+ "south": { "uv": [ 5.5, 1, 6, 15 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 10, 1, 15.5 ],
+ "to": [ 10.5, 15, 16 ],
+ "faces": {
+ "down": { "uv": [ 6, 16, 5.5, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 10, 15.5, 10.5, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 10.5, 15, 10, 1 ], "texture": "#texture" },
+ "south": { "uv": [ 10, 1, 10.5, 15 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ },
+ {
+ "__comment": "Box25",
+ "from": [ 13, 1, 15.5 ],
+ "to": [ 13.5, 15, 16 ],
+ "faces": {
+ "down": { "uv": [ 3, 16, 2.5, 15.5 ], "texture": "#texture" },
+ "up": { "uv": [ 13, 15.5, 13.5, 16 ], "texture": "#texture" },
+ "north": { "uv": [ 13.5, 15, 13, 1 ], "texture": "#texture" },
+ "south": { "uv": [ 13, 1, 13.5, 15 ], "texture": "#texture" },
+ "west": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 270 },
+ "east": { "uv": [ 1, 15.5, 15, 16 ], "texture": "#texture", "rotation": 90 }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/models/spawner.json.textures b/models/spawner.json.textures
new file mode 100644
index 0000000..da85439
--- /dev/null
+++ b/models/spawner.json.textures
@@ -0,0 +1,10 @@
+{
+ "mappings": {
+ "default": {
+ "map": {
+ "texture": "spawnertexture"
+ },
+ "name": "default"
+ }
+ }
+}
\ No newline at end of file
diff --git a/models/teleporter.json b/models/teleporter.json
new file mode 100644
index 0000000..c6ec86f
--- /dev/null
+++ b/models/teleporter.json
@@ -0,0 +1,128 @@
+{
+ "__comment": "Designed by Netquick with Cubik Studio - https://cubik.studio",
+ "textures": {
+ "particle": "blocks/particle",
+ "Plate": "blocks/plate",
+ "Border": "blocks/border"
+ },
+ "elements": [
+ {
+ "__comment": "Box3",
+ "from": [ 0, 1, 15 ],
+ "to": [ 3, 1.5, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 13, 1, 16 ], "texture": "#Border", "rotation": 90 },
+ "up": { "uv": [ 0, 0, 1, 3 ], "texture": "#Border", "rotation": 270 },
+ "north": { "uv": [ 13, 14.5, 16, 15 ], "texture": "#Border" },
+ "south": { "uv": [ 0, 14.5, 3, 15 ], "texture": "#Border" },
+ "west": { "uv": [ 15, 14.5, 16, 15 ], "texture": "#Border" },
+ "east": { "uv": [ 0, 14.5, 1, 15 ], "texture": "#Border" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 0, 1, 13 ],
+ "to": [ 1, 1.5, 15 ],
+ "faces": {
+ "down": { "uv": [ 1, 13, 2, 14 ], "texture": "#Border", "rotation": 90 },
+ "up": { "uv": [ 1, 2, 2, 3 ], "texture": "#Border", "rotation": 270 },
+ "north": { "uv": [ 13, 14, 14, 15 ], "texture": "#Border" },
+ "south": { "uv": [ 2, 14, 3, 15 ], "texture": "#Border" },
+ "west": { "uv": [ 14, 14, 15, 15 ], "texture": "#Border" },
+ "east": { "uv": [ 1, 14, 2, 15 ], "texture": "#Border" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 0, 1, 0 ],
+ "to": [ 1, 1.5, 3 ],
+ "faces": {
+ "down": { "uv": [ 0, 13, 1, 16 ], "texture": "#Border" },
+ "up": { "uv": [ 0, 0, 1, 3 ], "texture": "#Border" },
+ "north": { "uv": [ 15, 14.5, 16, 15 ], "texture": "#Border" },
+ "south": { "uv": [ 0, 14.5, 1, 15 ], "texture": "#Border" },
+ "west": { "uv": [ 0, 14.5, 3, 15 ], "texture": "#Border" },
+ "east": { "uv": [ 13, 14.5, 16, 15 ], "texture": "#Border" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 1, 1, 0 ],
+ "to": [ 3, 1.5, 1 ],
+ "faces": {
+ "down": { "uv": [ 1, 13, 2, 14 ], "texture": "#Border" },
+ "up": { "uv": [ 1, 2, 2, 3 ], "texture": "#Border" },
+ "north": { "uv": [ 14, 14, 15, 15 ], "texture": "#Border" },
+ "south": { "uv": [ 1, 14, 2, 15 ], "texture": "#Border" },
+ "west": { "uv": [ 2, 14, 3, 15 ], "texture": "#Border" },
+ "east": { "uv": [ 13, 14, 14, 15 ], "texture": "#Border" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 13, 1, 0 ],
+ "to": [ 16, 1.5, 1 ],
+ "faces": {
+ "down": { "uv": [ 0, 13, 1, 16 ], "texture": "#Border", "rotation": 270 },
+ "up": { "uv": [ 0, 0, 1, 3 ], "texture": "#Border", "rotation": 90 },
+ "north": { "uv": [ 0, 14.5, 3, 15 ], "texture": "#Border" },
+ "south": { "uv": [ 13, 14.5, 16, 15 ], "texture": "#Border" },
+ "west": { "uv": [ 0, 14.5, 1, 15 ], "texture": "#Border" },
+ "east": { "uv": [ 15, 14.5, 16, 15 ], "texture": "#Border" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 15, 1, 1 ],
+ "to": [ 16, 1.5, 3 ],
+ "faces": {
+ "down": { "uv": [ 1, 13, 2, 14 ], "texture": "#Border", "rotation": 270 },
+ "up": { "uv": [ 1, 2, 2, 3 ], "texture": "#Border", "rotation": 90 },
+ "north": { "uv": [ 2, 14, 3, 15 ], "texture": "#Border" },
+ "south": { "uv": [ 13, 14, 14, 15 ], "texture": "#Border" },
+ "west": { "uv": [ 1, 14, 2, 15 ], "texture": "#Border" },
+ "east": { "uv": [ 14, 14, 15, 15 ], "texture": "#Border" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 15, 1, 13 ],
+ "to": [ 16, 1.5, 16 ],
+ "faces": {
+ "down": { "uv": [ 0, 13, 1, 16 ], "texture": "#Border", "rotation": 180 },
+ "up": { "uv": [ 0, 0, 1, 3 ], "texture": "#Border", "rotation": 180 },
+ "north": { "uv": [ 0, 14.5, 1, 15 ], "texture": "#Border" },
+ "south": { "uv": [ 15, 14.5, 16, 15 ], "texture": "#Border" },
+ "west": { "uv": [ 13, 14.5, 16, 15 ], "texture": "#Border" },
+ "east": { "uv": [ 0, 14.5, 3, 15 ], "texture": "#Border" }
+ }
+ },
+ {
+ "__comment": "Box3",
+ "from": [ 13, 1, 15 ],
+ "to": [ 15, 1.5, 16 ],
+ "faces": {
+ "down": { "uv": [ 1, 13, 2, 14 ], "texture": "#Border", "rotation": 180 },
+ "up": { "uv": [ 1, 2, 2, 3 ], "texture": "#Border", "rotation": 180 },
+ "north": { "uv": [ 1, 14, 2, 15 ], "texture": "#Border" },
+ "south": { "uv": [ 14, 14, 15, 15 ], "texture": "#Border" },
+ "west": { "uv": [ 13, 14, 14, 15 ], "texture": "#Border" },
+ "east": { "uv": [ 2, 14, 3, 15 ], "texture": "#Border" }
+ }
+ },
+ {
+ "__comment": "Box10",
+ "from": [ 0, 0, 0 ],
+ "to": [ 16, 1, 16 ],
+ "shade": false,
+ "faces": {
+ "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#Plate" },
+ "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#Plate" },
+ "north": { "uv": [ 0, 15, 16, 16 ], "texture": "#Plate" },
+ "south": { "uv": [ 0, 15, 16, 16 ], "texture": "#Plate" },
+ "west": { "uv": [ 0, 15, 16, 16 ], "texture": "#Plate" },
+ "east": { "uv": [ 0, 15, 16, 16 ], "texture": "#Plate" }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/models/teleporter.json.textures b/models/teleporter.json.textures
new file mode 100644
index 0000000..3472f98
--- /dev/null
+++ b/models/teleporter.json.textures
@@ -0,0 +1,11 @@
+{
+ "mappings": {
+ "default": {
+ "map": {
+ "Border": "border",
+ "Plate": "plate"
+ },
+ "name": "default"
+ }
+ }
+}
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..291d399
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,13 @@
+pluginManagement {
+ repositories {
+ gradlePluginPortal()
+ maven {
+ name = 'MinecraftForge'
+ url = 'https://maven.minecraftforge.net/'
+ }
+ }
+}
+
+plugins {
+ id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0'
+}
\ No newline at end of file
diff --git a/src/main/java/ch/netquick/easysurvival/EasysurvivalMod.java b/src/main/java/ch/netquick/easysurvival/EasysurvivalMod.java
new file mode 100644
index 0000000..6430f33
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/EasysurvivalMod.java
@@ -0,0 +1,86 @@
+package ch.netquick.easysurvival;
+
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+
+import net.minecraftforge.network.simple.SimpleChannel;
+import net.minecraftforge.network.NetworkRegistry;
+import net.minecraftforge.network.NetworkEvent;
+import net.minecraftforge.fml.util.thread.SidedThreadGroups;
+import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
+import net.minecraftforge.fml.common.Mod;
+import net.minecraftforge.eventbus.api.SubscribeEvent;
+import net.minecraftforge.eventbus.api.IEventBus;
+import net.minecraftforge.event.TickEvent;
+import net.minecraftforge.common.MinecraftForge;
+
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.network.FriendlyByteBuf;
+
+import java.util.function.Supplier;
+import java.util.function.Function;
+import java.util.function.BiConsumer;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.List;
+import java.util.Collection;
+import java.util.ArrayList;
+import java.util.AbstractMap;
+
+import ch.netquick.easysurvival.init.EasysurvivalModTabs;
+import ch.netquick.easysurvival.init.EasysurvivalModMenus;
+import ch.netquick.easysurvival.init.EasysurvivalModItems;
+import ch.netquick.easysurvival.init.EasysurvivalModBlocks;
+import ch.netquick.easysurvival.init.EasysurvivalModBlockEntities;
+
+@Mod("easysurvival")
+public class EasysurvivalMod {
+ public static final Logger LOGGER = LogManager.getLogger(EasysurvivalMod.class);
+ public static final String MODID = "easysurvival";
+
+ public EasysurvivalMod() {
+ MinecraftForge.EVENT_BUS.register(this);
+ IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
+
+ EasysurvivalModBlocks.REGISTRY.register(bus);
+ EasysurvivalModBlockEntities.REGISTRY.register(bus);
+ EasysurvivalModItems.REGISTRY.register(bus);
+
+ EasysurvivalModTabs.REGISTRY.register(bus);
+
+ EasysurvivalModMenus.REGISTRY.register(bus);
+ // Start of user code block mod init
+ // End of user code block mod init
+ }
+
+ // Start of user code block mod methods
+ // End of user code block mod methods
+ private static final String PROTOCOL_VERSION = "1";
+ public static final SimpleChannel PACKET_HANDLER = NetworkRegistry.newSimpleChannel(new ResourceLocation(MODID, MODID), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals);
+ private static int messageID = 0;
+
+ public static void addNetworkMessage(Class messageType, BiConsumer encoder, Function decoder, BiConsumer> messageConsumer) {
+ PACKET_HANDLER.registerMessage(messageID, messageType, encoder, decoder, messageConsumer);
+ messageID++;
+ }
+
+ private static final Collection> workQueue = new ConcurrentLinkedQueue<>();
+
+ public static void queueServerWork(int tick, Runnable action) {
+ if (Thread.currentThread().getThreadGroup() == SidedThreadGroups.SERVER)
+ workQueue.add(new AbstractMap.SimpleEntry<>(action, tick));
+ }
+
+ @SubscribeEvent
+ public void tick(TickEvent.ServerTickEvent event) {
+ if (event.phase == TickEvent.Phase.END) {
+ List> actions = new ArrayList<>();
+ workQueue.forEach(work -> {
+ work.setValue(work.getValue() - 1);
+ if (work.getValue() == 0)
+ actions.add(work);
+ });
+ actions.forEach(e -> e.getKey().run());
+ workQueue.removeAll(actions);
+ }
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/CropBlock.java b/src/main/java/ch/netquick/easysurvival/block/CropBlock.java
new file mode 100644
index 0000000..3ae0a9b
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/CropBlock.java
@@ -0,0 +1,159 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraftforge.network.NetworkHooks;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.phys.BlockHitResult;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.material.PushReaction;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.EntityBlock;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.PickaxeItem;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.MenuProvider;
+import net.minecraft.world.InteractionResult;
+import net.minecraft.world.InteractionHand;
+import net.minecraft.world.Containers;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.CropGUIMenu;
+import ch.netquick.easysurvival.procedures.CropUpdateTickProcedure;
+import ch.netquick.easysurvival.block.entity.CropBlockEntity;
+
+public class CropBlock extends Block implements EntityBlock {
+ public CropBlock() {
+ super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.GRAVEL).strength(1f, 10f).requiresCorrectToolForDrops().noOcclusion().pushReaction(PushReaction.BLOCK).isRedstoneConductor((bs, br, bp) -> false));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ public boolean canHarvestBlock(BlockState state, BlockGetter world, BlockPos pos, Player player) {
+ if (player.getInventory().getSelected().getItem() instanceof PickaxeItem tieredItem)
+ return tieredItem.getTier().getLevel() >= 1;
+ return false;
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 50);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ CropUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 50);
+ }
+
+ @Override
+ public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {
+ super.use(blockstate, world, pos, entity, hand, hit);
+ if (entity instanceof ServerPlayer player) {
+ NetworkHooks.openScreen(player, new MenuProvider() {
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Crop");
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
+ return new CropGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(pos));
+ }
+ }, pos);
+ }
+ return InteractionResult.SUCCESS;
+ }
+
+ @Override
+ public MenuProvider getMenuProvider(BlockState state, Level worldIn, BlockPos pos) {
+ BlockEntity tileEntity = worldIn.getBlockEntity(pos);
+ return tileEntity instanceof MenuProvider menuProvider ? menuProvider : null;
+ }
+
+ @Override
+ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
+ return new CropBlockEntity(pos, state);
+ }
+
+ @Override
+ public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int eventID, int eventParam) {
+ super.triggerEvent(state, world, pos, eventID, eventParam);
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ return blockEntity == null ? false : blockEntity.triggerEvent(eventID, eventParam);
+ }
+
+ @Override
+ public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
+ if (state.getBlock() != newState.getBlock()) {
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ if (blockEntity instanceof CropBlockEntity be) {
+ Containers.dropContents(world, pos, be);
+ world.updateNeighbourForOutputSignal(pos, this);
+ }
+ super.onRemove(state, world, pos, newState, isMoving);
+ }
+ }
+
+ @Override
+ public boolean hasAnalogOutputSignal(BlockState state) {
+ return true;
+ }
+
+ @Override
+ public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) {
+ BlockEntity tileentity = world.getBlockEntity(pos);
+ if (tileentity instanceof CropBlockEntity be)
+ return AbstractContainerMenu.getRedstoneSignalFromContainer(be);
+ else
+ return 0;
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/EasyAnvilBlock.java b/src/main/java/ch/netquick/easysurvival/block/EasyAnvilBlock.java
new file mode 100644
index 0000000..b9b0aac
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/EasyAnvilBlock.java
@@ -0,0 +1,185 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraftforge.network.NetworkHooks;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.phys.BlockHitResult;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.DirectionProperty;
+import net.minecraft.world.level.block.state.StateDefinition;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.Rotation;
+import net.minecraft.world.level.block.Mirror;
+import net.minecraft.world.level.block.HorizontalDirectionalBlock;
+import net.minecraft.world.level.block.EntityBlock;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.context.BlockPlaceContext;
+import net.minecraft.world.item.PickaxeItem;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.MenuProvider;
+import net.minecraft.world.InteractionResult;
+import net.minecraft.world.InteractionHand;
+import net.minecraft.world.Containers;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasyAnvilGUIMenu;
+import ch.netquick.easysurvival.procedures.EasyAnvilUpdateTickProcedure;
+import ch.netquick.easysurvival.block.entity.EasyAnvilBlockEntity;
+
+public class EasyAnvilBlock extends Block implements EntityBlock {
+ public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
+
+ public EasyAnvilBlock() {
+ super(BlockBehaviour.Properties.of().sound(SoundType.ANVIL).strength(1f, 10f).requiresCorrectToolForDrops().noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ protected void createBlockStateDefinition(StateDefinition.Builder builder) {
+ builder.add(FACING);
+ }
+
+ @Override
+ public BlockState getStateForPlacement(BlockPlaceContext context) {
+ return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite());
+ }
+
+ public BlockState rotate(BlockState state, Rotation rot) {
+ return state.setValue(FACING, rot.rotate(state.getValue(FACING)));
+ }
+
+ public BlockState mirror(BlockState state, Mirror mirrorIn) {
+ return state.rotate(mirrorIn.getRotation(state.getValue(FACING)));
+ }
+
+ @Override
+ public boolean canHarvestBlock(BlockState state, BlockGetter world, BlockPos pos, Player player) {
+ if (player.getInventory().getSelected().getItem() instanceof PickaxeItem tieredItem)
+ return tieredItem.getTier().getLevel() >= 1;
+ return false;
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ EasyAnvilUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {
+ super.use(blockstate, world, pos, entity, hand, hit);
+ if (entity instanceof ServerPlayer player) {
+ NetworkHooks.openScreen(player, new MenuProvider() {
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Anvil");
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
+ return new EasyAnvilGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(pos));
+ }
+ }, pos);
+ }
+ return InteractionResult.SUCCESS;
+ }
+
+ @Override
+ public MenuProvider getMenuProvider(BlockState state, Level worldIn, BlockPos pos) {
+ BlockEntity tileEntity = worldIn.getBlockEntity(pos);
+ return tileEntity instanceof MenuProvider menuProvider ? menuProvider : null;
+ }
+
+ @Override
+ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
+ return new EasyAnvilBlockEntity(pos, state);
+ }
+
+ @Override
+ public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int eventID, int eventParam) {
+ super.triggerEvent(state, world, pos, eventID, eventParam);
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ return blockEntity == null ? false : blockEntity.triggerEvent(eventID, eventParam);
+ }
+
+ @Override
+ public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
+ if (state.getBlock() != newState.getBlock()) {
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ if (blockEntity instanceof EasyAnvilBlockEntity be) {
+ Containers.dropContents(world, pos, be);
+ world.updateNeighbourForOutputSignal(pos, this);
+ }
+ super.onRemove(state, world, pos, newState, isMoving);
+ }
+ }
+
+ @Override
+ public boolean hasAnalogOutputSignal(BlockState state) {
+ return true;
+ }
+
+ @Override
+ public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) {
+ BlockEntity tileentity = world.getBlockEntity(pos);
+ if (tileentity instanceof EasyAnvilBlockEntity be)
+ return AbstractContainerMenu.getRedstoneSignalFromContainer(be);
+ else
+ return 0;
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/EasyConverterBlock.java b/src/main/java/ch/netquick/easysurvival/block/EasyConverterBlock.java
new file mode 100644
index 0000000..a2e06e7
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/EasyConverterBlock.java
@@ -0,0 +1,150 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraftforge.network.NetworkHooks;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.phys.BlockHitResult;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.EntityBlock;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.MenuProvider;
+import net.minecraft.world.InteractionResult;
+import net.minecraft.world.InteractionHand;
+import net.minecraft.world.Containers;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasyConverterGUIMenu;
+import ch.netquick.easysurvival.procedures.EasyConverterUpdateTickProcedure;
+import ch.netquick.easysurvival.block.entity.EasyConverterBlockEntity;
+
+public class EasyConverterBlock extends Block implements EntityBlock {
+ public EasyConverterBlock() {
+ super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.GRAVEL).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ EasyConverterUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {
+ super.use(blockstate, world, pos, entity, hand, hit);
+ if (entity instanceof ServerPlayer player) {
+ NetworkHooks.openScreen(player, new MenuProvider() {
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Converter");
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
+ return new EasyConverterGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(pos));
+ }
+ }, pos);
+ }
+ return InteractionResult.SUCCESS;
+ }
+
+ @Override
+ public MenuProvider getMenuProvider(BlockState state, Level worldIn, BlockPos pos) {
+ BlockEntity tileEntity = worldIn.getBlockEntity(pos);
+ return tileEntity instanceof MenuProvider menuProvider ? menuProvider : null;
+ }
+
+ @Override
+ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
+ return new EasyConverterBlockEntity(pos, state);
+ }
+
+ @Override
+ public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int eventID, int eventParam) {
+ super.triggerEvent(state, world, pos, eventID, eventParam);
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ return blockEntity == null ? false : blockEntity.triggerEvent(eventID, eventParam);
+ }
+
+ @Override
+ public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
+ if (state.getBlock() != newState.getBlock()) {
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ if (blockEntity instanceof EasyConverterBlockEntity be) {
+ Containers.dropContents(world, pos, be);
+ world.updateNeighbourForOutputSignal(pos, this);
+ }
+ super.onRemove(state, world, pos, newState, isMoving);
+ }
+ }
+
+ @Override
+ public boolean hasAnalogOutputSignal(BlockState state) {
+ return true;
+ }
+
+ @Override
+ public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) {
+ BlockEntity tileentity = world.getBlockEntity(pos);
+ if (tileentity instanceof EasyConverterBlockEntity be)
+ return AbstractContainerMenu.getRedstoneSignalFromContainer(be);
+ else
+ return 0;
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/EasyEnchantmentTableBlock.java b/src/main/java/ch/netquick/easysurvival/block/EasyEnchantmentTableBlock.java
new file mode 100644
index 0000000..79a7591
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/EasyEnchantmentTableBlock.java
@@ -0,0 +1,183 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraftforge.network.NetworkHooks;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.phys.BlockHitResult;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.DirectionProperty;
+import net.minecraft.world.level.block.state.StateDefinition;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.Rotation;
+import net.minecraft.world.level.block.Mirror;
+import net.minecraft.world.level.block.HorizontalDirectionalBlock;
+import net.minecraft.world.level.block.EntityBlock;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.LevelReader;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.context.BlockPlaceContext;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.MenuProvider;
+import net.minecraft.world.InteractionResult;
+import net.minecraft.world.InteractionHand;
+import net.minecraft.world.Containers;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasyEnchantmentTableGUIMenu;
+import ch.netquick.easysurvival.procedures.EasyEnchantmentTableUpdateTickProcedure;
+import ch.netquick.easysurvival.block.entity.EasyEnchantmentTableBlockEntity;
+
+public class EasyEnchantmentTableBlock extends Block implements EntityBlock {
+ public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
+
+ public EasyEnchantmentTableBlock() {
+ super(BlockBehaviour.Properties.of().sound(SoundType.WOOD).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ protected void createBlockStateDefinition(StateDefinition.Builder builder) {
+ builder.add(FACING);
+ }
+
+ @Override
+ public BlockState getStateForPlacement(BlockPlaceContext context) {
+ return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite());
+ }
+
+ public BlockState rotate(BlockState state, Rotation rot) {
+ return state.setValue(FACING, rot.rotate(state.getValue(FACING)));
+ }
+
+ public BlockState mirror(BlockState state, Mirror mirrorIn) {
+ return state.rotate(mirrorIn.getRotation(state.getValue(FACING)));
+ }
+
+ @Override
+ public float getEnchantPowerBonus(BlockState state, LevelReader world, BlockPos pos) {
+ return 14.5f;
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ EasyEnchantmentTableUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {
+ super.use(blockstate, world, pos, entity, hand, hit);
+ if (entity instanceof ServerPlayer player) {
+ NetworkHooks.openScreen(player, new MenuProvider() {
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Enchantment Table");
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
+ return new EasyEnchantmentTableGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(pos));
+ }
+ }, pos);
+ }
+ return InteractionResult.SUCCESS;
+ }
+
+ @Override
+ public MenuProvider getMenuProvider(BlockState state, Level worldIn, BlockPos pos) {
+ BlockEntity tileEntity = worldIn.getBlockEntity(pos);
+ return tileEntity instanceof MenuProvider menuProvider ? menuProvider : null;
+ }
+
+ @Override
+ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
+ return new EasyEnchantmentTableBlockEntity(pos, state);
+ }
+
+ @Override
+ public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int eventID, int eventParam) {
+ super.triggerEvent(state, world, pos, eventID, eventParam);
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ return blockEntity == null ? false : blockEntity.triggerEvent(eventID, eventParam);
+ }
+
+ @Override
+ public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
+ if (state.getBlock() != newState.getBlock()) {
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ if (blockEntity instanceof EasyEnchantmentTableBlockEntity be) {
+ Containers.dropContents(world, pos, be);
+ world.updateNeighbourForOutputSignal(pos, this);
+ }
+ super.onRemove(state, world, pos, newState, isMoving);
+ }
+ }
+
+ @Override
+ public boolean hasAnalogOutputSignal(BlockState state) {
+ return true;
+ }
+
+ @Override
+ public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) {
+ BlockEntity tileentity = world.getBlockEntity(pos);
+ if (tileentity instanceof EasyEnchantmentTableBlockEntity be)
+ return AbstractContainerMenu.getRedstoneSignalFromContainer(be);
+ else
+ return 0;
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/EasyForgeAutoBlock.java b/src/main/java/ch/netquick/easysurvival/block/EasyForgeAutoBlock.java
new file mode 100644
index 0000000..601f0a2
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/EasyForgeAutoBlock.java
@@ -0,0 +1,178 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraftforge.network.NetworkHooks;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.phys.BlockHitResult;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.properties.DirectionProperty;
+import net.minecraft.world.level.block.state.StateDefinition;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.Rotation;
+import net.minecraft.world.level.block.Mirror;
+import net.minecraft.world.level.block.HorizontalDirectionalBlock;
+import net.minecraft.world.level.block.EntityBlock;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.context.BlockPlaceContext;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.MenuProvider;
+import net.minecraft.world.InteractionResult;
+import net.minecraft.world.InteractionHand;
+import net.minecraft.world.Containers;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasyForgeGUIMenu;
+import ch.netquick.easysurvival.procedures.EasyForgeUpdateTickProcedure;
+import ch.netquick.easysurvival.block.entity.EasyForgeAutoBlockEntity;
+
+public class EasyForgeAutoBlock extends Block implements EntityBlock {
+ public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
+
+ public EasyForgeAutoBlock() {
+ super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.STONE).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ protected void createBlockStateDefinition(StateDefinition.Builder builder) {
+ builder.add(FACING);
+ }
+
+ @Override
+ public BlockState getStateForPlacement(BlockPlaceContext context) {
+ return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite());
+ }
+
+ public BlockState rotate(BlockState state, Rotation rot) {
+ return state.setValue(FACING, rot.rotate(state.getValue(FACING)));
+ }
+
+ public BlockState mirror(BlockState state, Mirror mirrorIn) {
+ return state.rotate(mirrorIn.getRotation(state.getValue(FACING)));
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ EasyForgeUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {
+ super.use(blockstate, world, pos, entity, hand, hit);
+ if (entity instanceof ServerPlayer player) {
+ NetworkHooks.openScreen(player, new MenuProvider() {
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Forge");
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
+ return new EasyForgeGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(pos));
+ }
+ }, pos);
+ }
+ return InteractionResult.SUCCESS;
+ }
+
+ @Override
+ public MenuProvider getMenuProvider(BlockState state, Level worldIn, BlockPos pos) {
+ BlockEntity tileEntity = worldIn.getBlockEntity(pos);
+ return tileEntity instanceof MenuProvider menuProvider ? menuProvider : null;
+ }
+
+ @Override
+ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
+ return new EasyForgeAutoBlockEntity(pos, state);
+ }
+
+ @Override
+ public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int eventID, int eventParam) {
+ super.triggerEvent(state, world, pos, eventID, eventParam);
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ return blockEntity == null ? false : blockEntity.triggerEvent(eventID, eventParam);
+ }
+
+ @Override
+ public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
+ if (state.getBlock() != newState.getBlock()) {
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ if (blockEntity instanceof EasyForgeAutoBlockEntity be) {
+ Containers.dropContents(world, pos, be);
+ world.updateNeighbourForOutputSignal(pos, this);
+ }
+ super.onRemove(state, world, pos, newState, isMoving);
+ }
+ }
+
+ @Override
+ public boolean hasAnalogOutputSignal(BlockState state) {
+ return true;
+ }
+
+ @Override
+ public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) {
+ BlockEntity tileentity = world.getBlockEntity(pos);
+ if (tileentity instanceof EasyForgeAutoBlockEntity be)
+ return AbstractContainerMenu.getRedstoneSignalFromContainer(be);
+ else
+ return 0;
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/EasyForgeBlock.java b/src/main/java/ch/netquick/easysurvival/block/EasyForgeBlock.java
new file mode 100644
index 0000000..b3ad900
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/EasyForgeBlock.java
@@ -0,0 +1,178 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraftforge.network.NetworkHooks;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.phys.BlockHitResult;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.properties.DirectionProperty;
+import net.minecraft.world.level.block.state.StateDefinition;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.Rotation;
+import net.minecraft.world.level.block.Mirror;
+import net.minecraft.world.level.block.HorizontalDirectionalBlock;
+import net.minecraft.world.level.block.EntityBlock;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.context.BlockPlaceContext;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.MenuProvider;
+import net.minecraft.world.InteractionResult;
+import net.minecraft.world.InteractionHand;
+import net.minecraft.world.Containers;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasyForgeGUIMenu;
+import ch.netquick.easysurvival.procedures.EasyForgeUpdateTickProcedure;
+import ch.netquick.easysurvival.block.entity.EasyForgeBlockEntity;
+
+public class EasyForgeBlock extends Block implements EntityBlock {
+ public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
+
+ public EasyForgeBlock() {
+ super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.STONE).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ protected void createBlockStateDefinition(StateDefinition.Builder builder) {
+ builder.add(FACING);
+ }
+
+ @Override
+ public BlockState getStateForPlacement(BlockPlaceContext context) {
+ return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite());
+ }
+
+ public BlockState rotate(BlockState state, Rotation rot) {
+ return state.setValue(FACING, rot.rotate(state.getValue(FACING)));
+ }
+
+ public BlockState mirror(BlockState state, Mirror mirrorIn) {
+ return state.rotate(mirrorIn.getRotation(state.getValue(FACING)));
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ EasyForgeUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {
+ super.use(blockstate, world, pos, entity, hand, hit);
+ if (entity instanceof ServerPlayer player) {
+ NetworkHooks.openScreen(player, new MenuProvider() {
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Forge");
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
+ return new EasyForgeGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(pos));
+ }
+ }, pos);
+ }
+ return InteractionResult.SUCCESS;
+ }
+
+ @Override
+ public MenuProvider getMenuProvider(BlockState state, Level worldIn, BlockPos pos) {
+ BlockEntity tileEntity = worldIn.getBlockEntity(pos);
+ return tileEntity instanceof MenuProvider menuProvider ? menuProvider : null;
+ }
+
+ @Override
+ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
+ return new EasyForgeBlockEntity(pos, state);
+ }
+
+ @Override
+ public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int eventID, int eventParam) {
+ super.triggerEvent(state, world, pos, eventID, eventParam);
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ return blockEntity == null ? false : blockEntity.triggerEvent(eventID, eventParam);
+ }
+
+ @Override
+ public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
+ if (state.getBlock() != newState.getBlock()) {
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ if (blockEntity instanceof EasyForgeBlockEntity be) {
+ Containers.dropContents(world, pos, be);
+ world.updateNeighbourForOutputSignal(pos, this);
+ }
+ super.onRemove(state, world, pos, newState, isMoving);
+ }
+ }
+
+ @Override
+ public boolean hasAnalogOutputSignal(BlockState state) {
+ return true;
+ }
+
+ @Override
+ public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) {
+ BlockEntity tileentity = world.getBlockEntity(pos);
+ if (tileentity instanceof EasyForgeBlockEntity be)
+ return AbstractContainerMenu.getRedstoneSignalFromContainer(be);
+ else
+ return 0;
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/EasyFridgeBlock.java b/src/main/java/ch/netquick/easysurvival/block/EasyFridgeBlock.java
new file mode 100644
index 0000000..4b5a59e
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/EasyFridgeBlock.java
@@ -0,0 +1,177 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraftforge.network.NetworkHooks;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.phys.BlockHitResult;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.DirectionProperty;
+import net.minecraft.world.level.block.state.StateDefinition;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.Rotation;
+import net.minecraft.world.level.block.Mirror;
+import net.minecraft.world.level.block.HorizontalDirectionalBlock;
+import net.minecraft.world.level.block.EntityBlock;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.context.BlockPlaceContext;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.MenuProvider;
+import net.minecraft.world.InteractionResult;
+import net.minecraft.world.InteractionHand;
+import net.minecraft.world.Containers;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasyFridgeGUIMenu;
+import ch.netquick.easysurvival.procedures.EasyFridgeUpdateTickProcedure;
+import ch.netquick.easysurvival.block.entity.EasyFridgeBlockEntity;
+
+public class EasyFridgeBlock extends Block implements EntityBlock {
+ public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
+
+ public EasyFridgeBlock() {
+ super(BlockBehaviour.Properties.of().sound(SoundType.METAL).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ protected void createBlockStateDefinition(StateDefinition.Builder builder) {
+ builder.add(FACING);
+ }
+
+ @Override
+ public BlockState getStateForPlacement(BlockPlaceContext context) {
+ return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite());
+ }
+
+ public BlockState rotate(BlockState state, Rotation rot) {
+ return state.setValue(FACING, rot.rotate(state.getValue(FACING)));
+ }
+
+ public BlockState mirror(BlockState state, Mirror mirrorIn) {
+ return state.rotate(mirrorIn.getRotation(state.getValue(FACING)));
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ EasyFridgeUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {
+ super.use(blockstate, world, pos, entity, hand, hit);
+ if (entity instanceof ServerPlayer player) {
+ NetworkHooks.openScreen(player, new MenuProvider() {
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Fridge");
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
+ return new EasyFridgeGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(pos));
+ }
+ }, pos);
+ }
+ return InteractionResult.SUCCESS;
+ }
+
+ @Override
+ public MenuProvider getMenuProvider(BlockState state, Level worldIn, BlockPos pos) {
+ BlockEntity tileEntity = worldIn.getBlockEntity(pos);
+ return tileEntity instanceof MenuProvider menuProvider ? menuProvider : null;
+ }
+
+ @Override
+ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
+ return new EasyFridgeBlockEntity(pos, state);
+ }
+
+ @Override
+ public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int eventID, int eventParam) {
+ super.triggerEvent(state, world, pos, eventID, eventParam);
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ return blockEntity == null ? false : blockEntity.triggerEvent(eventID, eventParam);
+ }
+
+ @Override
+ public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
+ if (state.getBlock() != newState.getBlock()) {
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ if (blockEntity instanceof EasyFridgeBlockEntity be) {
+ Containers.dropContents(world, pos, be);
+ world.updateNeighbourForOutputSignal(pos, this);
+ }
+ super.onRemove(state, world, pos, newState, isMoving);
+ }
+ }
+
+ @Override
+ public boolean hasAnalogOutputSignal(BlockState state) {
+ return true;
+ }
+
+ @Override
+ public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) {
+ BlockEntity tileentity = world.getBlockEntity(pos);
+ if (tileentity instanceof EasyFridgeBlockEntity be)
+ return AbstractContainerMenu.getRedstoneSignalFromContainer(be);
+ else
+ return 0;
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/EasyIntakeBlock.java b/src/main/java/ch/netquick/easysurvival/block/EasyIntakeBlock.java
new file mode 100644
index 0000000..7a4b72e
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/EasyIntakeBlock.java
@@ -0,0 +1,168 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraftforge.network.NetworkHooks;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.phys.BlockHitResult;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.properties.DirectionProperty;
+import net.minecraft.world.level.block.state.StateDefinition;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.Rotation;
+import net.minecraft.world.level.block.Mirror;
+import net.minecraft.world.level.block.EntityBlock;
+import net.minecraft.world.level.block.DirectionalBlock;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.context.BlockPlaceContext;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.MenuProvider;
+import net.minecraft.world.InteractionResult;
+import net.minecraft.world.InteractionHand;
+import net.minecraft.world.Containers;
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasyIntakeGUIMenu;
+import ch.netquick.easysurvival.procedures.EasyIntakeOnBlockRightClickedProcedure;
+import ch.netquick.easysurvival.block.entity.EasyIntakeBlockEntity;
+
+public class EasyIntakeBlock extends Block implements EntityBlock {
+ public static final DirectionProperty FACING = DirectionalBlock.FACING;
+
+ public EasyIntakeBlock() {
+ super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.GRAVEL).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ protected void createBlockStateDefinition(StateDefinition.Builder builder) {
+ builder.add(FACING);
+ }
+
+ @Override
+ public BlockState getStateForPlacement(BlockPlaceContext context) {
+ return this.defaultBlockState().setValue(FACING, context.getNearestLookingDirection().getOpposite());
+ }
+
+ public BlockState rotate(BlockState state, Rotation rot) {
+ return state.setValue(FACING, rot.rotate(state.getValue(FACING)));
+ }
+
+ public BlockState mirror(BlockState state, Mirror mirrorIn) {
+ return state.rotate(mirrorIn.getRotation(state.getValue(FACING)));
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {
+ super.use(blockstate, world, pos, entity, hand, hit);
+ if (entity instanceof ServerPlayer player) {
+ NetworkHooks.openScreen(player, new MenuProvider() {
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Intake");
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
+ return new EasyIntakeGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(pos));
+ }
+ }, pos);
+ }
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ double hitX = hit.getLocation().x;
+ double hitY = hit.getLocation().y;
+ double hitZ = hit.getLocation().z;
+ Direction direction = hit.getDirection();
+ EasyIntakeOnBlockRightClickedProcedure.execute(world, x, y, z, entity);
+ return InteractionResult.SUCCESS;
+ }
+
+ @Override
+ public MenuProvider getMenuProvider(BlockState state, Level worldIn, BlockPos pos) {
+ BlockEntity tileEntity = worldIn.getBlockEntity(pos);
+ return tileEntity instanceof MenuProvider menuProvider ? menuProvider : null;
+ }
+
+ @Override
+ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
+ return new EasyIntakeBlockEntity(pos, state);
+ }
+
+ @Override
+ public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int eventID, int eventParam) {
+ super.triggerEvent(state, world, pos, eventID, eventParam);
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ return blockEntity == null ? false : blockEntity.triggerEvent(eventID, eventParam);
+ }
+
+ @Override
+ public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
+ if (state.getBlock() != newState.getBlock()) {
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ if (blockEntity instanceof EasyIntakeBlockEntity be) {
+ Containers.dropContents(world, pos, be);
+ world.updateNeighbourForOutputSignal(pos, this);
+ }
+ super.onRemove(state, world, pos, newState, isMoving);
+ }
+ }
+
+ @Override
+ public boolean hasAnalogOutputSignal(BlockState state) {
+ return true;
+ }
+
+ @Override
+ public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) {
+ BlockEntity tileentity = world.getBlockEntity(pos);
+ if (tileentity instanceof EasyIntakeBlockEntity be)
+ return AbstractContainerMenu.getRedstoneSignalFromContainer(be);
+ else
+ return 0;
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/EasySawBlock.java b/src/main/java/ch/netquick/easysurvival/block/EasySawBlock.java
new file mode 100644
index 0000000..34fa725
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/EasySawBlock.java
@@ -0,0 +1,150 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraftforge.network.NetworkHooks;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.phys.BlockHitResult;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.EntityBlock;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.MenuProvider;
+import net.minecraft.world.InteractionResult;
+import net.minecraft.world.InteractionHand;
+import net.minecraft.world.Containers;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasySawGUIMenu;
+import ch.netquick.easysurvival.procedures.EasySawUpdateTickProcedure;
+import ch.netquick.easysurvival.block.entity.EasySawBlockEntity;
+
+public class EasySawBlock extends Block implements EntityBlock {
+ public EasySawBlock() {
+ super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.GRAVEL).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ EasySawUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {
+ super.use(blockstate, world, pos, entity, hand, hit);
+ if (entity instanceof ServerPlayer player) {
+ NetworkHooks.openScreen(player, new MenuProvider() {
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Saw");
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
+ return new EasySawGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(pos));
+ }
+ }, pos);
+ }
+ return InteractionResult.SUCCESS;
+ }
+
+ @Override
+ public MenuProvider getMenuProvider(BlockState state, Level worldIn, BlockPos pos) {
+ BlockEntity tileEntity = worldIn.getBlockEntity(pos);
+ return tileEntity instanceof MenuProvider menuProvider ? menuProvider : null;
+ }
+
+ @Override
+ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
+ return new EasySawBlockEntity(pos, state);
+ }
+
+ @Override
+ public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int eventID, int eventParam) {
+ super.triggerEvent(state, world, pos, eventID, eventParam);
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ return blockEntity == null ? false : blockEntity.triggerEvent(eventID, eventParam);
+ }
+
+ @Override
+ public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
+ if (state.getBlock() != newState.getBlock()) {
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ if (blockEntity instanceof EasySawBlockEntity be) {
+ Containers.dropContents(world, pos, be);
+ world.updateNeighbourForOutputSignal(pos, this);
+ }
+ super.onRemove(state, world, pos, newState, isMoving);
+ }
+ }
+
+ @Override
+ public boolean hasAnalogOutputSignal(BlockState state) {
+ return true;
+ }
+
+ @Override
+ public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) {
+ BlockEntity tileentity = world.getBlockEntity(pos);
+ if (tileentity instanceof EasySawBlockEntity be)
+ return AbstractContainerMenu.getRedstoneSignalFromContainer(be);
+ else
+ return 0;
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/EasySmelterBlock.java b/src/main/java/ch/netquick/easysurvival/block/EasySmelterBlock.java
new file mode 100644
index 0000000..97d6356
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/EasySmelterBlock.java
@@ -0,0 +1,178 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraftforge.network.NetworkHooks;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.phys.BlockHitResult;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.properties.DirectionProperty;
+import net.minecraft.world.level.block.state.StateDefinition;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.Rotation;
+import net.minecraft.world.level.block.Mirror;
+import net.minecraft.world.level.block.HorizontalDirectionalBlock;
+import net.minecraft.world.level.block.EntityBlock;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.context.BlockPlaceContext;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.MenuProvider;
+import net.minecraft.world.InteractionResult;
+import net.minecraft.world.InteractionHand;
+import net.minecraft.world.Containers;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasySmelterGUIMenu;
+import ch.netquick.easysurvival.procedures.EasySmelterUpdateTickProcedure;
+import ch.netquick.easysurvival.block.entity.EasySmelterBlockEntity;
+
+public class EasySmelterBlock extends Block implements EntityBlock {
+ public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
+
+ public EasySmelterBlock() {
+ super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.GRAVEL).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ protected void createBlockStateDefinition(StateDefinition.Builder builder) {
+ builder.add(FACING);
+ }
+
+ @Override
+ public BlockState getStateForPlacement(BlockPlaceContext context) {
+ return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite());
+ }
+
+ public BlockState rotate(BlockState state, Rotation rot) {
+ return state.setValue(FACING, rot.rotate(state.getValue(FACING)));
+ }
+
+ public BlockState mirror(BlockState state, Mirror mirrorIn) {
+ return state.rotate(mirrorIn.getRotation(state.getValue(FACING)));
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ EasySmelterUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 10);
+ }
+
+ @Override
+ public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {
+ super.use(blockstate, world, pos, entity, hand, hit);
+ if (entity instanceof ServerPlayer player) {
+ NetworkHooks.openScreen(player, new MenuProvider() {
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Smelter");
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
+ return new EasySmelterGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(pos));
+ }
+ }, pos);
+ }
+ return InteractionResult.SUCCESS;
+ }
+
+ @Override
+ public MenuProvider getMenuProvider(BlockState state, Level worldIn, BlockPos pos) {
+ BlockEntity tileEntity = worldIn.getBlockEntity(pos);
+ return tileEntity instanceof MenuProvider menuProvider ? menuProvider : null;
+ }
+
+ @Override
+ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
+ return new EasySmelterBlockEntity(pos, state);
+ }
+
+ @Override
+ public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int eventID, int eventParam) {
+ super.triggerEvent(state, world, pos, eventID, eventParam);
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ return blockEntity == null ? false : blockEntity.triggerEvent(eventID, eventParam);
+ }
+
+ @Override
+ public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
+ if (state.getBlock() != newState.getBlock()) {
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ if (blockEntity instanceof EasySmelterBlockEntity be) {
+ Containers.dropContents(world, pos, be);
+ world.updateNeighbourForOutputSignal(pos, this);
+ }
+ super.onRemove(state, world, pos, newState, isMoving);
+ }
+ }
+
+ @Override
+ public boolean hasAnalogOutputSignal(BlockState state) {
+ return true;
+ }
+
+ @Override
+ public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) {
+ BlockEntity tileentity = world.getBlockEntity(pos);
+ if (tileentity instanceof EasySmelterBlockEntity be)
+ return AbstractContainerMenu.getRedstoneSignalFromContainer(be);
+ else
+ return 0;
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/SpawnerBlazeBlock.java b/src/main/java/ch/netquick/easysurvival/block/SpawnerBlazeBlock.java
new file mode 100644
index 0000000..8789958
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/SpawnerBlazeBlock.java
@@ -0,0 +1,68 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import ch.netquick.easysurvival.procedures.SpawnerBlazeUpdateTickProcedure;
+
+public class SpawnerBlazeBlock extends Block {
+ public SpawnerBlazeBlock() {
+ super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.GRAVEL).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 100);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ SpawnerBlazeUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 100);
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/SpawnerCreeperBlock.java b/src/main/java/ch/netquick/easysurvival/block/SpawnerCreeperBlock.java
new file mode 100644
index 0000000..30eeffa
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/SpawnerCreeperBlock.java
@@ -0,0 +1,68 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import ch.netquick.easysurvival.procedures.SpawnerCreeperUpdateTickProcedure;
+
+public class SpawnerCreeperBlock extends Block {
+ public SpawnerCreeperBlock() {
+ super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.GRAVEL).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 100);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ SpawnerCreeperUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 100);
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/SpawnerEvokerBlock.java b/src/main/java/ch/netquick/easysurvival/block/SpawnerEvokerBlock.java
new file mode 100644
index 0000000..d6d16c1
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/SpawnerEvokerBlock.java
@@ -0,0 +1,68 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import ch.netquick.easysurvival.procedures.SpawnerEvokerUpdateTickProcedure;
+
+public class SpawnerEvokerBlock extends Block {
+ public SpawnerEvokerBlock() {
+ super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.GRAVEL).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 100);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ SpawnerEvokerUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 100);
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/SpawnerGhastBlock.java b/src/main/java/ch/netquick/easysurvival/block/SpawnerGhastBlock.java
new file mode 100644
index 0000000..fd46396
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/SpawnerGhastBlock.java
@@ -0,0 +1,68 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import ch.netquick.easysurvival.procedures.SpawnerGhastUpdateTickProcedure;
+
+public class SpawnerGhastBlock extends Block {
+ public SpawnerGhastBlock() {
+ super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.GRAVEL).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 100);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ SpawnerGhastUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 100);
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/SpawnerPillagerBlock.java b/src/main/java/ch/netquick/easysurvival/block/SpawnerPillagerBlock.java
new file mode 100644
index 0000000..d53d5e4
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/SpawnerPillagerBlock.java
@@ -0,0 +1,68 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import ch.netquick.easysurvival.procedures.SpawnerPillagerUpdateTickProcedure;
+
+public class SpawnerPillagerBlock extends Block {
+ public SpawnerPillagerBlock() {
+ super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.GRAVEL).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 100);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ SpawnerPillagerUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 100);
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/SpawnerSlimeBlock.java b/src/main/java/ch/netquick/easysurvival/block/SpawnerSlimeBlock.java
new file mode 100644
index 0000000..d57d86f
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/SpawnerSlimeBlock.java
@@ -0,0 +1,68 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import ch.netquick.easysurvival.procedures.SpawnerSlimeUpdateTickProcedure;
+
+public class SpawnerSlimeBlock extends Block {
+ public SpawnerSlimeBlock() {
+ super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.GRAVEL).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 100);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ SpawnerSlimeUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 100);
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/SpawnerWitherSkelettBlock.java b/src/main/java/ch/netquick/easysurvival/block/SpawnerWitherSkelettBlock.java
new file mode 100644
index 0000000..5b3f4ac
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/SpawnerWitherSkelettBlock.java
@@ -0,0 +1,68 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import ch.netquick.easysurvival.procedures.SpawnerWitherSkelettUpdateTickProcedure;
+
+public class SpawnerWitherSkelettBlock extends Block {
+ public SpawnerWitherSkelettBlock() {
+ super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.GRAVEL).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 100);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ SpawnerWitherSkelettUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 100);
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/TeleporterPlateBlock.java b/src/main/java/ch/netquick/easysurvival/block/TeleporterPlateBlock.java
new file mode 100644
index 0000000..91dedab
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/TeleporterPlateBlock.java
@@ -0,0 +1,118 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.phys.BlockHitResult;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.EntityBlock;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.MenuProvider;
+import net.minecraft.world.InteractionResult;
+import net.minecraft.world.InteractionHand;
+import net.minecraft.world.Containers;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import ch.netquick.easysurvival.procedures.TeleporterProcProcedure;
+import ch.netquick.easysurvival.block.entity.TeleporterPlateBlockEntity;
+
+public class TeleporterPlateBlock extends Block implements EntityBlock {
+ public TeleporterPlateBlock() {
+ super(BlockBehaviour.Properties.of().sound(SoundType.ANVIL).strength(1f, 10f).noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {
+ super.use(blockstate, world, pos, entity, hand, hit);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ double hitX = hit.getLocation().x;
+ double hitY = hit.getLocation().y;
+ double hitZ = hit.getLocation().z;
+ Direction direction = hit.getDirection();
+ TeleporterProcProcedure.execute(world, x, y, z, entity);
+ return InteractionResult.SUCCESS;
+ }
+
+ @Override
+ public MenuProvider getMenuProvider(BlockState state, Level worldIn, BlockPos pos) {
+ BlockEntity tileEntity = worldIn.getBlockEntity(pos);
+ return tileEntity instanceof MenuProvider menuProvider ? menuProvider : null;
+ }
+
+ @Override
+ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
+ return new TeleporterPlateBlockEntity(pos, state);
+ }
+
+ @Override
+ public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int eventID, int eventParam) {
+ super.triggerEvent(state, world, pos, eventID, eventParam);
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ return blockEntity == null ? false : blockEntity.triggerEvent(eventID, eventParam);
+ }
+
+ @Override
+ public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
+ if (state.getBlock() != newState.getBlock()) {
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ if (blockEntity instanceof TeleporterPlateBlockEntity be) {
+ Containers.dropContents(world, pos, be);
+ world.updateNeighbourForOutputSignal(pos, this);
+ }
+ super.onRemove(state, world, pos, newState, isMoving);
+ }
+ }
+
+ @Override
+ public boolean hasAnalogOutputSignal(BlockState state) {
+ return true;
+ }
+
+ @Override
+ public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) {
+ BlockEntity tileentity = world.getBlockEntity(pos);
+ if (tileentity instanceof TeleporterPlateBlockEntity be)
+ return AbstractContainerMenu.getRedstoneSignalFromContainer(be);
+ else
+ return 0;
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/TreeCropBlock.java b/src/main/java/ch/netquick/easysurvival/block/TreeCropBlock.java
new file mode 100644
index 0000000..c5ea05b
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/TreeCropBlock.java
@@ -0,0 +1,158 @@
+
+package ch.netquick.easysurvival.block;
+
+import net.minecraftforge.network.NetworkHooks;
+
+import net.minecraft.world.phys.shapes.VoxelShape;
+import net.minecraft.world.phys.shapes.Shapes;
+import net.minecraft.world.phys.shapes.CollisionContext;
+import net.minecraft.world.phys.BlockHitResult;
+import net.minecraft.world.level.storage.loot.LootParams;
+import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.world.level.block.SoundType;
+import net.minecraft.world.level.block.EntityBlock;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.BlockGetter;
+import net.minecraft.world.item.PickaxeItem;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.MenuProvider;
+import net.minecraft.world.InteractionResult;
+import net.minecraft.world.InteractionHand;
+import net.minecraft.world.Containers;
+import net.minecraft.util.RandomSource;
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.core.BlockPos;
+
+import java.util.List;
+import java.util.Collections;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.TreeCropGUIMenu;
+import ch.netquick.easysurvival.procedures.TreeCropUpdateTickProcedure;
+import ch.netquick.easysurvival.block.entity.TreeCropBlockEntity;
+
+public class TreeCropBlock extends Block implements EntityBlock {
+ public TreeCropBlock() {
+ super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.GRAVEL).strength(1f, 10f).requiresCorrectToolForDrops().noOcclusion().isRedstoneConductor((bs, br, bp) -> false));
+ }
+
+ @Override
+ public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
+ return true;
+ }
+
+ @Override
+ public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
+ return 0;
+ }
+
+ @Override
+ public VoxelShape getVisualShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
+ return Shapes.empty();
+ }
+
+ @Override
+ public boolean canHarvestBlock(BlockState state, BlockGetter world, BlockPos pos, Player player) {
+ if (player.getInventory().getSelected().getItem() instanceof PickaxeItem tieredItem)
+ return tieredItem.getTier().getLevel() >= 1;
+ return false;
+ }
+
+ @Override
+ public List getDrops(BlockState state, LootParams.Builder builder) {
+ List dropsOriginal = super.getDrops(state, builder);
+ if (!dropsOriginal.isEmpty())
+ return dropsOriginal;
+ return Collections.singletonList(new ItemStack(this, 1));
+ }
+
+ @Override
+ public void onPlace(BlockState blockstate, Level world, BlockPos pos, BlockState oldState, boolean moving) {
+ super.onPlace(blockstate, world, pos, oldState, moving);
+ world.scheduleTick(pos, this, 25);
+ }
+
+ @Override
+ public void tick(BlockState blockstate, ServerLevel world, BlockPos pos, RandomSource random) {
+ super.tick(blockstate, world, pos, random);
+ int x = pos.getX();
+ int y = pos.getY();
+ int z = pos.getZ();
+ TreeCropUpdateTickProcedure.execute(world, x, y, z);
+ world.scheduleTick(pos, this, 25);
+ }
+
+ @Override
+ public InteractionResult use(BlockState blockstate, Level world, BlockPos pos, Player entity, InteractionHand hand, BlockHitResult hit) {
+ super.use(blockstate, world, pos, entity, hand, hit);
+ if (entity instanceof ServerPlayer player) {
+ NetworkHooks.openScreen(player, new MenuProvider() {
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Tree Crop");
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) {
+ return new TreeCropGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(pos));
+ }
+ }, pos);
+ }
+ return InteractionResult.SUCCESS;
+ }
+
+ @Override
+ public MenuProvider getMenuProvider(BlockState state, Level worldIn, BlockPos pos) {
+ BlockEntity tileEntity = worldIn.getBlockEntity(pos);
+ return tileEntity instanceof MenuProvider menuProvider ? menuProvider : null;
+ }
+
+ @Override
+ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
+ return new TreeCropBlockEntity(pos, state);
+ }
+
+ @Override
+ public boolean triggerEvent(BlockState state, Level world, BlockPos pos, int eventID, int eventParam) {
+ super.triggerEvent(state, world, pos, eventID, eventParam);
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ return blockEntity == null ? false : blockEntity.triggerEvent(eventID, eventParam);
+ }
+
+ @Override
+ public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) {
+ if (state.getBlock() != newState.getBlock()) {
+ BlockEntity blockEntity = world.getBlockEntity(pos);
+ if (blockEntity instanceof TreeCropBlockEntity be) {
+ Containers.dropContents(world, pos, be);
+ world.updateNeighbourForOutputSignal(pos, this);
+ }
+ super.onRemove(state, world, pos, newState, isMoving);
+ }
+ }
+
+ @Override
+ public boolean hasAnalogOutputSignal(BlockState state) {
+ return true;
+ }
+
+ @Override
+ public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) {
+ BlockEntity tileentity = world.getBlockEntity(pos);
+ if (tileentity instanceof TreeCropBlockEntity be)
+ return AbstractContainerMenu.getRedstoneSignalFromContainer(be);
+ else
+ return 0;
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/entity/CropBlockEntity.java b/src/main/java/ch/netquick/easysurvival/block/entity/CropBlockEntity.java
new file mode 100644
index 0000000..1ad9e70
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/entity/CropBlockEntity.java
@@ -0,0 +1,159 @@
+package ch.netquick.easysurvival.block.entity;
+
+import net.minecraftforge.items.wrapper.SidedInvWrapper;
+import net.minecraftforge.items.IItemHandler;
+import net.minecraftforge.common.util.LazyOptional;
+import net.minecraftforge.common.capabilities.ForgeCapabilities;
+import net.minecraftforge.common.capabilities.Capability;
+
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.WorldlyContainer;
+import net.minecraft.world.ContainerHelper;
+import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.core.NonNullList;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import javax.annotation.Nullable;
+
+import java.util.stream.IntStream;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.CropGUIMenu;
+import ch.netquick.easysurvival.init.EasysurvivalModBlockEntities;
+
+public class CropBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
+ private NonNullList stacks = NonNullList.withSize(8, ItemStack.EMPTY);
+ private final LazyOptional extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
+
+ public CropBlockEntity(BlockPos position, BlockState state) {
+ super(EasysurvivalModBlockEntities.CROP.get(), position, state);
+ }
+
+ @Override
+ public void load(CompoundTag compound) {
+ super.load(compound);
+ if (!this.tryLoadLootTable(compound))
+ this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
+ ContainerHelper.loadAllItems(compound, this.stacks);
+ }
+
+ @Override
+ public void saveAdditional(CompoundTag compound) {
+ super.saveAdditional(compound);
+ if (!this.trySaveLootTable(compound)) {
+ ContainerHelper.saveAllItems(compound, this.stacks);
+ }
+ }
+
+ @Override
+ public ClientboundBlockEntityDataPacket getUpdatePacket() {
+ return ClientboundBlockEntityDataPacket.create(this);
+ }
+
+ @Override
+ public CompoundTag getUpdateTag() {
+ return this.saveWithFullMetadata();
+ }
+
+ @Override
+ public int getContainerSize() {
+ return stacks.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ for (ItemStack itemstack : this.stacks)
+ if (!itemstack.isEmpty())
+ return false;
+ return true;
+ }
+
+ @Override
+ public Component getDefaultName() {
+ return Component.literal("crop");
+ }
+
+ @Override
+ public int getMaxStackSize() {
+ return 64;
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory) {
+ return new CropGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(this.worldPosition));
+ }
+
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Crop");
+ }
+
+ @Override
+ protected NonNullList getItems() {
+ return this.stacks;
+ }
+
+ @Override
+ protected void setItems(NonNullList stacks) {
+ this.stacks = stacks;
+ }
+
+ @Override
+ public boolean canPlaceItem(int index, ItemStack stack) {
+ if (index == 1)
+ return false;
+ if (index == 2)
+ return false;
+ if (index == 3)
+ return false;
+ if (index == 4)
+ return false;
+ if (index == 5)
+ return false;
+ if (index == 6)
+ return false;
+ if (index == 7)
+ return false;
+ return true;
+ }
+
+ @Override
+ public int[] getSlotsForFace(Direction side) {
+ return IntStream.range(0, this.getContainerSize()).toArray();
+ }
+
+ @Override
+ public boolean canPlaceItemThroughFace(int index, ItemStack stack, @Nullable Direction direction) {
+ return this.canPlaceItem(index, stack);
+ }
+
+ @Override
+ public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) {
+ if (index == 0)
+ return false;
+ return true;
+ }
+
+ @Override
+ public LazyOptional getCapability(Capability capability, @Nullable Direction facing) {
+ if (!this.remove && facing != null && capability == ForgeCapabilities.ITEM_HANDLER)
+ return handlers[facing.ordinal()].cast();
+ return super.getCapability(capability, facing);
+ }
+
+ @Override
+ public void setRemoved() {
+ super.setRemoved();
+ for (LazyOptional extends IItemHandler> handler : handlers)
+ handler.invalidate();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/entity/EasyAnvilBlockEntity.java b/src/main/java/ch/netquick/easysurvival/block/entity/EasyAnvilBlockEntity.java
new file mode 100644
index 0000000..e8db23b
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/entity/EasyAnvilBlockEntity.java
@@ -0,0 +1,145 @@
+package ch.netquick.easysurvival.block.entity;
+
+import net.minecraftforge.items.wrapper.SidedInvWrapper;
+import net.minecraftforge.items.IItemHandler;
+import net.minecraftforge.common.util.LazyOptional;
+import net.minecraftforge.common.capabilities.ForgeCapabilities;
+import net.minecraftforge.common.capabilities.Capability;
+
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.WorldlyContainer;
+import net.minecraft.world.ContainerHelper;
+import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.core.NonNullList;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import javax.annotation.Nullable;
+
+import java.util.stream.IntStream;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasyAnvilGUIMenu;
+import ch.netquick.easysurvival.init.EasysurvivalModBlockEntities;
+
+public class EasyAnvilBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
+ private NonNullList stacks = NonNullList.withSize(3, ItemStack.EMPTY);
+ private final LazyOptional extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
+
+ public EasyAnvilBlockEntity(BlockPos position, BlockState state) {
+ super(EasysurvivalModBlockEntities.EASY_ANVIL.get(), position, state);
+ }
+
+ @Override
+ public void load(CompoundTag compound) {
+ super.load(compound);
+ if (!this.tryLoadLootTable(compound))
+ this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
+ ContainerHelper.loadAllItems(compound, this.stacks);
+ }
+
+ @Override
+ public void saveAdditional(CompoundTag compound) {
+ super.saveAdditional(compound);
+ if (!this.trySaveLootTable(compound)) {
+ ContainerHelper.saveAllItems(compound, this.stacks);
+ }
+ }
+
+ @Override
+ public ClientboundBlockEntityDataPacket getUpdatePacket() {
+ return ClientboundBlockEntityDataPacket.create(this);
+ }
+
+ @Override
+ public CompoundTag getUpdateTag() {
+ return this.saveWithFullMetadata();
+ }
+
+ @Override
+ public int getContainerSize() {
+ return stacks.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ for (ItemStack itemstack : this.stacks)
+ if (!itemstack.isEmpty())
+ return false;
+ return true;
+ }
+
+ @Override
+ public Component getDefaultName() {
+ return Component.literal("easy_anvil");
+ }
+
+ @Override
+ public int getMaxStackSize() {
+ return 64;
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory) {
+ return new EasyAnvilGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(this.worldPosition));
+ }
+
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Anvil");
+ }
+
+ @Override
+ protected NonNullList getItems() {
+ return this.stacks;
+ }
+
+ @Override
+ protected void setItems(NonNullList stacks) {
+ this.stacks = stacks;
+ }
+
+ @Override
+ public boolean canPlaceItem(int index, ItemStack stack) {
+ if (index == 2)
+ return false;
+ return true;
+ }
+
+ @Override
+ public int[] getSlotsForFace(Direction side) {
+ return IntStream.range(0, this.getContainerSize()).toArray();
+ }
+
+ @Override
+ public boolean canPlaceItemThroughFace(int index, ItemStack stack, @Nullable Direction direction) {
+ return this.canPlaceItem(index, stack);
+ }
+
+ @Override
+ public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) {
+ return true;
+ }
+
+ @Override
+ public LazyOptional getCapability(Capability capability, @Nullable Direction facing) {
+ if (!this.remove && facing != null && capability == ForgeCapabilities.ITEM_HANDLER)
+ return handlers[facing.ordinal()].cast();
+ return super.getCapability(capability, facing);
+ }
+
+ @Override
+ public void setRemoved() {
+ super.setRemoved();
+ for (LazyOptional extends IItemHandler> handler : handlers)
+ handler.invalidate();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/entity/EasyConverterBlockEntity.java b/src/main/java/ch/netquick/easysurvival/block/entity/EasyConverterBlockEntity.java
new file mode 100644
index 0000000..e47ee5e
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/entity/EasyConverterBlockEntity.java
@@ -0,0 +1,147 @@
+package ch.netquick.easysurvival.block.entity;
+
+import net.minecraftforge.items.wrapper.SidedInvWrapper;
+import net.minecraftforge.items.IItemHandler;
+import net.minecraftforge.common.util.LazyOptional;
+import net.minecraftforge.common.capabilities.ForgeCapabilities;
+import net.minecraftforge.common.capabilities.Capability;
+
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.WorldlyContainer;
+import net.minecraft.world.ContainerHelper;
+import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.core.NonNullList;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import javax.annotation.Nullable;
+
+import java.util.stream.IntStream;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasyConverterGUIMenu;
+import ch.netquick.easysurvival.init.EasysurvivalModBlockEntities;
+
+public class EasyConverterBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
+ private NonNullList stacks = NonNullList.withSize(2, ItemStack.EMPTY);
+ private final LazyOptional extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
+
+ public EasyConverterBlockEntity(BlockPos position, BlockState state) {
+ super(EasysurvivalModBlockEntities.EASY_CONVERTER.get(), position, state);
+ }
+
+ @Override
+ public void load(CompoundTag compound) {
+ super.load(compound);
+ if (!this.tryLoadLootTable(compound))
+ this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
+ ContainerHelper.loadAllItems(compound, this.stacks);
+ }
+
+ @Override
+ public void saveAdditional(CompoundTag compound) {
+ super.saveAdditional(compound);
+ if (!this.trySaveLootTable(compound)) {
+ ContainerHelper.saveAllItems(compound, this.stacks);
+ }
+ }
+
+ @Override
+ public ClientboundBlockEntityDataPacket getUpdatePacket() {
+ return ClientboundBlockEntityDataPacket.create(this);
+ }
+
+ @Override
+ public CompoundTag getUpdateTag() {
+ return this.saveWithFullMetadata();
+ }
+
+ @Override
+ public int getContainerSize() {
+ return stacks.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ for (ItemStack itemstack : this.stacks)
+ if (!itemstack.isEmpty())
+ return false;
+ return true;
+ }
+
+ @Override
+ public Component getDefaultName() {
+ return Component.literal("easy_converter");
+ }
+
+ @Override
+ public int getMaxStackSize() {
+ return 64;
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory) {
+ return new EasyConverterGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(this.worldPosition));
+ }
+
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Converter");
+ }
+
+ @Override
+ protected NonNullList getItems() {
+ return this.stacks;
+ }
+
+ @Override
+ protected void setItems(NonNullList stacks) {
+ this.stacks = stacks;
+ }
+
+ @Override
+ public boolean canPlaceItem(int index, ItemStack stack) {
+ if (index == 1)
+ return false;
+ return true;
+ }
+
+ @Override
+ public int[] getSlotsForFace(Direction side) {
+ return IntStream.range(0, this.getContainerSize()).toArray();
+ }
+
+ @Override
+ public boolean canPlaceItemThroughFace(int index, ItemStack stack, @Nullable Direction direction) {
+ return this.canPlaceItem(index, stack);
+ }
+
+ @Override
+ public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) {
+ if (index == 0)
+ return false;
+ return true;
+ }
+
+ @Override
+ public LazyOptional getCapability(Capability capability, @Nullable Direction facing) {
+ if (!this.remove && facing != null && capability == ForgeCapabilities.ITEM_HANDLER)
+ return handlers[facing.ordinal()].cast();
+ return super.getCapability(capability, facing);
+ }
+
+ @Override
+ public void setRemoved() {
+ super.setRemoved();
+ for (LazyOptional extends IItemHandler> handler : handlers)
+ handler.invalidate();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/entity/EasyEnchantmentTableBlockEntity.java b/src/main/java/ch/netquick/easysurvival/block/entity/EasyEnchantmentTableBlockEntity.java
new file mode 100644
index 0000000..0cdec03
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/entity/EasyEnchantmentTableBlockEntity.java
@@ -0,0 +1,161 @@
+package ch.netquick.easysurvival.block.entity;
+
+import net.minecraftforge.items.wrapper.SidedInvWrapper;
+import net.minecraftforge.items.IItemHandler;
+import net.minecraftforge.common.util.LazyOptional;
+import net.minecraftforge.common.capabilities.ForgeCapabilities;
+import net.minecraftforge.common.capabilities.Capability;
+
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.WorldlyContainer;
+import net.minecraft.world.ContainerHelper;
+import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.core.NonNullList;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import javax.annotation.Nullable;
+
+import java.util.stream.IntStream;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasyEnchantmentTableGUIMenu;
+import ch.netquick.easysurvival.init.EasysurvivalModBlockEntities;
+
+public class EasyEnchantmentTableBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
+ private NonNullList stacks = NonNullList.withSize(11, ItemStack.EMPTY);
+ private final LazyOptional extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
+
+ public EasyEnchantmentTableBlockEntity(BlockPos position, BlockState state) {
+ super(EasysurvivalModBlockEntities.EASY_ENCHANTMENT_TABLE.get(), position, state);
+ }
+
+ @Override
+ public void load(CompoundTag compound) {
+ super.load(compound);
+ if (!this.tryLoadLootTable(compound))
+ this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
+ ContainerHelper.loadAllItems(compound, this.stacks);
+ }
+
+ @Override
+ public void saveAdditional(CompoundTag compound) {
+ super.saveAdditional(compound);
+ if (!this.trySaveLootTable(compound)) {
+ ContainerHelper.saveAllItems(compound, this.stacks);
+ }
+ }
+
+ @Override
+ public ClientboundBlockEntityDataPacket getUpdatePacket() {
+ return ClientboundBlockEntityDataPacket.create(this);
+ }
+
+ @Override
+ public CompoundTag getUpdateTag() {
+ return this.saveWithFullMetadata();
+ }
+
+ @Override
+ public int getContainerSize() {
+ return stacks.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ for (ItemStack itemstack : this.stacks)
+ if (!itemstack.isEmpty())
+ return false;
+ return true;
+ }
+
+ @Override
+ public Component getDefaultName() {
+ return Component.literal("easy_enchantment_table");
+ }
+
+ @Override
+ public int getMaxStackSize() {
+ return 64;
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory) {
+ return new EasyEnchantmentTableGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(this.worldPosition));
+ }
+
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Enchantment Table");
+ }
+
+ @Override
+ protected NonNullList getItems() {
+ return this.stacks;
+ }
+
+ @Override
+ protected void setItems(NonNullList stacks) {
+ this.stacks = stacks;
+ }
+
+ @Override
+ public boolean canPlaceItem(int index, ItemStack stack) {
+ if (index == 1)
+ return false;
+ if (index == 2)
+ return false;
+ if (index == 3)
+ return false;
+ if (index == 4)
+ return false;
+ if (index == 5)
+ return false;
+ if (index == 6)
+ return false;
+ if (index == 7)
+ return false;
+ if (index == 8)
+ return false;
+ if (index == 9)
+ return false;
+ return true;
+ }
+
+ @Override
+ public int[] getSlotsForFace(Direction side) {
+ return IntStream.range(0, this.getContainerSize()).toArray();
+ }
+
+ @Override
+ public boolean canPlaceItemThroughFace(int index, ItemStack stack, @Nullable Direction direction) {
+ return this.canPlaceItem(index, stack);
+ }
+
+ @Override
+ public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) {
+ return true;
+ }
+
+ @Override
+ public LazyOptional getCapability(Capability capability, @Nullable Direction facing) {
+ if (!this.remove && facing != null && capability == ForgeCapabilities.ITEM_HANDLER)
+ return handlers[facing.ordinal()].cast();
+ return super.getCapability(capability, facing);
+ }
+
+ @Override
+ public void setRemoved() {
+ super.setRemoved();
+ for (LazyOptional extends IItemHandler> handler : handlers)
+ handler.invalidate();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/entity/EasyForgeAutoBlockEntity.java b/src/main/java/ch/netquick/easysurvival/block/entity/EasyForgeAutoBlockEntity.java
new file mode 100644
index 0000000..b5a8615
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/entity/EasyForgeAutoBlockEntity.java
@@ -0,0 +1,147 @@
+package ch.netquick.easysurvival.block.entity;
+
+import net.minecraftforge.items.wrapper.SidedInvWrapper;
+import net.minecraftforge.items.IItemHandler;
+import net.minecraftforge.common.util.LazyOptional;
+import net.minecraftforge.common.capabilities.ForgeCapabilities;
+import net.minecraftforge.common.capabilities.Capability;
+
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.WorldlyContainer;
+import net.minecraft.world.ContainerHelper;
+import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.core.NonNullList;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import javax.annotation.Nullable;
+
+import java.util.stream.IntStream;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasyForgeGUIMenu;
+import ch.netquick.easysurvival.init.EasysurvivalModBlockEntities;
+
+public class EasyForgeAutoBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
+ private NonNullList stacks = NonNullList.withSize(2, ItemStack.EMPTY);
+ private final LazyOptional extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
+
+ public EasyForgeAutoBlockEntity(BlockPos position, BlockState state) {
+ super(EasysurvivalModBlockEntities.EASY_FORGE_AUTO.get(), position, state);
+ }
+
+ @Override
+ public void load(CompoundTag compound) {
+ super.load(compound);
+ if (!this.tryLoadLootTable(compound))
+ this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
+ ContainerHelper.loadAllItems(compound, this.stacks);
+ }
+
+ @Override
+ public void saveAdditional(CompoundTag compound) {
+ super.saveAdditional(compound);
+ if (!this.trySaveLootTable(compound)) {
+ ContainerHelper.saveAllItems(compound, this.stacks);
+ }
+ }
+
+ @Override
+ public ClientboundBlockEntityDataPacket getUpdatePacket() {
+ return ClientboundBlockEntityDataPacket.create(this);
+ }
+
+ @Override
+ public CompoundTag getUpdateTag() {
+ return this.saveWithFullMetadata();
+ }
+
+ @Override
+ public int getContainerSize() {
+ return stacks.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ for (ItemStack itemstack : this.stacks)
+ if (!itemstack.isEmpty())
+ return false;
+ return true;
+ }
+
+ @Override
+ public Component getDefaultName() {
+ return Component.literal("easy_forge_auto");
+ }
+
+ @Override
+ public int getMaxStackSize() {
+ return 64;
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory) {
+ return new EasyForgeGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(this.worldPosition));
+ }
+
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Forge");
+ }
+
+ @Override
+ protected NonNullList getItems() {
+ return this.stacks;
+ }
+
+ @Override
+ protected void setItems(NonNullList stacks) {
+ this.stacks = stacks;
+ }
+
+ @Override
+ public boolean canPlaceItem(int index, ItemStack stack) {
+ if (index == 1)
+ return false;
+ return true;
+ }
+
+ @Override
+ public int[] getSlotsForFace(Direction side) {
+ return IntStream.range(0, this.getContainerSize()).toArray();
+ }
+
+ @Override
+ public boolean canPlaceItemThroughFace(int index, ItemStack stack, @Nullable Direction direction) {
+ return this.canPlaceItem(index, stack);
+ }
+
+ @Override
+ public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) {
+ if (index == 0)
+ return false;
+ return true;
+ }
+
+ @Override
+ public LazyOptional getCapability(Capability capability, @Nullable Direction facing) {
+ if (!this.remove && facing != null && capability == ForgeCapabilities.ITEM_HANDLER)
+ return handlers[facing.ordinal()].cast();
+ return super.getCapability(capability, facing);
+ }
+
+ @Override
+ public void setRemoved() {
+ super.setRemoved();
+ for (LazyOptional extends IItemHandler> handler : handlers)
+ handler.invalidate();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/entity/EasyForgeBlockEntity.java b/src/main/java/ch/netquick/easysurvival/block/entity/EasyForgeBlockEntity.java
new file mode 100644
index 0000000..8328938
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/entity/EasyForgeBlockEntity.java
@@ -0,0 +1,143 @@
+package ch.netquick.easysurvival.block.entity;
+
+import net.minecraftforge.items.wrapper.SidedInvWrapper;
+import net.minecraftforge.items.IItemHandler;
+import net.minecraftforge.common.util.LazyOptional;
+import net.minecraftforge.common.capabilities.ForgeCapabilities;
+import net.minecraftforge.common.capabilities.Capability;
+
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.WorldlyContainer;
+import net.minecraft.world.ContainerHelper;
+import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.core.NonNullList;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import javax.annotation.Nullable;
+
+import java.util.stream.IntStream;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasyForgeGUIMenu;
+import ch.netquick.easysurvival.init.EasysurvivalModBlockEntities;
+
+public class EasyForgeBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
+ private NonNullList stacks = NonNullList.withSize(2, ItemStack.EMPTY);
+ private final LazyOptional extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
+
+ public EasyForgeBlockEntity(BlockPos position, BlockState state) {
+ super(EasysurvivalModBlockEntities.EASY_FORGE.get(), position, state);
+ }
+
+ @Override
+ public void load(CompoundTag compound) {
+ super.load(compound);
+ if (!this.tryLoadLootTable(compound))
+ this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
+ ContainerHelper.loadAllItems(compound, this.stacks);
+ }
+
+ @Override
+ public void saveAdditional(CompoundTag compound) {
+ super.saveAdditional(compound);
+ if (!this.trySaveLootTable(compound)) {
+ ContainerHelper.saveAllItems(compound, this.stacks);
+ }
+ }
+
+ @Override
+ public ClientboundBlockEntityDataPacket getUpdatePacket() {
+ return ClientboundBlockEntityDataPacket.create(this);
+ }
+
+ @Override
+ public CompoundTag getUpdateTag() {
+ return this.saveWithFullMetadata();
+ }
+
+ @Override
+ public int getContainerSize() {
+ return stacks.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ for (ItemStack itemstack : this.stacks)
+ if (!itemstack.isEmpty())
+ return false;
+ return true;
+ }
+
+ @Override
+ public Component getDefaultName() {
+ return Component.literal("easy_forge");
+ }
+
+ @Override
+ public int getMaxStackSize() {
+ return 64;
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory) {
+ return new EasyForgeGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(this.worldPosition));
+ }
+
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Forge");
+ }
+
+ @Override
+ protected NonNullList getItems() {
+ return this.stacks;
+ }
+
+ @Override
+ protected void setItems(NonNullList stacks) {
+ this.stacks = stacks;
+ }
+
+ @Override
+ public boolean canPlaceItem(int index, ItemStack stack) {
+ return true;
+ }
+
+ @Override
+ public int[] getSlotsForFace(Direction side) {
+ return IntStream.range(0, this.getContainerSize()).toArray();
+ }
+
+ @Override
+ public boolean canPlaceItemThroughFace(int index, ItemStack stack, @Nullable Direction direction) {
+ return this.canPlaceItem(index, stack);
+ }
+
+ @Override
+ public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) {
+ return true;
+ }
+
+ @Override
+ public LazyOptional getCapability(Capability capability, @Nullable Direction facing) {
+ if (!this.remove && facing != null && capability == ForgeCapabilities.ITEM_HANDLER)
+ return handlers[facing.ordinal()].cast();
+ return super.getCapability(capability, facing);
+ }
+
+ @Override
+ public void setRemoved() {
+ super.setRemoved();
+ for (LazyOptional extends IItemHandler> handler : handlers)
+ handler.invalidate();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/entity/EasyFridgeBlockEntity.java b/src/main/java/ch/netquick/easysurvival/block/entity/EasyFridgeBlockEntity.java
new file mode 100644
index 0000000..ca5d9fd
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/entity/EasyFridgeBlockEntity.java
@@ -0,0 +1,147 @@
+package ch.netquick.easysurvival.block.entity;
+
+import net.minecraftforge.items.wrapper.SidedInvWrapper;
+import net.minecraftforge.items.IItemHandler;
+import net.minecraftforge.common.util.LazyOptional;
+import net.minecraftforge.common.capabilities.ForgeCapabilities;
+import net.minecraftforge.common.capabilities.Capability;
+
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.WorldlyContainer;
+import net.minecraft.world.ContainerHelper;
+import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.core.NonNullList;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import javax.annotation.Nullable;
+
+import java.util.stream.IntStream;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasyFridgeGUIMenu;
+import ch.netquick.easysurvival.init.EasysurvivalModBlockEntities;
+
+public class EasyFridgeBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
+ private NonNullList stacks = NonNullList.withSize(2, ItemStack.EMPTY);
+ private final LazyOptional extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
+
+ public EasyFridgeBlockEntity(BlockPos position, BlockState state) {
+ super(EasysurvivalModBlockEntities.EASY_FRIDGE.get(), position, state);
+ }
+
+ @Override
+ public void load(CompoundTag compound) {
+ super.load(compound);
+ if (!this.tryLoadLootTable(compound))
+ this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
+ ContainerHelper.loadAllItems(compound, this.stacks);
+ }
+
+ @Override
+ public void saveAdditional(CompoundTag compound) {
+ super.saveAdditional(compound);
+ if (!this.trySaveLootTable(compound)) {
+ ContainerHelper.saveAllItems(compound, this.stacks);
+ }
+ }
+
+ @Override
+ public ClientboundBlockEntityDataPacket getUpdatePacket() {
+ return ClientboundBlockEntityDataPacket.create(this);
+ }
+
+ @Override
+ public CompoundTag getUpdateTag() {
+ return this.saveWithFullMetadata();
+ }
+
+ @Override
+ public int getContainerSize() {
+ return stacks.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ for (ItemStack itemstack : this.stacks)
+ if (!itemstack.isEmpty())
+ return false;
+ return true;
+ }
+
+ @Override
+ public Component getDefaultName() {
+ return Component.literal("easy_fridge");
+ }
+
+ @Override
+ public int getMaxStackSize() {
+ return 64;
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory) {
+ return new EasyFridgeGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(this.worldPosition));
+ }
+
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Fridge");
+ }
+
+ @Override
+ protected NonNullList getItems() {
+ return this.stacks;
+ }
+
+ @Override
+ protected void setItems(NonNullList stacks) {
+ this.stacks = stacks;
+ }
+
+ @Override
+ public boolean canPlaceItem(int index, ItemStack stack) {
+ if (index == 1)
+ return false;
+ return true;
+ }
+
+ @Override
+ public int[] getSlotsForFace(Direction side) {
+ return IntStream.range(0, this.getContainerSize()).toArray();
+ }
+
+ @Override
+ public boolean canPlaceItemThroughFace(int index, ItemStack stack, @Nullable Direction direction) {
+ return this.canPlaceItem(index, stack);
+ }
+
+ @Override
+ public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) {
+ if (index == 0)
+ return false;
+ return true;
+ }
+
+ @Override
+ public LazyOptional getCapability(Capability capability, @Nullable Direction facing) {
+ if (!this.remove && facing != null && capability == ForgeCapabilities.ITEM_HANDLER)
+ return handlers[facing.ordinal()].cast();
+ return super.getCapability(capability, facing);
+ }
+
+ @Override
+ public void setRemoved() {
+ super.setRemoved();
+ for (LazyOptional extends IItemHandler> handler : handlers)
+ handler.invalidate();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/entity/EasyIntakeBlockEntity.java b/src/main/java/ch/netquick/easysurvival/block/entity/EasyIntakeBlockEntity.java
new file mode 100644
index 0000000..a23f7e6
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/entity/EasyIntakeBlockEntity.java
@@ -0,0 +1,143 @@
+package ch.netquick.easysurvival.block.entity;
+
+import net.minecraftforge.items.wrapper.SidedInvWrapper;
+import net.minecraftforge.items.IItemHandler;
+import net.minecraftforge.common.util.LazyOptional;
+import net.minecraftforge.common.capabilities.ForgeCapabilities;
+import net.minecraftforge.common.capabilities.Capability;
+
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.WorldlyContainer;
+import net.minecraft.world.ContainerHelper;
+import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.core.NonNullList;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import javax.annotation.Nullable;
+
+import java.util.stream.IntStream;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasyIntakeGUIMenu;
+import ch.netquick.easysurvival.init.EasysurvivalModBlockEntities;
+
+public class EasyIntakeBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
+ private NonNullList stacks = NonNullList.withSize(27, ItemStack.EMPTY);
+ private final LazyOptional extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
+
+ public EasyIntakeBlockEntity(BlockPos position, BlockState state) {
+ super(EasysurvivalModBlockEntities.EASY_INTAKE.get(), position, state);
+ }
+
+ @Override
+ public void load(CompoundTag compound) {
+ super.load(compound);
+ if (!this.tryLoadLootTable(compound))
+ this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
+ ContainerHelper.loadAllItems(compound, this.stacks);
+ }
+
+ @Override
+ public void saveAdditional(CompoundTag compound) {
+ super.saveAdditional(compound);
+ if (!this.trySaveLootTable(compound)) {
+ ContainerHelper.saveAllItems(compound, this.stacks);
+ }
+ }
+
+ @Override
+ public ClientboundBlockEntityDataPacket getUpdatePacket() {
+ return ClientboundBlockEntityDataPacket.create(this);
+ }
+
+ @Override
+ public CompoundTag getUpdateTag() {
+ return this.saveWithFullMetadata();
+ }
+
+ @Override
+ public int getContainerSize() {
+ return stacks.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ for (ItemStack itemstack : this.stacks)
+ if (!itemstack.isEmpty())
+ return false;
+ return true;
+ }
+
+ @Override
+ public Component getDefaultName() {
+ return Component.literal("easy_intake");
+ }
+
+ @Override
+ public int getMaxStackSize() {
+ return 64;
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory) {
+ return new EasyIntakeGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(this.worldPosition));
+ }
+
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Intake");
+ }
+
+ @Override
+ protected NonNullList getItems() {
+ return this.stacks;
+ }
+
+ @Override
+ protected void setItems(NonNullList stacks) {
+ this.stacks = stacks;
+ }
+
+ @Override
+ public boolean canPlaceItem(int index, ItemStack stack) {
+ return true;
+ }
+
+ @Override
+ public int[] getSlotsForFace(Direction side) {
+ return IntStream.range(0, this.getContainerSize()).toArray();
+ }
+
+ @Override
+ public boolean canPlaceItemThroughFace(int index, ItemStack stack, @Nullable Direction direction) {
+ return this.canPlaceItem(index, stack);
+ }
+
+ @Override
+ public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) {
+ return true;
+ }
+
+ @Override
+ public LazyOptional getCapability(Capability capability, @Nullable Direction facing) {
+ if (!this.remove && facing != null && capability == ForgeCapabilities.ITEM_HANDLER)
+ return handlers[facing.ordinal()].cast();
+ return super.getCapability(capability, facing);
+ }
+
+ @Override
+ public void setRemoved() {
+ super.setRemoved();
+ for (LazyOptional extends IItemHandler> handler : handlers)
+ handler.invalidate();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/entity/EasySawBlockEntity.java b/src/main/java/ch/netquick/easysurvival/block/entity/EasySawBlockEntity.java
new file mode 100644
index 0000000..e789fdd
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/entity/EasySawBlockEntity.java
@@ -0,0 +1,143 @@
+package ch.netquick.easysurvival.block.entity;
+
+import net.minecraftforge.items.wrapper.SidedInvWrapper;
+import net.minecraftforge.items.IItemHandler;
+import net.minecraftforge.common.util.LazyOptional;
+import net.minecraftforge.common.capabilities.ForgeCapabilities;
+import net.minecraftforge.common.capabilities.Capability;
+
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.WorldlyContainer;
+import net.minecraft.world.ContainerHelper;
+import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.core.NonNullList;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import javax.annotation.Nullable;
+
+import java.util.stream.IntStream;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasySawGUIMenu;
+import ch.netquick.easysurvival.init.EasysurvivalModBlockEntities;
+
+public class EasySawBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
+ private NonNullList stacks = NonNullList.withSize(3, ItemStack.EMPTY);
+ private final LazyOptional extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
+
+ public EasySawBlockEntity(BlockPos position, BlockState state) {
+ super(EasysurvivalModBlockEntities.EASY_SAW.get(), position, state);
+ }
+
+ @Override
+ public void load(CompoundTag compound) {
+ super.load(compound);
+ if (!this.tryLoadLootTable(compound))
+ this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
+ ContainerHelper.loadAllItems(compound, this.stacks);
+ }
+
+ @Override
+ public void saveAdditional(CompoundTag compound) {
+ super.saveAdditional(compound);
+ if (!this.trySaveLootTable(compound)) {
+ ContainerHelper.saveAllItems(compound, this.stacks);
+ }
+ }
+
+ @Override
+ public ClientboundBlockEntityDataPacket getUpdatePacket() {
+ return ClientboundBlockEntityDataPacket.create(this);
+ }
+
+ @Override
+ public CompoundTag getUpdateTag() {
+ return this.saveWithFullMetadata();
+ }
+
+ @Override
+ public int getContainerSize() {
+ return stacks.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ for (ItemStack itemstack : this.stacks)
+ if (!itemstack.isEmpty())
+ return false;
+ return true;
+ }
+
+ @Override
+ public Component getDefaultName() {
+ return Component.literal("easy_saw");
+ }
+
+ @Override
+ public int getMaxStackSize() {
+ return 64;
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory) {
+ return new EasySawGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(this.worldPosition));
+ }
+
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Saw");
+ }
+
+ @Override
+ protected NonNullList getItems() {
+ return this.stacks;
+ }
+
+ @Override
+ protected void setItems(NonNullList stacks) {
+ this.stacks = stacks;
+ }
+
+ @Override
+ public boolean canPlaceItem(int index, ItemStack stack) {
+ return true;
+ }
+
+ @Override
+ public int[] getSlotsForFace(Direction side) {
+ return IntStream.range(0, this.getContainerSize()).toArray();
+ }
+
+ @Override
+ public boolean canPlaceItemThroughFace(int index, ItemStack stack, @Nullable Direction direction) {
+ return this.canPlaceItem(index, stack);
+ }
+
+ @Override
+ public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) {
+ return true;
+ }
+
+ @Override
+ public LazyOptional getCapability(Capability capability, @Nullable Direction facing) {
+ if (!this.remove && facing != null && capability == ForgeCapabilities.ITEM_HANDLER)
+ return handlers[facing.ordinal()].cast();
+ return super.getCapability(capability, facing);
+ }
+
+ @Override
+ public void setRemoved() {
+ super.setRemoved();
+ for (LazyOptional extends IItemHandler> handler : handlers)
+ handler.invalidate();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/entity/EasySmelterBlockEntity.java b/src/main/java/ch/netquick/easysurvival/block/entity/EasySmelterBlockEntity.java
new file mode 100644
index 0000000..46f9d46
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/entity/EasySmelterBlockEntity.java
@@ -0,0 +1,143 @@
+package ch.netquick.easysurvival.block.entity;
+
+import net.minecraftforge.items.wrapper.SidedInvWrapper;
+import net.minecraftforge.items.IItemHandler;
+import net.minecraftforge.common.util.LazyOptional;
+import net.minecraftforge.common.capabilities.ForgeCapabilities;
+import net.minecraftforge.common.capabilities.Capability;
+
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.WorldlyContainer;
+import net.minecraft.world.ContainerHelper;
+import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.core.NonNullList;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import javax.annotation.Nullable;
+
+import java.util.stream.IntStream;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.EasySmelterGUIMenu;
+import ch.netquick.easysurvival.init.EasysurvivalModBlockEntities;
+
+public class EasySmelterBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
+ private NonNullList stacks = NonNullList.withSize(2, ItemStack.EMPTY);
+ private final LazyOptional extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
+
+ public EasySmelterBlockEntity(BlockPos position, BlockState state) {
+ super(EasysurvivalModBlockEntities.EASY_SMELTER.get(), position, state);
+ }
+
+ @Override
+ public void load(CompoundTag compound) {
+ super.load(compound);
+ if (!this.tryLoadLootTable(compound))
+ this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
+ ContainerHelper.loadAllItems(compound, this.stacks);
+ }
+
+ @Override
+ public void saveAdditional(CompoundTag compound) {
+ super.saveAdditional(compound);
+ if (!this.trySaveLootTable(compound)) {
+ ContainerHelper.saveAllItems(compound, this.stacks);
+ }
+ }
+
+ @Override
+ public ClientboundBlockEntityDataPacket getUpdatePacket() {
+ return ClientboundBlockEntityDataPacket.create(this);
+ }
+
+ @Override
+ public CompoundTag getUpdateTag() {
+ return this.saveWithFullMetadata();
+ }
+
+ @Override
+ public int getContainerSize() {
+ return stacks.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ for (ItemStack itemstack : this.stacks)
+ if (!itemstack.isEmpty())
+ return false;
+ return true;
+ }
+
+ @Override
+ public Component getDefaultName() {
+ return Component.literal("easy_smelter");
+ }
+
+ @Override
+ public int getMaxStackSize() {
+ return 64;
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory) {
+ return new EasySmelterGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(this.worldPosition));
+ }
+
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Easy Smelter");
+ }
+
+ @Override
+ protected NonNullList getItems() {
+ return this.stacks;
+ }
+
+ @Override
+ protected void setItems(NonNullList stacks) {
+ this.stacks = stacks;
+ }
+
+ @Override
+ public boolean canPlaceItem(int index, ItemStack stack) {
+ return true;
+ }
+
+ @Override
+ public int[] getSlotsForFace(Direction side) {
+ return IntStream.range(0, this.getContainerSize()).toArray();
+ }
+
+ @Override
+ public boolean canPlaceItemThroughFace(int index, ItemStack stack, @Nullable Direction direction) {
+ return this.canPlaceItem(index, stack);
+ }
+
+ @Override
+ public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) {
+ return true;
+ }
+
+ @Override
+ public LazyOptional getCapability(Capability capability, @Nullable Direction facing) {
+ if (!this.remove && facing != null && capability == ForgeCapabilities.ITEM_HANDLER)
+ return handlers[facing.ordinal()].cast();
+ return super.getCapability(capability, facing);
+ }
+
+ @Override
+ public void setRemoved() {
+ super.setRemoved();
+ for (LazyOptional extends IItemHandler> handler : handlers)
+ handler.invalidate();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/entity/TeleporterPlateBlockEntity.java b/src/main/java/ch/netquick/easysurvival/block/entity/TeleporterPlateBlockEntity.java
new file mode 100644
index 0000000..bc3d920
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/entity/TeleporterPlateBlockEntity.java
@@ -0,0 +1,140 @@
+package ch.netquick.easysurvival.block.entity;
+
+import net.minecraftforge.items.wrapper.SidedInvWrapper;
+import net.minecraftforge.items.IItemHandler;
+import net.minecraftforge.common.util.LazyOptional;
+import net.minecraftforge.common.capabilities.ForgeCapabilities;
+import net.minecraftforge.common.capabilities.Capability;
+
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.ChestMenu;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.WorldlyContainer;
+import net.minecraft.world.ContainerHelper;
+import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.network.chat.Component;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.core.NonNullList;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import javax.annotation.Nullable;
+
+import java.util.stream.IntStream;
+
+import ch.netquick.easysurvival.init.EasysurvivalModBlockEntities;
+
+public class TeleporterPlateBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
+ private NonNullList stacks = NonNullList.withSize(0, ItemStack.EMPTY);
+ private final LazyOptional extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
+
+ public TeleporterPlateBlockEntity(BlockPos position, BlockState state) {
+ super(EasysurvivalModBlockEntities.TELEPORTER_PLATE.get(), position, state);
+ }
+
+ @Override
+ public void load(CompoundTag compound) {
+ super.load(compound);
+ if (!this.tryLoadLootTable(compound))
+ this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
+ ContainerHelper.loadAllItems(compound, this.stacks);
+ }
+
+ @Override
+ public void saveAdditional(CompoundTag compound) {
+ super.saveAdditional(compound);
+ if (!this.trySaveLootTable(compound)) {
+ ContainerHelper.saveAllItems(compound, this.stacks);
+ }
+ }
+
+ @Override
+ public ClientboundBlockEntityDataPacket getUpdatePacket() {
+ return ClientboundBlockEntityDataPacket.create(this);
+ }
+
+ @Override
+ public CompoundTag getUpdateTag() {
+ return this.saveWithFullMetadata();
+ }
+
+ @Override
+ public int getContainerSize() {
+ return stacks.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ for (ItemStack itemstack : this.stacks)
+ if (!itemstack.isEmpty())
+ return false;
+ return true;
+ }
+
+ @Override
+ public Component getDefaultName() {
+ return Component.literal("teleporter_plate");
+ }
+
+ @Override
+ public int getMaxStackSize() {
+ return 64;
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory) {
+ return ChestMenu.threeRows(id, inventory);
+ }
+
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Teleporter Plate");
+ }
+
+ @Override
+ protected NonNullList getItems() {
+ return this.stacks;
+ }
+
+ @Override
+ protected void setItems(NonNullList stacks) {
+ this.stacks = stacks;
+ }
+
+ @Override
+ public boolean canPlaceItem(int index, ItemStack stack) {
+ return true;
+ }
+
+ @Override
+ public int[] getSlotsForFace(Direction side) {
+ return IntStream.range(0, this.getContainerSize()).toArray();
+ }
+
+ @Override
+ public boolean canPlaceItemThroughFace(int index, ItemStack stack, @Nullable Direction direction) {
+ return this.canPlaceItem(index, stack);
+ }
+
+ @Override
+ public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) {
+ return true;
+ }
+
+ @Override
+ public LazyOptional getCapability(Capability capability, @Nullable Direction facing) {
+ if (!this.remove && facing != null && capability == ForgeCapabilities.ITEM_HANDLER)
+ return handlers[facing.ordinal()].cast();
+ return super.getCapability(capability, facing);
+ }
+
+ @Override
+ public void setRemoved() {
+ super.setRemoved();
+ for (LazyOptional extends IItemHandler> handler : handlers)
+ handler.invalidate();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/block/entity/TreeCropBlockEntity.java b/src/main/java/ch/netquick/easysurvival/block/entity/TreeCropBlockEntity.java
new file mode 100644
index 0000000..741eee2
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/block/entity/TreeCropBlockEntity.java
@@ -0,0 +1,159 @@
+package ch.netquick.easysurvival.block.entity;
+
+import net.minecraftforge.items.wrapper.SidedInvWrapper;
+import net.minecraftforge.items.IItemHandler;
+import net.minecraftforge.common.util.LazyOptional;
+import net.minecraftforge.common.capabilities.ForgeCapabilities;
+import net.minecraftforge.common.capabilities.Capability;
+
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.WorldlyContainer;
+import net.minecraft.world.ContainerHelper;
+import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.core.NonNullList;
+import net.minecraft.core.Direction;
+import net.minecraft.core.BlockPos;
+
+import javax.annotation.Nullable;
+
+import java.util.stream.IntStream;
+
+import io.netty.buffer.Unpooled;
+
+import ch.netquick.easysurvival.world.inventory.TreeCropGUIMenu;
+import ch.netquick.easysurvival.init.EasysurvivalModBlockEntities;
+
+public class TreeCropBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
+ private NonNullList stacks = NonNullList.withSize(8, ItemStack.EMPTY);
+ private final LazyOptional extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
+
+ public TreeCropBlockEntity(BlockPos position, BlockState state) {
+ super(EasysurvivalModBlockEntities.TREE_CROP.get(), position, state);
+ }
+
+ @Override
+ public void load(CompoundTag compound) {
+ super.load(compound);
+ if (!this.tryLoadLootTable(compound))
+ this.stacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
+ ContainerHelper.loadAllItems(compound, this.stacks);
+ }
+
+ @Override
+ public void saveAdditional(CompoundTag compound) {
+ super.saveAdditional(compound);
+ if (!this.trySaveLootTable(compound)) {
+ ContainerHelper.saveAllItems(compound, this.stacks);
+ }
+ }
+
+ @Override
+ public ClientboundBlockEntityDataPacket getUpdatePacket() {
+ return ClientboundBlockEntityDataPacket.create(this);
+ }
+
+ @Override
+ public CompoundTag getUpdateTag() {
+ return this.saveWithFullMetadata();
+ }
+
+ @Override
+ public int getContainerSize() {
+ return stacks.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ for (ItemStack itemstack : this.stacks)
+ if (!itemstack.isEmpty())
+ return false;
+ return true;
+ }
+
+ @Override
+ public Component getDefaultName() {
+ return Component.literal("tree_crop");
+ }
+
+ @Override
+ public int getMaxStackSize() {
+ return 64;
+ }
+
+ @Override
+ public AbstractContainerMenu createMenu(int id, Inventory inventory) {
+ return new TreeCropGUIMenu(id, inventory, new FriendlyByteBuf(Unpooled.buffer()).writeBlockPos(this.worldPosition));
+ }
+
+ @Override
+ public Component getDisplayName() {
+ return Component.literal("Tree Crop");
+ }
+
+ @Override
+ protected NonNullList getItems() {
+ return this.stacks;
+ }
+
+ @Override
+ protected void setItems(NonNullList stacks) {
+ this.stacks = stacks;
+ }
+
+ @Override
+ public boolean canPlaceItem(int index, ItemStack stack) {
+ if (index == 1)
+ return false;
+ if (index == 2)
+ return false;
+ if (index == 3)
+ return false;
+ if (index == 4)
+ return false;
+ if (index == 5)
+ return false;
+ if (index == 6)
+ return false;
+ if (index == 7)
+ return false;
+ return true;
+ }
+
+ @Override
+ public int[] getSlotsForFace(Direction side) {
+ return IntStream.range(0, this.getContainerSize()).toArray();
+ }
+
+ @Override
+ public boolean canPlaceItemThroughFace(int index, ItemStack stack, @Nullable Direction direction) {
+ return this.canPlaceItem(index, stack);
+ }
+
+ @Override
+ public boolean canTakeItemThroughFace(int index, ItemStack stack, Direction direction) {
+ if (index == 0)
+ return false;
+ return true;
+ }
+
+ @Override
+ public LazyOptional getCapability(Capability capability, @Nullable Direction facing) {
+ if (!this.remove && facing != null && capability == ForgeCapabilities.ITEM_HANDLER)
+ return handlers[facing.ordinal()].cast();
+ return super.getCapability(capability, facing);
+ }
+
+ @Override
+ public void setRemoved() {
+ super.setRemoved();
+ for (LazyOptional extends IItemHandler> handler : handlers)
+ handler.invalidate();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/client/gui/CraftingStickGUIScreen.java b/src/main/java/ch/netquick/easysurvival/client/gui/CraftingStickGUIScreen.java
new file mode 100644
index 0000000..59f0677
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/client/gui/CraftingStickGUIScreen.java
@@ -0,0 +1,79 @@
+package ch.netquick.easysurvival.client.gui;
+
+import net.minecraft.world.level.Level;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.network.chat.Component;
+import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
+import net.minecraft.client.gui.GuiGraphics;
+
+import java.util.HashMap;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+
+import ch.netquick.easysurvival.world.inventory.CraftingStickGUIMenu;
+
+public class CraftingStickGUIScreen extends AbstractContainerScreen {
+ private final static HashMap guistate = CraftingStickGUIMenu.guistate;
+ private final Level world;
+ private final int x, y, z;
+ private final Player entity;
+
+ public CraftingStickGUIScreen(CraftingStickGUIMenu container, Inventory inventory, Component text) {
+ super(container, inventory, text);
+ this.world = container.world;
+ this.x = container.x;
+ this.y = container.y;
+ this.z = container.z;
+ this.entity = container.entity;
+ this.imageWidth = 176;
+ this.imageHeight = 166;
+ }
+
+ private static final ResourceLocation texture = new ResourceLocation("easysurvival:textures/screens/crafting_stick_gui.png");
+
+ @Override
+ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
+ this.renderBackground(guiGraphics);
+ super.render(guiGraphics, mouseX, mouseY, partialTicks);
+ this.renderTooltip(guiGraphics, mouseX, mouseY);
+ }
+
+ @Override
+ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) {
+ RenderSystem.setShaderColor(1, 1, 1, 1);
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight);
+ RenderSystem.disableBlend();
+ }
+
+ @Override
+ public boolean keyPressed(int key, int b, int c) {
+ if (key == 256) {
+ this.minecraft.player.closeContainer();
+ return true;
+ }
+ return super.keyPressed(key, b, c);
+ }
+
+ @Override
+ public void containerTick() {
+ super.containerTick();
+ }
+
+ @Override
+ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
+ }
+
+ @Override
+ public void onClose() {
+ super.onClose();
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/client/gui/CropGUIScreen.java b/src/main/java/ch/netquick/easysurvival/client/gui/CropGUIScreen.java
new file mode 100644
index 0000000..ac98461
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/client/gui/CropGUIScreen.java
@@ -0,0 +1,81 @@
+package ch.netquick.easysurvival.client.gui;
+
+import net.minecraft.world.level.Level;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.network.chat.Component;
+import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
+import net.minecraft.client.gui.GuiGraphics;
+
+import java.util.HashMap;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+
+import ch.netquick.easysurvival.world.inventory.CropGUIMenu;
+
+public class CropGUIScreen extends AbstractContainerScreen {
+ private final static HashMap guistate = CropGUIMenu.guistate;
+ private final Level world;
+ private final int x, y, z;
+ private final Player entity;
+
+ public CropGUIScreen(CropGUIMenu container, Inventory inventory, Component text) {
+ super(container, inventory, text);
+ this.world = container.world;
+ this.x = container.x;
+ this.y = container.y;
+ this.z = container.z;
+ this.entity = container.entity;
+ this.imageWidth = 176;
+ this.imageHeight = 166;
+ }
+
+ private static final ResourceLocation texture = new ResourceLocation("easysurvival:textures/screens/crop_gui.png");
+
+ @Override
+ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
+ this.renderBackground(guiGraphics);
+ super.render(guiGraphics, mouseX, mouseY, partialTicks);
+ this.renderTooltip(guiGraphics, mouseX, mouseY);
+ }
+
+ @Override
+ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) {
+ RenderSystem.setShaderColor(1, 1, 1, 1);
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight);
+ RenderSystem.disableBlend();
+ }
+
+ @Override
+ public boolean keyPressed(int key, int b, int c) {
+ if (key == 256) {
+ this.minecraft.player.closeContainer();
+ return true;
+ }
+ return super.keyPressed(key, b, c);
+ }
+
+ @Override
+ public void containerTick() {
+ super.containerTick();
+ }
+
+ @Override
+ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.crop_gui.label_growcrop"), 7, 8, -12829636, false);
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.crop_gui.label_seed"), 7, 37, -12829636, false);
+ }
+
+ @Override
+ public void onClose() {
+ super.onClose();
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/client/gui/DedicatedStorageGUIScreen.java b/src/main/java/ch/netquick/easysurvival/client/gui/DedicatedStorageGUIScreen.java
new file mode 100644
index 0000000..40fdc47
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/client/gui/DedicatedStorageGUIScreen.java
@@ -0,0 +1,79 @@
+package ch.netquick.easysurvival.client.gui;
+
+import net.minecraft.world.level.Level;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.network.chat.Component;
+import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
+import net.minecraft.client.gui.GuiGraphics;
+
+import java.util.HashMap;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+
+import ch.netquick.easysurvival.world.inventory.DedicatedStorageGUIMenu;
+
+public class DedicatedStorageGUIScreen extends AbstractContainerScreen {
+ private final static HashMap guistate = DedicatedStorageGUIMenu.guistate;
+ private final Level world;
+ private final int x, y, z;
+ private final Player entity;
+
+ public DedicatedStorageGUIScreen(DedicatedStorageGUIMenu container, Inventory inventory, Component text) {
+ super(container, inventory, text);
+ this.world = container.world;
+ this.x = container.x;
+ this.y = container.y;
+ this.z = container.z;
+ this.entity = container.entity;
+ this.imageWidth = 176;
+ this.imageHeight = 166;
+ }
+
+ private static final ResourceLocation texture = new ResourceLocation("easysurvival:textures/screens/dedicated_storage_gui.png");
+
+ @Override
+ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
+ this.renderBackground(guiGraphics);
+ super.render(guiGraphics, mouseX, mouseY, partialTicks);
+ this.renderTooltip(guiGraphics, mouseX, mouseY);
+ }
+
+ @Override
+ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) {
+ RenderSystem.setShaderColor(1, 1, 1, 1);
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight);
+ RenderSystem.disableBlend();
+ }
+
+ @Override
+ public boolean keyPressed(int key, int b, int c) {
+ if (key == 256) {
+ this.minecraft.player.closeContainer();
+ return true;
+ }
+ return super.keyPressed(key, b, c);
+ }
+
+ @Override
+ public void containerTick() {
+ super.containerTick();
+ }
+
+ @Override
+ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
+ }
+
+ @Override
+ public void onClose() {
+ super.onClose();
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/client/gui/EasyAnvilGUIScreen.java b/src/main/java/ch/netquick/easysurvival/client/gui/EasyAnvilGUIScreen.java
new file mode 100644
index 0000000..3af5c52
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/client/gui/EasyAnvilGUIScreen.java
@@ -0,0 +1,81 @@
+package ch.netquick.easysurvival.client.gui;
+
+import net.minecraft.world.level.Level;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.network.chat.Component;
+import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
+import net.minecraft.client.gui.GuiGraphics;
+
+import java.util.HashMap;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+
+import ch.netquick.easysurvival.world.inventory.EasyAnvilGUIMenu;
+
+public class EasyAnvilGUIScreen extends AbstractContainerScreen {
+ private final static HashMap guistate = EasyAnvilGUIMenu.guistate;
+ private final Level world;
+ private final int x, y, z;
+ private final Player entity;
+
+ public EasyAnvilGUIScreen(EasyAnvilGUIMenu container, Inventory inventory, Component text) {
+ super(container, inventory, text);
+ this.world = container.world;
+ this.x = container.x;
+ this.y = container.y;
+ this.z = container.z;
+ this.entity = container.entity;
+ this.imageWidth = 176;
+ this.imageHeight = 166;
+ }
+
+ private static final ResourceLocation texture = new ResourceLocation("easysurvival:textures/screens/easy_anvil_gui.png");
+
+ @Override
+ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
+ this.renderBackground(guiGraphics);
+ super.render(guiGraphics, mouseX, mouseY, partialTicks);
+ this.renderTooltip(guiGraphics, mouseX, mouseY);
+ }
+
+ @Override
+ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) {
+ RenderSystem.setShaderColor(1, 1, 1, 1);
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight);
+ RenderSystem.disableBlend();
+ }
+
+ @Override
+ public boolean keyPressed(int key, int b, int c) {
+ if (key == 256) {
+ this.minecraft.player.closeContainer();
+ return true;
+ }
+ return super.keyPressed(key, b, c);
+ }
+
+ @Override
+ public void containerTick() {
+ super.containerTick();
+ }
+
+ @Override
+ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.easy_anvil_gui.label_easyanvil"), 6, 11, -12829636, false);
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.easy_anvil_gui.label_ingot"), 43, 50, -12829636, false);
+ }
+
+ @Override
+ public void onClose() {
+ super.onClose();
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/client/gui/EasyConverterGUIScreen.java b/src/main/java/ch/netquick/easysurvival/client/gui/EasyConverterGUIScreen.java
new file mode 100644
index 0000000..13a4ed1
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/client/gui/EasyConverterGUIScreen.java
@@ -0,0 +1,80 @@
+package ch.netquick.easysurvival.client.gui;
+
+import net.minecraft.world.level.Level;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.network.chat.Component;
+import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
+import net.minecraft.client.gui.GuiGraphics;
+
+import java.util.HashMap;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+
+import ch.netquick.easysurvival.world.inventory.EasyConverterGUIMenu;
+
+public class EasyConverterGUIScreen extends AbstractContainerScreen {
+ private final static HashMap guistate = EasyConverterGUIMenu.guistate;
+ private final Level world;
+ private final int x, y, z;
+ private final Player entity;
+
+ public EasyConverterGUIScreen(EasyConverterGUIMenu container, Inventory inventory, Component text) {
+ super(container, inventory, text);
+ this.world = container.world;
+ this.x = container.x;
+ this.y = container.y;
+ this.z = container.z;
+ this.entity = container.entity;
+ this.imageWidth = 176;
+ this.imageHeight = 166;
+ }
+
+ private static final ResourceLocation texture = new ResourceLocation("easysurvival:textures/screens/easy_converter_gui.png");
+
+ @Override
+ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
+ this.renderBackground(guiGraphics);
+ super.render(guiGraphics, mouseX, mouseY, partialTicks);
+ this.renderTooltip(guiGraphics, mouseX, mouseY);
+ }
+
+ @Override
+ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) {
+ RenderSystem.setShaderColor(1, 1, 1, 1);
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight);
+ RenderSystem.disableBlend();
+ }
+
+ @Override
+ public boolean keyPressed(int key, int b, int c) {
+ if (key == 256) {
+ this.minecraft.player.closeContainer();
+ return true;
+ }
+ return super.keyPressed(key, b, c);
+ }
+
+ @Override
+ public void containerTick() {
+ super.containerTick();
+ }
+
+ @Override
+ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.easy_converter_gui.label_easyconverter"), 6, 11, -12829636, false);
+ }
+
+ @Override
+ public void onClose() {
+ super.onClose();
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/client/gui/EasyEnchantmentTableGUIScreen.java b/src/main/java/ch/netquick/easysurvival/client/gui/EasyEnchantmentTableGUIScreen.java
new file mode 100644
index 0000000..9c2ab7d
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/client/gui/EasyEnchantmentTableGUIScreen.java
@@ -0,0 +1,82 @@
+package ch.netquick.easysurvival.client.gui;
+
+import net.minecraft.world.level.Level;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.network.chat.Component;
+import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
+import net.minecraft.client.gui.GuiGraphics;
+
+import java.util.HashMap;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+
+import ch.netquick.easysurvival.world.inventory.EasyEnchantmentTableGUIMenu;
+
+public class EasyEnchantmentTableGUIScreen extends AbstractContainerScreen {
+ private final static HashMap guistate = EasyEnchantmentTableGUIMenu.guistate;
+ private final Level world;
+ private final int x, y, z;
+ private final Player entity;
+
+ public EasyEnchantmentTableGUIScreen(EasyEnchantmentTableGUIMenu container, Inventory inventory, Component text) {
+ super(container, inventory, text);
+ this.world = container.world;
+ this.x = container.x;
+ this.y = container.y;
+ this.z = container.z;
+ this.entity = container.entity;
+ this.imageWidth = 176;
+ this.imageHeight = 166;
+ }
+
+ private static final ResourceLocation texture = new ResourceLocation("easysurvival:textures/screens/easy_enchantment_table_gui.png");
+
+ @Override
+ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
+ this.renderBackground(guiGraphics);
+ super.render(guiGraphics, mouseX, mouseY, partialTicks);
+ this.renderTooltip(guiGraphics, mouseX, mouseY);
+ }
+
+ @Override
+ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) {
+ RenderSystem.setShaderColor(1, 1, 1, 1);
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight);
+ RenderSystem.disableBlend();
+ }
+
+ @Override
+ public boolean keyPressed(int key, int b, int c) {
+ if (key == 256) {
+ this.minecraft.player.closeContainer();
+ return true;
+ }
+ return super.keyPressed(key, b, c);
+ }
+
+ @Override
+ public void containerTick() {
+ super.containerTick();
+ }
+
+ @Override
+ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.easy_enchantment_table_gui.label_easyenchant"), 6, 7, -12829636, false);
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.easy_enchantment_table_gui.label_item"), 126, 14, -12829636, false);
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.easy_enchantment_table_gui.label_lapis_lazuli"), 87, 37, -12829636, false);
+ }
+
+ @Override
+ public void onClose() {
+ super.onClose();
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/client/gui/EasyForgeGUIScreen.java b/src/main/java/ch/netquick/easysurvival/client/gui/EasyForgeGUIScreen.java
new file mode 100644
index 0000000..d9d6c62
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/client/gui/EasyForgeGUIScreen.java
@@ -0,0 +1,81 @@
+package ch.netquick.easysurvival.client.gui;
+
+import net.minecraft.world.level.Level;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.network.chat.Component;
+import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
+import net.minecraft.client.gui.GuiGraphics;
+
+import java.util.HashMap;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+
+import ch.netquick.easysurvival.world.inventory.EasyForgeGUIMenu;
+
+public class EasyForgeGUIScreen extends AbstractContainerScreen {
+ private final static HashMap guistate = EasyForgeGUIMenu.guistate;
+ private final Level world;
+ private final int x, y, z;
+ private final Player entity;
+
+ public EasyForgeGUIScreen(EasyForgeGUIMenu container, Inventory inventory, Component text) {
+ super(container, inventory, text);
+ this.world = container.world;
+ this.x = container.x;
+ this.y = container.y;
+ this.z = container.z;
+ this.entity = container.entity;
+ this.imageWidth = 176;
+ this.imageHeight = 166;
+ }
+
+ private static final ResourceLocation texture = new ResourceLocation("easysurvival:textures/screens/easy_forge_gui.png");
+
+ @Override
+ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
+ this.renderBackground(guiGraphics);
+ super.render(guiGraphics, mouseX, mouseY, partialTicks);
+ this.renderTooltip(guiGraphics, mouseX, mouseY);
+ }
+
+ @Override
+ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) {
+ RenderSystem.setShaderColor(1, 1, 1, 1);
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight);
+ RenderSystem.disableBlend();
+ }
+
+ @Override
+ public boolean keyPressed(int key, int b, int c) {
+ if (key == 256) {
+ this.minecraft.player.closeContainer();
+ return true;
+ }
+ return super.keyPressed(key, b, c);
+ }
+
+ @Override
+ public void containerTick() {
+ super.containerTick();
+ }
+
+ @Override
+ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.easy_forge_gui.label_easyforge"), 6, 11, -12829636, false);
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.easy_forge_gui.label_empty"), 82, 51, -12829636, false);
+ }
+
+ @Override
+ public void onClose() {
+ super.onClose();
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/client/gui/EasyFridgeGUIScreen.java b/src/main/java/ch/netquick/easysurvival/client/gui/EasyFridgeGUIScreen.java
new file mode 100644
index 0000000..01470a7
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/client/gui/EasyFridgeGUIScreen.java
@@ -0,0 +1,80 @@
+package ch.netquick.easysurvival.client.gui;
+
+import net.minecraft.world.level.Level;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.network.chat.Component;
+import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
+import net.minecraft.client.gui.GuiGraphics;
+
+import java.util.HashMap;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+
+import ch.netquick.easysurvival.world.inventory.EasyFridgeGUIMenu;
+
+public class EasyFridgeGUIScreen extends AbstractContainerScreen {
+ private final static HashMap guistate = EasyFridgeGUIMenu.guistate;
+ private final Level world;
+ private final int x, y, z;
+ private final Player entity;
+
+ public EasyFridgeGUIScreen(EasyFridgeGUIMenu container, Inventory inventory, Component text) {
+ super(container, inventory, text);
+ this.world = container.world;
+ this.x = container.x;
+ this.y = container.y;
+ this.z = container.z;
+ this.entity = container.entity;
+ this.imageWidth = 176;
+ this.imageHeight = 166;
+ }
+
+ private static final ResourceLocation texture = new ResourceLocation("easysurvival:textures/screens/easy_fridge_gui.png");
+
+ @Override
+ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
+ this.renderBackground(guiGraphics);
+ super.render(guiGraphics, mouseX, mouseY, partialTicks);
+ this.renderTooltip(guiGraphics, mouseX, mouseY);
+ }
+
+ @Override
+ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) {
+ RenderSystem.setShaderColor(1, 1, 1, 1);
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight);
+ RenderSystem.disableBlend();
+ }
+
+ @Override
+ public boolean keyPressed(int key, int b, int c) {
+ if (key == 256) {
+ this.minecraft.player.closeContainer();
+ return true;
+ }
+ return super.keyPressed(key, b, c);
+ }
+
+ @Override
+ public void containerTick() {
+ super.containerTick();
+ }
+
+ @Override
+ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.easy_fridge_gui.label_easyfridge"), 6, 11, -12829636, false);
+ }
+
+ @Override
+ public void onClose() {
+ super.onClose();
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/client/gui/EasyIntakeGUIScreen.java b/src/main/java/ch/netquick/easysurvival/client/gui/EasyIntakeGUIScreen.java
new file mode 100644
index 0000000..8d02466
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/client/gui/EasyIntakeGUIScreen.java
@@ -0,0 +1,80 @@
+package ch.netquick.easysurvival.client.gui;
+
+import net.minecraft.world.level.Level;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.network.chat.Component;
+import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
+import net.minecraft.client.gui.GuiGraphics;
+
+import java.util.HashMap;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+
+import ch.netquick.easysurvival.world.inventory.EasyIntakeGUIMenu;
+
+public class EasyIntakeGUIScreen extends AbstractContainerScreen {
+ private final static HashMap guistate = EasyIntakeGUIMenu.guistate;
+ private final Level world;
+ private final int x, y, z;
+ private final Player entity;
+
+ public EasyIntakeGUIScreen(EasyIntakeGUIMenu container, Inventory inventory, Component text) {
+ super(container, inventory, text);
+ this.world = container.world;
+ this.x = container.x;
+ this.y = container.y;
+ this.z = container.z;
+ this.entity = container.entity;
+ this.imageWidth = 178;
+ this.imageHeight = 166;
+ }
+
+ private static final ResourceLocation texture = new ResourceLocation("easysurvival:textures/screens/easy_intake_gui.png");
+
+ @Override
+ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
+ this.renderBackground(guiGraphics);
+ super.render(guiGraphics, mouseX, mouseY, partialTicks);
+ this.renderTooltip(guiGraphics, mouseX, mouseY);
+ }
+
+ @Override
+ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) {
+ RenderSystem.setShaderColor(1, 1, 1, 1);
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight);
+ RenderSystem.disableBlend();
+ }
+
+ @Override
+ public boolean keyPressed(int key, int b, int c) {
+ if (key == 256) {
+ this.minecraft.player.closeContainer();
+ return true;
+ }
+ return super.keyPressed(key, b, c);
+ }
+
+ @Override
+ public void containerTick() {
+ super.containerTick();
+ }
+
+ @Override
+ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.easy_intake_gui.label_easyintake"), 7, 2, -12829636, false);
+ }
+
+ @Override
+ public void onClose() {
+ super.onClose();
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/client/gui/EasySawGUIScreen.java b/src/main/java/ch/netquick/easysurvival/client/gui/EasySawGUIScreen.java
new file mode 100644
index 0000000..1bd5c9d
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/client/gui/EasySawGUIScreen.java
@@ -0,0 +1,81 @@
+package ch.netquick.easysurvival.client.gui;
+
+import net.minecraft.world.level.Level;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.network.chat.Component;
+import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
+import net.minecraft.client.gui.GuiGraphics;
+
+import java.util.HashMap;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+
+import ch.netquick.easysurvival.world.inventory.EasySawGUIMenu;
+
+public class EasySawGUIScreen extends AbstractContainerScreen {
+ private final static HashMap guistate = EasySawGUIMenu.guistate;
+ private final Level world;
+ private final int x, y, z;
+ private final Player entity;
+
+ public EasySawGUIScreen(EasySawGUIMenu container, Inventory inventory, Component text) {
+ super(container, inventory, text);
+ this.world = container.world;
+ this.x = container.x;
+ this.y = container.y;
+ this.z = container.z;
+ this.entity = container.entity;
+ this.imageWidth = 176;
+ this.imageHeight = 166;
+ }
+
+ private static final ResourceLocation texture = new ResourceLocation("easysurvival:textures/screens/easy_saw_gui.png");
+
+ @Override
+ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
+ this.renderBackground(guiGraphics);
+ super.render(guiGraphics, mouseX, mouseY, partialTicks);
+ this.renderTooltip(guiGraphics, mouseX, mouseY);
+ }
+
+ @Override
+ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) {
+ RenderSystem.setShaderColor(1, 1, 1, 1);
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight);
+ RenderSystem.disableBlend();
+ }
+
+ @Override
+ public boolean keyPressed(int key, int b, int c) {
+ if (key == 256) {
+ this.minecraft.player.closeContainer();
+ return true;
+ }
+ return super.keyPressed(key, b, c);
+ }
+
+ @Override
+ public void containerTick() {
+ super.containerTick();
+ }
+
+ @Override
+ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.easy_saw_gui.label_easysaw"), 6, 11, -12829636, false);
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.easy_saw_gui.label_template"), 67, 47, -12829636, false);
+ }
+
+ @Override
+ public void onClose() {
+ super.onClose();
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/client/gui/EasySmelterGUIScreen.java b/src/main/java/ch/netquick/easysurvival/client/gui/EasySmelterGUIScreen.java
new file mode 100644
index 0000000..e7e02bc
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/client/gui/EasySmelterGUIScreen.java
@@ -0,0 +1,80 @@
+package ch.netquick.easysurvival.client.gui;
+
+import net.minecraft.world.level.Level;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.network.chat.Component;
+import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
+import net.minecraft.client.gui.GuiGraphics;
+
+import java.util.HashMap;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+
+import ch.netquick.easysurvival.world.inventory.EasySmelterGUIMenu;
+
+public class EasySmelterGUIScreen extends AbstractContainerScreen {
+ private final static HashMap guistate = EasySmelterGUIMenu.guistate;
+ private final Level world;
+ private final int x, y, z;
+ private final Player entity;
+
+ public EasySmelterGUIScreen(EasySmelterGUIMenu container, Inventory inventory, Component text) {
+ super(container, inventory, text);
+ this.world = container.world;
+ this.x = container.x;
+ this.y = container.y;
+ this.z = container.z;
+ this.entity = container.entity;
+ this.imageWidth = 176;
+ this.imageHeight = 166;
+ }
+
+ private static final ResourceLocation texture = new ResourceLocation("easysurvival:textures/screens/easy_smelter_gui.png");
+
+ @Override
+ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
+ this.renderBackground(guiGraphics);
+ super.render(guiGraphics, mouseX, mouseY, partialTicks);
+ this.renderTooltip(guiGraphics, mouseX, mouseY);
+ }
+
+ @Override
+ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) {
+ RenderSystem.setShaderColor(1, 1, 1, 1);
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight);
+ RenderSystem.disableBlend();
+ }
+
+ @Override
+ public boolean keyPressed(int key, int b, int c) {
+ if (key == 256) {
+ this.minecraft.player.closeContainer();
+ return true;
+ }
+ return super.keyPressed(key, b, c);
+ }
+
+ @Override
+ public void containerTick() {
+ super.containerTick();
+ }
+
+ @Override
+ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.easy_smelter_gui.label_easysmelter"), 6, 11, -12829636, false);
+ }
+
+ @Override
+ public void onClose() {
+ super.onClose();
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/client/gui/TeleportSetGUIScreen.java b/src/main/java/ch/netquick/easysurvival/client/gui/TeleportSetGUIScreen.java
new file mode 100644
index 0000000..2962727
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/client/gui/TeleportSetGUIScreen.java
@@ -0,0 +1,115 @@
+package ch.netquick.easysurvival.client.gui;
+
+import net.minecraft.world.level.Level;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.network.chat.Component;
+import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
+import net.minecraft.client.gui.components.EditBox;
+import net.minecraft.client.gui.components.Button;
+import net.minecraft.client.gui.GuiGraphics;
+
+import java.util.HashMap;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+
+import ch.netquick.easysurvival.world.inventory.TeleportSetGUIMenu;
+
+public class TeleportSetGUIScreen extends AbstractContainerScreen {
+ private final static HashMap guistate = TeleportSetGUIMenu.guistate;
+ private final Level world;
+ private final int x, y, z;
+ private final Player entity;
+ EditBox TeleportName;
+ Button button_set;
+
+ public TeleportSetGUIScreen(TeleportSetGUIMenu container, Inventory inventory, Component text) {
+ super(container, inventory, text);
+ this.world = container.world;
+ this.x = container.x;
+ this.y = container.y;
+ this.z = container.z;
+ this.entity = container.entity;
+ this.imageWidth = 176;
+ this.imageHeight = 166;
+ }
+
+ private static final ResourceLocation texture = new ResourceLocation("easysurvival:textures/screens/teleport_set_gui.png");
+
+ @Override
+ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
+ this.renderBackground(guiGraphics);
+ super.render(guiGraphics, mouseX, mouseY, partialTicks);
+ TeleportName.render(guiGraphics, mouseX, mouseY, partialTicks);
+ this.renderTooltip(guiGraphics, mouseX, mouseY);
+ }
+
+ @Override
+ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) {
+ RenderSystem.setShaderColor(1, 1, 1, 1);
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight);
+ RenderSystem.disableBlend();
+ }
+
+ @Override
+ public boolean keyPressed(int key, int b, int c) {
+ if (key == 256) {
+ this.minecraft.player.closeContainer();
+ return true;
+ }
+ if (TeleportName.isFocused())
+ return TeleportName.keyPressed(key, b, c);
+ return super.keyPressed(key, b, c);
+ }
+
+ @Override
+ public void containerTick() {
+ super.containerTick();
+ TeleportName.tick();
+ }
+
+ @Override
+ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.teleport_set_gui.label_set_teleport"), 56, 15, -12829636, false);
+ }
+
+ @Override
+ public void onClose() {
+ super.onClose();
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ TeleportName = new EditBox(this.font, this.leftPos + 28, this.topPos + 62, 118, 18, Component.translatable("gui.easysurvival.teleport_set_gui.TeleportName")) {
+ @Override
+ public void insertText(String text) {
+ super.insertText(text);
+ if (getValue().isEmpty())
+ setSuggestion(Component.translatable("gui.easysurvival.teleport_set_gui.TeleportName").getString());
+ else
+ setSuggestion(null);
+ }
+
+ @Override
+ public void moveCursorTo(int pos) {
+ super.moveCursorTo(pos);
+ if (getValue().isEmpty())
+ setSuggestion(Component.translatable("gui.easysurvival.teleport_set_gui.TeleportName").getString());
+ else
+ setSuggestion(null);
+ }
+ };
+ TeleportName.setSuggestion(Component.translatable("gui.easysurvival.teleport_set_gui.TeleportName").getString());
+ TeleportName.setMaxLength(32767);
+ guistate.put("text:TeleportName", TeleportName);
+ this.addWidget(this.TeleportName);
+ button_set = Button.builder(Component.translatable("gui.easysurvival.teleport_set_gui.button_set"), e -> {
+ }).bounds(this.leftPos + 66, this.topPos + 106, 40, 20).build();
+ guistate.put("button:button_set", button_set);
+ this.addRenderableWidget(button_set);
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/client/gui/TeleporterGUIScreen.java b/src/main/java/ch/netquick/easysurvival/client/gui/TeleporterGUIScreen.java
new file mode 100644
index 0000000..2744740
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/client/gui/TeleporterGUIScreen.java
@@ -0,0 +1,93 @@
+package ch.netquick.easysurvival.client.gui;
+
+import net.minecraft.world.level.Level;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.network.chat.Component;
+import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
+import net.minecraft.client.gui.components.Button;
+import net.minecraft.client.gui.GuiGraphics;
+
+import java.util.HashMap;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+
+import ch.netquick.easysurvival.world.inventory.TeleporterGUIMenu;
+
+public class TeleporterGUIScreen extends AbstractContainerScreen {
+ private final static HashMap guistate = TeleporterGUIMenu.guistate;
+ private final Level world;
+ private final int x, y, z;
+ private final Player entity;
+ Button button_teleport;
+ Button button_teleport1;
+
+ public TeleporterGUIScreen(TeleporterGUIMenu container, Inventory inventory, Component text) {
+ super(container, inventory, text);
+ this.world = container.world;
+ this.x = container.x;
+ this.y = container.y;
+ this.z = container.z;
+ this.entity = container.entity;
+ this.imageWidth = 176;
+ this.imageHeight = 166;
+ }
+
+ private static final ResourceLocation texture = new ResourceLocation("easysurvival:textures/screens/teleporter_gui.png");
+
+ @Override
+ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
+ this.renderBackground(guiGraphics);
+ super.render(guiGraphics, mouseX, mouseY, partialTicks);
+ this.renderTooltip(guiGraphics, mouseX, mouseY);
+ }
+
+ @Override
+ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) {
+ RenderSystem.setShaderColor(1, 1, 1, 1);
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight);
+ RenderSystem.disableBlend();
+ }
+
+ @Override
+ public boolean keyPressed(int key, int b, int c) {
+ if (key == 256) {
+ this.minecraft.player.closeContainer();
+ return true;
+ }
+ return super.keyPressed(key, b, c);
+ }
+
+ @Override
+ public void containerTick() {
+ super.containerTick();
+ }
+
+ @Override
+ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.teleporter_gui.label_teleport_1"), 6, 25, -12829636, false);
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.teleporter_gui.label_teleport_2"), 6, 52, -12829636, false);
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.teleporter_gui.label_easyteleport"), 6, 7, -12829636, false);
+ }
+
+ @Override
+ public void onClose() {
+ super.onClose();
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ button_teleport = Button.builder(Component.translatable("gui.easysurvival.teleporter_gui.button_teleport"), e -> {
+ }).bounds(this.leftPos + 78, this.topPos + 25, 65, 20).build();
+ guistate.put("button:button_teleport", button_teleport);
+ this.addRenderableWidget(button_teleport);
+ button_teleport1 = Button.builder(Component.translatable("gui.easysurvival.teleporter_gui.button_teleport1"), e -> {
+ }).bounds(this.leftPos + 78, this.topPos + 52, 65, 20).build();
+ guistate.put("button:button_teleport1", button_teleport1);
+ this.addRenderableWidget(button_teleport1);
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/client/gui/TreeCropGUIScreen.java b/src/main/java/ch/netquick/easysurvival/client/gui/TreeCropGUIScreen.java
new file mode 100644
index 0000000..c5219da
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/client/gui/TreeCropGUIScreen.java
@@ -0,0 +1,80 @@
+package ch.netquick.easysurvival.client.gui;
+
+import net.minecraft.world.level.Level;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.network.chat.Component;
+import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
+import net.minecraft.client.gui.GuiGraphics;
+
+import java.util.HashMap;
+
+import com.mojang.blaze3d.systems.RenderSystem;
+
+import ch.netquick.easysurvival.world.inventory.TreeCropGUIMenu;
+
+public class TreeCropGUIScreen extends AbstractContainerScreen {
+ private final static HashMap guistate = TreeCropGUIMenu.guistate;
+ private final Level world;
+ private final int x, y, z;
+ private final Player entity;
+
+ public TreeCropGUIScreen(TreeCropGUIMenu container, Inventory inventory, Component text) {
+ super(container, inventory, text);
+ this.world = container.world;
+ this.x = container.x;
+ this.y = container.y;
+ this.z = container.z;
+ this.entity = container.entity;
+ this.imageWidth = 176;
+ this.imageHeight = 166;
+ }
+
+ private static final ResourceLocation texture = new ResourceLocation("easysurvival:textures/screens/tree_crop_gui.png");
+
+ @Override
+ public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
+ this.renderBackground(guiGraphics);
+ super.render(guiGraphics, mouseX, mouseY, partialTicks);
+ this.renderTooltip(guiGraphics, mouseX, mouseY);
+ }
+
+ @Override
+ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int gx, int gy) {
+ RenderSystem.setShaderColor(1, 1, 1, 1);
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ guiGraphics.blit(texture, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight, this.imageWidth, this.imageHeight);
+ RenderSystem.disableBlend();
+ }
+
+ @Override
+ public boolean keyPressed(int key, int b, int c) {
+ if (key == 256) {
+ this.minecraft.player.closeContainer();
+ return true;
+ }
+ return super.keyPressed(key, b, c);
+ }
+
+ @Override
+ public void containerTick() {
+ super.containerTick();
+ }
+
+ @Override
+ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
+ guiGraphics.drawString(this.font, Component.translatable("gui.easysurvival.tree_crop_gui.label_treecrop"), 6, 10, -12829636, false);
+ }
+
+ @Override
+ public void onClose() {
+ super.onClose();
+ }
+
+ @Override
+ public void init() {
+ super.init();
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/init/EasysurvivalModBlockEntities.java b/src/main/java/ch/netquick/easysurvival/init/EasysurvivalModBlockEntities.java
new file mode 100644
index 0000000..b7f7183
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/init/EasysurvivalModBlockEntities.java
@@ -0,0 +1,46 @@
+
+/*
+ * MCreator note: This file will be REGENERATED on each build.
+ */
+package ch.netquick.easysurvival.init;
+
+import net.minecraftforge.registries.RegistryObject;
+import net.minecraftforge.registries.ForgeRegistries;
+import net.minecraftforge.registries.DeferredRegister;
+
+import net.minecraft.world.level.block.entity.BlockEntityType;
+import net.minecraft.world.level.block.Block;
+
+import ch.netquick.easysurvival.block.entity.TreeCropBlockEntity;
+import ch.netquick.easysurvival.block.entity.TeleporterPlateBlockEntity;
+import ch.netquick.easysurvival.block.entity.EasySmelterBlockEntity;
+import ch.netquick.easysurvival.block.entity.EasySawBlockEntity;
+import ch.netquick.easysurvival.block.entity.EasyIntakeBlockEntity;
+import ch.netquick.easysurvival.block.entity.EasyFridgeBlockEntity;
+import ch.netquick.easysurvival.block.entity.EasyForgeBlockEntity;
+import ch.netquick.easysurvival.block.entity.EasyForgeAutoBlockEntity;
+import ch.netquick.easysurvival.block.entity.EasyEnchantmentTableBlockEntity;
+import ch.netquick.easysurvival.block.entity.EasyConverterBlockEntity;
+import ch.netquick.easysurvival.block.entity.EasyAnvilBlockEntity;
+import ch.netquick.easysurvival.block.entity.CropBlockEntity;
+import ch.netquick.easysurvival.EasysurvivalMod;
+
+public class EasysurvivalModBlockEntities {
+ public static final DeferredRegister> REGISTRY = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, EasysurvivalMod.MODID);
+ public static final RegistryObject> CROP = register("crop", EasysurvivalModBlocks.CROP, CropBlockEntity::new);
+ public static final RegistryObject> TREE_CROP = register("tree_crop", EasysurvivalModBlocks.TREE_CROP, TreeCropBlockEntity::new);
+ public static final RegistryObject> EASY_ENCHANTMENT_TABLE = register("easy_enchantment_table", EasysurvivalModBlocks.EASY_ENCHANTMENT_TABLE, EasyEnchantmentTableBlockEntity::new);
+ public static final RegistryObject> EASY_ANVIL = register("easy_anvil", EasysurvivalModBlocks.EASY_ANVIL, EasyAnvilBlockEntity::new);
+ public static final RegistryObject> EASY_FORGE = register("easy_forge", EasysurvivalModBlocks.EASY_FORGE, EasyForgeBlockEntity::new);
+ public static final RegistryObject> TELEPORTER_PLATE = register("teleporter_plate", EasysurvivalModBlocks.TELEPORTER_PLATE, TeleporterPlateBlockEntity::new);
+ public static final RegistryObject> EASY_FRIDGE = register("easy_fridge", EasysurvivalModBlocks.EASY_FRIDGE, EasyFridgeBlockEntity::new);
+ public static final RegistryObject> EASY_SMELTER = register("easy_smelter", EasysurvivalModBlocks.EASY_SMELTER, EasySmelterBlockEntity::new);
+ public static final RegistryObject> EASY_SAW = register("easy_saw", EasysurvivalModBlocks.EASY_SAW, EasySawBlockEntity::new);
+ public static final RegistryObject> EASY_INTAKE = register("easy_intake", EasysurvivalModBlocks.EASY_INTAKE, EasyIntakeBlockEntity::new);
+ public static final RegistryObject> EASY_FORGE_AUTO = register("easy_forge_auto", EasysurvivalModBlocks.EASY_FORGE_AUTO, EasyForgeAutoBlockEntity::new);
+ public static final RegistryObject> EASY_CONVERTER = register("easy_converter", EasysurvivalModBlocks.EASY_CONVERTER, EasyConverterBlockEntity::new);
+
+ private static RegistryObject> register(String registryname, RegistryObject block, BlockEntityType.BlockEntitySupplier> supplier) {
+ return REGISTRY.register(registryname, () -> BlockEntityType.Builder.of(supplier, block.get()).build(null));
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/init/EasysurvivalModBlocks.java b/src/main/java/ch/netquick/easysurvival/init/EasysurvivalModBlocks.java
new file mode 100644
index 0000000..c2c8d3c
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/init/EasysurvivalModBlocks.java
@@ -0,0 +1,57 @@
+
+/*
+ * MCreator note: This file will be REGENERATED on each build.
+ */
+package ch.netquick.easysurvival.init;
+
+import net.minecraftforge.registries.RegistryObject;
+import net.minecraftforge.registries.ForgeRegistries;
+import net.minecraftforge.registries.DeferredRegister;
+
+import net.minecraft.world.level.block.Block;
+
+import ch.netquick.easysurvival.block.TreeCropBlock;
+import ch.netquick.easysurvival.block.TeleporterPlateBlock;
+import ch.netquick.easysurvival.block.SpawnerWitherSkelettBlock;
+import ch.netquick.easysurvival.block.SpawnerSlimeBlock;
+import ch.netquick.easysurvival.block.SpawnerPillagerBlock;
+import ch.netquick.easysurvival.block.SpawnerGhastBlock;
+import ch.netquick.easysurvival.block.SpawnerEvokerBlock;
+import ch.netquick.easysurvival.block.SpawnerCreeperBlock;
+import ch.netquick.easysurvival.block.SpawnerBlazeBlock;
+import ch.netquick.easysurvival.block.EasySmelterBlock;
+import ch.netquick.easysurvival.block.EasySawBlock;
+import ch.netquick.easysurvival.block.EasyIntakeBlock;
+import ch.netquick.easysurvival.block.EasyFridgeBlock;
+import ch.netquick.easysurvival.block.EasyForgeBlock;
+import ch.netquick.easysurvival.block.EasyForgeAutoBlock;
+import ch.netquick.easysurvival.block.EasyEnchantmentTableBlock;
+import ch.netquick.easysurvival.block.EasyConverterBlock;
+import ch.netquick.easysurvival.block.EasyAnvilBlock;
+import ch.netquick.easysurvival.block.CropBlock;
+import ch.netquick.easysurvival.EasysurvivalMod;
+
+public class EasysurvivalModBlocks {
+ public static final DeferredRegister REGISTRY = DeferredRegister.create(ForgeRegistries.BLOCKS, EasysurvivalMod.MODID);
+ public static final RegistryObject CROP = REGISTRY.register("crop", () -> new CropBlock());
+ public static final RegistryObject TREE_CROP = REGISTRY.register("tree_crop", () -> new TreeCropBlock());
+ public static final RegistryObject SPAWNER_BLAZE = REGISTRY.register("spawner_blaze", () -> new SpawnerBlazeBlock());
+ public static final RegistryObject SPAWNER_SLIME = REGISTRY.register("spawner_slime", () -> new SpawnerSlimeBlock());
+ public static final RegistryObject SPAWNER_GHAST = REGISTRY.register("spawner_ghast", () -> new SpawnerGhastBlock());
+ public static final RegistryObject EASY_ENCHANTMENT_TABLE = REGISTRY.register("easy_enchantment_table", () -> new EasyEnchantmentTableBlock());
+ public static final RegistryObject EASY_ANVIL = REGISTRY.register("easy_anvil", () -> new EasyAnvilBlock());
+ public static final RegistryObject EASY_FORGE = REGISTRY.register("easy_forge", () -> new EasyForgeBlock());
+ public static final RegistryObject TELEPORTER_PLATE = REGISTRY.register("teleporter_plate", () -> new TeleporterPlateBlock());
+ public static final RegistryObject EASY_FRIDGE = REGISTRY.register("easy_fridge", () -> new EasyFridgeBlock());
+ public static final RegistryObject SPAWNER_WITHER_SKELETT = REGISTRY.register("spawner_wither_skelett", () -> new SpawnerWitherSkelettBlock());
+ public static final RegistryObject EASY_SMELTER = REGISTRY.register("easy_smelter", () -> new EasySmelterBlock());
+ public static final RegistryObject SPAWNER_CREEPER = REGISTRY.register("spawner_creeper", () -> new SpawnerCreeperBlock());
+ public static final RegistryObject EASY_SAW = REGISTRY.register("easy_saw", () -> new EasySawBlock());
+ public static final RegistryObject SPAWNER_PILLAGER = REGISTRY.register("spawner_pillager", () -> new SpawnerPillagerBlock());
+ public static final RegistryObject SPAWNER_EVOKER = REGISTRY.register("spawner_evoker", () -> new SpawnerEvokerBlock());
+ public static final RegistryObject EASY_INTAKE = REGISTRY.register("easy_intake", () -> new EasyIntakeBlock());
+ public static final RegistryObject EASY_FORGE_AUTO = REGISTRY.register("easy_forge_auto", () -> new EasyForgeAutoBlock());
+ public static final RegistryObject EASY_CONVERTER = REGISTRY.register("easy_converter", () -> new EasyConverterBlock());
+ // Start of user code block custom blocks
+ // End of user code block custom blocks
+}
diff --git a/src/main/java/ch/netquick/easysurvival/init/EasysurvivalModGameRules.java b/src/main/java/ch/netquick/easysurvival/init/EasysurvivalModGameRules.java
new file mode 100644
index 0000000..dc23df9
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/init/EasysurvivalModGameRules.java
@@ -0,0 +1,14 @@
+
+/*
+ * MCreator note: This file will be REGENERATED on each build.
+ */
+package ch.netquick.easysurvival.init;
+
+import net.minecraftforge.fml.common.Mod;
+
+import net.minecraft.world.level.GameRules;
+
+@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
+public class EasysurvivalModGameRules {
+ public static final GameRules.Key SPAWNERSACTIVE = GameRules.register("spawnersActive", GameRules.Category.SPAWNING, GameRules.BooleanValue.create(false));
+}
diff --git a/src/main/java/ch/netquick/easysurvival/init/EasysurvivalModItems.java b/src/main/java/ch/netquick/easysurvival/init/EasysurvivalModItems.java
new file mode 100644
index 0000000..b80d7a1
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/init/EasysurvivalModItems.java
@@ -0,0 +1,83 @@
+
+/*
+ * MCreator note: This file will be REGENERATED on each build.
+ */
+package ch.netquick.easysurvival.init;
+
+import net.minecraftforge.registries.RegistryObject;
+import net.minecraftforge.registries.ForgeRegistries;
+import net.minecraftforge.registries.DeferredRegister;
+
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.item.Item;
+import net.minecraft.world.item.BlockItem;
+
+import ch.netquick.easysurvival.item.QuarzSwordItem;
+import ch.netquick.easysurvival.item.QuarzShovelItem;
+import ch.netquick.easysurvival.item.QuarzPickaxeItem;
+import ch.netquick.easysurvival.item.QuarzHoeItem;
+import ch.netquick.easysurvival.item.QuarzAxeItem;
+import ch.netquick.easysurvival.item.PortableCraftingTableItem;
+import ch.netquick.easysurvival.item.NetherrackSwordItem;
+import ch.netquick.easysurvival.item.NetherrackShovelItem;
+import ch.netquick.easysurvival.item.NetherrackPickaxeItem;
+import ch.netquick.easysurvival.item.NetherrackHoeItem;
+import ch.netquick.easysurvival.item.NetherrackAxeItem;
+import ch.netquick.easysurvival.item.NetherrackArmorItem;
+import ch.netquick.easysurvival.item.NetherStickItem;
+import ch.netquick.easysurvival.item.BasaltSwordItem;
+import ch.netquick.easysurvival.item.BasaltShovelItem;
+import ch.netquick.easysurvival.item.BasaltPickaxeItem;
+import ch.netquick.easysurvival.item.BasaltHoeItem;
+import ch.netquick.easysurvival.item.BasaltAxeItem;
+import ch.netquick.easysurvival.EasysurvivalMod;
+
+public class EasysurvivalModItems {
+ public static final DeferredRegister- REGISTRY = DeferredRegister.create(ForgeRegistries.ITEMS, EasysurvivalMod.MODID);
+ public static final RegistryObject
- NETHER_STICK = REGISTRY.register("nether_stick", () -> new NetherStickItem());
+ public static final RegistryObject
- CROP = block(EasysurvivalModBlocks.CROP);
+ public static final RegistryObject
- NETHERRACK_PICKAXE = REGISTRY.register("netherrack_pickaxe", () -> new NetherrackPickaxeItem());
+ public static final RegistryObject
- NETHERRACK_AXE = REGISTRY.register("netherrack_axe", () -> new NetherrackAxeItem());
+ public static final RegistryObject
- NETHERRACK_SWORD = REGISTRY.register("netherrack_sword", () -> new NetherrackSwordItem());
+ public static final RegistryObject
- NETHERRACK_SHOVEL = REGISTRY.register("netherrack_shovel", () -> new NetherrackShovelItem());
+ public static final RegistryObject
- NETHERRACK_HOE = REGISTRY.register("netherrack_hoe", () -> new NetherrackHoeItem());
+ public static final RegistryObject
- TREE_CROP = block(EasysurvivalModBlocks.TREE_CROP);
+ public static final RegistryObject
- BASALT_PICKAXE = REGISTRY.register("basalt_pickaxe", () -> new BasaltPickaxeItem());
+ public static final RegistryObject
- BASALT_AXE = REGISTRY.register("basalt_axe", () -> new BasaltAxeItem());
+ public static final RegistryObject
- BASALT_SWORD = REGISTRY.register("basalt_sword", () -> new BasaltSwordItem());
+ public static final RegistryObject
- BASALT_SHOVEL = REGISTRY.register("basalt_shovel", () -> new BasaltShovelItem());
+ public static final RegistryObject
- BASALT_HOE = REGISTRY.register("basalt_hoe", () -> new BasaltHoeItem());
+ public static final RegistryObject
- NETHERRACK_ARMOR_HELMET = REGISTRY.register("netherrack_armor_helmet", () -> new NetherrackArmorItem.Helmet());
+ public static final RegistryObject
- NETHERRACK_ARMOR_CHESTPLATE = REGISTRY.register("netherrack_armor_chestplate", () -> new NetherrackArmorItem.Chestplate());
+ public static final RegistryObject
- NETHERRACK_ARMOR_LEGGINGS = REGISTRY.register("netherrack_armor_leggings", () -> new NetherrackArmorItem.Leggings());
+ public static final RegistryObject
- NETHERRACK_ARMOR_BOOTS = REGISTRY.register("netherrack_armor_boots", () -> new NetherrackArmorItem.Boots());
+ public static final RegistryObject
- QUARZ_PICKAXE = REGISTRY.register("quarz_pickaxe", () -> new QuarzPickaxeItem());
+ public static final RegistryObject
- QUARZ_AXE = REGISTRY.register("quarz_axe", () -> new QuarzAxeItem());
+ public static final RegistryObject
- QUARZ_SWORD = REGISTRY.register("quarz_sword", () -> new QuarzSwordItem());
+ public static final RegistryObject
- QUARZ_SHOVEL = REGISTRY.register("quarz_shovel", () -> new QuarzShovelItem());
+ public static final RegistryObject
- QUARZ_HOE = REGISTRY.register("quarz_hoe", () -> new QuarzHoeItem());
+ public static final RegistryObject
- SPAWNER_BLAZE = block(EasysurvivalModBlocks.SPAWNER_BLAZE);
+ public static final RegistryObject
- SPAWNER_SLIME = block(EasysurvivalModBlocks.SPAWNER_SLIME);
+ public static final RegistryObject
- SPAWNER_GHAST = block(EasysurvivalModBlocks.SPAWNER_GHAST);
+ public static final RegistryObject
- EASY_ENCHANTMENT_TABLE = block(EasysurvivalModBlocks.EASY_ENCHANTMENT_TABLE);
+ public static final RegistryObject
- EASY_ANVIL = block(EasysurvivalModBlocks.EASY_ANVIL);
+ public static final RegistryObject
- EASY_FORGE = block(EasysurvivalModBlocks.EASY_FORGE);
+ public static final RegistryObject
- TELEPORTER_PLATE = block(EasysurvivalModBlocks.TELEPORTER_PLATE);
+ public static final RegistryObject
- PORTABLE_CRAFTING_TABLE = REGISTRY.register("portable_crafting_table", () -> new PortableCraftingTableItem());
+ public static final RegistryObject
- EASY_FRIDGE = block(EasysurvivalModBlocks.EASY_FRIDGE);
+ public static final RegistryObject
- SPAWNER_WITHER_SKELETT = block(EasysurvivalModBlocks.SPAWNER_WITHER_SKELETT);
+ public static final RegistryObject
- EASY_SMELTER = block(EasysurvivalModBlocks.EASY_SMELTER);
+ public static final RegistryObject
- SPAWNER_CREEPER = block(EasysurvivalModBlocks.SPAWNER_CREEPER);
+ public static final RegistryObject
- EASY_SAW = block(EasysurvivalModBlocks.EASY_SAW);
+ public static final RegistryObject
- SPAWNER_PILLAGER = block(EasysurvivalModBlocks.SPAWNER_PILLAGER);
+ public static final RegistryObject
- SPAWNER_EVOKER = block(EasysurvivalModBlocks.SPAWNER_EVOKER);
+ public static final RegistryObject
- EASY_INTAKE = block(EasysurvivalModBlocks.EASY_INTAKE);
+ public static final RegistryObject
- EASY_FORGE_AUTO = block(EasysurvivalModBlocks.EASY_FORGE_AUTO);
+ public static final RegistryObject
- EASY_CONVERTER = block(EasysurvivalModBlocks.EASY_CONVERTER);
+
+ // Start of user code block custom items
+ // End of user code block custom items
+ private static RegistryObject
- block(RegistryObject block) {
+ return REGISTRY.register(block.getId().getPath(), () -> new BlockItem(block.get(), new Item.Properties()));
+ }
+}
diff --git a/src/main/java/ch/netquick/easysurvival/init/EasysurvivalModMenus.java b/src/main/java/ch/netquick/easysurvival/init/EasysurvivalModMenus.java
new file mode 100644
index 0000000..a6c4fb7
--- /dev/null
+++ b/src/main/java/ch/netquick/easysurvival/init/EasysurvivalModMenus.java
@@ -0,0 +1,46 @@
+
+/*
+ * MCreator note: This file will be REGENERATED on each build.
+ */
+package ch.netquick.easysurvival.init;
+
+import net.minecraftforge.registries.RegistryObject;
+import net.minecraftforge.registries.ForgeRegistries;
+import net.minecraftforge.registries.DeferredRegister;
+import net.minecraftforge.common.extensions.IForgeMenuType;
+
+import net.minecraft.world.inventory.MenuType;
+
+import ch.netquick.easysurvival.world.inventory.TreeCropGUIMenu;
+import ch.netquick.easysurvival.world.inventory.TeleporterGUIMenu;
+import ch.netquick.easysurvival.world.inventory.TeleportSetGUIMenu;
+import ch.netquick.easysurvival.world.inventory.EasySmelterGUIMenu;
+import ch.netquick.easysurvival.world.inventory.EasySawGUIMenu;
+import ch.netquick.easysurvival.world.inventory.EasyIntakeGUIMenu;
+import ch.netquick.easysurvival.world.inventory.EasyFridgeGUIMenu;
+import ch.netquick.easysurvival.world.inventory.EasyForgeGUIMenu;
+import ch.netquick.easysurvival.world.inventory.EasyEnchantmentTableGUIMenu;
+import ch.netquick.easysurvival.world.inventory.EasyConverterGUIMenu;
+import ch.netquick.easysurvival.world.inventory.EasyAnvilGUIMenu;
+import ch.netquick.easysurvival.world.inventory.DedicatedStorageGUIMenu;
+import ch.netquick.easysurvival.world.inventory.CropGUIMenu;
+import ch.netquick.easysurvival.world.inventory.CraftingStickGUIMenu;
+import ch.netquick.easysurvival.EasysurvivalMod;
+
+public class EasysurvivalModMenus {
+ public static final DeferredRegister> REGISTRY = DeferredRegister.create(ForgeRegistries.MENU_TYPES, EasysurvivalMod.MODID);
+ public static final RegistryObject> CROP_GUI = REGISTRY.register("crop_gui", () -> IForgeMenuType.create(CropGUIMenu::new));
+ public static final RegistryObject