This commit is contained in:
Seaswimmer 2023-11-18 19:29:52 -05:00
parent d26953bcae
commit ba84ca3c62
57 changed files with 2342 additions and 69 deletions

View file

@ -56,7 +56,7 @@
"material": { "material": {
"value": "ROCK" "value": "ROCK"
}, },
"tickRate": 0, "tickRate": 20,
"tickRandomly": false, "tickRandomly": false,
"isReplaceable": false, "isReplaceable": false,
"canProvidePower": false, "canProvidePower": false,
@ -100,13 +100,13 @@
"unbreakable": false, "unbreakable": false,
"breakHarvestLevel": 1, "breakHarvestLevel": 1,
"isBonemealable": false, "isBonemealable": false,
"hasInventory": false, "hasInventory": true,
"guiBoundTo": "<NONE>", "guiBoundTo": "<NONE>",
"openGUIOnRightClick": false, "openGUIOnRightClick": false,
"inventorySize": 9, "inventorySize": 0,
"inventoryStackSize": 64, "inventoryStackSize": 64,
"inventoryDropWhenDestroyed": true, "inventoryDropWhenDestroyed": false,
"inventoryComparatorPower": true, "inventoryComparatorPower": false,
"inventoryOutSlotIDs": [], "inventoryOutSlotIDs": [],
"inventoryInSlotIDs": [], "inventoryInSlotIDs": [],
"hasEnergyStorage": false, "hasEnergyStorage": false,
@ -119,20 +119,7 @@
"fluidRestrictions": [], "fluidRestrictions": [],
"spawnWorldTypes": [], "spawnWorldTypes": [],
"restrictionBiomes": [], "restrictionBiomes": [],
"blocksToReplace": [ "blocksToReplace": [],
{
"value": "Blocks.STONE#0"
},
{
"value": "Blocks.STONE#1"
},
{
"value": "Blocks.STONE#3"
},
{
"value": "Blocks.STONE#5"
}
],
"generationShape": "UNIFORM", "generationShape": "UNIFORM",
"frequencyPerChunks": 10, "frequencyPerChunks": 10,
"frequencyOnChunk": 16, "frequencyOnChunk": 16,

View file

@ -2,12 +2,12 @@
"_fv": 47, "_fv": 47,
"_type": "block", "_type": "block",
"definition": { "definition": {
"texture": "heart", "texture": "heartblock",
"textureTop": "heart", "textureTop": "heartblock",
"textureLeft": "heart", "textureLeft": "heartblock",
"textureFront": "heart", "textureFront": "heartblock",
"textureRight": "heart", "textureRight": "heartblock",
"textureBack": "heart", "textureBack": "heartblock",
"renderType": 10, "renderType": 10,
"customModelName": "Normal", "customModelName": "Normal",
"rotationMode": 0, "rotationMode": 0,

View file

@ -0,0 +1,129 @@
{
"_fv": 47,
"_type": "block",
"definition": {
"texture": "heartcluster",
"textureTop": "",
"textureLeft": "",
"textureFront": "",
"textureRight": "",
"textureBack": "",
"renderType": 12,
"customModelName": "Cross model",
"rotationMode": 2,
"enablePitch": false,
"emissiveRendering": false,
"displayFluidOverlay": false,
"itemTexture": "heartcluster",
"particleTexture": "",
"tintType": "No tint",
"isItemTinted": false,
"hasTransparency": false,
"connectedSides": false,
"transparencyType": "CUTOUT",
"disableOffset": false,
"boundingBoxes": [
{
"mx": 0.0,
"my": 0.0,
"mz": 0.0,
"Mx": 16.0,
"My": 16.0,
"Mz": 16.0,
"subtract": false
}
],
"name": "Heart Cluster",
"specialInfo": [],
"hardness": 1.0,
"resistance": 10.0,
"hasGravity": false,
"isWaterloggable": true,
"creativeTab": {
"value": "No creative tab entry"
},
"destroyTool": "pickaxe",
"customDrop": {
"value": ""
},
"dropAmount": 4,
"useLootTableForDrops": false,
"requiresCorrectTool": true,
"enchantPowerBonus": 0.0,
"plantsGrowOn": false,
"canRedstoneConnect": false,
"lightOpacity": 0,
"material": {
"value": "GLASS"
},
"tickRate": 20,
"tickRandomly": false,
"isReplaceable": false,
"canProvidePower": false,
"emittedRedstonePower": {
"fixedValue": 15.0
},
"colorOnMap": "RED_TERRACOTTA",
"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": "AMETHYST_CLUSTER"
},
"breakSound": {
"value": ""
},
"fallSound": {
"value": ""
},
"hitSound": {
"value": ""
},
"placeSound": {
"value": ""
},
"stepSound": {
"value": ""
},
"luminance": 0,
"unbreakable": false,
"breakHarvestLevel": 1,
"isBonemealable": false,
"hasInventory": true,
"guiBoundTo": "<NONE>",
"openGUIOnRightClick": false,
"inventorySize": 0,
"inventoryStackSize": 64,
"inventoryDropWhenDestroyed": false,
"inventoryComparatorPower": false,
"inventoryOutSlotIDs": [],
"inventoryInSlotIDs": [],
"hasEnergyStorage": false,
"energyInitial": 0,
"energyCapacity": 400000,
"energyMaxReceive": 200,
"energyMaxExtract": 200,
"isFluidTank": false,
"fluidCapacity": 8000,
"fluidRestrictions": [],
"spawnWorldTypes": [],
"restrictionBiomes": [],
"blocksToReplace": [],
"generationShape": "UNIFORM",
"frequencyPerChunks": 10,
"frequencyOnChunk": 16,
"minGenerateHeight": 0,
"maxGenerateHeight": 64
}
}

View file

@ -4,7 +4,7 @@
"definition": { "definition": {
"name": "Heart Geodes", "name": "Heart Geodes",
"icon": { "icon": {
"value": "CUSTOM:BuddingHeartBlock" "value": "CUSTOM:HeartCluster"
}, },
"showSearch": false "showSearch": false
} }

View file

@ -0,0 +1,129 @@
{
"_fv": 47,
"_type": "block",
"definition": {
"texture": "largeheartbud",
"textureTop": "",
"textureLeft": "",
"textureFront": "",
"textureRight": "",
"textureBack": "",
"renderType": 12,
"customModelName": "Cross model",
"rotationMode": 2,
"enablePitch": false,
"emissiveRendering": false,
"displayFluidOverlay": false,
"itemTexture": "largeheartbud",
"particleTexture": "",
"tintType": "No tint",
"isItemTinted": false,
"hasTransparency": true,
"connectedSides": false,
"transparencyType": "CUTOUT",
"disableOffset": false,
"boundingBoxes": [
{
"mx": 0.125,
"my": 0.125,
"mz": 0.0,
"Mx": 0.875,
"My": 0.875,
"Mz": 1.0,
"subtract": false
}
],
"name": "Large Heart Bud",
"specialInfo": [],
"hardness": 1.0,
"resistance": 10.0,
"hasGravity": false,
"isWaterloggable": false,
"creativeTab": {
"value": "No creative tab entry"
},
"destroyTool": "pickaxe",
"customDrop": {
"value": ""
},
"dropAmount": 0,
"useLootTableForDrops": false,
"requiresCorrectTool": true,
"enchantPowerBonus": 0.0,
"plantsGrowOn": false,
"canRedstoneConnect": false,
"lightOpacity": 0,
"material": {
"value": "GLASS"
},
"tickRate": 20,
"tickRandomly": false,
"isReplaceable": false,
"canProvidePower": false,
"emittedRedstonePower": {
"fixedValue": 15.0
},
"colorOnMap": "RED_TERRACOTTA",
"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": "AMETHYST_CLUSTER"
},
"breakSound": {
"value": ""
},
"fallSound": {
"value": ""
},
"hitSound": {
"value": ""
},
"placeSound": {
"value": ""
},
"stepSound": {
"value": ""
},
"luminance": 0,
"unbreakable": false,
"breakHarvestLevel": 1,
"isBonemealable": false,
"hasInventory": true,
"guiBoundTo": "<NONE>",
"openGUIOnRightClick": false,
"inventorySize": 0,
"inventoryStackSize": 64,
"inventoryDropWhenDestroyed": false,
"inventoryComparatorPower": false,
"inventoryOutSlotIDs": [],
"inventoryInSlotIDs": [],
"hasEnergyStorage": false,
"energyInitial": 0,
"energyCapacity": 400000,
"energyMaxReceive": 200,
"energyMaxExtract": 200,
"isFluidTank": false,
"fluidCapacity": 8000,
"fluidRestrictions": [],
"spawnWorldTypes": [],
"restrictionBiomes": [],
"blocksToReplace": [],
"generationShape": "UNIFORM",
"frequencyPerChunks": 10,
"frequencyOnChunk": 16,
"minGenerateHeight": 0,
"maxGenerateHeight": 64
}
}

