diff --git a/elements/BuddingHeartBlock.mod.json b/elements/BuddingHeartBlock.mod.json index a34a921..4b082e2 100644 --- a/elements/BuddingHeartBlock.mod.json +++ b/elements/BuddingHeartBlock.mod.json @@ -56,7 +56,7 @@ "material": { "value": "ROCK" }, - "tickRate": 0, + "tickRate": 20, "tickRandomly": false, "isReplaceable": false, "canProvidePower": false, @@ -100,13 +100,13 @@ "unbreakable": false, "breakHarvestLevel": 1, "isBonemealable": false, - "hasInventory": false, + "hasInventory": true, "guiBoundTo": "", "openGUIOnRightClick": false, - "inventorySize": 9, + "inventorySize": 0, "inventoryStackSize": 64, - "inventoryDropWhenDestroyed": true, - "inventoryComparatorPower": true, + "inventoryDropWhenDestroyed": false, + "inventoryComparatorPower": false, "inventoryOutSlotIDs": [], "inventoryInSlotIDs": [], "hasEnergyStorage": false, @@ -119,20 +119,7 @@ "fluidRestrictions": [], "spawnWorldTypes": [], "restrictionBiomes": [], - "blocksToReplace": [ - { - "value": "Blocks.STONE#0" - }, - { - "value": "Blocks.STONE#1" - }, - { - "value": "Blocks.STONE#3" - }, - { - "value": "Blocks.STONE#5" - } - ], + "blocksToReplace": [], "generationShape": "UNIFORM", "frequencyPerChunks": 10, "frequencyOnChunk": 16, diff --git a/elements/HeartBlock.mod.json b/elements/HeartBlock.mod.json index 5945763..946b7e7 100644 --- a/elements/HeartBlock.mod.json +++ b/elements/HeartBlock.mod.json @@ -2,12 +2,12 @@ "_fv": 47, "_type": "block", "definition": { - "texture": "heart", - "textureTop": "heart", - "textureLeft": "heart", - "textureFront": "heart", - "textureRight": "heart", - "textureBack": "heart", + "texture": "heartblock", + "textureTop": "heartblock", + "textureLeft": "heartblock", + "textureFront": "heartblock", + "textureRight": "heartblock", + "textureBack": "heartblock", "renderType": 10, "customModelName": "Normal", "rotationMode": 0, diff --git a/elements/HeartCluster.mod.json b/elements/HeartCluster.mod.json new file mode 100644 index 0000000..c39443c --- /dev/null +++ b/elements/HeartCluster.mod.json @@ -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": "", + "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 + } +} \ No newline at end of file diff --git a/elements/HeartGeodes.mod.json b/elements/HeartGeodes.mod.json index 18ad360..b73bbd4 100644 --- a/elements/HeartGeodes.mod.json +++ b/elements/HeartGeodes.mod.json @@ -4,7 +4,7 @@ "definition": { "name": "Heart Geodes", "icon": { - "value": "CUSTOM:BuddingHeartBlock" + "value": "CUSTOM:HeartCluster" }, "showSearch": false } diff --git a/elements/LargeHeartBud.mod.json b/elements/LargeHeartBud.mod.json new file mode 100644 index 0000000..68abfeb --- /dev/null +++ b/elements/LargeHeartBud.mod.json @@ -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": "", + "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 + } +} \ No newline at end of file diff --git a/elements/TestRules.mod.json b/elements/TestRules.mod.json new file mode 100644 index 0000000..aa7a6c9 --- /dev/null +++ b/elements/TestRules.mod.json @@ -0,0 +1,9 @@ +{ + "_fv": 47, + "_type": "command", + "definition": { + "commandName": "testrules", + "permissionLevel": "4", + "argsxml": "enableTestRulesP" + } +} \ No newline at end of file diff --git a/elements/TestRulesP.mod.json b/elements/TestRulesP.mod.json new file mode 100644 index 0000000..6055a2f --- /dev/null +++ b/elements/TestRulesP.mod.json @@ -0,0 +1,7 @@ +{ + "_fv": 47, + "_type": "procedure", + "definition": { + "procedurexml": "no_ext_triggerenabledKEEP_INVENTORYTRUEDO_MOB_SPAWNINGFALSEDO_DAYLIGHT_CYCLEFALSEDO_WEATHER_CYCLEFALSETest rules enabled!FALSEKEEP_INVENTORYFALSEDO_MOB_SPAWNINGTRUEDO_DAYLIGHT_CYCLETRUEDO_WEATHER_CYCLETRUETest rules disabled!FALSE" + } +} \ No newline at end of file diff --git a/heartgeodes.mcreator b/heartgeodes.mcreator index b21ed05..95ff318 100644 --- a/heartgeodes.mcreator +++ b/heartgeodes.mcreator @@ -9,10 +9,11 @@ "registry_name": "budding_heart_block", "metadata": { "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/blockstates/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": { "files": [ "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/models/block/heart_block.json" ] @@ -42,6 +43,80 @@ "metadata": { "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": [], @@ -49,8 +124,10 @@ "language_map": { "en_us": { "block.heartgeodes.budding_heart_block": "Budding Heart Block", + "block.heartgeodes.heart_cluster": "Heart Cluster", "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": { @@ -61,9 +138,10 @@ "modid": "heartgeodes", "modName": "HeartGeodes", "version": "1.0.0", - "author": "seasw, MCreator", - "websiteURL": "https://mcreator.net", - "license": "Academic Free License v3.0", + "description": "This mod adds Geodes for Scaling Difficulty to the game.", + "author": "SeaswimmerTheFsh", + "websiteURL": "https://coastalcommits.com/GalacticFactory/HeartGeodes", + "license": "MIT License", "disableForgeVersionCheck": true, "serverSideOnly": false, "requiredMods": [], @@ -71,7 +149,8 @@ "dependants": [], "mcreatorDependencies": [], "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 }, "mcreatorVersion": 202300336712 diff --git a/models/crystal_0.json b/models/crystal_0.json new file mode 100644 index 0000000..32e0c7e --- /dev/null +++ b/models/crystal_0.json @@ -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"} + } + } + ] +} \ No newline at end of file diff --git a/models/crystal_0.json.textures b/models/crystal_0.json.textures new file mode 100644 index 0000000..2d6481f --- /dev/null +++ b/models/crystal_0.json.textures @@ -0,0 +1,10 @@ +{ + "mappings": { + "default": { + "map": { + "crystal": "smallheartbud" + }, + "name": "default" + } + } +} \ No newline at end of file diff --git a/models/crystal_1.json b/models/crystal_1.json new file mode 100644 index 0000000..32e0c7e --- /dev/null +++ b/models/crystal_1.json @@ -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"} + } + } + ] +} \ No newline at end of file diff --git a/models/crystal_1.json.textures b/models/crystal_1.json.textures new file mode 100644 index 0000000..1e2f110 --- /dev/null +++ b/models/crystal_1.json.textures @@ -0,0 +1,10 @@ +{ + "mappings": { + "default": { + "map": { + "crystal": "mediumheartbud" + }, + "name": "default" + } + } +} \ No newline at end of file diff --git a/models/crystal_2.json b/models/crystal_2.json new file mode 100644 index 0000000..32e0c7e --- /dev/null +++ b/models/crystal_2.json @@ -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"} + } + } + ] +} \ No newline at end of file diff --git a/models/crystal_2.json.textures b/models/crystal_2.json.textures new file mode 100644 index 0000000..358b16b --- /dev/null +++ b/models/crystal_2.json.textures @@ -0,0 +1,10 @@ +{ + "mappings": { + "default": { + "map": { + "crystal": "largeheartbud" + }, + "name": "default" + } + } +} \ No newline at end of file diff --git a/models/crystal_3.json b/models/crystal_3.json new file mode 100644 index 0000000..32e0c7e --- /dev/null +++ b/models/crystal_3.json @@ -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"} + } + } + ] +} \ No newline at end of file diff --git a/models/crystal_3.json.textures b/models/crystal_3.json.textures new file mode 100644 index 0000000..b8b08ee --- /dev/null +++ b/models/crystal_3.json.textures @@ -0,0 +1,10 @@ +{ + "mappings": { + "default": { + "map": { + "crystal": "heartcluster" + }, + "name": "default" + } + } +} \ No newline at end of file diff --git a/src/main/java/net/mcreator/heartgeodes/HeartgeodesMod.java b/src/main/java/net/seaswimmerthefsh/heartgeodes/HeartgeodesMod.java similarity index 89% rename from src/main/java/net/mcreator/heartgeodes/HeartgeodesMod.java rename to src/main/java/net/seaswimmerthefsh/heartgeodes/HeartgeodesMod.java index 029af4f..4397f1e 100644 --- a/src/main/java/net/mcreator/heartgeodes/HeartgeodesMod.java +++ b/src/main/java/net/seaswimmerthefsh/heartgeodes/HeartgeodesMod.java @@ -11,11 +11,16 @@ * 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.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.NetworkRegistry; import net.minecraftforge.network.NetworkEvent; @@ -29,10 +34,6 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraft.resources.ResourceLocation; 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.Function; import java.util.function.BiConsumer; @@ -52,7 +53,7 @@ public class HeartgeodesMod { IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); HeartgeodesModBlocks.REGISTRY.register(bus); - + HeartgeodesModBlockEntities.REGISTRY.register(bus); HeartgeodesModItems.REGISTRY.register(bus); HeartgeodesModTabs.REGISTRY.register(bus); diff --git a/src/main/java/net/mcreator/heartgeodes/block/BuddingHeartBlockBlock.java b/src/main/java/net/seaswimmerthefsh/heartgeodes/block/BuddingHeartBlockBlock.java similarity index 56% rename from src/main/java/net/mcreator/heartgeodes/block/BuddingHeartBlockBlock.java rename to src/main/java/net/seaswimmerthefsh/heartgeodes/block/BuddingHeartBlockBlock.java index 306f78c..89fe752 100644 --- a/src/main/java/net/mcreator/heartgeodes/block/BuddingHeartBlockBlock.java +++ b/src/main/java/net/seaswimmerthefsh/heartgeodes/block/BuddingHeartBlockBlock.java @@ -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.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.entity.player.Player; +import net.minecraft.world.MenuProvider; import net.minecraft.core.BlockPos; -import net.mcreator.heartgeodes.init.HeartgeodesModBlocks; - import java.util.List; import java.util.Collections; -public class BuddingHeartBlockBlock extends Block { +public class BuddingHeartBlockBlock extends Block implements EntityBlock { public BuddingHeartBlockBlock() { 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 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); + } } diff --git a/src/main/java/net/mcreator/heartgeodes/block/HeartBlockBlock.java b/src/main/java/net/seaswimmerthefsh/heartgeodes/block/HeartBlockBlock.java similarity index 96% rename from src/main/java/net/mcreator/heartgeodes/block/HeartBlockBlock.java rename to src/main/java/net/seaswimmerthefsh/heartgeodes/block/HeartBlockBlock.java index 4fd81c0..cfa636c 100644 --- a/src/main/java/net/mcreator/heartgeodes/block/HeartBlockBlock.java +++ b/src/main/java/net/seaswimmerthefsh/heartgeodes/block/HeartBlockBlock.java @@ -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.block.state.properties.NoteBlockInstrument; diff --git a/src/main/java/net/seaswimmerthefsh/heartgeodes/block/HeartClusterBlock.java b/src/main/java/net/seaswimmerthefsh/heartgeodes/block/HeartClusterBlock.java new file mode 100644 index 0000000..3119279 --- /dev/null +++ b/src/main/java/net/seaswimmerthefsh/heartgeodes/block/HeartClusterBlock.java @@ -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 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 getDrops(BlockState state, LootParams.Builder builder) { + List 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); + } +} diff --git a/src/main/java/net/seaswimmerthefsh/heartgeodes/block/LargeHeartBudBlock.java b/src/main/java/net/seaswimmerthefsh/heartgeodes/block/LargeHeartBudBlock.java new file mode 100644 index 0000000..d70c991 --- /dev/null +++ b/src/main/java/net/seaswimmerthefsh/heartgeodes/block/LargeHeartBudBlock.java @@ -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 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); + } +} diff --git a/src/main/java/net/seaswimmerthefsh/heartgeodes/block/entity/BuddingHeartBlockBlockEntity.java b/src/main/java/net/seaswimmerthefsh/heartgeodes/block/entity/BuddingHeartBlockBlockEntity.java new file mode 100644 index 0000000..1c3b0c5 --- /dev/null +++ b/src/main/java/net/seaswimmerthefsh/heartgeodes/block/entity/BuddingHeartBlockBlockEntity.java @@ -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 stacks = NonNullList.withSize(0, ItemStack.EMPTY); + private final LazyOptional[] 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 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 handler : handlers) + handler.invalidate(); + } +} diff --git a/src/main/java/net/seaswimmerthefsh/heartgeodes/block/entity/HeartClusterBlockEntity.java b/src/main/java/net/seaswimmerthefsh/heartgeodes/block/entity/HeartClusterBlockEntity.java new file mode 100644 index 0000000..b9bd9f6 --- /dev/null +++ b/src/main/java/net/seaswimmerthefsh/heartgeodes/block/entity/HeartClusterBlockEntity.java @@ -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 stacks = NonNullList.withSize(0, ItemStack.EMPTY); + private final LazyOptional[] 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 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 handler : handlers) + handler.invalidate(); + } +} diff --git a/src/main/java/net/seaswimmerthefsh/heartgeodes/block/entity/LargeHeartBudBlockEntity.java b/src/main/java/net/seaswimmerthefsh/heartgeodes/block/entity/LargeHeartBudBlockEntity.java new file mode 100644 index 0000000..d7ed277 --- /dev/null +++ b/src/main/java/net/seaswimmerthefsh/heartgeodes/block/entity/LargeHeartBudBlockEntity.java @@ -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 stacks = NonNullList.withSize(0, ItemStack.EMPTY); + private final LazyOptional[] 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 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 handler : handlers) + handler.invalidate(); + } +} diff --git a/src/main/java/net/seaswimmerthefsh/heartgeodes/command/TestRulesCommand.java b/src/main/java/net/seaswimmerthefsh/heartgeodes/command/TestRulesCommand.java new file mode 100644 index 0000000..6170f5e --- /dev/null +++ b/src/main/java/net/seaswimmerthefsh/heartgeodes/command/TestRulesCommand.java @@ -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; + }))); + } +} diff --git a/src/main/java/net/seaswimmerthefsh/heartgeodes/init/HeartgeodesModBlockEntities.java b/src/main/java/net/seaswimmerthefsh/heartgeodes/init/HeartgeodesModBlockEntities.java new file mode 100644 index 0000000..1262d47 --- /dev/null +++ b/src/main/java/net/seaswimmerthefsh/heartgeodes/init/HeartgeodesModBlockEntities.java @@ -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> REGISTRY = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, HeartgeodesMod.MODID); + public static final RegistryObject> BUDDING_HEART_BLOCK = register("budding_heart_block", HeartgeodesModBlocks.BUDDING_HEART_BLOCK, BuddingHeartBlockBlockEntity::new); + public static final RegistryObject> HEART_CLUSTER = register("heart_cluster", HeartgeodesModBlocks.HEART_CLUSTER, HeartClusterBlockEntity::new); + public static final RegistryObject> LARGE_HEART_BUD = register("large_heart_bud", HeartgeodesModBlocks.LARGE_HEART_BUD, LargeHeartBudBlockEntity::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/net/mcreator/heartgeodes/init/HeartgeodesModBlocks.java b/src/main/java/net/seaswimmerthefsh/heartgeodes/init/HeartgeodesModBlocks.java similarity index 53% rename from src/main/java/net/mcreator/heartgeodes/init/HeartgeodesModBlocks.java rename to src/main/java/net/seaswimmerthefsh/heartgeodes/init/HeartgeodesModBlocks.java index b785440..23e8ace 100644 --- a/src/main/java/net/mcreator/heartgeodes/init/HeartgeodesModBlocks.java +++ b/src/main/java/net/seaswimmerthefsh/heartgeodes/init/HeartgeodesModBlocks.java @@ -2,7 +2,13 @@ /* * 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.ForgeRegistries; @@ -10,12 +16,10 @@ import net.minecraftforge.registries.DeferredRegister; 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 static final DeferredRegister REGISTRY = DeferredRegister.create(ForgeRegistries.BLOCKS, HeartgeodesMod.MODID); public static final RegistryObject HEART_BLOCK = REGISTRY.register("heart_block", () -> new HeartBlockBlock()); public static final RegistryObject BUDDING_HEART_BLOCK = REGISTRY.register("budding_heart_block", () -> new BuddingHeartBlockBlock()); + public static final RegistryObject HEART_CLUSTER = REGISTRY.register("heart_cluster", () -> new HeartClusterBlock()); + public static final RegistryObject LARGE_HEART_BUD = REGISTRY.register("large_heart_bud", () -> new LargeHeartBudBlock()); } diff --git a/src/main/java/net/mcreator/heartgeodes/init/HeartgeodesModItems.java b/src/main/java/net/seaswimmerthefsh/heartgeodes/init/HeartgeodesModItems.java similarity index 75% rename from src/main/java/net/mcreator/heartgeodes/init/HeartgeodesModItems.java rename to src/main/java/net/seaswimmerthefsh/heartgeodes/init/HeartgeodesModItems.java index b011c54..b0bdeec 100644 --- a/src/main/java/net/mcreator/heartgeodes/init/HeartgeodesModItems.java +++ b/src/main/java/net/seaswimmerthefsh/heartgeodes/init/HeartgeodesModItems.java @@ -2,7 +2,9 @@ /* * 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.ForgeRegistries; @@ -12,12 +14,12 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.item.Item; import net.minecraft.world.item.BlockItem; -import net.mcreator.heartgeodes.HeartgeodesMod; - public class HeartgeodesModItems { public static final DeferredRegister REGISTRY = DeferredRegister.create(ForgeRegistries.ITEMS, HeartgeodesMod.MODID); public static final RegistryObject HEART_BLOCK = block(HeartgeodesModBlocks.HEART_BLOCK); public static final RegistryObject BUDDING_HEART_BLOCK = block(HeartgeodesModBlocks.BUDDING_HEART_BLOCK); + public static final RegistryObject HEART_CLUSTER = block(HeartgeodesModBlocks.HEART_CLUSTER); + public static final RegistryObject LARGE_HEART_BUD = block(HeartgeodesModBlocks.LARGE_HEART_BUD); 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/net/mcreator/heartgeodes/init/HeartgeodesModTabs.java b/src/main/java/net/seaswimmerthefsh/heartgeodes/init/HeartgeodesModTabs.java similarity index 83% rename from src/main/java/net/mcreator/heartgeodes/init/HeartgeodesModTabs.java rename to src/main/java/net/seaswimmerthefsh/heartgeodes/init/HeartgeodesModTabs.java index 668568f..da433f4 100644 --- a/src/main/java/net/mcreator/heartgeodes/init/HeartgeodesModTabs.java +++ b/src/main/java/net/seaswimmerthefsh/heartgeodes/init/HeartgeodesModTabs.java @@ -2,7 +2,9 @@ /* * 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.DeferredRegister; @@ -12,12 +14,10 @@ import net.minecraft.world.item.CreativeModeTab; import net.minecraft.network.chat.Component; import net.minecraft.core.registries.Registries; -import net.mcreator.heartgeodes.HeartgeodesMod; - public class HeartgeodesModTabs { public static final DeferredRegister REGISTRY = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, HeartgeodesMod.MODID); public static final RegistryObject 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.BUDDING_HEART_BLOCK.get().asItem()); }) diff --git a/src/main/java/net/seaswimmerthefsh/heartgeodes/procedures/TestRulesPProcedure.java b/src/main/java/net/seaswimmerthefsh/heartgeodes/procedures/TestRulesPProcedure.java new file mode 100644 index 0000000..1765770 --- /dev/null +++ b/src/main/java/net/seaswimmerthefsh/heartgeodes/procedures/TestRulesPProcedure.java @@ -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 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); + } + } +} diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 58f7c35..23152fd 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,14 +1,15 @@ modLoader="javafml" loaderVersion="[47,)" -license="Academic Free License v3.0" +license="MIT License" [[mods]] modId="heartgeodes" version="1.0.0" displayName="HeartGeodes" credits="Created using mod maker MCreator - https://mcreator.net/about" -displayURL="https://mcreator.net" -authors="seasw, MCreator" +displayURL="https://coastalcommits.com/GalacticFactory/HeartGeodes" +authors="SeaswimmerTheFsh" +description="This mod adds Geodes for Scaling Difficulty to the game." [[dependencies.heartgeodes]] modId="minecraft" diff --git a/src/main/resources/assets/heartgeodes/blockstates/heart_cluster.json b/src/main/resources/assets/heartgeodes/blockstates/heart_cluster.json new file mode 100644 index 0000000..0410265 --- /dev/null +++ b/src/main/resources/assets/heartgeodes/blockstates/heart_cluster.json @@ -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 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/heartgeodes/blockstates/large_heart_bud.json b/src/main/resources/assets/heartgeodes/blockstates/large_heart_bud.json new file mode 100644 index 0000000..ae89bd9 --- /dev/null +++ b/src/main/resources/assets/heartgeodes/blockstates/large_heart_bud.json @@ -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 + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/heartgeodes/lang/en_us.json b/src/main/resources/assets/heartgeodes/lang/en_us.json index f3f6758..3100923 100644 --- a/src/main/resources/assets/heartgeodes/lang/en_us.json +++ b/src/main/resources/assets/heartgeodes/lang/en_us.json @@ -1,5 +1,7 @@ { "block.heartgeodes.budding_heart_block": "Budding Heart Block", + "block.heartgeodes.heart_cluster": "Heart Cluster", "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" } \ No newline at end of file diff --git a/src/main/resources/assets/heartgeodes/models/block/heart_block.json b/src/main/resources/assets/heartgeodes/models/block/heart_block.json index 23bf955..e5a6795 100644 --- a/src/main/resources/assets/heartgeodes/models/block/heart_block.json +++ b/src/main/resources/assets/heartgeodes/models/block/heart_block.json @@ -1,13 +1,13 @@ { "parent": "block/cube", "textures": { - "down": "heartgeodes:block/heart", - "up": "heartgeodes:block/heart", - "north": "heartgeodes:block/heart", - "east": "heartgeodes:block/heart", - "south": "heartgeodes:block/heart", - "west": "heartgeodes:block/heart", - "particle": "heartgeodes:block/heart" + "down": "heartgeodes:block/heartblock", + "up": "heartgeodes:block/heartblock", + "north": "heartgeodes:block/heartblock", + "east": "heartgeodes:block/heartblock", + "south": "heartgeodes:block/heartblock", + "west": "heartgeodes:block/heartblock", + "particle": "heartgeodes:block/heartblock" }, "render_type": "solid" } \ No newline at end of file diff --git a/src/main/resources/assets/heartgeodes/models/block/heart_cluster.json b/src/main/resources/assets/heartgeodes/models/block/heart_cluster.json new file mode 100644 index 0000000..bb40658 --- /dev/null +++ b/src/main/resources/assets/heartgeodes/models/block/heart_cluster.json @@ -0,0 +1,8 @@ +{ + "parent": "block/cross", + "textures": { + "cross": "heartgeodes:block/heartcluster", + "particle": "heartgeodes:block/heartcluster" + }, + "render_type": "cutout" +} \ No newline at end of file diff --git a/src/main/resources/assets/heartgeodes/models/block/large_heart_bud.json b/src/main/resources/assets/heartgeodes/models/block/large_heart_bud.json new file mode 100644 index 0000000..9449ebd --- /dev/null +++ b/src/main/resources/assets/heartgeodes/models/block/large_heart_bud.json @@ -0,0 +1,8 @@ +{ + "parent": "block/cross", + "textures": { + "cross": "heartgeodes:block/largeheartbud", + "particle": "heartgeodes:block/largeheartbud" + }, + "render_type": "cutout" +} \ No newline at end of file diff --git a/src/main/resources/assets/heartgeodes/models/custom/crystal_0.json b/src/main/resources/assets/heartgeodes/models/custom/crystal_0.json new file mode 100644 index 0000000..e043b7c --- /dev/null +++ b/src/main/resources/assets/heartgeodes/models/custom/crystal_0.json @@ -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" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/heartgeodes/models/custom/crystal_1.json b/src/main/resources/assets/heartgeodes/models/custom/crystal_1.json new file mode 100644 index 0000000..e043b7c --- /dev/null +++ b/src/main/resources/assets/heartgeodes/models/custom/crystal_1.json @@ -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" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/heartgeodes/models/custom/crystal_2.json b/src/main/resources/assets/heartgeodes/models/custom/crystal_2.json new file mode 100644 index 0000000..e043b7c --- /dev/null +++ b/src/main/resources/assets/heartgeodes/models/custom/crystal_2.json @@ -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" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/heartgeodes/models/custom/crystal_3.json b/src/main/resources/assets/heartgeodes/models/custom/crystal_3.json new file mode 100644 index 0000000..e043b7c --- /dev/null +++ b/src/main/resources/assets/heartgeodes/models/custom/crystal_3.json @@ -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" + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/heartgeodes/models/item/heart_cluster.json b/src/main/resources/assets/heartgeodes/models/item/heart_cluster.json new file mode 100644 index 0000000..9f969e2 --- /dev/null +++ b/src/main/resources/assets/heartgeodes/models/item/heart_cluster.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "heartgeodes:item/heartcluster" + }, + "render_type": "translucent" +} \ No newline at end of file diff --git a/src/main/resources/assets/heartgeodes/models/item/large_heart_bud.json b/src/main/resources/assets/heartgeodes/models/item/large_heart_bud.json new file mode 100644 index 0000000..6341797 --- /dev/null +++ b/src/main/resources/assets/heartgeodes/models/item/large_heart_bud.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "heartgeodes:item/largeheartbud" + }, + "render_type": "translucent" +} \ No newline at end of file diff --git a/src/main/resources/assets/heartgeodes/textures/block/buddingheart.png b/src/main/resources/assets/heartgeodes/textures/block/buddingheart.png index 534d66d..08740ba 100644 Binary files a/src/main/resources/assets/heartgeodes/textures/block/buddingheart.png and b/src/main/resources/assets/heartgeodes/textures/block/buddingheart.png differ diff --git a/src/main/resources/assets/heartgeodes/textures/block/buddingheartold.png b/src/main/resources/assets/heartgeodes/textures/block/buddingheartold.png new file mode 100644 index 0000000..534d66d Binary files /dev/null and b/src/main/resources/assets/heartgeodes/textures/block/buddingheartold.png differ diff --git a/src/main/resources/assets/heartgeodes/textures/block/heartblock.png b/src/main/resources/assets/heartgeodes/textures/block/heartblock.png new file mode 100644 index 0000000..2efd0a2 Binary files /dev/null and b/src/main/resources/assets/heartgeodes/textures/block/heartblock.png differ diff --git a/src/main/resources/assets/heartgeodes/textures/block/heartcluster.png b/src/main/resources/assets/heartgeodes/textures/block/heartcluster.png new file mode 100644 index 0000000..b684df7 Binary files /dev/null and b/src/main/resources/assets/heartgeodes/textures/block/heartcluster.png differ diff --git a/src/main/resources/assets/heartgeodes/textures/block/heart.png b/src/main/resources/assets/heartgeodes/textures/block/heartold.png similarity index 100% rename from src/main/resources/assets/heartgeodes/textures/block/heart.png rename to src/main/resources/assets/heartgeodes/textures/block/heartold.png diff --git a/src/main/resources/assets/heartgeodes/textures/block/largeheartbud.png b/src/main/resources/assets/heartgeodes/textures/block/largeheartbud.png new file mode 100644 index 0000000..d6cbfa3 Binary files /dev/null and b/src/main/resources/assets/heartgeodes/textures/block/largeheartbud.png differ diff --git a/src/main/resources/assets/heartgeodes/textures/block/mediumheartbud.png b/src/main/resources/assets/heartgeodes/textures/block/mediumheartbud.png new file mode 100644 index 0000000..0544e9e Binary files /dev/null and b/src/main/resources/assets/heartgeodes/textures/block/mediumheartbud.png differ diff --git a/src/main/resources/assets/heartgeodes/textures/block/smallheartbud.png b/src/main/resources/assets/heartgeodes/textures/block/smallheartbud.png new file mode 100644 index 0000000..f24aa8b Binary files /dev/null and b/src/main/resources/assets/heartgeodes/textures/block/smallheartbud.png differ diff --git a/src/main/resources/assets/heartgeodes/textures/item/heartcluster.png b/src/main/resources/assets/heartgeodes/textures/item/heartcluster.png new file mode 100644 index 0000000..b684df7 Binary files /dev/null and b/src/main/resources/assets/heartgeodes/textures/item/heartcluster.png differ diff --git a/src/main/resources/assets/heartgeodes/textures/item/largeheartbud.png b/src/main/resources/assets/heartgeodes/textures/item/largeheartbud.png new file mode 100644 index 0000000..d6cbfa3 Binary files /dev/null and b/src/main/resources/assets/heartgeodes/textures/item/largeheartbud.png differ diff --git a/src/main/resources/assets/heartgeodes/textures/item/mediumheartbud.png b/src/main/resources/assets/heartgeodes/textures/item/mediumheartbud.png new file mode 100644 index 0000000..0544e9e Binary files /dev/null and b/src/main/resources/assets/heartgeodes/textures/item/mediumheartbud.png differ diff --git a/src/main/resources/assets/heartgeodes/textures/item/smallheartbud.png b/src/main/resources/assets/heartgeodes/textures/item/smallheartbud.png new file mode 100644 index 0000000..f24aa8b Binary files /dev/null and b/src/main/resources/assets/heartgeodes/textures/item/smallheartbud.png differ diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json index 3571344..2be6778 100644 --- a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -2,6 +2,8 @@ "replace": false, "values": [ "heartgeodes:heart_block", - "heartgeodes:budding_heart_block" + "heartgeodes:budding_heart_block", + "heartgeodes:heart_cluster", + "heartgeodes:large_heart_bud" ] } \ No newline at end of file diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta index e690c7f..23861a9 100644 --- a/src/main/resources/pack.mcmeta +++ b/src/main/resources/pack.mcmeta @@ -1,6 +1,6 @@ { "pack": { "pack_format": 15, - "description": "" + "description": "This mod adds Geodes for Scaling Difficulty to the game." } } \ No newline at end of file