View file

@ -0,0 +1,9 @@
{
"_fv": 47,
"_type": "command",
"definition": {
"commandName": "testrules",
"permissionLevel": "4",
"argsxml": "<xml xmlns=\"https://developers.google.com/blockly/xml\"><block type=\"args_start\" deletable=\"false\" x=\"40\" y=\"40\"><next><block type=\"logic\"><field name=\"name\">enable</field><statement name=\"args\"><block type=\"call_procedure\"><field name=\"procedure\">TestRulesP</field></block></statement></block></next></block></xml>"
}
}

View file

@ -0,0 +1,7 @@
{
"_fv": 47,
"_type": "procedure",
"definition": {
"procedurexml": "<xml xmlns=\"https://developers.google.com/blockly/xml\"><block type=\"event_trigger\" deletable=\"false\" x=\"65\" y=\"68\"><field name=\"trigger\">no_ext_trigger</field><next><block type=\"controls_if\"><mutation else=\"1\"></mutation><value name=\"IF0\"><block type=\"get_command_parameter_logic\"><field name=\"param\">enabled</field></block></value><statement name=\"DO0\"><block type=\"world_data_logic_setgamerule\"><field name=\"gamerulesboolean\">KEEP_INVENTORY</field><value name=\"gameruleValue\"><block type=\"logic_boolean\"><field name=\"BOOL\">TRUE</field></block></value><next><block type=\"world_data_logic_setgamerule\"><field name=\"gamerulesboolean\">DO_MOB_SPAWNING</field><value name=\"gameruleValue\"><block type=\"logic_boolean\"><field name=\"BOOL\">FALSE</field></block></value><next><block type=\"world_data_logic_setgamerule\"><field name=\"gamerulesboolean\">DO_DAYLIGHT_CYCLE</field><value name=\"gameruleValue\"><block type=\"logic_boolean\"><field name=\"BOOL\">FALSE</field></block></value><next><block type=\"world_data_logic_setgamerule\"><field name=\"gamerulesboolean\">DO_WEATHER_CYCLE</field><value name=\"gameruleValue\"><block type=\"logic_boolean\"><field name=\"BOOL\">FALSE</field></block></value><next><block type=\"entity_send_chat\"><value name=\"text\"><block type=\"text\"><field name=\"TEXT\">Test rules enabled!</field></block></value><value name=\"entity\"><block type=\"entity_from_deps\"></block></value><value name=\"actbar\"><block type=\"logic_boolean\"><field name=\"BOOL\">FALSE</field></block></value></block></next></block></next></block></next></block></next></block></statement><statement name=\"ELSE\"><block type=\"world_data_logic_setgamerule\"><field name=\"gamerulesboolean\">KEEP_INVENTORY</field><value name=\"gameruleValue\"><block type=\"logic_boolean\"><field name=\"BOOL\">FALSE</field></block></value><next><block type=\"world_data_logic_setgamerule\"><field name=\"gamerulesboolean\">DO_MOB_SPAWNING</field><value name=\"gameruleValue\"><block type=\"logic_boolean\"><field name=\"BOOL\">TRUE</field></block></value><next><block type=\"world_data_logic_setgamerule\"><field name=\"gamerulesboolean\">DO_DAYLIGHT_CYCLE</field><value name=\"gameruleValue\"><block type=\"logic_boolean\"><field name=\"BOOL\">TRUE</field></block></value><next><block type=\"world_data_logic_setgamerule\"><field name=\"gamerulesboolean\">DO_WEATHER_CYCLE</field><value name=\"gameruleValue\"><block type=\"logic_boolean\"><field name=\"BOOL\">TRUE</field></block></value><next><block type=\"entity_send_chat\"><value name=\"text\"><block type=\"text\"><field name=\"TEXT\">Test rules disabled!</field></block></value><value name=\"entity\"><block type=\"entity_from_deps\"></block></value><value name=\"actbar\"><block type=\"logic_boolean\"><field name=\"BOOL\">FALSE</field></block></value></block></next></block></next></block></next></block></next></block></statement></block></next></block></xml>"
}
}

View file

@ -9,10 +9,11 @@
"registry_name": "budding_heart_block", "registry_name": "budding_heart_block",
"metadata": { "metadata": {
"files": [ "files": [
"src/main/java/net/seaswimmerthefsh/heartgeodes/block/entity/BuddingHeartBlockBlockEntity.java",
"src/main/resources/assets/heartgeodes/models/block/budding_heart_block.json", "src/main/resources/assets/heartgeodes/models/block/budding_heart_block.json",
"src/main/resources/assets/heartgeodes/blockstates/budding_heart_block.json", "src/main/resources/assets/heartgeodes/blockstates/budding_heart_block.json",
"src/main/resources/assets/heartgeodes/models/item/budding_heart_block.json", "src/main/resources/assets/heartgeodes/models/item/budding_heart_block.json",
"src/main/java/net/mcreator/heartgeodes/block/BuddingHeartBlockBlock.java" "src/main/java/net/seaswimmerthefsh/heartgeodes/block/BuddingHeartBlockBlock.java"
] ]
} }
}, },
@ -26,7 +27,7 @@
"metadata": { "metadata": {
"files": [ "files": [
"src/main/resources/assets/heartgeodes/models/item/heart_block.json", "src/main/resources/assets/heartgeodes/models/item/heart_block.json",
"src/main/java/net/mcreator/heartgeodes/block/HeartBlockBlock.java", "src/main/java/net/seaswimmerthefsh/heartgeodes/block/HeartBlockBlock.java",
"src/main/resources/assets/heartgeodes/blockstates/heart_block.json", "src/main/resources/assets/heartgeodes/blockstates/heart_block.json",
"src/main/resources/assets/heartgeodes/models/block/heart_block.json" "src/main/resources/assets/heartgeodes/models/block/heart_block.json"
] ]
@ -42,6 +43,80 @@
"metadata": { "metadata": {
"files": [] "files": []
} }
},
{
"name": "HeartCluster",
"type": "block",
"sortid": 4,
"compiles": true,
"locked_code": false,
"registry_name": "heart_cluster",
"metadata": {
"files": [
"src/main/java/net/seaswimmerthefsh/heartgeodes/block/HeartClusterBlock.java",
"src/main/java/net/seaswimmerthefsh/heartgeodes/block/entity/HeartClusterBlockEntity.java",
"src/main/resources/assets/heartgeodes/models/block/heart_cluster.json",
"src/main/resources/assets/heartgeodes/blockstates/heart_cluster.json",
"src/main/resources/assets/heartgeodes/models/item/heart_cluster.json"
]
}
},
{
"name": "LargeHeartBud",
"type": "block",
"sortid": 5,
"compiles": true,
"locked_code": false,
"registry_name": "large_heart_bud",
"metadata": {
"files": [
"src/main/resources/assets/heartgeodes/blockstates/large_heart_bud.json",
"src/main/resources/assets/heartgeodes/models/block/large_heart_bud.json",
"src/main/java/net/seaswimmerthefsh/heartgeodes/block/entity/LargeHeartBudBlockEntity.java",
"src/main/resources/assets/heartgeodes/models/item/large_heart_bud.json",
"src/main/java/net/seaswimmerthefsh/heartgeodes/block/LargeHeartBudBlock.java"
]
}
},
{
"name": "TestRules",
"type": "command",
"sortid": 6,
"compiles": true,
"locked_code": false,
"registry_name": "test_rules",
"metadata": {
"files": [
"src/main/java/net/seaswimmerthefsh/heartgeodes/command/TestRulesCommand.java"
]
}
},
{
"name": "TestRulesP",
"type": "procedure",
"sortid": 7,
"compiles": true,
"locked_code": false,
"registry_name": "test_rules_p",
"metadata": {
"files": [
"src/main/java/net/seaswimmerthefsh/heartgeodes/procedures/TestRulesPProcedure.java"
],
"dependencies": [
{
"name": "arguments",
"type": "cmdcontext"
},
{
"name": "entity",
"type": "entity"
},
{
"name": "world",
"type": "world"
}
]
}
} }
], ],
"variable_elements": [], "variable_elements": [],
@ -49,8 +124,10 @@
"language_map": { "language_map": {
"en_us": { "en_us": {
"block.heartgeodes.budding_heart_block": "Budding Heart Block", "block.heartgeodes.budding_heart_block": "Budding Heart Block",
"block.heartgeodes.heart_cluster": "Heart Cluster",
"block.heartgeodes.heart_block": "Heart Block", "block.heartgeodes.heart_block": "Heart Block",
"item_group.heartgeodes.heart_geodes": "Heart Geodes" "item_group.heartgeodes.heart_geodes": "Heart Geodes",
"block.heartgeodes.large_heart_bud": "Large Heart Bud"
} }
}, },
"foldersRoot": { "foldersRoot": {
@ -61,9 +138,10 @@
"modid": "heartgeodes", "modid": "heartgeodes",
"modName": "HeartGeodes", "modName": "HeartGeodes",
"version": "1.0.0", "version": "1.0.0",
"author": "seasw, MCreator", "description": "This mod adds Geodes for Scaling Difficulty to the game.",
"websiteURL": "https://mcreator.net", "author": "SeaswimmerTheFsh",
"license": "Academic Free License v3.0", "websiteURL": "https://coastalcommits.com/GalacticFactory/HeartGeodes",
"license": "MIT License",
"disableForgeVersionCheck": true, "disableForgeVersionCheck": true,
"serverSideOnly": false, "serverSideOnly": false,
"requiredMods": [], "requiredMods": [],
@ -71,7 +149,8 @@
"dependants": [], "dependants": [],
"mcreatorDependencies": [], "mcreatorDependencies": [],
"currentGenerator": "neoforge-1.20.1", "currentGenerator": "neoforge-1.20.1",
"modElementsPackage": "net.mcreator.heartgeodes", "credits": "Created using mod maker MCreator - https://mcreator.net/about",
"modElementsPackage": "net.seaswimmerthefsh.heartgeodes",
"lockBaseModFiles": false "lockBaseModFiles": false
}, },
"mcreatorVersion": 202300336712 "mcreatorVersion": 202300336712

60
models/crystal_0.json Normal file
View file

@ -0,0 +1,60 @@
{
"textures": {
"particle": "Desktop/ice_crystal_3",
"crystal": "Desktop/ice_crystal_3"
},
"display": {
"gui": {
"rotation": [ 30, 225, 0 ],
"translation": [ 0, 0, 0],
"scale":[ 0.625, 0.625, 0.625 ]
},
"ground": {
"rotation": [ 0, 0, 0 ],
"translation": [ 0, 3, 0],
"scale":[ 0.25, 0.25, 0.25 ]
},
"fixed": {
"rotation": [ 0, 0, 0 ],
"translation": [ 0, 0, 0],
"scale":[ 0.5, 0.5, 0.5 ]
},
"thirdperson_righthand": {
"rotation": [ 75, 45, 0 ],
"translation": [ 0, 2.5, 0],
"scale": [ 0.375, 0.375, 0.375 ]
},
"firstperson_righthand": {
"rotation": [ 0, 45, 0 ],
"translation": [ 0, 0, 0 ],
"scale": [ 0.40, 0.40, 0.40 ]
},
"firstperson_lefthand": {
"rotation": [ 0, 225, 0 ],
"translation": [ 0, 0, 0 ],
"scale": [ 0.40, 0.40, 0.40 ]
}
},
"elements": [
{
"name": "crystal1",
"from": [8, 0, 0],
"to": [8, 16, 16],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]},
"faces": {
"east": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#crystal"},
"west": {"uv": [0, 16, 16, 0], "rotation": 270, "texture": "#crystal"}
}
},
{
"name": "crystal2",
"from": [8, 0, 0],
"to": [8, 16, 16],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]},
"faces": {
"east": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#crystal"},
"west": {"uv": [0, 16, 16, 0], "rotation": 270, "texture": "#crystal"}
}
}
]
}

View file

@ -0,0 +1,10 @@
{
"mappings": {
"default": {
"map": {
"crystal": "smallheartbud"
},
"name": "default"
}
}
}

60
models/crystal_1.json Normal file
View file

@ -0,0 +1,60 @@
{
"textures": {
"particle": "Desktop/ice_crystal_3",
"crystal": "Desktop/ice_crystal_3"
},
"display": {
"gui": {
"rotation": [ 30, 225, 0 ],
"translation": [ 0, 0, 0],
"scale":[ 0.625, 0.625, 0.625 ]
},
"ground": {
"rotation": [ 0, 0, 0 ],
"translation": [ 0, 3, 0],
"scale":[ 0.25, 0.25, 0.25 ]
},
"fixed": {
"rotation": [ 0, 0, 0 ],
"translation": [ 0, 0, 0],
"scale":[ 0.5, 0.5, 0.5 ]
},
"thirdperson_righthand": {
"rotation": [ 75, 45, 0 ],
"translation": [ 0, 2.5, 0],
"scale": [ 0.375, 0.375, 0.375 ]
},
"firstperson_righthand": {
"rotation": [ 0, 45, 0 ],
"translation": [ 0, 0, 0 ],
"scale": [ 0.40, 0.40, 0.40 ]
},
"firstperson_lefthand": {
"rotation": [ 0, 225, 0 ],
"translation": [ 0, 0, 0 ],
"scale": [ 0.40, 0.40, 0.40 ]
}
},
"elements": [
{
"name": "crystal1",
"from": [8, 0, 0],
"to": [8, 16, 16],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]},
"faces": {
"east": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#crystal"},
"west": {"uv": [0, 16, 16, 0], "rotation": 270, "texture": "#crystal"}
}
},
{
"name": "crystal2",
"from": [8, 0, 0],
"to": [8, 16, 16],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]},
"faces": {
"east": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#crystal"},
"west": {"uv": [0, 16, 16, 0], "rotation": 270, "texture": "#crystal"}
}
}
]
}

View file

@ -0,0 +1,10 @@
{
"mappings": {
"default": {
"map": {
"crystal": "mediumheartbud"
},
"name": "default"
}
}
}

60
models/crystal_2.json Normal file
View file

@ -0,0 +1,60 @@
{
"textures": {
"particle": "Desktop/ice_crystal_3",
"crystal": "Desktop/ice_crystal_3"
},
"display": {
"gui": {
"rotation": [ 30, 225, 0 ],
"translation": [ 0, 0, 0],
"scale":[ 0.625, 0.625, 0.625 ]
},
"ground": {
"rotation": [ 0, 0, 0 ],
"translation": [ 0, 3, 0],
"scale":[ 0.25, 0.25, 0.25 ]
},
"fixed": {
"rotation": [ 0, 0, 0 ],
"translation": [ 0, 0, 0],
"scale":[ 0.5, 0.5, 0.5 ]
},
"thirdperson_righthand": {
"rotation": [ 75, 45, 0 ],
"translation": [ 0, 2.5, 0],
"scale": [ 0.375, 0.375, 0.375 ]
},
"firstperson_righthand": {
"rotation": [ 0, 45, 0 ],
"translation": [ 0, 0, 0 ],
"scale": [ 0.40, 0.40, 0.40 ]
},
"firstperson_lefthand": {
"rotation": [ 0, 225, 0 ],
"translation": [ 0, 0, 0 ],
"scale": [ 0.40, 0.40, 0.40 ]
}
},
"elements": [
{
"name": "crystal1",
"from": [8, 0, 0],
"to": [8, 16, 16],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]},
"faces": {
"east": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#crystal"},
"west": {"uv": [0, 16, 16, 0], "rotation": 270, "texture": "#crystal"}
}
},
{
"name": "crystal2",
"from": [8, 0, 0],
"to": [8, 16, 16],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]},
"faces": {
"east": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#crystal"},
"west": {"uv": [0, 16, 16, 0], "rotation": 270, "texture": "#crystal"}
}
}
]
}

View file

@ -0,0 +1,10 @@
{
"mappings": {
"default": {
"map": {
"crystal": "largeheartbud"
},
"name": "default"
}
}
}

60
models/crystal_3.json Normal file
View file

@ -0,0 +1,60 @@
{
"textures": {
"particle": "Desktop/ice_crystal_3",
"crystal": "Desktop/ice_crystal_3"
},
"display": {
"gui": {
"rotation": [ 30, 225, 0 ],
"translation": [ 0, 0, 0],
"scale":[ 0.625, 0.625, 0.625 ]
},
"ground": {
"rotation": [ 0, 0, 0 ],
"translation": [ 0, 3, 0],
"scale":[ 0.25, 0.25, 0.25 ]
},
"fixed": {
"rotation": [ 0, 0, 0 ],
"translation": [ 0, 0, 0],
"scale":[ 0.5, 0.5, 0.5 ]
},
"thirdperson_righthand": {
"rotation": [ 75, 45, 0 ],
"translation": [ 0, 2.5, 0],
"scale": [ 0.375, 0.375, 0.375 ]
},
"firstperson_righthand": {
"rotation": [ 0, 45, 0 ],
"translation": [ 0, 0, 0 ],
"scale": [ 0.40, 0.40, 0.40 ]
},
"firstperson_lefthand": {
"rotation": [ 0, 225, 0 ],
"translation": [ 0, 0, 0 ],
"scale": [ 0.40, 0.40, 0.40 ]
}
},
"elements": [
{
"name": "crystal1",
"from": [8, 0, 0],
"to": [8, 16, 16],
"rotation": {"angle": 45, "axis": "z", "origin": [8, 8, 8]},
"faces": {
"east": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#crystal"},
"west": {"uv": [0, 16, 16, 0], "rotation": 270, "texture": "#crystal"}
}
},
{
"name": "crystal2",
"from": [8, 0, 0],
"to": [8, 16, 16],
"rotation": {"angle": -45, "axis": "z", "origin": [8, 8, 8]},
"faces": {
"east": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#crystal"},
"west": {"uv": [0, 16, 16, 0], "rotation": 270, "texture": "#crystal"}
}
}
]
}

View file

@ -0,0 +1,10 @@
{
"mappings": {
"default": {
"map": {
"crystal": "heartcluster"
},
"name": "default"
}
}
}

View file

@ -11,11 +11,16 @@
* will be REGENERATED on each build. * will be REGENERATED on each build.
* *
*/ */
package net.mcreator.heartgeodes; package net.seaswimmerthefsh.heartgeodes;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import net.seaswimmerthefsh.heartgeodes.init.HeartgeodesModTabs;
import net.seaswimmerthefsh.heartgeodes.init.HeartgeodesModItems;
import net.seaswimmerthefsh.heartgeodes.init.HeartgeodesModBlocks;
import net.seaswimmerthefsh.heartgeodes.init.HeartgeodesModBlockEntities;
import net.minecraftforge.network.simple.SimpleChannel; import net.minecraftforge.network.simple.SimpleChannel;
import net.minecraftforge.network.NetworkRegistry; import net.minecraftforge.network.NetworkRegistry;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
@ -29,10 +34,6 @@ import net.minecraftforge.common.MinecraftForge;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.mcreator.heartgeodes.init.HeartgeodesModTabs;
import net.mcreator.heartgeodes.init.HeartgeodesModItems;
import net.mcreator.heartgeodes.init.HeartgeodesModBlocks;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
@ -52,7 +53,7 @@ public class HeartgeodesMod {
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
HeartgeodesModBlocks.REGISTRY.register(bus); HeartgeodesModBlocks.REGISTRY.register(bus);
HeartgeodesModBlockEntities.REGISTRY.register(bus);
HeartgeodesModItems.REGISTRY.register(bus); HeartgeodesModItems.REGISTRY.register(bus);
HeartgeodesModTabs.REGISTRY.register(bus); HeartgeodesModTabs.REGISTRY.register(bus);

View file

@ -1,24 +1,29 @@
package net.mcreator.heartgeodes.block; package net.seaswimmerthefsh.heartgeodes.block;
import net.seaswimmerthefsh.heartgeodes.init.HeartgeodesModBlocks;
import net.seaswimmerthefsh.heartgeodes.block.entity.BuddingHeartBlockBlockEntity;
import net.minecraft.world.level.storage.loot.LootParams; 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.NoteBlockInstrument;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.BlockBehaviour; 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.SoundType;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.item.PickaxeItem; import net.minecraft.world.item.PickaxeItem;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.MenuProvider;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.mcreator.heartgeodes.init.HeartgeodesModBlocks;
import java.util.List; import java.util.List;
import java.util.Collections; import java.util.Collections;
public class BuddingHeartBlockBlock extends Block { public class BuddingHeartBlockBlock extends Block implements EntityBlock {
public BuddingHeartBlockBlock() { public BuddingHeartBlockBlock() {
super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.AMETHYST).strength(1f, 10f).requiresCorrectToolForDrops()); super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.BASEDRUM).sound(SoundType.AMETHYST).strength(1f, 10f).requiresCorrectToolForDrops());
} }
@ -42,4 +47,22 @@ public class BuddingHeartBlockBlock extends Block {
return dropsOriginal; return dropsOriginal;
return Collections.singletonList(new ItemStack(HeartgeodesModBlocks.HEART_BLOCK.get())); return Collections.singletonList(new ItemStack(HeartgeodesModBlocks.HEART_BLOCK.get()));
} }
@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 BuddingHeartBlockBlockEntity(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);
}
} }

View file

@ -1,5 +1,5 @@
package net.mcreator.heartgeodes.block; package net.seaswimmerthefsh.heartgeodes.block;
import net.minecraft.world.level.storage.loot.LootParams; 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.NoteBlockInstrument;

View file

@ -0,0 +1,122 @@
package net.seaswimmerthefsh.heartgeodes.block;
import net.seaswimmerthefsh.heartgeodes.block.entity.HeartClusterBlockEntity;
import net.minecraft.world.level.storage.loot.LootParams;
import net.minecraft.world.level.material.MapColor;
import net.minecraft.world.level.material.Fluids;
import net.minecraft.world.level.material.FluidState;
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.properties.BooleanProperty;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
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.SimpleWaterloggedBlock;
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.LevelAccessor;
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.entity.player.Player;
import net.minecraft.world.MenuProvider;
import net.minecraft.core.Direction;
import net.minecraft.core.BlockPos;
import java.util.List;
import java.util.Collections;
public class HeartClusterBlock extends Block implements SimpleWaterloggedBlock, EntityBlock {
public static final DirectionProperty FACING = DirectionalBlock.FACING;
public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
public HeartClusterBlock() {
super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.HAT).mapColor(MapColor.TERRACOTTA_RED).sound(SoundType.AMETHYST_CLUSTER).strength(1f, 10f).requiresCorrectToolForDrops());
this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(WATERLOGGED, false));
}
@Override
public boolean propagatesSkylightDown(BlockState state, BlockGetter reader, BlockPos pos) {
return state.getFluidState().isEmpty();
}
@Override
public int getLightBlock(BlockState state, BlockGetter worldIn, BlockPos pos) {
return 0;
}
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
builder.add(FACING, WATERLOGGED);
}
@Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
boolean flag = context.getLevel().getFluidState(context.getClickedPos()).getType() == Fluids.WATER;
return this.defaultBlockState().setValue(FACING, context.getNearestLookingDirection().getOpposite()).setValue(WATERLOGGED, flag);
}
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 FluidState getFluidState(BlockState state) {
return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state);
}
@Override
public BlockState updateShape(BlockState state, Direction facing, BlockState facingState, LevelAccessor world, BlockPos currentPos, BlockPos facingPos) {
if (state.getValue(WATERLOGGED)) {
world.scheduleTick(currentPos, Fluids.WATER, Fluids.WATER.getTickDelay(world));
}
return super.updateShape(state, facing, facingState, world, currentPos, facingPos);
}
@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<ItemStack> getDrops(BlockState state, LootParams.Builder builder) {
List<ItemStack> dropsOriginal = super.getDrops(state, builder);
if (!dropsOriginal.isEmpty())
return dropsOriginal;
return Collections.singletonList(new ItemStack(this, 4));
}
@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 HeartClusterBlockEntity(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);
}
}

View file

@ -0,0 +1,109 @@
package net.seaswimmerthefsh.heartgeodes.block;
import net.seaswimmerthefsh.heartgeodes.block.entity.LargeHeartBudBlockEntity;
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.material.MapColor;
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.PickaxeItem;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.MenuProvider;
import net.minecraft.core.Direction;
import net.minecraft.core.BlockPos;
public class LargeHeartBudBlock extends Block implements EntityBlock {
public static final DirectionProperty FACING = DirectionalBlock.FACING;
public LargeHeartBudBlock() {
super(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.HAT).mapColor(MapColor.TERRACOTTA_RED).sound(SoundType.AMETHYST_CLUSTER).strength(1f, 10f).requiresCorrectToolForDrops().noOcclusion()
.isRedstoneConductor((bs, br, bp) -> false).noLootTable());
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
public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
return switch (state.getValue(FACING)) {
default -> box(15.125, 0.125, 15, 15.875, 0.875, 16);
case NORTH -> box(0.125, 0.125, 0, 0.875, 0.875, 1);
case EAST -> box(15, 0.125, 0.125, 16, 0.875, 0.875);
case WEST -> box(0, 0.125, 15.125, 1, 0.875, 15.875);
case UP -> box(0.125, 15, 0.125, 0.875, 16, 0.875);
case DOWN -> box(0.125, 0, 15.125, 0.875, 1, 15.875);
};
}
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> 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 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 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 LargeHeartBudBlockEntity(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);
}
}

View file

@ -0,0 +1,140 @@
package net.seaswimmerthefsh.heartgeodes.block.entity;
import net.seaswimmerthefsh.heartgeodes.init.HeartgeodesModBlockEntities;
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;
public class BuddingHeartBlockBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
private NonNullList<ItemStack> stacks = NonNullList.<ItemStack>withSize(0, ItemStack.EMPTY);
private final LazyOptional<? extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
public BuddingHeartBlockBlockEntity(BlockPos position, BlockState state) {
super(HeartgeodesModBlockEntities.BUDDING_HEART_BLOCK.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("budding_heart_block");
}
@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("Budding Heart Block");
}
@Override
protected NonNullList<ItemStack> getItems() {
return this.stacks;
}
@Override
protected void setItems(NonNullList<ItemStack> 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 <T> LazyOptional<T> getCapability(Capability<T> 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();
}
}

View file

@ -0,0 +1,140 @@
package net.seaswimmerthefsh.heartgeodes.block.entity;
import net.seaswimmerthefsh.heartgeodes.init.HeartgeodesModBlockEntities;
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;
public class HeartClusterBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
private NonNullList<ItemStack> stacks = NonNullList.<ItemStack>withSize(0, ItemStack.EMPTY);
private final LazyOptional<? extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
public HeartClusterBlockEntity(BlockPos position, BlockState state) {
super(HeartgeodesModBlockEntities.HEART_CLUSTER.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("heart_cluster");
}
@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("Heart Cluster");
}
@Override
protected NonNullList<ItemStack> getItems() {
return this.stacks;
}
@Override
protected void setItems(NonNullList<ItemStack> 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 <T> LazyOptional<T> getCapability(Capability<T> 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();
}
}

View file

@ -0,0 +1,140 @@
package net.seaswimmerthefsh.heartgeodes.block.entity;
import net.seaswimmerthefsh.heartgeodes.init.HeartgeodesModBlockEntities;
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;
public class LargeHeartBudBlockEntity extends RandomizableContainerBlockEntity implements WorldlyContainer {
private NonNullList<ItemStack> stacks = NonNullList.<ItemStack>withSize(0, ItemStack.EMPTY);
private final LazyOptional<? extends IItemHandler>[] handlers = SidedInvWrapper.create(this, Direction.values());
public LargeHeartBudBlockEntity(BlockPos position, BlockState state) {
super(HeartgeodesModBlockEntities.LARGE_HEART_BUD.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("large_heart_bud");
}
@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("Large Heart Bud");
}
@Override
protected NonNullList<ItemStack> getItems() {
return this.stacks;
}
@Override
protected void setItems(NonNullList<ItemStack> 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 <T> LazyOptional<T> getCapability(Capability<T> 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();
}
}

View file

@ -0,0 +1,38 @@
package net.seaswimmerthefsh.heartgeodes.command;
import org.checkerframework.checker.units.qual.s;
import net.seaswimmerthefsh.heartgeodes.procedures.TestRulesPProcedure;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.event.RegisterCommandsEvent;
import net.minecraftforge.common.util.FakePlayerFactory;
import net.minecraft.world.entity.Entity;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.core.Direction;
import net.minecraft.commands.Commands;
import com.mojang.brigadier.arguments.BoolArgumentType;
@Mod.EventBusSubscriber
public class TestRulesCommand {
@SubscribeEvent
public static void registerCommand(RegisterCommandsEvent event) {
event.getDispatcher().register(Commands.literal("testrules").requires(s -> s.hasPermission(4)).then(Commands.argument("enable", BoolArgumentType.bool()).executes(arguments -> {
ServerLevel world = arguments.getSource().getLevel();
double x = arguments.getSource().getPosition().x();
double y = arguments.getSource().getPosition().y();
double z = arguments.getSource().getPosition().z();
Entity entity = arguments.getSource().getEntity();
if (entity == null)
entity = FakePlayerFactory.getMinecraft(world);
Direction direction = entity.getDirection();
TestRulesPProcedure.execute(world, arguments, entity);
return 0;
})));
}
}

View file

@ -0,0 +1,28 @@
/*
* MCreator note: This file will be REGENERATED on each build.
*/
package net.seaswimmerthefsh.heartgeodes.init;
import net.seaswimmerthefsh.heartgeodes.block.entity.LargeHeartBudBlockEntity;
import net.seaswimmerthefsh.heartgeodes.block.entity.HeartClusterBlockEntity;
import net.seaswimmerthefsh.heartgeodes.block.entity.BuddingHeartBlockBlockEntity;
import net.seaswimmerthefsh.heartgeodes.HeartgeodesMod;
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;
public class HeartgeodesModBlockEntities {
public static final DeferredRegister<BlockEntityType<?>> REGISTRY = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, HeartgeodesMod.MODID);
public static final RegistryObject<BlockEntityType<?>> BUDDING_HEART_BLOCK = register("budding_heart_block", HeartgeodesModBlocks.BUDDING_HEART_BLOCK, BuddingHeartBlockBlockEntity::new);
public static final RegistryObject<BlockEntityType<?>> HEART_CLUSTER = register("heart_cluster", HeartgeodesModBlocks.HEART_CLUSTER, HeartClusterBlockEntity::new);
public static final RegistryObject<BlockEntityType<?>> LARGE_HEART_BUD = register("large_heart_bud", HeartgeodesModBlocks.LARGE_HEART_BUD, LargeHeartBudBlockEntity::new);
private static RegistryObject<BlockEntityType<?>> register(String registryname, RegistryObject<Block> block, BlockEntityType.BlockEntitySupplier<?> supplier) {
return REGISTRY.register(registryname, () -> BlockEntityType.Builder.of(supplier, block.get()).build(null));
}
}

View file

@ -2,7 +2,13 @@
/* /*
* MCreator note: This file will be REGENERATED on each build. * MCreator note: This file will be REGENERATED on each build.
*/ */
package net.mcreator.heartgeodes.init; package net.seaswimmerthefsh.heartgeodes.init;
import net.seaswimmerthefsh.heartgeodes.block.LargeHeartBudBlock;
import net.seaswimmerthefsh.heartgeodes.block.HeartClusterBlock;
import net.seaswimmerthefsh.heartgeodes.block.HeartBlockBlock;
import net.seaswimmerthefsh.heartgeodes.block.BuddingHeartBlockBlock;
import net.seaswimmerthefsh.heartgeodes.HeartgeodesMod;
import net.minecraftforge.registries.RegistryObject; import net.minecraftforge.registries.RegistryObject;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
@ -10,12 +16,10 @@ import net.minecraftforge.registries.DeferredRegister;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.mcreator.heartgeodes.block.HeartBlockBlock;
import net.mcreator.heartgeodes.block.BuddingHeartBlockBlock;
import net.mcreator.heartgeodes.HeartgeodesMod;
public class HeartgeodesModBlocks { public class HeartgeodesModBlocks {
public static final DeferredRegister<Block> REGISTRY = DeferredRegister.create(ForgeRegistries.BLOCKS, HeartgeodesMod.MODID); public static final DeferredRegister<Block> REGISTRY = DeferredRegister.create(ForgeRegistries.BLOCKS, HeartgeodesMod.MODID);
public static final RegistryObject<Block> HEART_BLOCK = REGISTRY.register("heart_block", () -> new HeartBlockBlock()); public static final RegistryObject<Block> HEART_BLOCK = REGISTRY.register("heart_block", () -> new HeartBlockBlock());
public static final RegistryObject<Block> BUDDING_HEART_BLOCK = REGISTRY.register("budding_heart_block", () -> new BuddingHeartBlockBlock()); public static final RegistryObject<Block> BUDDING_HEART_BLOCK = REGISTRY.register("budding_heart_block", () -> new BuddingHeartBlockBlock());
public static final RegistryObject<Block> HEART_CLUSTER = REGISTRY.register("heart_cluster", () -> new HeartClusterBlock());
public static final RegistryObject<Block> LARGE_HEART_BUD = REGISTRY.register("large_heart_bud", () -> new LargeHeartBudBlock());
} }

View file

@ -2,7 +2,9 @@
/* /*
* MCreator note: This file will be REGENERATED on each build. * MCreator note: This file will be REGENERATED on each build.
*/ */
package net.mcreator.heartgeodes.init; package net.seaswimmerthefsh.heartgeodes.init;
import net.seaswimmerthefsh.heartgeodes.HeartgeodesMod;
import net.minecraftforge.registries.RegistryObject; import net.minecraftforge.registries.RegistryObject;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
@ -12,12 +14,12 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.BlockItem;
import net.mcreator.heartgeodes.HeartgeodesMod;
public class HeartgeodesModItems { public class HeartgeodesModItems {
public static final DeferredRegister<Item> REGISTRY = DeferredRegister.create(ForgeRegistries.ITEMS, HeartgeodesMod.MODID); public static final DeferredRegister<Item> REGISTRY = DeferredRegister.create(ForgeRegistries.ITEMS, HeartgeodesMod.MODID);
public static final RegistryObject<Item> HEART_BLOCK = block(HeartgeodesModBlocks.HEART_BLOCK); public static final RegistryObject<Item> HEART_BLOCK = block(HeartgeodesModBlocks.HEART_BLOCK);
public static final RegistryObject<Item> BUDDING_HEART_BLOCK = block(HeartgeodesModBlocks.BUDDING_HEART_BLOCK); public static final RegistryObject<Item> BUDDING_HEART_BLOCK = block(HeartgeodesModBlocks.BUDDING_HEART_BLOCK);
public static final RegistryObject<Item> HEART_CLUSTER = block(HeartgeodesModBlocks.HEART_CLUSTER);
public static final RegistryObject<Item> LARGE_HEART_BUD = block(HeartgeodesModBlocks.LARGE_HEART_BUD);
private static RegistryObject<Item> block(RegistryObject<Block> block) { private static RegistryObject<Item> block(RegistryObject<Block> block) {
return REGISTRY.register(block.getId().getPath(), () -> new BlockItem(block.get(), new Item.Properties())); return REGISTRY.register(block.getId().getPath(), () -> new BlockItem(block.get(), new Item.Properties()));

View file

@ -2,7 +2,9 @@
/* /*
* MCreator note: This file will be REGENERATED on each build. * MCreator note: This file will be REGENERATED on each build.
*/ */
package net.mcreator.heartgeodes.init; package net.seaswimmerthefsh.heartgeodes.init;
import net.seaswimmerthefsh.heartgeodes.HeartgeodesMod;
import net.minecraftforge.registries.RegistryObject; import net.minecraftforge.registries.RegistryObject;
import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.DeferredRegister;
@ -12,12 +14,10 @@ import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.core.registries.Registries; import net.minecraft.core.registries.Registries;
import net.mcreator.heartgeodes.HeartgeodesMod;
public class HeartgeodesModTabs { public class HeartgeodesModTabs {
public static final DeferredRegister<CreativeModeTab> REGISTRY = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, HeartgeodesMod.MODID); public static final DeferredRegister<CreativeModeTab> REGISTRY = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, HeartgeodesMod.MODID);
public static final RegistryObject<CreativeModeTab> HEART_GEODES = REGISTRY.register("heart_geodes", public static final RegistryObject<CreativeModeTab> HEART_GEODES = REGISTRY.register("heart_geodes",
() -> CreativeModeTab.builder().title(Component.translatable("item_group.heartgeodes.heart_geodes")).icon(() -> new ItemStack(HeartgeodesModBlocks.BUDDING_HEART_BLOCK.get())).displayItems((parameters, tabData) -> { () -> CreativeModeTab.builder().title(Component.translatable("item_group.heartgeodes.heart_geodes")).icon(() -> new ItemStack(HeartgeodesModBlocks.HEART_CLUSTER.get())).displayItems((parameters, tabData) -> {
tabData.accept(HeartgeodesModBlocks.HEART_BLOCK.get().asItem()); tabData.accept(HeartgeodesModBlocks.HEART_BLOCK.get().asItem());
tabData.accept(HeartgeodesModBlocks.BUDDING_HEART_BLOCK.get().asItem()); tabData.accept(HeartgeodesModBlocks.BUDDING_HEART_BLOCK.get().asItem());
}) })

View file

@ -0,0 +1,33 @@
package net.seaswimmerthefsh.heartgeodes.procedures;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.GameRules;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.Entity;
import net.minecraft.network.chat.Component;
import net.minecraft.commands.CommandSourceStack;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.arguments.BoolArgumentType;
public class TestRulesPProcedure {
public static void execute(LevelAccessor world, CommandContext<CommandSourceStack> arguments, Entity entity) {
if (entity == null)
return;
if (BoolArgumentType.getBool(arguments, "enabled")) {
world.getLevelData().getGameRules().getRule(GameRules.RULE_KEEPINVENTORY).set(true, world.getServer());
world.getLevelData().getGameRules().getRule(GameRules.RULE_DOMOBSPAWNING).set(false, world.getServer());
world.getLevelData().getGameRules().getRule(GameRules.RULE_DAYLIGHT).set(false, world.getServer());
world.getLevelData().getGameRules().getRule(GameRules.RULE_WEATHER_CYCLE).set(false, world.getServer());
if (entity instanceof Player _player && !_player.level().isClientSide())
_player.displayClientMessage(Component.literal("Test rules enabled!"), false);
} else {
world.getLevelData().getGameRules().getRule(GameRules.RULE_KEEPINVENTORY).set(false, world.getServer());
world.getLevelData().getGameRules().getRule(GameRules.RULE_DOMOBSPAWNING).set(true, world.getServer());
world.getLevelData().getGameRules().getRule(GameRules.RULE_DAYLIGHT).set(true, world.getServer());
world.getLevelData().getGameRules().getRule(GameRules.RULE_WEATHER_CYCLE).set(true, world.getServer());
if (entity instanceof Player _player && !_player.level().isClientSide())
_player.displayClientMessage(Component.literal("Test rules disabled!"), false);
}
}
}

View file

@ -1,14 +1,15 @@
modLoader="javafml" modLoader="javafml"
loaderVersion="[47,)" loaderVersion="[47,)"
license="Academic Free License v3.0" license="MIT License"
[[mods]] [[mods]]
modId="heartgeodes" modId="heartgeodes"
version="1.0.0" version="1.0.0"
displayName="HeartGeodes" displayName="HeartGeodes"
credits="Created using mod maker MCreator - https://mcreator.net/about" credits="Created using mod maker MCreator - https://mcreator.net/about"
displayURL="https://mcreator.net" displayURL="https://coastalcommits.com/GalacticFactory/HeartGeodes"
authors="seasw, MCreator" authors="SeaswimmerTheFsh"
description="This mod adds Geodes for Scaling Difficulty to the game."
[[dependencies.heartgeodes]] [[dependencies.heartgeodes]]
modId="minecraft" modId="minecraft"

View file

@ -0,0 +1,27 @@
{
"variants": {
"facing=north": {
"model": "heartgeodes:block/heart_cluster"
},
"facing=east": {
"model": "heartgeodes:block/heart_cluster",
"y": 90
},
"facing=south": {
"model": "heartgeodes:block/heart_cluster",
"y": 180
},
"facing=west": {
"model": "heartgeodes:block/heart_cluster",
"y": 270
},
"facing=up": {
"model": "heartgeodes:block/heart_cluster",
"x": 270
},
"facing=down": {
"model": "heartgeodes:block/heart_cluster",
"x": 90
}
}
}

View file

@ -0,0 +1,27 @@
{
"variants": {
"facing=north": {
"model": "heartgeodes:block/large_heart_bud"
},
"facing=east": {
"model": "heartgeodes:block/large_heart_bud",
"y": 90
},
"facing=south": {
"model": "heartgeodes:block/large_heart_bud",
"y": 180
},
"facing=west": {
"model": "heartgeodes:block/large_heart_bud",
"y": 270
},
"facing=up": {
"model": "heartgeodes:block/large_heart_bud",
"x": 270
},
"facing=down": {
"model": "heartgeodes:block/large_heart_bud",
"x": 90
}
}
}

View file

@ -1,5 +1,7 @@
{ {
"block.heartgeodes.budding_heart_block": "Budding Heart Block", "block.heartgeodes.budding_heart_block": "Budding Heart Block",
"block.heartgeodes.heart_cluster": "Heart Cluster",
"block.heartgeodes.heart_block": "Heart Block", "block.heartgeodes.heart_block": "Heart Block",
"item_group.heartgeodes.heart_geodes": "Heart Geodes" "item_group.heartgeodes.heart_geodes": "Heart Geodes",
"block.heartgeodes.large_heart_bud": "Large Heart Bud"
} }

View file

@ -1,13 +1,13 @@
{ {
"parent": "block/cube", "parent": "block/cube",
"textures": { "textures": {
"down": "heartgeodes:block/heart", "down": "heartgeodes:block/heartblock",
"up": "heartgeodes:block/heart", "up": "heartgeodes:block/heartblock",
"north": "heartgeodes:block/heart", "north": "heartgeodes:block/heartblock",
"east": "heartgeodes:block/heart", "east": "heartgeodes:block/heartblock",
"south": "heartgeodes:block/heart", "south": "heartgeodes:block/heartblock",
"west": "heartgeodes:block/heart", "west": "heartgeodes:block/heartblock",
"particle": "heartgeodes:block/heart" "particle": "heartgeodes:block/heartblock"
}, },
"render_type": "solid" "render_type": "solid"
} }

View file

@ -0,0 +1,8 @@
{
"parent": "block/cross",
"textures": {
"cross": "heartgeodes:block/heartcluster",
"particle": "heartgeodes:block/heartcluster"
},
"render_type": "cutout"
}

View file

@ -0,0 +1,8 @@
{
"parent": "block/cross",
"textures": {
"cross": "heartgeodes:block/largeheartbud",
"particle": "heartgeodes:block/largeheartbud"
},
"render_type": "cutout"
}

View file

@ -0,0 +1,196 @@
{
"display": {
"gui": {
"rotation": [
30,
225,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.625,
0.625,
0.625
]
},
"ground": {
"rotation": [
0,
0,
0
],
"translation": [
0,
3,
0
],
"scale": [
0.25,
0.25,
0.25
]
},
"fixed": {
"rotation": [
0,
0,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.5,
0.5,
0.5
]
},
"thirdperson_righthand": {
"rotation": [
75,
45,
0
],
"translation": [
0,
2.5,
0
],
"scale": [
0.375,
0.375,
0.375
]
},
"firstperson_righthand": {
"rotation": [
0,
45,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.40,
0.40,
0.40
]
},
"firstperson_lefthand": {
"rotation": [
0,
225,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.40,
0.40,
0.40
]
}
},
"elements": [
{
"name": "crystal1",
"from": [
8,
0,
0
],
"to": [
8,
16,
16
],
"rotation": {
"angle": 45,
"axis": "z",
"origin": [
8,
8,
8
]
},
"faces": {
"east": {
"uv": [
0,
0,
16,
16
],
"rotation": 270,
"texture": "#crystal"
},
"west": {
"uv": [
0,
16,
16,
0
],
"rotation": 270,
"texture": "#crystal"
}
}
},
{
"name": "crystal2",
"from": [
8,
0,
0
],
"to": [
8,
16,
16
],
"rotation": {
"angle": -45,
"axis": "z",
"origin": [
8,
8,
8
]
},
"faces": {
"east": {
"uv": [
0,
0,
16,
16
],
"rotation": 270,
"texture": "#crystal"
},
"west": {
"uv": [
0,
16,
16,
0
],
"rotation": 270,
"texture": "#crystal"
}
}
}
]
}

View file

@ -0,0 +1,196 @@
{
"display": {
"gui": {
"rotation": [
30,
225,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.625,
0.625,
0.625
]
},
"ground": {
"rotation": [
0,
0,
0
],
"translation": [
0,
3,
0
],
"scale": [
0.25,
0.25,
0.25
]
},
"fixed": {
"rotation": [
0,
0,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.5,
0.5,
0.5
]
},
"thirdperson_righthand": {
"rotation": [
75,
45,
0
],
"translation": [
0,
2.5,
0
],
"scale": [
0.375,
0.375,
0.375
]
},
"firstperson_righthand": {
"rotation": [
0,
45,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.40,
0.40,
0.40
]
},
"firstperson_lefthand": {
"rotation": [
0,
225,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.40,
0.40,
0.40
]
}
},
"elements": [
{
"name": "crystal1",
"from": [
8,
0,
0
],
"to": [
8,
16,
16
],
"rotation": {
"angle": 45,
"axis": "z",
"origin": [
8,
8,
8
]
},
"faces": {
"east": {
"uv": [
0,
0,
16,
16
],
"rotation": 270,
"texture": "#crystal"
},
"west": {
"uv": [
0,
16,
16,
0
],
"rotation": 270,
"texture": "#crystal"
}
}
},
{
"name": "crystal2",
"from": [
8,
0,
0
],
"to": [
8,
16,
16
],
"rotation": {
"angle": -45,
"axis": "z",
"origin": [
8,
8,
8
]
},
"faces": {
"east": {
"uv": [
0,
0,
16,
16
],
"rotation": 270,
"texture": "#crystal"
},
"west": {
"uv": [
0,
16,
16,
0
],
"rotation": 270,
"texture": "#crystal"
}
}
}
]
}

View file

@ -0,0 +1,196 @@
{
"display": {
"gui": {
"rotation": [
30,
225,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.625,
0.625,
0.625
]
},
"ground": {
"rotation": [
0,
0,
0
],
"translation": [
0,
3,
0
],
"scale": [
0.25,
0.25,
0.25
]
},
"fixed": {
"rotation": [
0,
0,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.5,
0.5,
0.5
]
},
"thirdperson_righthand": {
"rotation": [
75,
45,
0
],
"translation": [
0,
2.5,
0
],
"scale": [
0.375,
0.375,
0.375
]
},
"firstperson_righthand": {
"rotation": [
0,
45,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.40,
0.40,
0.40
]
},
"firstperson_lefthand": {
"rotation": [
0,
225,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.40,
0.40,
0.40
]
}
},
"elements": [
{
"name": "crystal1",
"from": [
8,
0,
0
],
"to": [
8,
16,
16
],
"rotation": {
"angle": 45,
"axis": "z",
"origin": [
8,
8,
8
]
},
"faces": {
"east": {
"uv": [
0,
0,
16,
16
],
"rotation": 270,
"texture": "#crystal"
},
"west": {
"uv": [
0,
16,
16,
0
],
"rotation": 270,
"texture": "#crystal"
}
}
},
{
"name": "crystal2",
"from": [
8,
0,
0
],
"to": [
8,
16,
16
],
"rotation": {
"angle": -45,
"axis": "z",
"origin": [
8,
8,
8
]
},
"faces": {
"east": {
"uv": [
0,
0,
16,
16
],
"rotation": 270,
"texture": "#crystal"
},
"west": {
"uv": [
0,
16,
16,
0
],
"rotation": 270,
"texture": "#crystal"
}
}
}
]
}

View file

@ -0,0 +1,196 @@
{
"display": {
"gui": {
"rotation": [
30,
225,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.625,
0.625,
0.625
]
},
"ground": {
"rotation": [
0,
0,
0
],
"translation": [
0,
3,
0
],
"scale": [
0.25,
0.25,
0.25
]
},
"fixed": {
"rotation": [
0,
0,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.5,
0.5,
0.5
]
},
"thirdperson_righthand": {
"rotation": [
75,
45,
0
],
"translation": [
0,
2.5,
0
],
"scale": [
0.375,
0.375,
0.375
]
},
"firstperson_righthand": {
"rotation": [
0,
45,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.40,
0.40,
0.40
]
},
"firstperson_lefthand": {
"rotation": [
0,
225,
0
],
"translation": [
0,
0,
0
],
"scale": [
0.40,
0.40,
0.40
]
}
},
"elements": [
{
"name": "crystal1",
"from": [
8,
0,
0
],
"to": [
8,
16,
16
],
"rotation": {
"angle": 45,
"axis": "z",
"origin": [
8,
8,
8
]
},
"faces": {
"east": {
"uv": [
0,
0,
16,
16
],
"rotation": 270,
"texture": "#crystal"
},
"west": {
"uv": [
0,
16,
16,
0
],
"rotation": 270,
"texture": "#crystal"
}
}
},
{
"name": "crystal2",
"from": [
8,
0,
0
],
"to": [
8,
16,
16
],
"rotation": {
"angle": -45,
"axis": "z",
"origin": [
8,
8,
8
]
},
"faces": {
"east": {
"uv": [
0,
0,
16,
16
],
"rotation": 270,
"texture": "#crystal"
},
"west": {
"uv": [
0,
16,
16,
0
],
"rotation": 270,
"texture": "#crystal"
}
}
}
]
}

View file

@ -0,0 +1,7 @@
{
"parent": "item/generated",
"textures": {
"layer0": "heartgeodes:item/heartcluster"
},
"render_type": "translucent"
}

View file

@ -0,0 +1,7 @@
{
"parent": "item/generated",
"textures": {
"layer0": "heartgeodes:item/largeheartbud"
},
"render_type": "translucent"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 B

After

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 525 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

View file

Before

Width:  |  Height:  |  Size: 152 B

After

Width:  |  Height:  |  Size: 152 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

View file

@ -2,6 +2,8 @@
"replace": false, "replace": false,
"values": [ "values": [
"heartgeodes:heart_block", "heartgeodes:heart_block",
"heartgeodes:budding_heart_block" "heartgeodes:budding_heart_block",
"heartgeodes:heart_cluster",
"heartgeodes:large_heart_bud"
] ]
} }

View file

@ -1,6 +1,6 @@
{ {
"pack": { "pack": {
"pack_format": 15, "pack_format": 15,
"description": "" "description": "This mod adds Geodes for Scaling Difficulty to the game."
} }
} }