From a6604e464c0410f3f1fc6dcb8787991049e59641 Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Wed, 22 May 2024 22:11:54 +1000 Subject: [PATCH 01/23] first commit --- .../blockstates/air_lock_seal.json | 9 ++- .../blockstates/mars_copper_ore.json | 7 ++ .../blockstates/mars_iron_ore.json | 7 ++ .../blockstates/mars_tin_ore.json | 7 ++ .../assets/galacticraft/lang/en_us.json | 3 + .../models/block/mars_copper_ore.json | 6 ++ .../models/block/mars_iron_ore.json | 6 ++ .../models/block/mars_tin_ore.json | 6 ++ .../models/block/vapor_spout.json | 2 +- .../models/item/mars_copper_ore.json | 3 + .../models/item/mars_iron_ore.json | 3 + .../models/item/mars_tin_ore.json | 3 + .../blocks/lunaslate_copper_ore.json | 2 +- .../loot_tables/blocks/mars_copper_ore.json | 58 ++++++++++++++++ .../loot_tables/blocks/mars_iron_ore.json | 49 ++++++++++++++ .../loot_tables/blocks/mars_tin_ore.json | 49 ++++++++++++++ .../java/dev/galacticraft/mod/Constant.java | 3 + .../galacticraft/mod/content/GCBlocks.java | 6 +- .../entity/AirlockControllerBlockEntity.java | 31 +++++++-- .../block/special/AirlockSealBlock.java | 64 ++++++++++++++++++ .../mod/content/item/GCItems.java | 6 ++ .../models/block/air_lock_seal.json | 21 ++++++ .../textures/block/cobbled_lunaslate.png | Bin 0 -> 702 bytes .../textures/block/deepslate_aluminum_ore.png | Bin 0 -> 589 bytes .../textures/block/deepslate_silicon_ore.png | Bin 0 -> 669 bytes .../textures/block/deepslate_tin_ore.png | Bin 0 -> 656 bytes .../block/detailed_dark_decoration_side.png | Bin 0 -> 422 bytes .../block/detailed_dark_decoration_top.png | Bin 0 -> 427 bytes .../textures/block/lunaslate_copper_ore.png | Bin 0 -> 748 bytes .../textures/block/lunaslate_tin_ore.png | Bin 0 -> 684 bytes .../textures/block/lunaslate_top.png | Bin 0 -> 650 bytes .../textures/item/raw_aluminum.png | Bin 0 -> 381 bytes .../galacticraft/textures/item/raw_lead.png | Bin 0 -> 401 bytes .../galacticraft/textures/item/raw_tin.png | Bin 0 -> 551 bytes .../textures/item/raw_titanium.png | Bin 0 -> 413 bytes 35 files changed, 341 insertions(+), 10 deletions(-) create mode 100644 src/main/generated/assets/galacticraft/blockstates/mars_copper_ore.json create mode 100644 src/main/generated/assets/galacticraft/blockstates/mars_iron_ore.json create mode 100644 src/main/generated/assets/galacticraft/blockstates/mars_tin_ore.json create mode 100644 src/main/generated/assets/galacticraft/models/block/mars_copper_ore.json create mode 100644 src/main/generated/assets/galacticraft/models/block/mars_iron_ore.json create mode 100644 src/main/generated/assets/galacticraft/models/block/mars_tin_ore.json create mode 100644 src/main/generated/assets/galacticraft/models/item/mars_copper_ore.json create mode 100644 src/main/generated/assets/galacticraft/models/item/mars_iron_ore.json create mode 100644 src/main/generated/assets/galacticraft/models/item/mars_tin_ore.json create mode 100644 src/main/generated/data/galacticraft/loot_tables/blocks/mars_copper_ore.json create mode 100644 src/main/generated/data/galacticraft/loot_tables/blocks/mars_iron_ore.json create mode 100644 src/main/generated/data/galacticraft/loot_tables/blocks/mars_tin_ore.json create mode 100644 src/main/java/dev/galacticraft/mod/content/block/special/AirlockSealBlock.java create mode 100644 src/main/resources/assets/galacticraft/models/block/air_lock_seal.json create mode 100644 src/main/resources/assets/galacticraft/textures/block/cobbled_lunaslate.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/deepslate_aluminum_ore.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/deepslate_silicon_ore.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/deepslate_tin_ore.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/detailed_dark_decoration_side.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/detailed_dark_decoration_top.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/lunaslate_copper_ore.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/lunaslate_tin_ore.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/lunaslate_top.png create mode 100644 src/main/resources/assets/galacticraft/textures/item/raw_aluminum.png create mode 100644 src/main/resources/assets/galacticraft/textures/item/raw_lead.png create mode 100644 src/main/resources/assets/galacticraft/textures/item/raw_tin.png create mode 100644 src/main/resources/assets/galacticraft/textures/item/raw_titanium.png diff --git a/src/main/generated/assets/galacticraft/blockstates/air_lock_seal.json b/src/main/generated/assets/galacticraft/blockstates/air_lock_seal.json index e710442b0..c83bb5b7b 100644 --- a/src/main/generated/assets/galacticraft/blockstates/air_lock_seal.json +++ b/src/main/generated/assets/galacticraft/blockstates/air_lock_seal.json @@ -1,7 +1,10 @@ { "variants": { - "": { - "model": "galacticraft:block/air_lock_seal" - } + "facing=north": { "model": "galacticraft:block/air_lock_seal", "y": 90, "uvlock": true }, + "facing=east": { "model": "galacticraft:block/air_lock_seal", "uvlock": true }, + "facing=south": { "model": "galacticraft:block/air_lock_seal", "y": 90, "uvlock": true }, + "facing=west": { "model": "galacticraft:block/air_lock_seal", "uvlock": true }, + "facing=up": { "model": "galacticraft:block/air_lock_seal", "x": 90, "uvlock": true }, + "facing=down": { "model": "galacticraft:block/air_lock_seal", "x": 90, "uvlock": true } } } \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/blockstates/mars_copper_ore.json b/src/main/generated/assets/galacticraft/blockstates/mars_copper_ore.json new file mode 100644 index 000000000..c416a59f6 --- /dev/null +++ b/src/main/generated/assets/galacticraft/blockstates/mars_copper_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "galacticraft:block/mars_copper_ore" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/blockstates/mars_iron_ore.json b/src/main/generated/assets/galacticraft/blockstates/mars_iron_ore.json new file mode 100644 index 000000000..b3bf4bdb2 --- /dev/null +++ b/src/main/generated/assets/galacticraft/blockstates/mars_iron_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "galacticraft:block/mars_iron_ore" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/blockstates/mars_tin_ore.json b/src/main/generated/assets/galacticraft/blockstates/mars_tin_ore.json new file mode 100644 index 000000000..ed3e42255 --- /dev/null +++ b/src/main/generated/assets/galacticraft/blockstates/mars_tin_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "galacticraft:block/mars_tin_ore" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/lang/en_us.json b/src/main/generated/assets/galacticraft/lang/en_us.json index 13306f194..85c81650c 100644 --- a/src/main/generated/assets/galacticraft/lang/en_us.json +++ b/src/main/generated/assets/galacticraft/lang/en_us.json @@ -18,6 +18,9 @@ "block.galacticraft.aluminum_decoration_stairs": "Aluminum Decoration Stairs", "block.galacticraft.aluminum_decoration_wall": "Aluminum Decoration Wall", "block.galacticraft.aluminum_ore": "Aluminum Ore", + "block.galacticraft.mars_iron_ore": "Mars Iron Ore", + "block.galacticraft.mars_copper_ore": "Mars Copper Ore", + "block.galacticraft.mars_tin_ore": "Mars Tin Ore", "block.galacticraft.aluminum_wire": "Aluminum Wire", "block.galacticraft.asteroid_rock": "Asteroid Rock", "block.galacticraft.asteroid_rock_block_1": "Asteroid Rock", diff --git a/src/main/generated/assets/galacticraft/models/block/mars_copper_ore.json b/src/main/generated/assets/galacticraft/models/block/mars_copper_ore.json new file mode 100644 index 000000000..226f812c0 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/mars_copper_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "galacticraft:block/mars_copper_ore" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/mars_iron_ore.json b/src/main/generated/assets/galacticraft/models/block/mars_iron_ore.json new file mode 100644 index 000000000..bc485b0d7 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/mars_iron_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "galacticraft:block/mars_iron_ore" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/mars_tin_ore.json b/src/main/generated/assets/galacticraft/models/block/mars_tin_ore.json new file mode 100644 index 000000000..4658b67c1 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/mars_tin_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "galacticraft:block/mars_tin_ore" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/vapor_spout.json b/src/main/generated/assets/galacticraft/models/block/vapor_spout.json index db6739d21..2ee192ca0 100644 --- a/src/main/generated/assets/galacticraft/models/block/vapor_spout.json +++ b/src/main/generated/assets/galacticraft/models/block/vapor_spout.json @@ -2,6 +2,6 @@ "parent": "minecraft:block/cube_top", "textures": { "side": "galacticraft:block/soft_venus_rock", - "top": "galacticraft:block/vapor_spout" + "top": "galacticraft:block/vapor_spout_block_top" } } \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/mars_copper_ore.json b/src/main/generated/assets/galacticraft/models/item/mars_copper_ore.json new file mode 100644 index 000000000..df33c244f --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/mars_copper_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "galacticraft:block/mars_copper_ore" +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/mars_iron_ore.json b/src/main/generated/assets/galacticraft/models/item/mars_iron_ore.json new file mode 100644 index 000000000..cf75d390d --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/mars_iron_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "galacticraft:block/mars_iron_ore" +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/mars_tin_ore.json b/src/main/generated/assets/galacticraft/models/item/mars_tin_ore.json new file mode 100644 index 000000000..8d6ed6830 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/mars_tin_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "galacticraft:block/mars_tin_ore" +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/lunaslate_copper_ore.json b/src/main/generated/data/galacticraft/loot_tables/blocks/lunaslate_copper_ore.json index 077224bed..0d022cc63 100644 --- a/src/main/generated/data/galacticraft/loot_tables/blocks/lunaslate_copper_ore.json +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/lunaslate_copper_ore.json @@ -24,7 +24,7 @@ } } ], - "name": "galacticraft:moon_copper_ore" + "name": "galacticraft:lunaslate_copper_ore" }, { "type": "minecraft:item", diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/mars_copper_ore.json b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_copper_ore.json new file mode 100644 index 000000000..c997c10b0 --- /dev/null +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_copper_ore.json @@ -0,0 +1,58 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "galacticraft:mars_copper_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 5.0, + "min": 2.0 + }, + "function": "minecraft:set_count" + }, + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:raw_copper" + } + ] + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/mars_iron_ore.json b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_iron_ore.json new file mode 100644 index 000000000..38762f0e2 --- /dev/null +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_iron_ore.json @@ -0,0 +1,49 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:iron_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:raw_iron" + } + ] + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/mars_tin_ore.json b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_tin_ore.json new file mode 100644 index 000000000..fd7ed36c1 --- /dev/null +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_tin_ore.json @@ -0,0 +1,49 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "galacticraft:mars_tin_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "galacticraft:raw_tin" + } + ] + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/Constant.java b/src/main/java/dev/galacticraft/mod/Constant.java index 679a7fb4a..8774a659d 100644 --- a/src/main/java/dev/galacticraft/mod/Constant.java +++ b/src/main/java/dev/galacticraft/mod/Constant.java @@ -116,6 +116,9 @@ interface Block { String VAPOR_SPOUT = "vapor_spout"; // Ore + String MARS_IRON_ORE = "mars_iron_ore"; + String MARS_TIN_ORE = "mars_tin_ore"; + String MARS_COPPER_ORE = "mars_copper_ore"; String MOON_COPPER_ORE = "moon_copper_ore"; String LUNASLATE_COPPER_ORE = "lunaslate_copper_ore"; String DESH_ORE = "desh_ore"; diff --git a/src/main/java/dev/galacticraft/mod/content/GCBlocks.java b/src/main/java/dev/galacticraft/mod/content/GCBlocks.java index 76dfc7fb7..d03f84244 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCBlocks.java +++ b/src/main/java/dev/galacticraft/mod/content/GCBlocks.java @@ -215,6 +215,10 @@ public class GCBlocks { public static final Block DESH_ORE = BLOCKS.register(Constant.Block.DESH_ORE, new DropExperienceBlock(ConstantInt.of(0), oreSettings(3.0F, 5.0F, false))); + public static final Block MARS_IRON_ORE = BLOCKS.register(Constant.Block.MARS_IRON_ORE, new DropExperienceBlock(ConstantInt.of(0), oreSettings(3.0F, 3.0F, false))); + public static final Block MARS_TIN_ORE = BLOCKS.register(Constant.Block.MARS_TIN_ORE, new DropExperienceBlock(ConstantInt.of(0), oreSettings(3.0F, 3.0F, false))); + public static final Block MARS_COPPER_ORE = BLOCKS.register(Constant.Block.MARS_COPPER_ORE, new DropExperienceBlock(ConstantInt.of(0), oreSettings(3.0F, 3.0F, false))); + public static final Block ILMENITE_ORE = BLOCKS.register(Constant.Block.ILMENITE_ORE, new DropExperienceBlock(ConstantInt.of(0), oreSettings(3.0F, 5.0F, false))); public static final Block GALENA_ORE = BLOCKS.register(Constant.Block.GALENA_ORE, new DropExperienceBlock(ConstantInt.of(0), oreSettings(3.0F, 5.0F, false))); @@ -284,7 +288,7 @@ public class GCBlocks { public static final AirlockBlock AIR_LOCK_FRAME = BLOCKS.register(Constant.Block.AIR_LOCK_FRAME, new AirlockBlock(false, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BLOCK))); public static final AirlockBlock AIR_LOCK_CONTROLLER = BLOCKS.register(Constant.Block.AIR_LOCK_CONTROLLER, new AirlockBlock(true, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BLOCK))); - public static final Block AIR_LOCK_SEAL = BLOCKS.register(Constant.Block.AIR_LOCK_SEAL, new Block(BlockBehaviour.Properties.ofFullCopy(AIR_LOCK_FRAME))); + public static final Block AIR_LOCK_SEAL = BLOCKS.register(Constant.Block.AIR_LOCK_SEAL, new AirlockSealBlock(BlockBehaviour.Properties.ofFullCopy(AIR_LOCK_FRAME))); public static Block register(String id, Block block) { return Registry.register(BuiltInRegistries.BLOCK, Constant.id(id), block); diff --git a/src/main/java/dev/galacticraft/mod/content/block/entity/AirlockControllerBlockEntity.java b/src/main/java/dev/galacticraft/mod/content/block/entity/AirlockControllerBlockEntity.java index 108249638..4f3b8ff83 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/entity/AirlockControllerBlockEntity.java +++ b/src/main/java/dev/galacticraft/mod/content/block/entity/AirlockControllerBlockEntity.java @@ -26,6 +26,7 @@ import dev.galacticraft.mod.content.GCBlocks; import dev.galacticraft.mod.screen.AirlockControllerMenu; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.world.MenuProvider; import net.minecraft.world.entity.player.Inventory; @@ -40,6 +41,8 @@ import java.util.List; +import static dev.galacticraft.mod.content.block.special.AirlockSealBlock.FACING; + public class AirlockControllerBlockEntity extends BlockEntity implements MenuProvider { public boolean redstoneActivation; public boolean playerDistanceActivation = true; @@ -63,7 +66,7 @@ public AirlockControllerBlockEntity(BlockPos blockPos, BlockState blockState) { super(GCBlockEntityTypes.AIRLOCK_CONTROLLER, blockPos, blockState); } - + public static void tick(Level level, BlockPos blockPos, BlockState blockState, AirlockControllerBlockEntity blockEntity) { blockEntity.tick(); } @@ -170,6 +173,8 @@ private void sealAirLock() int y = (this.lastProtocol.maxY + this.lastProtocol.minY) / 2; int z = (this.lastProtocol.maxZ + this.lastProtocol.minZ) / 2; + boolean facingNorth = (this.lastProtocol.maxX - this.lastProtocol.minX) == 0; + if (!this.getLevel().getBlockState(new BlockPos(x, y, z)).is(GCBlocks.AIR_LOCK_SEAL)) { // this.getLevel().playSound(null, x, y, z, GCSounds.openAirLock, SoundSource.BLOCKS, 1.0F, 1.0F); @@ -186,7 +191,13 @@ private void sealAirLock() BlockPos pos = new BlockPos(x, y, z); if (this.getLevel().getBlockState(pos).isAir()) { - this.getLevel().setBlock(pos, GCBlocks.AIR_LOCK_SEAL.defaultBlockState(), 3); + if (facingNorth) + { + this.getLevel().setBlock(pos, GCBlocks.AIR_LOCK_SEAL.defaultBlockState().setValue(FACING, Direction.EAST), 3); + }else + { + this.getLevel().setBlock(pos, GCBlocks.AIR_LOCK_SEAL.defaultBlockState().setValue(FACING, Direction.NORTH), 3); + } } } } @@ -202,7 +213,13 @@ private void sealAirLock() BlockPos pos = new BlockPos(x, y, z); if (this.getLevel().getBlockState(pos).isAir()) { - this.getLevel().setBlock(pos, GCBlocks.AIR_LOCK_SEAL.defaultBlockState(), 3); + if (facingNorth) + { + this.getLevel().setBlock(pos, GCBlocks.AIR_LOCK_SEAL.defaultBlockState().setValue(FACING, Direction.EAST), 3); + }else + { + this.getLevel().setBlock(pos, GCBlocks.AIR_LOCK_SEAL.defaultBlockState().setValue(FACING, Direction.NORTH), 3); + } } } } @@ -215,7 +232,13 @@ private void sealAirLock() BlockPos pos = new BlockPos(x, y, z); if (this.getLevel().getBlockState(pos).isAir()) { - this.getLevel().setBlock(pos, GCBlocks.AIR_LOCK_SEAL.defaultBlockState(), 3); + if (facingNorth) + { + this.getLevel().setBlock(pos, GCBlocks.AIR_LOCK_SEAL.defaultBlockState().setValue(FACING, Direction.EAST), 3); + }else + { + this.getLevel().setBlock(pos, GCBlocks.AIR_LOCK_SEAL.defaultBlockState().setValue(FACING, Direction.NORTH), 3); + } } } } diff --git a/src/main/java/dev/galacticraft/mod/content/block/special/AirlockSealBlock.java b/src/main/java/dev/galacticraft/mod/content/block/special/AirlockSealBlock.java new file mode 100644 index 000000000..9af7ea0e1 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/content/block/special/AirlockSealBlock.java @@ -0,0 +1,64 @@ +package dev.galacticraft.mod.content.block.special; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.*; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class AirlockSealBlock extends Block { + public static final MapCodec CODEC = simpleCodec(AirlockSealBlock::new); + public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; + + + @Override + public MapCodec codec() { + return CODEC; + } + public AirlockSealBlock(Properties properties) { + super(properties); + this.registerDefaultState(this.defaultBlockState().setValue(FACING, Direction.NORTH)); + } + + + + protected static final VoxelShape SHAPE_NORTH = Block.box(0.0, 0.0, 4.0, 16.0, 16.0, 12.0); + protected static final VoxelShape SHAPE_EAST = Block.box(4.0, 0.0, 0.0, 12.0, 16.0, 16.0); + + @Override + public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + if (state.getValue(FACING) == Direction.NORTH || state.getValue(FACING) == Direction.SOUTH) + { + return SHAPE_NORTH; + }else + { + return SHAPE_EAST; + } + } + + @Override + public BlockState rotate(BlockState blockState, Rotation rotation) { + return blockState.setValue(FACING, rotation.rotate(blockState.getValue(FACING))); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING); + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext blockPlaceContext) { + return this.defaultBlockState().setValue(FACING, blockPlaceContext.getHorizontalDirection().getOpposite()); + } + +} \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java index 9830ebec7..af2cec19f 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java @@ -162,6 +162,9 @@ public class GCItems { public static final Item LUNASLATE_TIN_ORE = new BlockItem(GCBlocks.LUNASLATE_TIN_ORE, new Item.Properties()); public static final Item ALUMINUM_ORE = new BlockItem(GCBlocks.ALUMINUM_ORE, new Item.Properties()); + public static final Item MARS_TIN_ORE = new BlockItem(GCBlocks.MARS_TIN_ORE, new Item.Properties()); + public static final Item MARS_IRON_ORE = new BlockItem(GCBlocks.MARS_IRON_ORE, new Item.Properties()); + public static final Item MARS_COPPER_ORE = new BlockItem(GCBlocks.MARS_COPPER_ORE, new Item.Properties()); public static final Item DEEPSLATE_ALUMINUM_ORE = new BlockItem(GCBlocks.DEEPSLATE_ALUMINUM_ORE, new Item.Properties()); public static final Item DESH_ORE = new BlockItem(GCBlocks.DESH_ORE, new Item.Properties()); @@ -528,6 +531,9 @@ public static void register() { Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.ALUMINUM_ORE), ALUMINUM_ORE); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.DEEPSLATE_ALUMINUM_ORE), DEEPSLATE_ALUMINUM_ORE); + Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.MARS_IRON_ORE), MARS_IRON_ORE); + Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.MARS_TIN_ORE), MARS_TIN_ORE); + Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.MARS_COPPER_ORE), MARS_COPPER_ORE); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.DESH_ORE), DESH_ORE); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.ILMENITE_ORE), ILMENITE_ORE); diff --git a/src/main/resources/assets/galacticraft/models/block/air_lock_seal.json b/src/main/resources/assets/galacticraft/models/block/air_lock_seal.json new file mode 100644 index 000000000..81fcd308e --- /dev/null +++ b/src/main/resources/assets/galacticraft/models/block/air_lock_seal.json @@ -0,0 +1,21 @@ +{ + "textures": { + "particle": "galacticraft:block/tin_decoration", + "top": "galacticraft:block/tin_decoration", + "side": "galacticraft:block/tin_decoration", + "bottom": "galacticraft:block/tin_decoration" + }, + "elements": [ + { "from": [ 4, 0, 0 ], + "to": [ 12, 16, 16 ], + "faces": { + "down": {"texture": "#top"}, + "up": {"texture": "#bottom"}, + "north": {"texture": "#side"}, + "east": {"texture": "#side"}, + "south": {"texture": "#side"}, + "west": {"texture": "#side"} + } + } + ] +} diff --git a/src/main/resources/assets/galacticraft/textures/block/cobbled_lunaslate.png b/src/main/resources/assets/galacticraft/textures/block/cobbled_lunaslate.png new file mode 100644 index 0000000000000000000000000000000000000000..b4c155f58605036dac44a62a65b2bc6c786658cd GIT binary patch literal 702 zcmV;v0zv(WP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0#ivuK~y+TEmGS~ z+b|gRF>%wDw9p1x*kI5BSKDA0dxA;RkoNx5vB?6DJmN90P?Dz5z>R8wP zeosmXXk)#UR$C8?0jZRu$5n+fe4`MXx=z+P0>7bNuK(7d&N$CsR2=Cc0}hD1~u#IIt0cu=Unh@*Rj1KfxcgsOC$G9Y(j&S zPlRC5fzXU|Z!Jp5dI$I6XmC2M+5k!#1#!GH#$}vX18~TlL$wh7?*7C3*}FD_GytZz z*H;LG*9IjLd~jeE_?zT|r-WXdpUvmbo9%8d6`{mhPY{Mz(?e#m*(s($yxxIu! zVFOmHb(R6|{{bqp+bL%)>?^{k-|ce3s_F6L<8ua+=gyh^tA&%oIfKTWvuy?#&PjPt zj;g9@PnhWx#d5hW3gLXJ6Qa4O#)m>=gR-PwK7W$R5X#=XIbAFkV0X3JfO}{`8z=Ys k$z&{YHknR`!$Fp_f04w2ctz1JLI3~&07*qoM6N<$f@UZ~F8}}l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/deepslate_aluminum_ore.png b/src/main/resources/assets/galacticraft/textures/block/deepslate_aluminum_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..8a3ca9bfbb7c461e6c3bb8bea2df47e183771ccb GIT binary patch literal 589 zcmV-T0Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0pdwSK~y+TRgyg{ zLtzw#Ta}Po8clBvnzSK76NaV<(=}idn?-^MDFy}+B1Kq8NSI817K71d5d(=BYz%^g zE|scYP37Vu;^(h@@^D?ryT56wY`IjKl3NX9fhw1&y7b9;a?E2~5*; zI-Pi8&;SbB+FCTNk(?#0T3+2?ymcsR10z$d?L9y-Qj{px9k52vm|7ZnA`!JvmAuYuDh+_WC>xVVDOAnP4!8 zcZ9=Xc~L-*scRU*$M5%1L8()uB2$pNfR7jrd2G3&cr3pV buj~2`DV8gs%FP#h00000NkvXXu0mjfT^a(x literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/deepslate_silicon_ore.png b/src/main/resources/assets/galacticraft/textures/block/deepslate_silicon_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..7259ae700a396c836a9721b3157c1ce23c35a9bb GIT binary patch literal 669 zcmV;O0%HA%P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0y0TNK~y+TO;SN? z8c`5-U8-SMZ5CH0E^4)u)TV^gkU+}X94yj93#Ig`hv2Q}Kqb&a{!PxMhvpzH6haG4 ziijP4l>T0`QE&5zFDqXtr~_wDfRrbUT*}yyqso7Rzgyi zLkRdtByx84dvEV`yFYE7HZ04Y!8{yyB?!VC4KE0O1iY%MvMdooj@}=2JA?F{C~;y>C{<$SkO+|lgkON@uDc9nd3OT|1zfBL=QZ&yZg#?gqY-8Tf3i3Dm{%Z zB}DWEl9!|?dgQksfB9HvJz(|vH=oDlW?7afini@i0zH?~&Q2LUj=z3R-Cjb2;*)20 zv-jG+eqsOyDwRr&j;VKk;Fw6nuT{b!yRyEqzH;#H)A8X4U3X_)-Ar~{e-N-^JhKR) zxJsqM-a?8Q1ch|03oE5>Wt*)NCaV`I^-&S28Q8UQxhzMM2v7=#!@vQJBWud#^9B5k zMq~I)CVpWp&=~>H040EM0iFRup#Wbj7BK7n{u`nVw;w!h>E8p3KFAf67P?((+vm^_ zcO)sewY33x_*^arL29)cA=-tvpGu` zuWn$l|HVKO-rY1B42QkvFJ2Dlgpej4#N2NW4*NRA#{zB`0N==XY*9LN_b|WBL_`1t z=2O*8tz(*F4H?J<54l}R%;q98y_xsPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0wqaAK~y+TJ(ACB z(_k3K^S0t>+EAMGuwrl&A}9<-MVS=s4%UMguO0G%5}PQ%cMCcZ_|we1bt?&0-3ANGhRvE6Qi2+?G@T-NpM~C%Py`BT^?S&W4SI(X}zWV$Xcf`!hIcn*;F1w-#`1nERx4ZG^>8fEEvC{<+ z3MLI>oE$>z$AO5Ayj^?u<*SVn1c9omAUbRaiE8!q^mGY3m&;M=*^~REk1oZsI6qgv zbP+0o$tDhPP!Tqn~>)X z27@7N>f=cki^a~;JWF`-@=eTFn1>xSX0M+*IrZV=XH15~9|V6>se{p$FnoUqPE3qP zHxz{wZ0Wzgyh42lVW?`-PIHDg&8m@Jh_EKZK`-TrBs zCjFRZVS9T>CxwD>@6N3gQ%7E}t;@lpp{c-|bDK=0k>fUJuZ^WL>}~ibdQf)7JEDk6 zr5YVV$k#Ov9m8z3TGV8@=#7QDY>98FX_<)0Z{=_t2OO1x!F)U@)wqd=A;Ek;pOAkO qAwc)>zamoz$`Dk3HJQ*I$N2|&N;<-rNNM~40000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0Xs=VK~y+TjgifY zgfI|Kgii0qWm%V!O{hvr!W|0xa#UC{Lbvoocg|^k*sY)lBuIr+YvG04#=PS=) z#G)wbx?YxLbL;Y1dT0365hx31f^P1BSli8NwqA>yG9H`Yp>cX+?6sxrpF6|BZW zxwZDXt~}3wUN33!*7v(>MKqWPLK};as@L=JAo`K$QNk+S)WtNkzbE5MTz!m8gP{vNO=5i{O@JM4Zs5D|$2`o#$DK;g>OXurBg{V^nh@kI#qS`|+Q;g$CC2aCL3|=5t z5XU&tW*vV`L4{OXX#9=w@~4}o;hMACjRuj2lnLn);olCVrfpk3pCXF>0rcwG>tI7s Q>i_@%07*qoM6N<$f`0J4YybcN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_dark_decoration_top.png b/src/main/resources/assets/galacticraft/textures/block/detailed_dark_decoration_top.png new file mode 100644 index 0000000000000000000000000000000000000000..10411fe1de23875db5d4319a0ec91b180392bece GIT binary patch literal 427 zcmV;c0aX5pP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0YFJaK~y+TP0~9K z!axiJP?8|N1qB^vfC`EG-v}rG2?+3ZCyJQD8r$Pp8`2z)$H`>Ub)DGv{qy-m;Pd%3 zO@pjfD|IBAZnxVJz29#!jpcGVoldny6|L9nWgclkg$nN>uNYpy^#0o^{zI30d%N8*c@FSS?G{oU3b^nU-C3#@ zrBD(x7W;65xVWUGhr_`^*XxzRXrJv7#SqwTw~xo8)uW3d#u0@_ErJJ&Y`@?8DT_lz z*6^UX*=)odgHYe^_mX%>&R8jJ1Y8B-1Z5v^faD*F1FJ653^4L1mR`K&fwYPXl8QKu zh07mTWkX3Ex5|LjOl~U`Uu(Wl3ZU>sNg0W*%rKa=Qgb?;G95*J0PRGg@koNc?|(9o V@U5k9&wu~`002ovPDHLkV1gZnw@&~7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/lunaslate_copper_ore.png b/src/main/resources/assets/galacticraft/textures/block/lunaslate_copper_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..cbe069ee63a372fa2fa70d7dc6081732e053d326 GIT binary patch literal 748 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/item/raw_aluminum.png b/src/main/resources/assets/galacticraft/textures/item/raw_aluminum.png new file mode 100644 index 0000000000000000000000000000000000000000..1a23e1ea4dc7c4b7422ef98f5d889c9092e93638 GIT binary patch literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc4MLtSjv*HQ$r1$zIF=SR?MwCk=RA|gHPBGv zRiPBahhmXpKA0O{On3KZ5FEC@jBg2!D31<};j2T$s_SSe>2qgX!OaH-L zzO841zztW%xO)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0VYXAK~y+T)lt1p z0znx3ybFR7&%{7560GzMNGyzng|VjfJtWFcu`d0agTm2wL22Zo_$+gBfm* z-RKK2$!2bU=4bb0^Rbn)4e$Eu<~OL8q}T6re>u;?C!KW?@nNeL7`&_M>Gm z98y~}K=rv&WDL7H=BQo`>PC#K^V&4Hf4K8-=Y!hnwUKJ7o2p2TqZz+#IKT1Y{F1H) vFd0uKOolj5cJODx##y`V82)Fl@eo-6?2(VZ92QVD00000NkvXXu0mjfqbjV2 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/item/raw_tin.png b/src/main/resources/assets/galacticraft/textures/item/raw_tin.png new file mode 100644 index 0000000000000000000000000000000000000000..745b1497fd4daae51db5d87a0ca438d2ef3f5148 GIT binary patch literal 551 zcmV+?0@(eDP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0lY~>K~y+T#ZpTs zL{S+2&bf0Lj|LkSHWnUy@k={<|8J18Ps><|^5BwrlY*tfx6N>u3rW5O`y4{o)byJK%WZ%E+fEX>>nQ?@c0161eciju;?|2#ySU2 z%e5mvFB2ga8M9+ULF=(`@wmUg1*Hytwv%-~yDfK51K4}Kx~YFZvsh@R;+LWr2Px(w~bMPy=ee1tK=Bf`U=C<^YbPfhD* p3gj=;mSl6G9z1)#1o@u;-T_&Kru7B-?EU}%002ovPDHLkV1oGA>|g)@ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/item/raw_titanium.png b/src/main/resources/assets/galacticraft/textures/item/raw_titanium.png new file mode 100644 index 0000000000000000000000000000000000000000..aa28c329a49a673e96104708d591a2dd7628ff25 GIT binary patch literal 413 zcmV;O0b>4%P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0WwKMK~y+TwUS*+ z0#Oi#XA9X~VGpLZ-Sq+CO?MIaC;Zdi*XXkv) zJMS5m_QlKMR%-Q&Wj3Yp=t1*x0>537y|eQx1WMB{>UGC*bc)eTjg<+Tn_P( z_g5-0ix^X5yR-D0d_Uy*ViAz%t;fsr9ny+D5ZmIy4+64p1N!{16vuUnBA zg&rJL*DeHz#3!d@?TCfl1_Bj8b?GvYHTQbzz3OQR|-?X^;WMX*(!YlZEQ{XRLVX$l7zeDr`>8p`M{MU}h00000NkvXX Hu0mjf9U-qJ literal 0 HcmV?d00001 From b7cfc2d70d3e4a8747f7a1d46bd15b6478e38eaf Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Thu, 23 May 2024 21:01:48 +1000 Subject: [PATCH 02/23] Added Asteroids Dimension Added Asteroids Dimension and configured skybox. Haven't started terrain generation yet. --- .../assets/galacticraft/lang/en_us.json | 4 +- .../galacticraft/celestial_body/asteroid.json | 46 ++++++ .../celestial_body/asteroids.json | 39 ----- .../galacticraft/celestial_body/venus.json | 4 +- .../data/galacticraft/dimension/asteroid.json | 11 ++ .../galacticraft/dimension_type/asteroid.json | 25 ++++ .../tags/dimension_type/space.json | 3 +- .../tags/worldgen/biome/asteroid.json | 6 + .../worldgen/biome/asteroid_field.json | 61 ++++++++ .../asteroid/final_density.json | 18 +++ .../asteroid.json | 3 + .../worldgen/noise_settings/asteroid.json | 133 ++++++++++++++++++ .../dimension/AsteroidDimensionEffects.java | 78 ++++++++++ .../render/dimension/AsteroidSkyRenderer.java | 115 +++++++++++++++ .../render/dimension/GCDimensionEffects.java | 6 + .../mod/content/GCCelestialBodies.java | 30 ++-- .../mod/data/GCTranslationProvider.java | 4 +- .../mod/data/tag/GCBiomeTagProvider.java | 3 + .../mod/data/tag/GCDimensionTagProvider.java | 3 +- .../java/dev/galacticraft/mod/tag/GCTags.java | 2 + .../galacticraft/mod/util/Translations.java | 4 +- .../mod/world/biome/AsteroidBiomes.java | 85 +++++++++++ .../mod/world/biome/GCBiomes.java | 6 + ...GCMultiNoiseBiomeSourceParameterLists.java | 23 +++ .../mod/world/dimension/GCDimensionTypes.java | 18 +++ .../mod/world/dimension/GCDimensions.java | 1 + .../mod/world/dimension/GCLevelStems.java | 2 + .../mod/world/gen/GCDensityFunctions.java | 9 ++ .../world/gen/GCNoiseGeneratorSettings.java | 36 +++++ .../surfacebuilder/AsteroidSurfaceRules.java | 54 +++++++ 30 files changed, 771 insertions(+), 61 deletions(-) create mode 100644 src/main/generated/data/galacticraft/celestial_body/asteroid.json delete mode 100644 src/main/generated/data/galacticraft/celestial_body/asteroids.json create mode 100644 src/main/generated/data/galacticraft/dimension/asteroid.json create mode 100644 src/main/generated/data/galacticraft/dimension_type/asteroid.json create mode 100644 src/main/generated/data/galacticraft/tags/worldgen/biome/asteroid.json create mode 100644 src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json create mode 100644 src/main/generated/data/galacticraft/worldgen/density_function/asteroid/final_density.json create mode 100644 src/main/generated/data/galacticraft/worldgen/multi_noise_biome_source_parameter_list/asteroid.json create mode 100644 src/main/generated/data/galacticraft/worldgen/noise_settings/asteroid.json create mode 100644 src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidDimensionEffects.java create mode 100644 src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidSkyRenderer.java create mode 100644 src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java create mode 100644 src/main/java/dev/galacticraft/mod/world/gen/surfacebuilder/AsteroidSurfaceRules.java diff --git a/src/main/generated/assets/galacticraft/lang/en_us.json b/src/main/generated/assets/galacticraft/lang/en_us.json index 85c81650c..98e61da20 100644 --- a/src/main/generated/assets/galacticraft/lang/en_us.json +++ b/src/main/generated/assets/galacticraft/lang/en_us.json @@ -479,8 +479,8 @@ "itemGroup.galacticraft.items": "Galacticraft Items", "itemGroup.galacticraft.machines": "Galacticraft Machines", "key.galacticraft.rocket.inventory": "Open Rocket Inventory", - "planet.galacticraft.asteroids": "Asteroids", - "planet.galacticraft.asteroids.description": "", + "planet.galacticraft.asteroid": "Asteroids", + "planet.galacticraft.asteroid.description": "", "planet.galacticraft.earth": "Earth", "planet.galacticraft.earth.description": "The Overworld", "planet.galacticraft.jupiter": "Jupiter", diff --git a/src/main/generated/data/galacticraft/celestial_body/asteroid.json b/src/main/generated/data/galacticraft/celestial_body/asteroid.json new file mode 100644 index 000000000..614064d34 --- /dev/null +++ b/src/main/generated/data/galacticraft/celestial_body/asteroid.json @@ -0,0 +1,46 @@ +{ + "type": "galacticraft:planet", + "config": { + "parent": "galacticraft:sol", + "access_weight": 2, + "atmosphere": { + "composition": {}, + "pressure": 0, + "temperature": -1.5 + }, + "celestial_handler": "galacticraft:default", + "day_length": 99999999, + "day_temperature": -1.5, + "description": "planet.galacticraft.asteroid.description", + "display": { + "type": "galacticraft:icon", + "config": { + "height": 16, + "scale": 1.0, + "texture": "galacticraft:textures/gui/celestialbodies/asteroid.png", + "u": 0, + "v": 0, + "width": 16 + } + }, + "galaxy": "galacticraft:milky_way", + "gravity": 0.1, + "name": "planet.galacticraft.asteroid", + "night_temperature": -1.5, + "position": { + "type": "galacticraft:orbital", + "config": { + "distance": 0.75, + "orbit_time": 0.6152793169021606, + "phase_shift": 2.0, + "planet": true + } + }, + "ring": { + "type": "galacticraft:default", + "config": {} + }, + "teleporter": "galacticraft:lander", + "world": "galacticraft:asteroid" + } +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/celestial_body/asteroids.json b/src/main/generated/data/galacticraft/celestial_body/asteroids.json deleted file mode 100644 index 9c123b02f..000000000 --- a/src/main/generated/data/galacticraft/celestial_body/asteroids.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "type": "galacticraft:decorative_planet", - "config": { - "parent": "galacticraft:sol", - "atmosphere": { - "composition": {}, - "pressure": 3.0E-15, - "temperature": 23.0 - }, - "description": "planet.galacticraft.asteroids.description", - "display": { - "type": "galacticraft:spinning_icon", - "config": { - "height": 16, - "scale": 1.0, - "texture": "galacticraft:textures/gui/celestialbodies/asteroid.png", - "u": 0, - "v": 0, - "width": 16 - } - }, - "galaxy": "galacticraft:milky_way", - "gravity": 0.166, - "name": "planet.galacticraft.asteroids", - "position": { - "type": "galacticraft:orbital", - "config": { - "distance": 1.375, - "orbit_time": 45.0, - "phase_shift": 0.0, - "planet": true - } - }, - "ring": { - "type": "galacticraft:asteroid", - "config": {} - } - } -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/celestial_body/venus.json b/src/main/generated/data/galacticraft/celestial_body/venus.json index 4c47e97bf..25ca519b2 100644 --- a/src/main/generated/data/galacticraft/celestial_body/venus.json +++ b/src/main/generated/data/galacticraft/celestial_body/venus.json @@ -1,4 +1,4 @@ -{ + { "type": "galacticraft:planet", "config": { "parent": "galacticraft:sol", @@ -24,7 +24,7 @@ } }, "galaxy": "galacticraft:milky_way", - "gravity": 0.0375, + "gravity": 0.9, "name": "planet.galacticraft.venus", "night_temperature": -180, "position": { diff --git a/src/main/generated/data/galacticraft/dimension/asteroid.json b/src/main/generated/data/galacticraft/dimension/asteroid.json new file mode 100644 index 000000000..901eb4a27 --- /dev/null +++ b/src/main/generated/data/galacticraft/dimension/asteroid.json @@ -0,0 +1,11 @@ +{ + "type": "galacticraft:asteroid", + "generator": { + "type": "minecraft:noise", + "biome_source": { + "type": "minecraft:multi_noise", + "preset": "galacticraft:asteroid" + }, + "settings": "galacticraft:asteroid" + } +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/dimension_type/asteroid.json b/src/main/generated/data/galacticraft/dimension_type/asteroid.json new file mode 100644 index 000000000..c7c23e877 --- /dev/null +++ b/src/main/generated/data/galacticraft/dimension_type/asteroid.json @@ -0,0 +1,25 @@ +{ + "ambient_light": 0.1, + "bed_works": false, + "coordinate_scale": 1.0, + "effects": "galacticraft:asteroid", + "has_ceiling": false, + "has_raids": false, + "has_skylight": true, + "height": 384, + "infiniburn": "#galacticraft:infiniburn_asteroid", + "logical_height": 384, + "min_y": -64, + "monster_spawn_block_light_limit": 0, + "monster_spawn_light_level": { + "type": "minecraft:uniform", + "value": { + "max_inclusive": 7, + "min_inclusive": 0 + } + }, + "natural": false, + "piglin_safe": false, + "respawn_anchor_works": false, + "ultrawarm": false +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/tags/dimension_type/space.json b/src/main/generated/data/galacticraft/tags/dimension_type/space.json index 9641dbd16..b2229f1dd 100644 --- a/src/main/generated/data/galacticraft/tags/dimension_type/space.json +++ b/src/main/generated/data/galacticraft/tags/dimension_type/space.json @@ -2,6 +2,7 @@ "replace": false, "values": [ "galacticraft:moon", - "galacticraft:venus" + "galacticraft:venus", + "galacticraft:asteroid" ] } \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/tags/worldgen/biome/asteroid.json b/src/main/generated/data/galacticraft/tags/worldgen/biome/asteroid.json new file mode 100644 index 000000000..66fb4071e --- /dev/null +++ b/src/main/generated/data/galacticraft/tags/worldgen/biome/asteroid.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "galacticraft:asteroid_field" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json b/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json new file mode 100644 index 000000000..ce8c1488f --- /dev/null +++ b/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json @@ -0,0 +1,61 @@ +{ + "carvers": {}, + "downfall": 0.5, + "effects": { + "fog_color": 0, + "mood_sound": { + "block_search_extent": 8, + "offset": 2.0, + "sound": "minecraft:ambient.cave", + "tick_delay": 6000 + }, + "music": { + "max_delay": 24000, + "min_delay": 12000, + "replace_current_music": false, + "sound": "galacticraft:music.music_moon" + }, + "sky_color": 0, + "water_color": 0, + "water_fog_color": 0 + }, + "features": [], + "has_precipitation": true, + "spawn_costs": {}, + "spawners": { + "ambient": [], + "axolotls": [], + "creature": [], + "misc": [], + "monster": [ + { + "type": "galacticraft:evolved_spider", + "maxCount": 4, + "minCount": 4, + "weight": 100 + }, + { + "type": "galacticraft:evolved_zombie", + "maxCount": 4, + "minCount": 4, + "weight": 95 + }, + { + "type": "galacticraft:evolved_skeleton", + "maxCount": 4, + "minCount": 4, + "weight": 100 + }, + { + "type": "galacticraft:evolved_creeper", + "maxCount": 4, + "minCount": 4, + "weight": 100 + } + ], + "underground_water_creature": [], + "water_ambient": [], + "water_creature": [] + }, + "temperature": -2.0 +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/worldgen/density_function/asteroid/final_density.json b/src/main/generated/data/galacticraft/worldgen/density_function/asteroid/final_density.json new file mode 100644 index 000000000..feb1cdbd3 --- /dev/null +++ b/src/main/generated/data/galacticraft/worldgen/density_function/asteroid/final_density.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:add", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_value": 1.0, + "from_y": 0, + "to_value": -1.0, + "to_y": 90 + }, + "argument2": { + "type": "minecraft:old_blended_noise", + "smear_scale_multiplier": 8.0, + "xz_factor": 80.0, + "xz_scale": 0.25, + "y_factor": 160.0, + "y_scale": 0.375 + } +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/worldgen/multi_noise_biome_source_parameter_list/asteroid.json b/src/main/generated/data/galacticraft/worldgen/multi_noise_biome_source_parameter_list/asteroid.json new file mode 100644 index 000000000..0d5076475 --- /dev/null +++ b/src/main/generated/data/galacticraft/worldgen/multi_noise_biome_source_parameter_list/asteroid.json @@ -0,0 +1,3 @@ +{ + "preset": "galacticraft:asteroid" +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/worldgen/noise_settings/asteroid.json b/src/main/generated/data/galacticraft/worldgen/noise_settings/asteroid.json new file mode 100644 index 000000000..b3eb28f45 --- /dev/null +++ b/src/main/generated/data/galacticraft/worldgen/noise_settings/asteroid.json @@ -0,0 +1,133 @@ +{ + "aquifers_enabled": false, + "default_block": { + "Name": "galacticraft:hard_venus_rock" + }, + "default_fluid": { + "Name": "minecraft:air" + }, + "disable_mob_generation": false, + "legacy_random_source": false, + "noise": { + "height": 256, + "min_y": -32, + "size_horizontal": 1, + "size_vertical": 2 + }, + "noise_router": { + "barrier": 0.0, + "continents": 0.0, + "depth": 0.0, + "erosion": 0.0, + "final_density": { + "type": "minecraft:blend_density", + "argument": "galacticraft:asteroid/final_density" + }, + "fluid_level_floodedness": 0.0, + "fluid_level_spread": 0.0, + "initial_density_without_jaggedness": { + "type": "minecraft:noise", + "noise": "minecraft:spaghetti_3d_1", + "xz_scale": 1.0, + "y_scale": 1.0 + }, + "lava": 0.0, + "ridges": 0.0, + "temperature": 0.0, + "vegetation": 0.0, + "vein_gap": 0.0, + "vein_ridged": 0.0, + "vein_toggle": 0.0 + }, + "ore_veins_enabled": true, + "sea_level": -32, + "spawn_target": [ + { + "continentalness": [ + -0.11, + 1.0 + ], + "depth": 0.0, + "erosion": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "offset": 0.0, + "temperature": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + -0.16 + ] + }, + { + "continentalness": [ + -0.11, + 1.0 + ], + "depth": 0.0, + "erosion": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "offset": 0.0, + "temperature": [ + -1.0, + 1.0 + ], + "weirdness": [ + 0.16, + 1.0 + ] + } + ], + "surface_rule": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "galacticraft:asteroid_field" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "galacticraft:hard_venus_rock" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:vertical_gradient", + "false_at_and_above": { + "above_bottom": 5 + }, + "random_name": "minecraft:bedrock_floor", + "true_at_and_below": { + "above_bottom": 0 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:bedrock" + } + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidDimensionEffects.java b/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidDimensionEffects.java new file mode 100644 index 000000000..bc29be7d7 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidDimensionEffects.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package dev.galacticraft.mod.client.render.dimension; + +import dev.galacticraft.mod.api.dimension.GalacticDimensionEffects; +import dev.galacticraft.mod.particle.ScaleParticleType; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.ParticleStatus; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.DimensionSpecialEffects; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.tags.FluidTags; +import net.minecraft.util.CubicSampler; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.CampfireBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.NotNull; + +@Environment(EnvType.CLIENT) +public class AsteroidDimensionEffects extends DimensionSpecialEffects { + private static final float[] FOG_COLOR = {0.0F, 0.0F, 0.0F, 0.0F}; + public static final AsteroidDimensionEffects INSTANCE = new AsteroidDimensionEffects(); + + private AsteroidDimensionEffects() { + super(Float.NaN, false, SkyType.NORMAL, true, true); + } + + @Override + public Vec3 getBrightnessDependentFogColor(Vec3 color, float sunHeight) { + return Vec3.ZERO; + } + + @Override + public boolean isFoggyAt(int camX, int camY) { + return false; + } + + @Override + public float[] getSunriseColor(float skyAngle, float tickDelta) { + return FOG_COLOR; + } +} diff --git a/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidSkyRenderer.java b/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidSkyRenderer.java new file mode 100644 index 000000000..9755148fe --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidSkyRenderer.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package dev.galacticraft.mod.client.render.dimension; + +import com.mojang.blaze3d.platform.GlStateManager; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.*; +import com.mojang.math.Axis; +import dev.galacticraft.mod.Constant; +import net.fabricmc.fabric.api.client.rendering.v1.DimensionRenderingRegistry; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.FogRenderer; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.ShaderInstance; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.phys.Vec3; +import org.joml.Matrix4f; +import org.lwjgl.opengl.GL11; + +public class AsteroidSkyRenderer extends SpaceSkyRenderer { + public static final AsteroidSkyRenderer INSTANCE = new AsteroidSkyRenderer(); + private static final ResourceLocation EARTH_TEXTURE = Constant.id("textures/gui/celestialbodies/earth.png"); + private static final ResourceLocation SUN_TEXTURE = Constant.id("textures/gui/celestialbodies/sun.png"); + + @Override + public void render(WorldRenderContext context) { + context.profiler().push("asteroid_sky_renderer"); + RenderSystem.disableBlend(); + RenderSystem.depthMask(false); + + final PoseStack matrices = context.matrixStack(); + final BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + + context.profiler().push("stars"); + matrices.pushPose(); + matrices.mulPose(Axis.YP.rotationDegrees((context.world().getTimeOfDay(context.tickDelta()) * 360.0f) - 90F)); + matrices.mulPose(Axis.XP.rotationDegrees(context.world().getTimeOfDay(context.tickDelta()) * 360.0f)); + matrices.mulPose(Axis.YP.rotationDegrees(-19.0F)); + + this.starManager.render(context.matrixStack(), context.projectionMatrix(), context.world(), context.tickDelta()); + + matrices.popPose(); + context.profiler().pop(); + + context.profiler().push("sun"); + matrices.pushPose(); + + matrices.mulPose(Axis.YP.rotationDegrees(-90.0F)); + matrices.mulPose(Axis.XP.rotationDegrees(context.world().getTimeOfDay(context.tickDelta()) * 360.0f)); + + Matrix4f matrix = matrices.last().pose(); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + float size = 20.0F; + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.setShaderTexture(0, SUN_TEXTURE); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + buffer.vertex(matrix, -size, 100.0F, -size).uv(0.0F, 0.0F).endVertex(); + buffer.vertex(matrix, size, 100.0F, -size).uv(1.0F, 0.0F).endVertex(); + buffer.vertex(matrix, size, 100.0F, size).uv(1.0F, 1.0F).endVertex(); + buffer.vertex(matrix, -size, 100.0F, size).uv(0.0F, 1.0F).endVertex(); + BufferUploader.drawWithShader(buffer.end()); + + matrices.popPose(); + context.profiler().pop(); + + context.profiler().push("earth"); + matrices.pushPose(); + matrix = matrices.last().pose(); + + size = 10.0F; + assert Minecraft.getInstance().player != null; + float earthRotation = (float) (context.world().getSharedSpawnPos().getZ() - Minecraft.getInstance().player.getZ()) * 0.01F; + matrices.scale(0.6F, 0.6F, 0.6F); + matrices.mulPose(Axis.XP.rotationDegrees((context.world().getTimeOfDay(context.tickDelta()) * 360.0F) * 0.001F)); + matrices.mulPose(Axis.XP.rotationDegrees(earthRotation + 200.0F)); + + RenderSystem.setShaderTexture(0, EARTH_TEXTURE); + + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + buffer.vertex(matrix, -size, -100.0F, size).uv(0.0F, 1.0F).endVertex(); + buffer.vertex(matrix, size, -100.0F, size).uv(1.0F, 1.0F).endVertex(); + buffer.vertex(matrix, size, -100.0F, -size).uv(1.0F, 0.0F).endVertex(); + buffer.vertex(matrix, -size, -100.0F, -size).uv(0.0F, 0.0F).endVertex(); + BufferUploader.drawWithShader(buffer.end()); + + context.profiler().pop(); + matrices.popPose(); + + RenderSystem.depthMask(true); + context.profiler().pop(); + } +} diff --git a/src/main/java/dev/galacticraft/mod/client/render/dimension/GCDimensionEffects.java b/src/main/java/dev/galacticraft/mod/client/render/dimension/GCDimensionEffects.java index d94269393..773b02f93 100644 --- a/src/main/java/dev/galacticraft/mod/client/render/dimension/GCDimensionEffects.java +++ b/src/main/java/dev/galacticraft/mod/client/render/dimension/GCDimensionEffects.java @@ -30,6 +30,7 @@ public class GCDimensionEffects { public static final ResourceLocation MOON = Constant.id("moon"); public static final ResourceLocation VENUS = Constant.id("venus"); + public static final ResourceLocation ASTEROID = Constant.id("asteroid"); public static void register() { DimensionRenderingRegistry.registerDimensionEffects(MOON, MoonDimensionEffects.INSTANCE); @@ -41,5 +42,10 @@ public static void register() { DimensionRenderingRegistry.registerCloudRenderer(GCDimensions.VENUS, EmptyCloudRenderer.INSTANCE); DimensionRenderingRegistry.registerWeatherRenderer(GCDimensions.VENUS, VenusWeatherRenderer.INSTANCE); DimensionRenderingRegistry.registerSkyRenderer(GCDimensions.VENUS, VenusSkyRenderer.INSTANCE); + + DimensionRenderingRegistry.registerDimensionEffects(ASTEROID, AsteroidDimensionEffects.INSTANCE); + DimensionRenderingRegistry.registerCloudRenderer(GCDimensions.ASTEROID, EmptyCloudRenderer.INSTANCE); + DimensionRenderingRegistry.registerWeatherRenderer(GCDimensions.ASTEROID, EmptyWeatherRenderer.INSTANCE); + DimensionRenderingRegistry.registerSkyRenderer(GCDimensions.ASTEROID, AsteroidSkyRenderer.INSTANCE); } } diff --git a/src/main/java/dev/galacticraft/mod/content/GCCelestialBodies.java b/src/main/java/dev/galacticraft/mod/content/GCCelestialBodies.java index faf9b44c7..92ffaf48a 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCCelestialBodies.java +++ b/src/main/java/dev/galacticraft/mod/content/GCCelestialBodies.java @@ -39,7 +39,6 @@ import dev.galacticraft.impl.universe.display.config.ring.DefaultCelestialRingDisplayConfig; import dev.galacticraft.impl.universe.display.type.IconCelestialDisplayType; import dev.galacticraft.impl.universe.display.type.SpinningIconCelestialDisplayType; -import dev.galacticraft.impl.universe.display.type.ring.AsteroidCelestialRingDisplayType; import dev.galacticraft.impl.universe.display.type.ring.DefaultCelestialRingDisplayType; import dev.galacticraft.impl.universe.position.config.OrbitalCelestialPositionConfig; import dev.galacticraft.impl.universe.position.config.StaticCelestialPositionConfig; @@ -71,7 +70,7 @@ public class GCCelestialBodies { public static final ResourceKey> MERCURY = key("mercury"); public static final ResourceKey> VENUS = key("venus"); public static final ResourceKey> MARS = key("mars"); - public static final ResourceKey> ASTEROIDS = key("asteroids"); + public static final ResourceKey> ASTEROID = key("asteroid"); public static final ResourceKey> JUPITER = key("jupiter"); public static final ResourceKey> SATURN = key("saturn"); public static final ResourceKey> URANUS = key("uranus"); @@ -195,7 +194,7 @@ public static void bootstrapRegistries(BootstapContext> cont .temperature(23.0) .pressure(3.0E-15F) .build(), - 0.0375F, + 0.9F, GCCelestialHandlers.DEFAULT, 1, 105, @@ -220,19 +219,26 @@ public static void bootstrapRegistries(BootstapContext> cont Optional.empty() ))); - context.register(ASTEROIDS, DecorativePlanet.INSTANCE.configure(new DecorativePlanetConfig( - Component.translatable(Translations.CelestialBody.ASTEROIDS), - Component.translatable(Translations.CelestialBody.ASTEROIDS_DESC), + context.register(ASTEROID, PlanetType.INSTANCE.configure(new PlanetConfig( + Component.translatable(Translations.CelestialBody.ASTEROID), + Component.translatable(Translations.CelestialBody.ASTEROID_DESC), BuiltinObjects.MILKY_WAY_KEY, BuiltinObjects.SOL_KEY, - OrbitalCelestialPositionType.INSTANCE.configure(new OrbitalCelestialPositionConfig(45.0F, 1.375F, 0.0F, true)), - SpinningIconCelestialDisplayType.INSTANCE.configure(new IconCelestialDisplayConfig(Constant.id("textures/gui/celestialbodies/asteroid.png"), 0, 0, 16, 16)), - AsteroidCelestialRingDisplayType.INSTANCE.configure(new DefaultCelestialRingDisplayConfig()), + OrbitalCelestialPositionType.INSTANCE.configure(new OrbitalCelestialPositionConfig(0.61527929901423877327491785323111F, 0.75F, 2.0F, false)), + IconCelestialDisplayType.INSTANCE.configure(new IconCelestialDisplayConfig(Constant.id("textures/gui/celestialbodies/asteroid.png"), 0, 0, 16, 16)), + DefaultCelestialRingDisplayType.INSTANCE.configure(new DefaultCelestialRingDisplayConfig()), + GCDimensions.ASTEROID, + lookup.getOrThrow(GCTeleporterTypes.LANDER_CELESTIAL_TELEPORTER), new GasComposition.Builder() - .temperature(23.0) - .pressure(3.0E-15F) + .temperature(-1.5) + .pressure(3.0E-1F) .build(), - 0.166F, + 0.1F, + GCCelestialHandlers.DEFAULT, + 2, + -2, + -2, + 99999999L, //set to really long time so change isnt seen much Optional.empty() ))); diff --git a/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java b/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java index ad1896f72..73a820756 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java @@ -189,8 +189,8 @@ protected void generateTranslations(HolderLookup.@NotNull Provider registries) { this.add(CelestialBody.SOL_DESC, ""); this.add(CelestialBody.SOL, "Sol"); - this.add(CelestialBody.ASTEROIDS_DESC, ""); - this.add(CelestialBody.ASTEROIDS, "Asteroids"); + this.add(CelestialBody.ASTEROID_DESC, ""); + this.add(CelestialBody.ASTEROID, "Asteroid"); this.add(CelestialBody.EARTH_DESC, "The Overworld"); this.add(CelestialBody.EARTH, "Earth"); this.add(CelestialBody.JUPITER_DESC, ""); diff --git a/src/main/java/dev/galacticraft/mod/data/tag/GCBiomeTagProvider.java b/src/main/java/dev/galacticraft/mod/data/tag/GCBiomeTagProvider.java index b19f2ab8c..b671d5404 100644 --- a/src/main/java/dev/galacticraft/mod/data/tag/GCBiomeTagProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/tag/GCBiomeTagProvider.java @@ -51,6 +51,9 @@ protected void addTags(HolderLookup.Provider arg) { .add(GCBiomes.Venus.VENUS_FLAT) .add(GCBiomes.Venus.VENUS_MOUNTAIN); + this.tag(GCTags.ASTEROID) + .add(GCBiomes.Asteroid.ASTEROID_FIELD); + this.tag(GCTags.MOON_PILLAGER_BASE_HAS_STRUCTURE) .add(GCBiomes.Moon.BASALTIC_MARE); this.tag(GCTags.MOON_VILLAGE_HIGHLANDS_HAS_STRUCTURE) diff --git a/src/main/java/dev/galacticraft/mod/data/tag/GCDimensionTagProvider.java b/src/main/java/dev/galacticraft/mod/data/tag/GCDimensionTagProvider.java index 5b36dc53f..c92b947e8 100644 --- a/src/main/java/dev/galacticraft/mod/data/tag/GCDimensionTagProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/tag/GCDimensionTagProvider.java @@ -44,6 +44,7 @@ protected void addTags(HolderLookup.Provider arg) { .add(GCDimensionTypes.MOON); tag(GCTags.SPACE) .add(GCDimensionTypes.MOON) - .add(GCDimensionTypes.VENUS); + .add(GCDimensionTypes.VENUS) + .add(GCDimensionTypes.ASTEROID); } } diff --git a/src/main/java/dev/galacticraft/mod/tag/GCTags.java b/src/main/java/dev/galacticraft/mod/tag/GCTags.java index 06ab0dbf5..03287b74d 100644 --- a/src/main/java/dev/galacticraft/mod/tag/GCTags.java +++ b/src/main/java/dev/galacticraft/mod/tag/GCTags.java @@ -43,6 +43,7 @@ public class GCTags { public static final TagKey INFINIBURN_MOON = TagKey.create(Registries.BLOCK, Constant.id("infiniburn_moon")); public static final TagKey INFINIBURN_VENUS = TagKey.create(Registries.BLOCK, Constant.id("infiniburn_venus")); + public static final TagKey INFINIBURN_ASTEROID = TagKey.create(Registries.BLOCK, Constant.id("infiniburn_asteroid")); public static final TagKey BASE_STONE_MOON = TagKey.create(Registries.BLOCK, Constant.id("base_stone_moon")); public static final TagKey MOON_CARVER_REPLACEABLES = TagKey.create(Registries.BLOCK, Constant.id("moon_carver_replaceables")); public static final TagKey MOON_CRATER_CARVER_REPLACEABLES = TagKey.create(Registries.BLOCK, Constant.id("moon_crater_carver_replaceables")); @@ -53,6 +54,7 @@ public class GCTags { public static final TagKey MOON = TagKey.create(Registries.BIOME, Constant.id("moon")); public static final TagKey VENUS = TagKey.create(Registries.BIOME, Constant.id("venus")); + public static final TagKey ASTEROID = TagKey.create(Registries.BIOME, Constant.id("asteroid")); public static final TagKey MOON_PILLAGER_BASE_HAS_STRUCTURE = TagKey.create(Registries.BIOME, Constant.id("has_structure/moon_pillager_base")); public static final TagKey MOON_VILLAGE_HIGHLANDS_HAS_STRUCTURE = TagKey.create(Registries.BIOME, Constant.id("has_structure/moon_village_highlands")); diff --git a/src/main/java/dev/galacticraft/mod/util/Translations.java b/src/main/java/dev/galacticraft/mod/util/Translations.java index 0572ca868..c28a8ac61 100644 --- a/src/main/java/dev/galacticraft/mod/util/Translations.java +++ b/src/main/java/dev/galacticraft/mod/util/Translations.java @@ -122,8 +122,8 @@ interface CelestialBody { String SOL_DESC = "star.galacticraft.sol.description"; String SOL = "star.galacticraft.sol"; - String ASTEROIDS_DESC = "planet.galacticraft.asteroids.description"; - String ASTEROIDS = "planet.galacticraft.asteroids"; + String ASTEROID_DESC = "planet.galacticraft.asteroid.description"; + String ASTEROID = "planet.galacticraft.asteroid"; String EARTH_DESC = "planet.galacticraft.earth.description"; String EARTH = "planet.galacticraft.earth"; String JUPITER_DESC = "planet.galacticraft.jupiter.description"; diff --git a/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java b/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java new file mode 100644 index 000000000..e3c5d26c7 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package dev.galacticraft.mod.world.biome; + +import dev.galacticraft.mod.content.GCEntityTypes; +import dev.galacticraft.mod.content.GCSounds; +import dev.galacticraft.mod.world.gen.feature.GCOrePlacedFeatures; +import net.minecraft.core.HolderGetter; +import net.minecraft.sounds.Musics; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.level.biome.*; +import net.minecraft.world.level.levelgen.GenerationStep; +import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; + +import java.awt.*; + +public class AsteroidBiomes { + public static void monsters(MobSpawnSettings.Builder builder, int zombieWeight, int zombieVillagerWeight, int selektonWeight) { + builder.addSpawn(MobCategory.MONSTER, new MobSpawnSettings.SpawnerData(GCEntityTypes.EVOLVED_SPIDER, 100, 4, 4)); + builder.addSpawn(MobCategory.MONSTER, new MobSpawnSettings.SpawnerData(GCEntityTypes.EVOLVED_ZOMBIE, zombieWeight, 4, 4)); +// builder.addSpawn(MobCategory.MONSTER, new MobSpawnSettings.SpawnerData(GCEntityTypes.EVOLVED_ZOMBIE_VILLAGER, zombieVillagerWeight, 1, 1)); + builder.addSpawn(MobCategory.MONSTER, new MobSpawnSettings.SpawnerData(GCEntityTypes.EVOLVED_SKELETON, selektonWeight, 4, 4)); + builder.addSpawn(MobCategory.MONSTER, new MobSpawnSettings.SpawnerData(GCEntityTypes.EVOLVED_CREEPER, 100, 4, 4)); +// builder.addSpawn(MobCategory.MONSTER, new MobSpawnSettings.SpawnerData(GCEntityTypes.EVOLVED_SLIME, 100, 4, 4)); +// builder.addSpawn(MobCategory.MONSTER, new MobSpawnSettings.SpawnerData(GCEntityTypes.EVOLVED_ENDERMAN, 10, 1, 4)); +// builder.addSpawn(MobCategory.MONSTER, new MobSpawnSettings.SpawnerData(GCEntityTypes.EVOLVED_WITCH, 5, 1, 1)); + } + + public static void addDefaultAsteroidOres(BiomeGenerationSettings.Builder builder) { +// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_COPPER_MOON); +// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_COPPER_LARGE_MOON); +// +// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_TIN_SMALL_MOON); +// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_TIN_MIDDLE_MOON); +// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_TIN_UPPER_MOON); + } + + public static Biome asteroid( + HolderGetter featureGetter, HolderGetter> carverGetter + ) { + MobSpawnSettings.Builder spawnBuilder = new MobSpawnSettings.Builder(); + BiomeGenerationSettings.Builder generation = new BiomeGenerationSettings.Builder(featureGetter, carverGetter); + BiomeSpecialEffects.Builder specialEffects = new BiomeSpecialEffects.Builder(); + specialEffects.waterColor(0) + .waterFogColor(0) + .fogColor(0) + .skyColor(new Color(0, 0, 0).getRGB()) + .ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS) + .backgroundMusic(Musics.createGameMusic(GCSounds.MUSIC_MOON)); + + AsteroidBiomes.addDefaultAsteroidOres(generation); +// AsteroidBiomes.addDefaultSoftDisks(generation); + AsteroidBiomes.monsters(spawnBuilder, 95, 5, 100); + + return new Biome.BiomeBuilder() + .mobSpawnSettings(spawnBuilder.build()) + .hasPrecipitation(true) + .temperature(-2F) // temp is hot to prevent snow + .downfall(0.5F) + .specialEffects(specialEffects.build()) + .generationSettings(generation.build()) + .build(); + } +} diff --git a/src/main/java/dev/galacticraft/mod/world/biome/GCBiomes.java b/src/main/java/dev/galacticraft/mod/world/biome/GCBiomes.java index ef8505213..523eaf239 100644 --- a/src/main/java/dev/galacticraft/mod/world/biome/GCBiomes.java +++ b/src/main/java/dev/galacticraft/mod/world/biome/GCBiomes.java @@ -51,6 +51,10 @@ public static final class Venus { public static final ResourceKey VENUS_MOUNTAIN = key("venus_mountain"); } + public static final class Asteroid { + public static final ResourceKey ASTEROID_FIELD = key("asteroid_field"); + } + public static final ResourceKey SPACE = ResourceKey.create(Registries.BIOME, Constant.id("space")); public static Biome createSpaceBiome(HolderGetter holderGetter, HolderGetter> holderGetter2) { @@ -82,6 +86,8 @@ public static void bootstrapRegistries(BootstapContext context) { // moj- context.register(Venus.VENUS_VALLEY, VenusBiomes.venus(featureLookup, carverLookup)); context.register(Venus.VENUS_FLAT, VenusBiomes.venus(featureLookup, carverLookup)); context.register(Venus.VENUS_MOUNTAIN, VenusBiomes.venus(featureLookup, carverLookup)); + + context.register(Asteroid.ASTEROID_FIELD, AsteroidBiomes.asteroid(featureLookup, carverLookup)); } @Contract(pure = true) diff --git a/src/main/java/dev/galacticraft/mod/world/biome/source/GCMultiNoiseBiomeSourceParameterLists.java b/src/main/java/dev/galacticraft/mod/world/biome/source/GCMultiNoiseBiomeSourceParameterLists.java index c314971ef..525d6f8f7 100644 --- a/src/main/java/dev/galacticraft/mod/world/biome/source/GCMultiNoiseBiomeSourceParameterLists.java +++ b/src/main/java/dev/galacticraft/mod/world/biome/source/GCMultiNoiseBiomeSourceParameterLists.java @@ -86,15 +86,20 @@ public class GCMultiNoiseBiomeSourceParameterLists { public static final ResourceLocation MOON_PRESET_ID = Constant.id("moon"); public static final ResourceLocation VENUS_PRESET_ID = Constant.id("venus"); + public static final ResourceLocation ASTEROID_PRESET_ID = Constant.id("asteroid"); public static final MultiNoiseBiomeSourceParameterList.Preset MOON_PRESET = new MultiNoiseBiomeSourceParameterList.Preset( MOON_PRESET_ID, GCMultiNoiseBiomeSourceParameterLists::generateMoon ); public static final MultiNoiseBiomeSourceParameterList.Preset VENUS_PRESET = new MultiNoiseBiomeSourceParameterList.Preset( VENUS_PRESET_ID, GCMultiNoiseBiomeSourceParameterLists::generateVenus ); + public static final MultiNoiseBiomeSourceParameterList.Preset ASTEROID_PRESET = new MultiNoiseBiomeSourceParameterList.Preset( + ASTEROID_PRESET_ID, GCMultiNoiseBiomeSourceParameterLists::generateAsteroid + ); public static final ResourceKey MOON = Constant.key(Registries.MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST, "moon"); public static final ResourceKey VENUS = Constant.key(Registries.MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST, "venus"); + public static final ResourceKey ASTEROID = Constant.key(Registries.MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST, "asteroid"); @Contract("_ -> new") private static Climate.@NotNull ParameterList generateMoon(Function, T> biomeRegistry) { @@ -167,6 +172,21 @@ public class GCMultiNoiseBiomeSourceParameterLists { return new Climate.ParameterList<>(builder.build()); } + @Contract("_ -> new") + private static Climate.@NotNull ParameterList generateAsteroid(Function, T> biomeRegistry) { + ImmutableList.Builder> builder = ImmutableList.builder(); + writeBiomeParameters(builder::add, + HOT, // hot to prevent snow + DRY,// , + Parameter.span(SHORE_CONTINENTALNESS, MID_INLAND_CONTINENTALNESS), + MIN_EROSION, + WEIRDNESS_H_MIXED, + 0.0F, + biomeRegistry.apply(GCBiomes.Asteroid.ASTEROID_FIELD)); + + return new Climate.ParameterList<>(builder.build()); + } + private static void writeBiomeParameters( Consumer> parameters, Parameter temperature, @@ -194,12 +214,15 @@ private static void writeBiomeParameters( public static void register() { MultiNoiseBiomeSourceParameterListPresetAccessor.getByName().put(MOON_PRESET_ID, MOON_PRESET); MultiNoiseBiomeSourceParameterListPresetAccessor.getByName().put(VENUS_PRESET_ID, VENUS_PRESET); + MultiNoiseBiomeSourceParameterListPresetAccessor.getByName().put(ASTEROID_PRESET_ID, ASTEROID_PRESET); + } public static void bootstrapRegistries(BootstapContext context) { HolderGetter lookup = context.lookup(Registries.BIOME); context.register(MOON, new MultiNoiseBiomeSourceParameterList(MOON_PRESET, lookup)); context.register(VENUS, new MultiNoiseBiomeSourceParameterList(VENUS_PRESET, lookup)); + context.register(ASTEROID, new MultiNoiseBiomeSourceParameterList(ASTEROID_PRESET, lookup)); } } diff --git a/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensionTypes.java b/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensionTypes.java index cc2808a09..d5b5c6c1e 100644 --- a/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensionTypes.java +++ b/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensionTypes.java @@ -37,6 +37,7 @@ public class GCDimensionTypes { public static final ResourceKey MOON = key("moon"); public static final ResourceKey VENUS = key("venus"); + public static final ResourceKey ASTEROID = key("asteroid"); public static void bootstrapRegistries(BootstapContext context) { context.register(MOON, new DimensionType( @@ -73,6 +74,23 @@ public static void bootstrapRegistries(BootstapContext context) { 0.1F, // ambientLight new DimensionType.MonsterSettings(false, false, UniformInt.of(0, 7), 0) )); + context.register(ASTEROID, new DimensionType( + OptionalLong.empty(), // fixedTime + true, // hasSkyLight + false, // hasCeiling + false, // ultraWarm + false, // natural + 1.0, // coordinateScale + false, // bedWorks + false, // respawnAnchorWorks + -64, // minY + 384, // height + 384, // logicalHeight + GCTags.INFINIBURN_ASTEROID, // infiniburn + Constant.id("asteroid"), // effectsLocation // fixme + 0.1F, // ambientLight + new DimensionType.MonsterSettings(false, false, UniformInt.of(0, 7), 0) + )); } @Contract(value = "_ -> new", pure = true) diff --git a/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensions.java b/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensions.java index ee30ea2e7..eafb8c6f5 100644 --- a/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensions.java +++ b/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensions.java @@ -32,6 +32,7 @@ public class GCDimensions { public static final ResourceKey MOON = key("moon"); public static final ResourceKey VENUS = key("venus"); + public static final ResourceKey ASTEROID = key("asteroid"); @Contract(pure = true) private static @NotNull ResourceKey key(@NotNull String id) { diff --git a/src/main/java/dev/galacticraft/mod/world/dimension/GCLevelStems.java b/src/main/java/dev/galacticraft/mod/world/dimension/GCLevelStems.java index 89bc3328f..36bdce0da 100644 --- a/src/main/java/dev/galacticraft/mod/world/dimension/GCLevelStems.java +++ b/src/main/java/dev/galacticraft/mod/world/dimension/GCLevelStems.java @@ -42,6 +42,7 @@ public class GCLevelStems { public static final ResourceKey MOON = key("moon"); public static final ResourceKey VENUS = key("venus"); + public static final ResourceKey ASTEROID = key("asteroid"); public static void bootstrapRegistries(@NotNull BootstapContext context) { HolderGetter typeLookup = context.lookup(Registries.DIMENSION_TYPE); @@ -52,6 +53,7 @@ public static void bootstrapRegistries(@NotNull BootstapContext conte // the returned reference may be null // context.register(MOON, new LevelStem(typeLookup.getOrThrow(GCDimensionTypes.MOON), new NoiseBasedChunkGenerator(MultiNoiseBiomeSource.createFromPreset(biomeNoiseLookup.getOrThrow(GCMultiNoiseBiomeSourceParameterLists.MOON)), noiseLookup.getOrThrow(GCNoiseGeneratorSettings.MOON)))); context.register(VENUS, new LevelStem(typeLookup.getOrThrow(GCDimensionTypes.VENUS), new NoiseBasedChunkGenerator(MultiNoiseBiomeSource.createFromPreset(biomeNoiseLookup.getOrThrow(GCMultiNoiseBiomeSourceParameterLists.VENUS)), noiseLookup.getOrThrow(GCNoiseGeneratorSettings.VENUS)))); + context.register(ASTEROID, new LevelStem(typeLookup.getOrThrow(GCDimensionTypes.ASTEROID), new NoiseBasedChunkGenerator(MultiNoiseBiomeSource.createFromPreset(biomeNoiseLookup.getOrThrow(GCMultiNoiseBiomeSourceParameterLists.ASTEROID)), noiseLookup.getOrThrow(GCNoiseGeneratorSettings.ASTEROID)))); } @Contract(value = "_ -> new", pure = true) diff --git a/src/main/java/dev/galacticraft/mod/world/gen/GCDensityFunctions.java b/src/main/java/dev/galacticraft/mod/world/gen/GCDensityFunctions.java index 08cb76b74..b76b3e208 100644 --- a/src/main/java/dev/galacticraft/mod/world/gen/GCDensityFunctions.java +++ b/src/main/java/dev/galacticraft/mod/world/gen/GCDensityFunctions.java @@ -44,6 +44,10 @@ public static final class Venus { // Final Density handles overall terrain shape public static final ResourceKey FINAL_DENSITY = createKey("venus/final_density"); } + public static final class Asteroid { + // Final Density handles overall terrain shape + public static final ResourceKey FINAL_DENSITY = createKey("asteroid/final_density"); + } private static ResourceKey createKey(String id) { return ResourceKey.create(Registries.DENSITY_FUNCTION, Constant.id(id)); @@ -127,6 +131,11 @@ public static void bootstrapRegistries(BootstapContext context) DensityFunctions.yClampedGradient(0, 90, 1, -1), BlendedNoise.createUnseeded(0.25, 0.375, 80.0, 160.0, 8.0) )); + + context.register(Asteroid.FINAL_DENSITY, DensityFunctions.add( + DensityFunctions.yClampedGradient(0, 90, 1, -1), + BlendedNoise.createUnseeded(0.25, 0.375, 80.0, 160.0, 8.0) + )); } private static DensityFunction registerAndWrap(BootstapContext context, ResourceKey key, DensityFunction densityFunction) { diff --git a/src/main/java/dev/galacticraft/mod/world/gen/GCNoiseGeneratorSettings.java b/src/main/java/dev/galacticraft/mod/world/gen/GCNoiseGeneratorSettings.java index 105c190f3..3642742ff 100644 --- a/src/main/java/dev/galacticraft/mod/world/gen/GCNoiseGeneratorSettings.java +++ b/src/main/java/dev/galacticraft/mod/world/gen/GCNoiseGeneratorSettings.java @@ -26,6 +26,7 @@ import dev.galacticraft.mod.content.GCBlocks; import dev.galacticraft.mod.world.gen.surfacebuilder.MoonSurfaceRules; import dev.galacticraft.mod.world.gen.surfacebuilder.VenusSurfaceRules; +import dev.galacticraft.mod.world.gen.surfacebuilder.AsteroidSurfaceRules; import net.minecraft.core.HolderGetter; import net.minecraft.core.registries.Registries; import net.minecraft.data.worldgen.BootstapContext; @@ -43,6 +44,7 @@ public class GCNoiseGeneratorSettings { public static final ResourceKey MOON = key("moon"); public static final ResourceKey VENUS = key("venus"); + public static final ResourceKey ASTEROID = key("asteroid"); public static void bootstrapRegistries(BootstapContext context) { HolderGetter densityLookup = context.lookup(Registries.DENSITY_FUNCTION); @@ -75,6 +77,20 @@ public static void bootstrapRegistries(BootstapContext c true, false )); + + context.register(ASTEROID, new NoiseGeneratorSettings( + NoiseSettings.create(-32, 256, 1, 2), + GCBlocks.HARD_VENUS_ROCK.defaultBlockState(), + Blocks.AIR.defaultBlockState(), + GCNoiseGeneratorSettings.asteroid(densityLookup, noiseLookup), + AsteroidSurfaceRules.ASTEROID, + new OverworldBiomeBuilder().spawnTarget(), + -32, + false, + false, + true, + false + )); } public static NoiseRouter moon(HolderGetter densityLookup, HolderGetter noiseLookup) { @@ -179,6 +195,26 @@ public static NoiseRouter venus(HolderGetter densityLookup, Hol ); } + public static NoiseRouter asteroid(HolderGetter densityLookup, HolderGetter noiseLookup) { + return new NoiseRouter( + DensityFunctions.zero(), // barrierNoise + DensityFunctions.zero(), // fluidLevelFloodednessNoise + DensityFunctions.zero(), // fluidLevelSpreadNoise + DensityFunctions.zero(), // lavaNoise + DensityFunctions.zero(), // temperature + DensityFunctions.zero(), // vegetation + DensityFunctions.zero(), // continents + DensityFunctions.zero(), // erosion + DensityFunctions.zero(), // depth + DensityFunctions.zero(), // ridges + DensityFunctions.noise(noiseLookup.getOrThrow(Noises.SPAGHETTI_3D_1)), // initialDensityWithoutJaggedness + DensityFunctions.blendDensity(GCDensityFunctions.getFunction(densityLookup, GCDensityFunctions.Asteroid.FINAL_DENSITY)), // finalDensity + DensityFunctions.zero(), // veinToggle + DensityFunctions.zero(), // veinRidged + DensityFunctions.zero() // veinGap + ); + } + @Contract(value = "_ -> new", pure = true) private static @NotNull ResourceKey key(String id) { return Constant.key(Registries.NOISE_SETTINGS, id); diff --git a/src/main/java/dev/galacticraft/mod/world/gen/surfacebuilder/AsteroidSurfaceRules.java b/src/main/java/dev/galacticraft/mod/world/gen/surfacebuilder/AsteroidSurfaceRules.java new file mode 100644 index 000000000..32740f57c --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/world/gen/surfacebuilder/AsteroidSurfaceRules.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package dev.galacticraft.mod.world.gen.surfacebuilder; + +import dev.galacticraft.mod.content.GCBlocks; +import dev.galacticraft.mod.world.biome.GCBiomes; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.levelgen.SurfaceRules; +import net.minecraft.world.level.levelgen.VerticalAnchor; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; + +public class AsteroidSurfaceRules { + private static final SurfaceRules.RuleSource BEDROCK = block(Blocks.BEDROCK); + public static final SurfaceRules.RuleSource HARD_ROCK = block(GCBlocks.HARD_VENUS_ROCK); + + public static final SurfaceRules.RuleSource ASTEROID = createDefaultRule(); + + public static @NotNull SurfaceRules.RuleSource createDefaultRule() { + return SurfaceRules.sequence( + SurfaceRules.ifTrue( + SurfaceRules.isBiome(GCBiomes.Asteroid.ASTEROID_FIELD), + HARD_ROCK + ), + SurfaceRules.ifTrue(SurfaceRules.verticalGradient("bedrock_floor", VerticalAnchor.bottom(), VerticalAnchor.aboveBottom(5)), BEDROCK) + ); + } + + @Contract("_ -> new") + private static @NotNull SurfaceRules.RuleSource block(@NotNull Block block) { + return SurfaceRules.state(block.defaultBlockState()); + } +} From c25e0c6ac8f9b7d6ea423a00eb35073d72fbc813 Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Wed, 29 May 2024 00:14:05 +1000 Subject: [PATCH 03/23] Asteroid Dimension Terrain Generation Completed Asteroid Dimension Terrain Generation Structures/Features not implemented yet --- .../data/galacticraft/dimension/asteroid.json | 11 +- .../asteroid/AsteroidChunkGenerator | 0 .../galacticraft/api/perlin/FishyNoise.java | 133 +++ .../galacticraft/api/perlin/NoiseModule.java | 22 + .../galacticraft/api/perlin/SimplexNoise.java | 30 + .../api/perlin/generator/Billowed.java | 80 ++ .../api/perlin/generator/Gradient.java | 88 ++ .../api/perlin/generator/RidgedMulti.java | 142 +++ .../galacticraft/api/vector/BlockVec3.java | 676 +++++++++++ .../impl/internal/fabric/GalacticraftAPI.java | 25 + .../java/dev/galacticraft/mod/Constant.java | 1 + .../dev/galacticraft/mod/Galacticraft.java | 1 + .../mod/content/GCChunkGenerator.java | 26 + .../mod/content/GCChunkGeneratorRegistry.java | 11 + .../gen/custom/AsteroidChunkGenerator.java | 1054 +++++++++++++++++ .../world/gen/custom/AsteroidSaveData.java | 51 + .../gen/custom/SpecialAsteroidBlock.java | 22 + .../custom/SpecialAsteroidBlockHandler.java | 46 + 18 files changed, 2414 insertions(+), 5 deletions(-) create mode 100644 src/main/generated/data/galacticraft/worldgen/custom_terrain/asteroid/AsteroidChunkGenerator create mode 100644 src/main/java/dev/galacticraft/api/perlin/FishyNoise.java create mode 100644 src/main/java/dev/galacticraft/api/perlin/NoiseModule.java create mode 100644 src/main/java/dev/galacticraft/api/perlin/SimplexNoise.java create mode 100644 src/main/java/dev/galacticraft/api/perlin/generator/Billowed.java create mode 100644 src/main/java/dev/galacticraft/api/perlin/generator/Gradient.java create mode 100644 src/main/java/dev/galacticraft/api/perlin/generator/RidgedMulti.java create mode 100644 src/main/java/dev/galacticraft/api/vector/BlockVec3.java create mode 100644 src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java create mode 100644 src/main/java/dev/galacticraft/mod/content/GCChunkGeneratorRegistry.java create mode 100644 src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java create mode 100644 src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidSaveData.java create mode 100644 src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlock.java create mode 100644 src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlockHandler.java diff --git a/src/main/generated/data/galacticraft/dimension/asteroid.json b/src/main/generated/data/galacticraft/dimension/asteroid.json index 901eb4a27..39778a08e 100644 --- a/src/main/generated/data/galacticraft/dimension/asteroid.json +++ b/src/main/generated/data/galacticraft/dimension/asteroid.json @@ -1,11 +1,12 @@ { "type": "galacticraft:asteroid", "generator": { - "type": "minecraft:noise", - "biome_source": { - "type": "minecraft:multi_noise", - "preset": "galacticraft:asteroid" + "type": "galacticraft:asteroid_chunk_generator", + "biomeSource": { + "type": "minecraft:fixed", + "biome": "galacticraft:asteroid_field" }, - "settings": "galacticraft:asteroid" + "par2": 1000, + "dimensionKey": "galacticraft:asteroid" } } \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/worldgen/custom_terrain/asteroid/AsteroidChunkGenerator b/src/main/generated/data/galacticraft/worldgen/custom_terrain/asteroid/AsteroidChunkGenerator new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/java/dev/galacticraft/api/perlin/FishyNoise.java b/src/main/java/dev/galacticraft/api/perlin/FishyNoise.java new file mode 100644 index 000000000..5daaa8b33 --- /dev/null +++ b/src/main/java/dev/galacticraft/api/perlin/FishyNoise.java @@ -0,0 +1,133 @@ +package dev.galacticraft.api.perlin; + +import java.util.Random; + +public class FishyNoise +{ + int[] perm = new int[512]; + + public float[][] grad2d = new float[][] { { 1, 0 }, { .9239F, .3827F }, { .707107F, 0.707107F }, { .3827F, .9239F }, { 0, 1 }, { -.3827F, .9239F }, { -.707107F, 0.707107F }, { -.9239F, .3827F }, { -1, 0 }, { -.9239F, -.3827F }, { -.707107F, -0.707107F }, { -.3827F, -.9239F }, { 0, -1 }, { .3827F, -.9239F }, { .707107F, -0.707107F }, { .9239F, -.3827F } }; + + public int[][] grad3d = new int[][] { { 1, 1, 0 }, { -1, 1, 0 }, { 1, -1, 0 }, { -1, -1, 0 }, { 1, 0, 1 }, { -1, 0, 1 }, { 1, 0, -1 }, { -1, 0, -1 }, { 0, 1, 1 }, { 0, -1, 1 }, { 0, 1, -1 }, { 0, -1, -1 }, { 1, 1, 0 }, { -1, 1, 0 }, { 0, -1, 1 }, { 0, -1, -1 } }; + + public FishyNoise(long seed) + { + final Random rand = new Random(seed); + for (int i = 0; i < 256; i++) + { + this.perm[i] = i; //fills array with 0 - 256 + } + + for (int i = 0; i < 256; i++) // Shuffle those numbers for the random effect + { + final int j = rand.nextInt(256); + this.perm[i] = this.perm[i] ^ this.perm[j]; + this.perm[j] = this.perm[i] ^ this.perm[j]; + this.perm[i] = this.perm[i] ^ this.perm[j]; + } + + System.arraycopy(this.perm, 0, this.perm, 256, 256); + } + + private static float lerp(float x, float y, float n) + { + return x + n * (y - x); + } + + private static int fastFloor(float x) + { + return x > 0 ? (int) x : (int) x - 1; + } + + private static float fade(float n) + { + return n * n * n * (n * (n * 6 - 15) + 10); + } + + private static float dot2(float[] grad2, float x, float y) + { + return grad2[0] * x + grad2[1] * y; + } + + private static float dot3(int[] grad3, float x, float y, float z) + { + return grad3[0] * x + grad3[1] * y + grad3[2] * z; + } + + public float noise2d(float x, float y) + { + int largeX = x > 0 ? (int) x : (int) x - 1; + int largeY = y > 0 ? (int) y : (int) y - 1; + x -= largeX; + y -= largeY; + largeX &= 255; + largeY &= 255; + + final float u = x * x * x * (x * (x * 6 - 15) + 10); + final float v = y * y * y * (y * (y * 6 - 15) + 10); + + int randY = this.perm[largeY] + largeX; + int randY1 = this.perm[largeY + 1] + largeX; + float[] grad2 = this.grad2d[this.perm[randY] & 15]; + final float grad00 = grad2[0] * x + grad2[1] * y; + grad2 = this.grad2d[this.perm[randY1] & 15]; + final float grad01 = grad2[0] * x + grad2[1] * (y - 1); + grad2 = this.grad2d[this.perm[1 + randY1] & 15]; + final float grad11 = grad2[0] * (x - 1) + grad2[1] * (y - 1); + grad2 = this.grad2d[this.perm[1 + randY] & 15]; + final float grad10 = grad2[0] * (x - 1) + grad2[1] * y; + + final float lerpX0 = grad00 + u * (grad10 - grad00); + return lerpX0 + v * (grad01 + u * (grad11 - grad01) - lerpX0); + } + + public float noise3d(float x, float y, float z) + { + int unitX = x > 0 ? (int) x : (int) x - 1; + int unitY = y > 0 ? (int) y : (int) y - 1; + int unitZ = z > 0 ? (int) z : (int) z - 1; + + x -= unitX; + y -= unitY; + z -= unitZ; + + unitX &= 255; + unitY &= 255; + unitZ &= 255; + + final float u = x * x * x * (x * (x * 6 - 15) + 10); + final float v = y * y * y * (y * (y * 6 - 15) + 10); + final float w = z * z * z * (z * (z * 6 - 15) + 10); + + int randZ = this.perm[unitZ] + unitY; + int randZ1 = this.perm[unitZ + 1] + unitY; + int randYZ = this.perm[randZ] + unitX; + int randY1Z = this.perm[1 + randZ] + unitX; + int randYZ1 = this.perm[randZ1] + unitX; + int randY1Z1 = this.perm[1 + randZ1] + unitX; + int[] grad3 = this.grad3d[this.perm[randYZ] & 15]; + final float grad000 = grad3[0] * x + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3d[this.perm[1 + randYZ] & 15]; + final float grad100 = grad3[0] * (x - 1) + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3d[this.perm[randY1Z] & 15]; + final float grad010 = grad3[0] * x + grad3[1] * (y - 1) + grad3[2] * z; + grad3 = this.grad3d[this.perm[1 + randY1Z] & 15]; + final float grad110 = grad3[0] * (x - 1) + grad3[1] * (y - 1) + grad3[2] * z; + z--; + grad3 = this.grad3d[this.perm[randYZ1] & 15]; + final float grad001 = grad3[0] * x + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3d[this.perm[1 + randYZ1] & 15]; + final float grad101 = grad3[0] * (x - 1) + grad3[1] * y + grad3[2] * z; + grad3 = this.grad3d[this.perm[randY1Z1] & 15]; + final float grad011 = grad3[0] * x + grad3[1] * (y - 1) + grad3[2] * z; + grad3 = this.grad3d[this.perm[1 + randY1Z1] & 15]; + final float grad111 = grad3[0] * (x - 1) + grad3[1] * (y - 1) + grad3[2] * z; + + float f1 = grad000 + u * (grad100 - grad000); + float f2 = grad010 + u * (grad110 - grad010); + float f3 = grad001 + u * (grad101 - grad001); + float f4 = grad011 + u * (grad111 - grad011); + float lerp1 = f1 + v * (f2 - f1); + return lerp1 + w * (f3 + v * (f4 - f3) - lerp1); + } +} diff --git a/src/main/java/dev/galacticraft/api/perlin/NoiseModule.java b/src/main/java/dev/galacticraft/api/perlin/NoiseModule.java new file mode 100644 index 000000000..3d44ac82f --- /dev/null +++ b/src/main/java/dev/galacticraft/api/perlin/NoiseModule.java @@ -0,0 +1,22 @@ +package dev.galacticraft.api.perlin; + +public abstract class NoiseModule +{ + public float frequencyX = 1; + public float frequencyY = 1; + public float frequencyZ = 1; + public float amplitude = 1; + + public abstract float getNoise(float i); + + public abstract float getNoise(float i, float j); + + public abstract float getNoise(float i, float j, float k); + + public void setFrequency(float frequency) + { + this.frequencyX = frequency; + this.frequencyY = frequency; + this.frequencyZ = frequency; + } +} diff --git a/src/main/java/dev/galacticraft/api/perlin/SimplexNoise.java b/src/main/java/dev/galacticraft/api/perlin/SimplexNoise.java new file mode 100644 index 000000000..e83152c00 --- /dev/null +++ b/src/main/java/dev/galacticraft/api/perlin/SimplexNoise.java @@ -0,0 +1,30 @@ +package dev.galacticraft.api.perlin; + +import java.util.Random; + +public class SimplexNoise +{ + int[] perm = new int[512]; + + public int[][] grad2d = new int[][] { { 0, 0 }, { 0, 1 }, { 1, 1 }, { 1, 0 } }; + + public SimplexNoise(long seed) + { + final Random rand = new Random(seed); + for (int i = 0; i < 256; i++) + { + this.perm[i] = i; // Fill up the random array with numbers 0-256 + } + + for (int i = 0; i < 256; i++) // Shuffle those numbers for the random + // effect + { + final int j = rand.nextInt(256); + this.perm[i] = this.perm[i] ^ this.perm[j]; + this.perm[j] = this.perm[i] ^ this.perm[j]; + this.perm[i] = this.perm[i] ^ this.perm[j]; + } + + System.arraycopy(this.perm, 0, this.perm, 256, 256); + } +} diff --git a/src/main/java/dev/galacticraft/api/perlin/generator/Billowed.java b/src/main/java/dev/galacticraft/api/perlin/generator/Billowed.java new file mode 100644 index 000000000..293ce2fde --- /dev/null +++ b/src/main/java/dev/galacticraft/api/perlin/generator/Billowed.java @@ -0,0 +1,80 @@ +package dev.galacticraft.api.perlin.generator; + +import dev.galacticraft.api.perlin.FishyNoise; +import dev.galacticraft.api.perlin.NoiseModule; + +import java.util.Random; + +public class Billowed extends NoiseModule { + private final FishyNoise noiseGen; + private final float offsetX; + private final float offsetY; + private final float offsetZ; + private final int numOctaves; + private final float persistance; + + public Billowed(long seed, int nOctaves, float p) + { + this.numOctaves = nOctaves; + this.persistance = p; + final Random rand = new Random(seed); + this.offsetX = rand.nextFloat() / 2 + 0.01F; + this.offsetY = rand.nextFloat() / 2 + 0.01F; + this.offsetZ = rand.nextFloat() / 2 + 0.01F; + this.noiseGen = new FishyNoise(seed); + } + + @Override + public float getNoise(float i) + { + i *= this.frequencyX; + float val = 0; + float curAmplitude = this.amplitude; + for (int n = 0; n < this.numOctaves; n++) + { + val += Math.abs(this.noiseGen.noise2d(i + this.offsetX, this.offsetY) * curAmplitude); + i *= 2; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public float getNoise(float i, float j) + { + i *= this.frequencyX; + j *= this.frequencyY; + if (this.numOctaves == 2) + { + return Math.abs(this.noiseGen.noise2d(i + this.offsetX, j + this.offsetY) * this.amplitude) + Math.abs(this.noiseGen.noise2d(i + i + this.offsetX, j + j + this.offsetY) * this.amplitude * this.persistance); + } + + float val = 0; + float curAmplitude = this.amplitude; + for (int n = 0; n < this.numOctaves; n++) + { + val += Math.abs(this.noiseGen.noise2d(i + this.offsetX, j + this.offsetY) * curAmplitude); + i += i; + j += j; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public float getNoise(float i, float j, float k) + { + i *= this.frequencyX; + j *= this.frequencyY; + k *= this.frequencyZ; + float val = 0; + for (int n = 0; n < this.numOctaves; n++) + { + val += Math.abs(this.noiseGen.noise3d(i + this.offsetX, j + this.offsetY, k + this.offsetZ) * this.amplitude); + i *= 2; + j *= 2; + k *= 2; + } + return val; + } +} diff --git a/src/main/java/dev/galacticraft/api/perlin/generator/Gradient.java b/src/main/java/dev/galacticraft/api/perlin/generator/Gradient.java new file mode 100644 index 000000000..ac950205a --- /dev/null +++ b/src/main/java/dev/galacticraft/api/perlin/generator/Gradient.java @@ -0,0 +1,88 @@ +package dev.galacticraft.api.perlin.generator; + +import dev.galacticraft.api.perlin.FishyNoise; +import dev.galacticraft.api.perlin.NoiseModule; + +import java.util.Random; + +public class Gradient extends NoiseModule +{ + private final FishyNoise noiseGen; + private final float offsetX; + private final float offsetY; + private final float offsetZ; + private final int numOctaves; + private final float persistance; + + public Gradient(long seed, int nOctaves, float p) + { + this.numOctaves = nOctaves; + this.persistance = p; + final Random rand = new Random(seed); + this.offsetX = rand.nextFloat() / 2 + 0.01F; + this.offsetY = rand.nextFloat() / 2 + 0.01F; + this.offsetZ = rand.nextFloat() / 2 + 0.01F; + this.noiseGen = new FishyNoise(seed); + } + + @Override + public float getNoise(float i) + { + i *= this.frequencyX; + float val = 0; + float curAmplitude = this.amplitude; + for (int n = 0; n < this.numOctaves; n++) + { + val += this.noiseGen.noise2d(i + this.offsetX, this.offsetY) * curAmplitude; + i *= 2; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public float getNoise(float i, float j) + { + if (this.numOctaves == 1) + { + return this.noiseGen.noise2d(i * this.frequencyX + this.offsetX, j * this.frequencyY + this.offsetY) * this.amplitude; + } + + i *= this.frequencyX; + j *= this.frequencyY; + float val = 0; + float curAmplitude = this.amplitude; + for (int n = 0; n < this.numOctaves; n++) + { + val += this.noiseGen.noise2d(i + this.offsetX, j + this.offsetY) * curAmplitude; + i *= 2; + j *= 2; + curAmplitude *= this.persistance; + } + return val; + } + + @Override + public float getNoise(float i, float j, float k) + { + if (this.numOctaves == 1) + { + return this.noiseGen.noise3d(i * this.frequencyX + this.offsetX, j * this.frequencyY + this.offsetY, k * this.frequencyZ + this.offsetZ) * this.amplitude; + } + + i *= this.frequencyX; + j *= this.frequencyY; + k *= this.frequencyZ; + float val = 0; + float curAmplitude = this.amplitude; + for (int n = 0; n < this.numOctaves; n++) + { + val += this.noiseGen.noise3d(i + this.offsetX, j + this.offsetY, k + this.offsetZ) * curAmplitude; + i *= 2; + j *= 2; + k *= 2; + curAmplitude *= this.persistance; + } + return val; + } +} diff --git a/src/main/java/dev/galacticraft/api/perlin/generator/RidgedMulti.java b/src/main/java/dev/galacticraft/api/perlin/generator/RidgedMulti.java new file mode 100644 index 000000000..8ac7c88dd --- /dev/null +++ b/src/main/java/dev/galacticraft/api/perlin/generator/RidgedMulti.java @@ -0,0 +1,142 @@ +package dev.galacticraft.api.perlin.generator; + +import dev.galacticraft.api.perlin.FishyNoise; +import dev.galacticraft.api.perlin.NoiseModule; + +import java.util.Random; + +public class RidgedMulti extends NoiseModule +{ + private final FishyNoise noiseGen; + private final float offsetX; + private final float offsetY; + private final float offsetZ; + private final int numOctaves; + + public RidgedMulti(long seed, int nOctaves) + { + this.numOctaves = nOctaves; + final Random rand = new Random(seed); + this.offsetX = rand.nextFloat() / 2 + 0.01F; + this.offsetY = rand.nextFloat() / 2 + 0.01F; + this.offsetZ = rand.nextFloat() / 2 + 0.01F; + this.noiseGen = new FishyNoise(seed); + } + + @Override + public float getNoise(float i) + { + i *= this.frequencyX; + float val = 0; + float weight = 1.0F; + final float offset = 1.0F; + final float gain = 2.0F; + for (int n = 0; n < this.numOctaves; n++) + { + float noise = this.absolute(this.noiseGen.noise2d(i + this.offsetX, this.offsetY)); + noise = offset - noise; + noise *= noise; + noise *= weight; + + weight = noise * gain; + + if (weight > 1F) + { + weight = 1F; + } + + if (weight < 0F) + { + weight = 0F; + } + + val += noise; + + i *= 2; + } + return val; + } + + @Override + public float getNoise(float i, float j) + { + i *= this.frequencyX; + j *= this.frequencyY; + float val = 0; + float weight = 1.0F; + final float offset = 1.0F; + final float gain = 2.0F; + for (int n = 0; n < this.numOctaves; n++) + { + float noise = this.absolute(this.noiseGen.noise2d(i + this.offsetX, j + this.offsetY)); + noise = offset - noise; + noise *= noise; + noise *= weight; + + weight = noise * gain; + + if (weight > 1F) + { + weight = 1F; + } + + if (weight < 0F) + { + weight = 0F; + } + + val += noise; + + i *= 2; + j *= 2; + } + return val; + } + + @Override + public float getNoise(float i, float j, float k) + { + i *= this.frequencyX; + j *= this.frequencyY; + k *= this.frequencyZ; + float val = 0F; + float weight = 1.0F; + final float offset = 1.0F; + final float gain = 2.0F; + for (int n = 0; n < this.numOctaves; n++) + { + float noise = this.absolute(this.noiseGen.noise3d(i + this.offsetX, j + this.offsetY, k + this.offsetZ)); + noise = offset - noise; + noise *= noise; + noise *= weight; + + weight = noise * gain; + + if (weight > 1F) + { + weight = 1F; + } + + if (weight < 0F) + { + weight = 0F; + } + + val += noise; + + i *= 2; + j *= 2; + k *= 2; + } + return val; + } + + private float absolute(float d) + { + if (d < 0) + { + d = -d; + } + return d; + } +} diff --git a/src/main/java/dev/galacticraft/api/vector/BlockVec3.java b/src/main/java/dev/galacticraft/api/vector/BlockVec3.java new file mode 100644 index 000000000..9af254139 --- /dev/null +++ b/src/main/java/dev/galacticraft/api/vector/BlockVec3.java @@ -0,0 +1,676 @@ +package dev.galacticraft.api.vector; +import dev.galacticraft.mod.world.dimension.GCDimensions; +import net.minecraft.CrashReport; +import net.minecraft.CrashReportCategory; +import net.minecraft.ReportedException; +import net.minecraft.commands.arguments.NbtTagArgument; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.contents.NbtContents; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.commands.data.BlockDataAccessor; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.chunk.ChunkAccess; +import net.minecraft.world.level.chunk.LevelChunk; +import net.minecraft.world.level.storage.loot.providers.nbt.NbtProvider; +import org.jetbrains.annotations.Nullable; +import org.joml.Vector3d; + +import static net.minecraft.util.Mth.floor; + + +public class BlockVec3 implements Cloneable +{ + public int x; + public int y; + public int z; + public int sideDoneBits = 0; + private static ChunkAccess chunkCached; + public static ResourceKey chunkCacheDim = Level.OVERWORLD; + private static int chunkCacheX = 1876000; // outside the world edge + private static int chunkCacheZ = 1876000; // outside the world edge + private static ChunkAccess chunkCached_Client; + public static ResourceKey chunkCacheDim_Client = Level.OVERWORLD; + private static int chunkCacheX_Client = 1876000; // outside the world edge + private static int chunkCacheZ_Client = 1876000; // outside the world edge + // INVALID_VECTOR is used in cases where a null vector cannot be used + public static final BlockVec3 INVALID_VECTOR = new BlockVec3(-1, -1, -1); + + public BlockVec3() + { + this(0, 0, 0); + } + + public BlockVec3(BlockPos pos) + { + this(pos.getX(), pos.getY(), pos.getZ()); + } + + public BlockVec3(int x, int y, int z) + { + this.x = x; + this.y = y; + this.z = z; + } + + public BlockVec3(Entity par1) + { + this.x = (int) Math.floor(par1.position().x); + this.y = (int) Math.floor(par1.position().y); + this.z = (int) Math.floor(par1.position().z); + } + + public BlockVec3(BlockEntity par1) + { + this.x = par1.getBlockPos().getX(); + this.y = par1.getBlockPos().getY(); + this.z = par1.getBlockPos().getZ(); + } + + /** + * Makes a new copy of this Vector. Prevents variable referencing problems. + */ + @Override + public final BlockVec3 clone() + { + return new BlockVec3(this.x, this.y, this.z); + } + + public BlockPos toBlockPos() + { + return new BlockPos(this.x, this.y, this.z); + } + + /** + * Get block ID at the BlockVec3 coordinates, with a forced chunk load if + * the coordinates are unloaded. + * + * @param world + * @return the block ID, or null if the y-coordinate is less than 0 or + * greater than 256 or the x or z is outside the Minecraft worldmap. + */ + public BlockState getBlockState(Level world) + { + if (this.y < 0 || this.y >= 256 || this.x < -30000000 || this.z < -30000000 || this.x >= 30000000 || this.z >= 30000000) + { + return null; + } + + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + try + { + if (!world.isClientSide()) + { + if (BlockVec3.chunkCacheX_Client == chunkx && BlockVec3.chunkCacheZ_Client == chunkz && BlockVec3.chunkCacheDim_Client == world.dimension() && BlockVec3.chunkCached_Client != null) + { + return BlockVec3.chunkCached_Client.getBlockState(new BlockPos(this.x & 15, this.y, this.z & 15)); + } + else + { + final ChunkAccess chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached_Client = chunk; + BlockVec3.chunkCacheDim_Client = world.dimension(); + BlockVec3.chunkCacheX_Client = chunkx; + BlockVec3.chunkCacheZ_Client = chunkz; + return chunk.getBlockState(new BlockPos(this.x & 15, this.y, this.z & 15)); + } + } + else + { + // In a typical inner loop, 80% of the time consecutive calls to + // this will be within the same chunk + if (BlockVec3.chunkCacheX == chunkx && BlockVec3.chunkCacheZ == chunkz && BlockVec3.chunkCacheDim == world.dimension() && BlockVec3.chunkCached instanceof LevelChunk) + { + return BlockVec3.chunkCached.getBlockState(new BlockPos(this.x & 15, this.y, this.z & 15)); + } + else + { + final ChunkAccess chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached = chunk; + BlockVec3.chunkCacheDim = world.dimension(); + BlockVec3.chunkCacheX = chunkx; + BlockVec3.chunkCacheZ = chunkz; + return chunk.getBlockState(new BlockPos(this.x & 15, this.y, this.z & 15)); + } + } + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.forThrowable(throwable, "Oxygen Sealer thread: Exception getting block type in world"); + CrashReportCategory crashreportcategory = crashreport.addCategory("Requested block coordinates"); + crashreportcategory.setDetail("Location", CrashReportCategory.formatLocation(world, new BlockPos(this.x, this.y, this.z))); + throw new ReportedException(crashreport); + } + } + + /** + * Get block ID at the BlockVec3 coordinates without forcing a chunk load. + * + * @param world + * @return the block ID, or null if the y-coordinate is less than 0 or + * greater than 256 or the x or z is outside the Minecraft worldmap. + * Returns Blocks.BEDROCK if the coordinates being checked are in an + * unloaded chunk + */ + public BlockState getBlockState_noChunkLoad(Level world) + { + if (this.y < 0 || this.y >= 256 || this.x < -30000000 || this.z < -30000000 || this.x >= 30000000 || this.z >= 30000000) + { + return null; + } + + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + try + { + if (world.isLoaded(new BlockPos(chunkx, this.y ,chunkz))) + { + if (!world.isClientSide()) + { + if (BlockVec3.chunkCacheX_Client == chunkx && BlockVec3.chunkCacheZ_Client == chunkz && BlockVec3.chunkCacheDim_Client == world.dimension() && BlockVec3.chunkCached_Client != null) + { + return BlockVec3.chunkCached_Client.getBlockState(new BlockPos(this.x & 15, this.y, this.z & 15)); + } + else + { + final ChunkAccess chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached_Client = chunk; + BlockVec3.chunkCacheDim_Client = world.dimension(); + BlockVec3.chunkCacheX_Client = chunkx; + BlockVec3.chunkCacheZ_Client = chunkz; + return chunk.getBlockState(new BlockPos(this.x & 15, this.y, this.z & 15)); + } + } + else + { + // In a typical inner loop, 80% of the time consecutive calls to + // this will be within the same chunk + if (BlockVec3.chunkCacheX == chunkx && BlockVec3.chunkCacheZ == chunkz && BlockVec3.chunkCacheDim == world.dimension() && BlockVec3.chunkCached instanceof LevelChunk) + { + return BlockVec3.chunkCached.getBlockState(new BlockPos(this.x & 15, this.y, this.z & 15)); + } + else + { + final ChunkAccess chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached = chunk; + BlockVec3.chunkCacheDim = world.dimension(); + BlockVec3.chunkCacheX = chunkx; + BlockVec3.chunkCacheZ = chunkz; + return chunk.getBlockState(new BlockPos(this.x & 15, this.y, this.z & 15)); + } + } + } + //Chunk doesn't exist - meaning, it is not loaded + return Blocks.BEDROCK.defaultBlockState(); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.forThrowable(throwable, "Oxygen Sealer thread: Exception getting block type in world"); + CrashReportCategory crashreportcategory = crashreport.addCategory("Requested block coordinates"); + crashreportcategory.setDetail("Location", CrashReportCategory.formatLocation(world, new BlockPos(this.x, this.y, this.z))); + throw new ReportedException(crashreport); + } + } + + public BlockState getBlockState(BlockGetter par1iBlockAccess) + { + return par1iBlockAccess.getBlockState(new BlockPos(this.x, this.y, this.z)); + } + + /** + * Get block ID at the BlockVec3 coordinates without forcing a chunk load. + * Only call this 'safe' version if x and z coordinates are within the + * Minecraft world map (-30m to +30m) + * + * @param world + * @return the block ID, or null if the y-coordinate is less than 0 or + * greater than 256. Returns Blocks.BEDROCK if the coordinates being + * checked are in an unloaded chunk + */ + @Nullable + public BlockState getBlockStateSafe_noChunkLoad(Level world) + { + if (this.y < 0 || this.y >= 256) + { + return null; + } + + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + try + { + if (world.isLoaded(new BlockPos(chunkx, this.y ,chunkz))) + { + if (!world.isClientSide()) + { + if (BlockVec3.chunkCacheX_Client == chunkx && BlockVec3.chunkCacheZ_Client == chunkz && BlockVec3.chunkCacheDim_Client == world.dimension() && BlockVec3.chunkCached_Client != null) + { + return BlockVec3.chunkCached_Client.getBlockState(new BlockPos(this.x & 15, this.y, this.z & 15)); + } + else + { + final ChunkAccess chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached_Client = chunk; + BlockVec3.chunkCacheDim_Client = world.dimension(); + BlockVec3.chunkCacheX_Client = chunkx; + BlockVec3.chunkCacheZ_Client = chunkz; + return chunk.getBlockState(new BlockPos(this.x & 15, this.y, this.z & 15)); + } + } + else + { + // In a typical inner loop, 80% of the time consecutive calls to + // this will be within the same chunk + if (BlockVec3.chunkCacheX == chunkx && BlockVec3.chunkCacheZ == chunkz && BlockVec3.chunkCacheDim == world.dimension() && BlockVec3.chunkCached instanceof LevelChunk) + { + return BlockVec3.chunkCached.getBlockState(new BlockPos(this.x & 15, this.y, this.z & 15)); + } + else + { + final ChunkAccess chunk = world.getChunk(chunkx, chunkz); + BlockVec3.chunkCached = chunk; + BlockVec3.chunkCacheDim = world.dimension(); + BlockVec3.chunkCacheX = chunkx; + BlockVec3.chunkCacheZ = chunkz; + return chunk.getBlockState(new BlockPos(this.x & 15, this.y, this.z & 15)); + } + } + } + //Chunk doesn't exist - meaning, it is not loaded + return Blocks.BEDROCK.defaultBlockState(); + } + catch (Throwable throwable) + { + CrashReport crashreport = CrashReport.forThrowable(throwable, "Oxygen Sealer thread: Exception getting block type in world"); + CrashReportCategory crashreportcategory = crashreport.addCategory("Requested block coordinates"); + crashreportcategory.setDetail("Location", CrashReportCategory.formatLocation(world, new BlockPos(this.x, this.y, this.z))); + throw new ReportedException(crashreport); + } + } + + public BlockVec3 translate(BlockVec3 par1) + { + this.x += par1.x; + this.y += par1.y; + this.z += par1.z; + return this; + } + + public BlockVec3 translate(int par1x, int par1y, int par1z) + { + this.x += par1x; + this.y += par1y; + this.z += par1z; + return this; + } + + public static BlockVec3 add(BlockVec3 par1, BlockVec3 a) + { + return new BlockVec3(par1.x + a.x, par1.y + a.y, par1.z + a.z); + } + + public BlockVec3 subtract(BlockVec3 par1) + { + this.x -= par1.x; + this.y -= par1.y; + this.z -= par1.z; + + return this; + } + + public BlockVec3 scale(int par1) + { + this.x *= par1; + this.y *= par1; + this.z *= par1; + + return this; + } + + public BlockVec3 modifyPositionFromSide(Direction side, int amount) + { + switch (side.ordinal()) + { + case 0: + this.y -= amount; + break; + case 1: + this.y += amount; + break; + case 2: + this.z -= amount; + break; + case 3: + this.z += amount; + break; + case 4: + this.x -= amount; + break; + case 5: + this.x += amount; + break; + } + return this; + } + + public BlockVec3 newVecSide(int side) + { + final BlockVec3 vec = new BlockVec3(this.x, this.y, this.z); + vec.sideDoneBits = (1 << (side ^ 1)) + (side << 6); + switch (side) + { + case 0: + vec.y--; + return vec; + case 1: + vec.y++; + return vec; + case 2: + vec.z--; + return vec; + case 3: + vec.z++; + return vec; + case 4: + vec.x--; + return vec; + case 5: + vec.x++; + return vec; + } + return vec; + } + + public BlockVec3 modifyPositionFromSide(Direction side) + { + return this.modifyPositionFromSide(side, 1); + } + + @Override + public int hashCode() + { + // Upgraded hashCode calculation from the one in VecDirPair to something + // a bit stronger and faster + return ((this.y * 379 + this.x) * 373 + this.z) * 7; + } + + @Override + public boolean equals(Object o) + { + if (o instanceof BlockVec3) + { + final BlockVec3 vector = (BlockVec3) o; + return this.x == vector.x && this.y == vector.y && this.z == vector.z; + } + + return false; + } + + @Override + public String toString() + { + return "[" + this.x + "," + this.y + "," + this.z + "]"; + } + + /** + * This will load the chunk. + */ + public BlockEntity getTileEntity(BlockGetter world) + { + return world.getBlockEntity(new BlockPos(this.x, this.y, this.z)); + } + + /** + * No chunk load: returns null if chunk to side is unloaded + */ + public BlockEntity getTileEntityOnSide(Level world, Direction side) + { + if (side == null) + { + return null; + } + + int x = this.x; + int y = this.y; + int z = this.z; + switch (side.ordinal()) + { + case 0: + y--; + break; + case 1: + y++; + break; + case 2: + z--; + break; + case 3: + z++; + break; + case 4: + x--; + break; + case 5: + x++; + break; + default: + return null; + } + final BlockPos pos = new BlockPos(x, y, z); + return world.isLoaded(pos) ? world.getBlockEntity(pos) : null; + } + + /** + * No chunk load: returns null if chunk to side is unloaded + */ + public BlockEntity getTileEntityOnSide(Level world, int side) + { + int x = this.x; + int y = this.y; + int z = this.z; + switch (side) + { + case 0: + y--; + break; + case 1: + y++; + break; + case 2: + z--; + break; + case 3: + z++; + break; + case 4: + x--; + break; + case 5: + x++; + break; + default: + return null; + } + final BlockPos pos = new BlockPos(x, y, z); + return world.isLoaded(pos) ? world.getBlockEntity(pos) : null; + } + + /** + * This will load the chunk to the side. + */ + public boolean blockOnSideHasSolidFace(Level world, int side) + { + int x = this.x; + int y = this.y; + int z = this.z; + switch (side) + { + case 0: + y--; + break; + case 1: + y++; + break; + case 2: + z--; + break; + case 3: + z++; + break; + case 4: + x--; + break; + case 5: + x++; + break; + default: + return false; + } + final BlockPos pos = new BlockPos(x, y, z); + return world.getBlockState(pos).isFaceSturdy(world.getChunkForCollisions(pos.getX(), pos.getZ()), pos, Direction.from3DDataValue(side ^ 1)); + } + + /** + * No chunk load: returns null if chunk is unloaded + */ + public Block getBlockOnSide(Level world, int side) + { + int x = this.x; + int y = this.y; + int z = this.z; + switch (side) + { + case 0: + y--; + break; + case 1: + y++; + break; + case 2: + z--; + break; + case 3: + z++; + break; + case 4: + x--; + break; + case 5: + x++; + break; + default: + return null; + } + final BlockPos pos = new BlockPos(x, y, z); + return world.isLoaded(pos) ? world.getBlockState(pos).getBlock() : null; + } + + public static BlockVec3 readFromNBT(CompoundTag nbtCompound) + { + final BlockVec3 tempVector = new BlockVec3(); + tempVector.x = nbtCompound.getInt("x"); + tempVector.y = nbtCompound.getInt("y"); + tempVector.z = nbtCompound.getInt("z"); + return tempVector; + } + + public int distanceTo(BlockVec3 vector) + { + int var2 = vector.x - this.x; + int var4 = vector.y - this.y; + int var6 = vector.z - this.z; + return floor(Math.sqrt(var2 * var2 + var4 * var4 + var6 * var6)); + } + + public int distanceSquared(BlockVec3 vector) + { + int var2 = vector.x - this.x; + int var4 = vector.y - this.y; + int var6 = vector.z - this.z; + return var2 * var2 + var4 * var4 + var6 * var6; + } + + public CompoundTag writeToNBT(CompoundTag par1NBTTagCompound) + { + par1NBTTagCompound.putInt("x", this.x); + par1NBTTagCompound.putInt("y", this.y); + par1NBTTagCompound.putInt("z", this.z); + return par1NBTTagCompound; + } + + public BlockVec3(CompoundTag par1NBTTagCompound) + { + this.x = par1NBTTagCompound.getInt("x"); + this.y = par1NBTTagCompound.getInt("y"); + this.z = par1NBTTagCompound.getInt("z"); + } + + public CompoundTag writeToNBT(CompoundTag par1NBTTagCompound, String prefix) + { + par1NBTTagCompound.putInt(prefix + "_x", this.x); + par1NBTTagCompound.putInt(prefix + "_y", this.y); + par1NBTTagCompound.putInt(prefix + "_z", this.z); + return par1NBTTagCompound; + } + + public static BlockVec3 readFromNBT(CompoundTag par1NBTTagCompound, String prefix) + { + Integer readX = par1NBTTagCompound.getInt(prefix + "_x"); + if (readX == null) return null; + Integer readY = par1NBTTagCompound.getInt(prefix + "_y"); + if (readY == null) return null; + Integer readZ = par1NBTTagCompound.getInt(prefix + "_z"); + if (readZ == null) return null; + return new BlockVec3(readX, readY, readZ); + } + + public double getMagnitude() + { + return Math.sqrt(this.getMagnitudeSquared()); + } + + public int getMagnitudeSquared() + { + return this.x * this.x + this.y * this.y + this.z * this.z; + } + + public void setBlock(Level worldObj, BlockState block) + { + worldObj.setBlock(new BlockPos(x, y, z), block, 3); + } + + public boolean blockExists(Level world) + { + return world.isLoaded(new BlockPos(this.x, this.y, this.z)); + } + + public void setSideDone(int side) + { + this.sideDoneBits |= 1 << side; + } + + public BlockEntity getTileEntityForce(Level world) + { + int chunkx = this.x >> 4; + int chunkz = this.z >> 4; + + ChunkAccess chunk = world.getChunk(chunkx, chunkz); + return chunk.getBlockEntity(new BlockPos(this.x & 15, this.y, this.z & 15)); + } + + public Vector3d midPoint() + { + return new Vector3d(this.x + 0.5, this.y + 0.5, this.z + 0.5); + } +} diff --git a/src/main/java/dev/galacticraft/impl/internal/fabric/GalacticraftAPI.java b/src/main/java/dev/galacticraft/impl/internal/fabric/GalacticraftAPI.java index dbcca64cb..3b213f83f 100644 --- a/src/main/java/dev/galacticraft/impl/internal/fabric/GalacticraftAPI.java +++ b/src/main/java/dev/galacticraft/impl/internal/fabric/GalacticraftAPI.java @@ -26,21 +26,35 @@ import dev.galacticraft.api.entity.attribute.GcApiEntityAttributes; import dev.galacticraft.api.gas.Gases; import dev.galacticraft.api.registry.BuiltInRocketRegistries; +import dev.galacticraft.dynamicdimensions.api.DynamicDimensionRegistry; import dev.galacticraft.dynamicdimensions.api.event.DynamicDimensionLoadCallback; import dev.galacticraft.impl.internal.command.GCApiCommands; import dev.galacticraft.impl.universe.BuiltinObjects; import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.data.gen.SatelliteChunkGenerator; import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; +import net.minecraft.client.Minecraft; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.SimpleContainer; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.storage.LevelStorageSource; import org.jetbrains.annotations.ApiStatus; +import javax.swing.event.ChangeEvent; +import java.io.File; +import java.nio.file.Path; + @ApiStatus.Internal public class GalacticraftAPI implements ModInitializer { public static final SimpleContainer EMPTY_INV = new SimpleContainer(0); + //don't know if this is the best way to get file path, but it works + public static Path currentWorldSaveDirectory; @Override public void onInitialize() { @@ -69,6 +83,7 @@ public void onInitialize() { BuiltinObjects.register(); BuiltInRocketRegistries.initialize(); GcApiEntityAttributes.init(); + ServerLifecycleEvents.SERVER_STARTED.register(this::onServerStarted); DynamicDimensionLoadCallback.register((minecraftServer, dynamicDimensionLoader) -> { ((SatelliteAccessor) minecraftServer).galacticraft$loadSatellites(dynamicDimensionLoader); @@ -76,4 +91,14 @@ public void onInitialize() { Gases.init(); Constant.LOGGER.info("API Initialization Complete. (Took {}ms).", System.currentTimeMillis() - startInitTime); } + + private void onServerStarted(MinecraftServer server) { + // Update the directory when the server starts + updateWorldSaveDirectory(server); + } + + private void updateWorldSaveDirectory(MinecraftServer server) { + currentWorldSaveDirectory = Path.of(Minecraft.getInstance().getLevelSource().getBaseDir().toString(), server.getWorldData().getLevelName()); + System.out.println("World Save Directory: " + currentWorldSaveDirectory.toString()); + } } diff --git a/src/main/java/dev/galacticraft/mod/Constant.java b/src/main/java/dev/galacticraft/mod/Constant.java index 7f36620e5..3cfacf0d3 100644 --- a/src/main/java/dev/galacticraft/mod/Constant.java +++ b/src/main/java/dev/galacticraft/mod/Constant.java @@ -40,6 +40,7 @@ public interface Constant { String MOD_ID = "galacticraft"; + public static final String GCDATAFOLDER = "../galacticraft/"; String COMMON_NAMESPACE = "c"; Logger LOGGER = LogManager.getLogger("Galacticraft"); diff --git a/src/main/java/dev/galacticraft/mod/Galacticraft.java b/src/main/java/dev/galacticraft/mod/Galacticraft.java index 31e5ef4ac..cc4b67a21 100644 --- a/src/main/java/dev/galacticraft/mod/Galacticraft.java +++ b/src/main/java/dev/galacticraft/mod/Galacticraft.java @@ -60,6 +60,7 @@ public class Galacticraft implements ModInitializer { public void onInitialize() { long startInitTime = System.currentTimeMillis(); Constant.LOGGER.info("Starting initialization."); + GCChunkGenerator.register(); GCTags.register(); GCFluids.register(); GCBlocks.register(); diff --git a/src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java b/src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java new file mode 100644 index 000000000..48362a4e8 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java @@ -0,0 +1,26 @@ +package dev.galacticraft.mod.content; + +import com.mojang.serialization.Codec; +import dev.galacticraft.mod.Constant; +import dev.galacticraft.mod.world.gen.custom.AsteroidChunkGenerator; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.storage.DimensionDataStorage; + + +public class GCChunkGenerator { + public static final GCChunkGeneratorRegistry CHUNK_GENERATOR = new GCChunkGeneratorRegistry(); + + + public static final Codec ASTEROIDS = CHUNK_GENERATOR.register("asteroid_chunk_generator", AsteroidChunkGenerator.CODEC); + + public static Codec register(String id, Codec codec) { + return Registry.register(BuiltInRegistries.CHUNK_GENERATOR, Constant.id(id), codec); + } + + public static void register() { + + } + +} diff --git a/src/main/java/dev/galacticraft/mod/content/GCChunkGeneratorRegistry.java b/src/main/java/dev/galacticraft/mod/content/GCChunkGeneratorRegistry.java new file mode 100644 index 000000000..3f894837b --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/content/GCChunkGeneratorRegistry.java @@ -0,0 +1,11 @@ +package dev.galacticraft.mod.content; + +import com.mojang.serialization.Codec; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.level.chunk.ChunkGenerator; + +public class GCChunkGeneratorRegistry extends GCRegistry> { + public GCChunkGeneratorRegistry() { + super(BuiltInRegistries.CHUNK_GENERATOR); + } +} diff --git a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java new file mode 100644 index 000000000..4a7b25cb3 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java @@ -0,0 +1,1054 @@ +package dev.galacticraft.mod.world.gen.custom; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import dev.galacticraft.api.perlin.NoiseModule; +import dev.galacticraft.api.perlin.generator.Billowed; +import dev.galacticraft.api.perlin.generator.Gradient; +import dev.galacticraft.api.vector.BlockVec3; +import dev.galacticraft.mod.content.GCBlocks; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NbtIo; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.WorldGenRegion; +import net.minecraft.world.level.*; +import net.minecraft.world.level.biome.BiomeManager; +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.*; +import net.minecraft.world.level.levelgen.*; +import net.minecraft.world.level.levelgen.blending.Blender; +import net.minecraft.world.level.storage.*; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; + +import static dev.galacticraft.impl.internal.fabric.GalacticraftAPI.currentWorldSaveDirectory; +import static dev.galacticraft.mod.world.gen.custom.AsteroidSaveData.saveDataID; + + +public class AsteroidChunkGenerator extends ChunkGenerator { + + //from WorldAsteroidProvider + private HashSet asteroids = new HashSet<>(); + private boolean dataNotLoaded = true; + private AsteroidSaveData datafile; + private double solarMultiplier = -1D; + + private int largeCount = 0; + private final Random rand; + private final NoiseModule asteroidDensity; + private final NoiseModule asteroidTurbulance; + private final ResourceKey dimensionKey; + + private final NoiseModule asteroidSkewX; + private final NoiseModule asteroidSkewY; + private final NoiseModule asteroidSkewZ; + + private final SpecialAsteroidBlockHandler coreHandler; + private final SpecialAsteroidBlockHandler shellHandler; + //micdoodle8 says do not change but I did :) + private static final int CHUNK_SIZE_X = 16; + private static final int CHUNK_SIZE_Y = 384; + private static final int CHUNK_SIZE_Z = 16; + + private static final int MAX_ASTEROID_RADIUS = 25; + private static final int MIN_ASTEROID_RADIUS = 5; + + private static final int MAX_ASTEROID_SKEW = 8; + + //MIN_ASTEROID_Y is -64 + 48 + private static final int MIN_ASTEROID_Y = -16; + //MAX_ASTEROID_Y is 384 - 64 - 48 + private static final int MAX_ASTEROID_Y = AsteroidChunkGenerator.CHUNK_SIZE_Y - 64 - 48; + //default is 800 + private static final int ASTEROID_CHANCE = 800; + private static final int ASTEROID_CORE_CHANCE = 2; //1 / n chance per asteroid + private static final int ASTEROID_SHELL_CHANCE = 2; //1 / n chance per asteroid + + private static final int MIN_BLOCKS_PER_CHUNK = 50; + private static final int MAX_BLOCKS_PER_CHUNK = 200; + + private static final int ILMENITE_CHANCE = 400; + private static final int IRON_CHANCE = 300; + private static final int ALUMINUM_CHANCE = 250; + + private static final int RANDOM_BLOCK_FADE_SIZE = 32; + private static final int FADE_BLOCK_CHANCE = 5; //1 / n chance of a block being in the fade zone + + private static final int NOISE_OFFSET_SIZE = 256; + + private static final float MIN_HOLLOW_SIZE = .6F; + private static final float MAX_HOLLOW_SIZE = .8F; + private static final int HOLLOW_CHANCE = 10; //1 / n chance per asteroid + private static final int MIN_RADIUS_FOR_HOLLOW = 15; + private static final float HOLLOW_LAVA_SIZE = .12F; + + //Per chunk per asteroid + private static final int TREE_CHANCE = 2; + private static final int TALL_GRASS_CHANCE = 2; + private static final int FLOWER_CHANCE = 2; + private static final int WATER_CHANCE = 2; + private static final int LAVA_CHANCE = 2; + private static final int GLOWSTONE_CHANCE = 20; + + private LinkedList largeAsteroids = new LinkedList(); + private static HashSet chunksDone = new HashSet(); + private int largeAsteroidsLastChunkX; + private int largeAsteroidsLastChunkZ; + + public static final Codec CODEC = RecordCodecBuilder.create(instance -> + instance.group( + BiomeSource.CODEC.fieldOf("biomeSource").forGetter(generator -> generator.biomeSource), + ServerLevel.RESOURCE_KEY_CODEC.fieldOf("dimensionKey").forGetter(generator -> generator.dimensionKey), + Codec.LONG.fieldOf("par2").forGetter(generator -> 1000L) + ).apply(instance, AsteroidChunkGenerator::new)); + private final Holder settings = null; + public AsteroidChunkGenerator(BiomeSource biomeSource, ResourceKey dimensionKey, long par2) { + super(biomeSource); + this.dimensionKey = dimensionKey; + this.rand = new Random(par2); + + this.asteroidDensity = new Billowed(this.rand.nextLong(), 2, .25F); + this.asteroidDensity.setFrequency(.009F); + this.asteroidDensity.amplitude = .6F; + + this.asteroidTurbulance = new Gradient(this.rand.nextLong(), 1, .2F); + this.asteroidTurbulance.setFrequency(.08F); + this.asteroidTurbulance.amplitude = .5F; + + this.asteroidSkewX = new Gradient(this.rand.nextLong(), 1, 1); + this.asteroidSkewX.amplitude = AsteroidChunkGenerator.MAX_ASTEROID_SKEW; + this.asteroidSkewX.frequencyX = 0.005F; + + this.asteroidSkewY = new Gradient(this.rand.nextLong(), 1, 1); + this.asteroidSkewY.amplitude = AsteroidChunkGenerator.MAX_ASTEROID_SKEW; + this.asteroidSkewY.frequencyY = 0.005F; + + this.asteroidSkewZ = new Gradient(this.rand.nextLong(), 1, 1); + this.asteroidSkewZ.amplitude = AsteroidChunkGenerator.MAX_ASTEROID_SKEW; + this.asteroidSkewZ.frequencyZ = 0.005F; + + this.coreHandler = new SpecialAsteroidBlockHandler(); + this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ASTEROID_ROCK_2, 5, .3)); + this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ASTEROID_ROCK_1, 7, .3)); + this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ASTEROID_ROCK, 11, .25)); + + //TODO: FIX ORE TYPES ASTEROID DOESNT HAVE ORES + //!ConfigManagerAst.disableAluminumGen + if (true) + this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ALUMINUM_ORE, 5, .2)); + //!ConfigManagerAsteroids.disableIlmeniteGen + if (true) + this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ILMENITE_ORE, 4, .15)); + //!ConfigManagerAsteroids.disableIronGen + if (true) + this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.MARS_IRON_ORE, 3, .2)); + //ConfigManagerCore.enableSiliconOreGen + if (true) + this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.SILICON_ORE,2, .15)); + //Solid Meteoric Iron - has no config to disable + this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.METEORIC_IRON_BLOCK, 2, .13)); + //Diamond ore - has no config to disable + this.coreHandler.addBlock(new SpecialAsteroidBlock(Blocks.DIAMOND_ORE, 1, .1)); + + this.shellHandler = new SpecialAsteroidBlockHandler(); + this.shellHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ASTEROID_ROCK, 1, .15)); + this.shellHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ASTEROID_ROCK_1, 3, .15)); + this.shellHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ASTEROID_ROCK_2, 1, .15)); + this.shellHandler.addBlock(new SpecialAsteroidBlock(Blocks.PACKED_ICE, 1, .15)); //TODO: REPLACE WITH DENSE ICE + } + + private ChunkAccess generateChunkData(Blender blender, RandomState randomState, StructureManager structureManager, ChunkAccess chunkAccess) { + int heightLimit = chunkAccess.getHeight(); + int chunkX = chunkAccess.getPos().x; + int chunkZ = chunkAccess.getPos().z; + + this.largeAsteroids.clear(); + this.largeCount = 0; + final Random random = new Random(); + final int asteroidChance = AsteroidChunkGenerator.ASTEROID_CHANCE; + final int rangeY = AsteroidChunkGenerator.MAX_ASTEROID_Y - AsteroidChunkGenerator.MIN_ASTEROID_Y; + final int rangeSize = AsteroidChunkGenerator.MAX_ASTEROID_RADIUS - AsteroidChunkGenerator.MIN_ASTEROID_RADIUS; + + //If asteroid centre is nearby might need to generate some asteroid parts in this chunk + for (int i = chunkX - 3; i < chunkX + 3; i++) + { + int minX = i * 16; + int maxX = minX + AsteroidChunkGenerator.CHUNK_SIZE_X; + for (int k = chunkZ - 3; k < chunkZ + 3; k++) + { + int minZ = k * 16; + int maxZ = minZ + AsteroidChunkGenerator.CHUNK_SIZE_Z; + + //something about redundant code in gc4's code + for (int x = minX; x < maxX; x += 2) + { + for (int z = minZ; z < maxZ; z += 2) + { + //the next line is called 3136 times per chunk generated apparently? saying something about slow getNoise + if (this.randFromPointPos(x, z) < (this.asteroidDensity.getNoise(x, z) + .4) / asteroidChance) + { + random.setSeed(x + z * 3067); + int y = random.nextInt(rangeY) + AsteroidChunkGenerator.MIN_ASTEROID_Y; + int size = random.nextInt(rangeSize) + AsteroidChunkGenerator.MIN_ASTEROID_RADIUS; + + //generate the parts of the asteroid which are in this chunk + this.generateAsteroid(random, x, y, z, chunkX << 4, chunkZ << 4, size, chunkAccess); + this.largeCount++; + } + } + } + } + } + + return chunkAccess; + } + + public DimensionDataStorage getDimensionDataStorage(MinecraftServer server) { + ServerLevel level = server.getLevel(dimensionKey); + if (level == null) { + throw new IllegalStateException("ServerLevel for the given dimensionKey does not exist."); + } + return level.getDataStorage(); + } + + private void generateAsteroid(Random rand, int asteroidX, int asteroidY, int asteroidZ, int chunkX, int chunkZ, int size, ChunkAccess primer) + { + SpecialAsteroidBlock core = this.coreHandler.getBlock(rand, size); + + SpecialAsteroidBlock shell = null; + if (rand.nextInt(AsteroidChunkGenerator.ASTEROID_SHELL_CHANCE) == 0) + { + shell = this.shellHandler.getBlock(rand, size); + } + + boolean isHollow = false; + final float hollowSize = rand.nextFloat() * (AsteroidChunkGenerator.MAX_HOLLOW_SIZE - AsteroidChunkGenerator.MIN_HOLLOW_SIZE) + AsteroidChunkGenerator.MIN_HOLLOW_SIZE; + if (rand.nextInt(AsteroidChunkGenerator.HOLLOW_CHANCE) == 0 && size >= AsteroidChunkGenerator.MIN_RADIUS_FOR_HOLLOW) + { + isHollow = true; + //TODO: set to dense ice + shell = new SpecialAsteroidBlock(Blocks.PACKED_ICE, 1, .15); + } + + //Add to the list of asteroids for external use + ((AsteroidChunkGenerator) this).addAsteroid(asteroidX, asteroidY, asteroidZ, size, isHollow ? -1 : core.index); + + final int xMin = this.clamp(Math.max(chunkX, asteroidX - size - AsteroidChunkGenerator.MAX_ASTEROID_SKEW - 2) - chunkX, 0, 16); + final int zMin = this.clamp(Math.max(chunkZ, asteroidZ - size - AsteroidChunkGenerator.MAX_ASTEROID_SKEW - 2) - chunkZ, 0, 16); + final int yMin = asteroidY - size - AsteroidChunkGenerator.MAX_ASTEROID_SKEW - 2; + final int yMax = asteroidY + size + AsteroidChunkGenerator.MAX_ASTEROID_SKEW + 2; + final int xMax = this.clamp(Math.min(chunkX + 16, asteroidX + size + AsteroidChunkGenerator.MAX_ASTEROID_SKEW + 2) - chunkX, 0, 16); + final int zMax = this.clamp(Math.min(chunkZ + 16, asteroidZ + size + AsteroidChunkGenerator.MAX_ASTEROID_SKEW + 2) - chunkZ, 0, 16); + final int xSize = xMax - xMin; + final int ySize = yMax - yMin; + final int zSize = zMax - zMin; + + if (xSize <= 0 || ySize <= 0 || zSize <= 0) + { + return; + } + + final float noiseOffsetX = this.randFromPoint(asteroidX, asteroidY, asteroidZ) * AsteroidChunkGenerator.NOISE_OFFSET_SIZE + chunkX; + final float noiseOffsetY = this.randFromPoint(asteroidX * 7, asteroidY * 11, asteroidZ * 13) * AsteroidChunkGenerator.NOISE_OFFSET_SIZE; + final float noiseOffsetZ = this.randFromPoint(asteroidX * 17, asteroidY * 23, asteroidZ * 29) * AsteroidChunkGenerator.NOISE_OFFSET_SIZE + chunkZ; + this.setOtherAxisFrequency(1F / (size * 2F / 2F)); + + float[] sizeXArray = new float[ySize * zSize]; + float[] sizeZArray = new float[xSize * ySize]; + float[] sizeYArray = new float[xSize * zSize]; + + for (int x = 0; x < xSize; x++) + { + int xx = x * zSize; + float xxx = x + noiseOffsetX; + for (int z = 0; z < zSize; z++) + { + sizeYArray[xx + z] = this.asteroidSkewY.getNoise(xxx, z + noiseOffsetZ); + } + } + + AsteroidData asteroidData = new AsteroidData(isHollow, sizeYArray, xMin, zMin, xMax, zMax, zSize, size, asteroidX, asteroidY, asteroidZ); + this.largeAsteroids.add(asteroidData); + this.largeAsteroidsLastChunkX = chunkX; + this.largeAsteroidsLastChunkZ = chunkZ; + + for (int y = 0; y < ySize; y++) + { + int yy = y * zSize; + float yyy = y + noiseOffsetY; + for (int z = 0; z < zSize; z++) + { + sizeXArray[yy + z] = this.asteroidSkewX.getNoise(yyy, z + noiseOffsetZ); + } + } + + for (int x = 0; x < xSize; x++) + { + int xx = x * ySize; + float xxx = x + noiseOffsetX; + for (int y = 0; y < ySize; y++) + { + sizeZArray[xx + y] = this.asteroidSkewZ.getNoise(xxx, y + noiseOffsetY); + } + } + + double shellThickness = 0; + int terrainY = 0; + int terrainYY = 0; + + BlockState asteroidShell = null; + if (shell != null) + { + asteroidShell = shell.block.defaultBlockState(); + shellThickness = 1.0 - shell.thickness; + } + + BlockState asteroidCore = core.block.defaultBlockState(); + BlockState asteroidRock0 = GCBlocks.ASTEROID_ROCK.defaultBlockState(); + BlockState asteroidRock1 = GCBlocks.ASTEROID_ROCK_1.defaultBlockState(); + + for (int x = xMax - 1; x >= xMin; x--) { + int indexXY = (x - xMin) * ySize - yMin; + int indexXZ = (x - xMin) * zSize - zMin; + int distanceX = asteroidX - (x + chunkX); + int indexBaseX = x * AsteroidChunkGenerator.CHUNK_SIZE_Y << 4; + float xx = x + chunkX; + + for (int z = zMin; z < zMax; z++) { + if (isHollow) { + float sizeModY = sizeYArray[indexXZ + z]; + terrainY = this.getTerrainHeightFor(sizeModY, asteroidY, size); + terrainYY = this.getTerrainHeightFor(sizeModY, asteroidY - 1, size); + } + + float sizeY = size + sizeYArray[indexXZ + z]; + sizeY *= sizeY; + int distanceZ = asteroidZ - (z + chunkZ); + int indexBase = indexBaseX | z * AsteroidChunkGenerator.CHUNK_SIZE_Y; + float zz = z + chunkZ; + + for (int y = yMin; y < yMax; y++) { + float dSizeX = distanceX / (size + sizeXArray[(y - yMin) * zSize + z - zMin]); + float dSizeZ = distanceZ / (size + sizeZArray[indexXY + y]); + dSizeX *= dSizeX; + dSizeZ *= dSizeZ; + int distanceY = asteroidY - y; + distanceY *= distanceY; + float distance = dSizeX + distanceY / sizeY + dSizeZ; + float distanceAbove = distance; + distance += this.asteroidTurbulance.getNoise(xx, y, zz); + + if (isHollow && distance <= hollowSize) { + distanceAbove += this.asteroidTurbulance.getNoise(xx, y + 1, zz); + if (distanceAbove <= 1) { + if ((y - 1) == terrainYY) { + int index = indexBase | (y + 1); + primer.setBlockState(new BlockPos(x, y + 1, z), Blocks.GLOWSTONE.defaultBlockState(), false); +// blockArray[index] = this.LIGHT; +// metaArray[index] = this.LIGHT_META; + } + } + } + + if (distance <= 1) { + int index = indexBase | y; + if (isHollow && distance <= hollowSize) { + if (y == terrainY) { + primer.setBlockState(new BlockPos(x, y, z), Blocks.GRASS_BLOCK.defaultBlockState(), false); +// blockArray[index] = this.GRASS; +// metaArray[index] = this.GRASS_META; + } else if (y < terrainY) { + primer.setBlockState(new BlockPos(x, y, z), Blocks.DIRT.defaultBlockState(), false); +// blockArray[index] = this.DIRT; +// metaArray[index] = this.DIRT_META; + } else { + primer.setBlockState(new BlockPos(x, y, z), Blocks.AIR.defaultBlockState(), false); +// blockArray[index] = Blocks.air; +// metaArray[index] = 0; + } + } else if (distance <= core.thickness) { + if (rand.nextBoolean()) { + primer.setBlockState(new BlockPos(x, y, z), asteroidCore, false); +// blockArray[index] = core.block; +// metaArray[index] = core.meta; + } else { + primer.setBlockState(new BlockPos(x, y, z), asteroidRock0, false); +// blockArray[index] = this.ASTEROID_STONE; +// metaArray[index] = this.ASTEROID_STONE_META_0; + } + } else if (shell != null && distance >= shellThickness) { + primer.setBlockState(new BlockPos(x, y, z), asteroidShell, false); +// blockArray[index] = shell.block; +// metaArray[index] = shell.meta; + } else { + primer.setBlockState(new BlockPos(x, y, z), asteroidRock1, false); +// blockArray[index] = this.ASTEROID_STONE; +// metaArray[index] = this.ASTEROID_STONE_META_1; + } + } + } + } + } + + if (isHollow) + { + shellThickness = 0; + if (shell != null) + { + shellThickness = 1.0 - shell.thickness; + } + for (int x = xMin; x < xMax; x++) + { + int indexXY = (x - xMin) * ySize - yMin; + int indexXZ = (x - xMin) * zSize - zMin; + int distanceX = asteroidX - (x + chunkX); + distanceX *= distanceX; + + for (int z = zMin; z < zMax; z++) + { + float sizeModY = sizeYArray[indexXZ + z]; + float sizeY = size + sizeYArray[indexXZ + z]; + sizeY *= sizeY; + int distanceZ = asteroidZ - (z + chunkZ); + distanceZ *= distanceZ; + + for (int y = yMin; y < yMax; y++) + { + float sizeX = size + sizeXArray[(y - yMin) * zSize + z - zMin]; + float sizeZ = size + sizeZArray[indexXY + y]; + sizeX *= sizeX; + sizeZ *= sizeZ; + int distanceY = asteroidY - y; + distanceY *= distanceY; + float distance = distanceX / sizeX + distanceY / sizeY + distanceZ / sizeZ; + distance += this.asteroidTurbulance.getNoise(x + chunkX, y, z + chunkZ); + + if (distance <= 1) + { + BlockState state = primer.getBlockState(new BlockPos(x, y, z)); + BlockState stateAbove = primer.getBlockState(new BlockPos(x, y + 1, z)); + if (Blocks.AIR == stateAbove.getBlock() && (state.getBlock() == GCBlocks.ASTEROID_ROCK || state.getBlock() == GCBlocks.ASTEROID_ROCK_1 || state.getBlock() == GCBlocks.ASTEROID_ROCK_2 || state.getBlock() == Blocks.GRASS_BLOCK)) + { + if (this.rand.nextInt(GLOWSTONE_CHANCE) == 0) + { + primer.setBlockState(new BlockPos(x, y, z), Blocks.GLOWSTONE.defaultBlockState(), false); +// blockArray[index] = this.LIGHT; +// metaArray[index] = this.LIGHT_META; + } + } + } + } + } + } + } + } + + private final int getTerrainHeightFor(float yMod, int asteroidY, int asteroidSize) + { + return (int) (asteroidY - asteroidSize / 4 + yMod * 1.5F); + } + + private final int getTerrainHeightAt(int x, int z, float[] yModArray, int xMin, int zMin, int zSize, int asteroidY, int asteroidSize) + { + final int index = (x - xMin) * zSize - zMin; + if (index < yModArray.length && index >= 0) + { + final float yMod = yModArray[index]; + return this.getTerrainHeightFor(yMod, asteroidY, asteroidSize); + } + return 1; + } + + @Override + protected Codec codec() { + return CODEC; + } + + @Override + public void applyCarvers(WorldGenRegion region, long seed, RandomState randomState, BiomeManager biomeManager, StructureManager structureManager, ChunkAccess chunkAccess, GenerationStep.Carving carving) { + int chunkX = chunkAccess.getPos().x; + int chunkZ = chunkAccess.getPos().z; + + int x = chunkX << 4; + int z = chunkZ << 4; + if (!AsteroidChunkGenerator.chunksDone.add(new BlockVec3(x, 0, z))) + { + return; + } + +// BlockFalling.fallInstantly = true; +// this.world.getBiome(new BlockPos(x + 16, 0, z + 16)); +// BlockFalling.fallInstantly = false; + + this.rand.setSeed(seed); + long var7 = this.rand.nextLong() / 2L * 2L + 1L; + long var9 = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed(chunkX * var7 + chunkZ * var9 ^ seed); + + //50:50 chance to include small blocks each chunk + if (this.rand.nextBoolean()) { + double density = this.asteroidDensity.getNoise(chunkX * 16, chunkZ * 16) * 0.54; + double numOfBlocks = this.clamp(this.randFromPoint(chunkX, chunkZ), .4, 1) * AsteroidChunkGenerator.MAX_BLOCKS_PER_CHUNK * density + AsteroidChunkGenerator.MIN_BLOCKS_PER_CHUNK; + int y0 = this.rand.nextInt(2); + Block block; + int yRange = AsteroidChunkGenerator.MAX_ASTEROID_Y - AsteroidChunkGenerator.MIN_ASTEROID_Y; + x += 4; + z += 4; + + for (int i = 0; i < numOfBlocks; i++) { + int y = this.rand.nextInt(yRange) + AsteroidChunkGenerator.MIN_ASTEROID_Y; + + //50:50 chance vertically as well + if (y0 == (y / 16) % 2) { + int px = x + this.rand.nextInt(AsteroidChunkGenerator.CHUNK_SIZE_X); + int pz = z + this.rand.nextInt(AsteroidChunkGenerator.CHUNK_SIZE_Z); + + block = GCBlocks.ASTEROID_ROCK; + + if (this.rand.nextInt(ILMENITE_CHANCE) == 0) { + block = GCBlocks.ILMENITE_ORE; + } else if (this.rand.nextInt(IRON_CHANCE) == 0) { + block = GCBlocks.MARS_IRON_ORE; + } else if (this.rand.nextInt(ALUMINUM_CHANCE) == 0) { + block = GCBlocks.ALUMINUM_ORE; + } + + chunkAccess.setBlockState(new BlockPos(px, y, pz), block.defaultBlockState(), false); + int count = 9; + if (!(chunkAccess.getBlockState(new BlockPos(px - 1, y, pz)).isAir())) { + count = 1; + } else if (!(chunkAccess.getBlockState(new BlockPos(px - 2, y, pz)).isAir())) { + count = 3; + } else if (!(chunkAccess.getBlockState(new BlockPos(px - 3, y, pz)).isAir())) { + count = 5; + } else if (!(chunkAccess.getBlockState(new BlockPos(px - 4, y, pz)).isAir())) { + count = 7; + } +//LIGHTEMP world.setLightFor(EnumSkyBlock.BLOCK, new BlockPos(px - (count > 1 ? 1 : 0), y, pz), count); + } + } + } + + if (this.largeAsteroidsLastChunkX != chunkX || this.largeAsteroidsLastChunkZ != chunkZ) + { + this.generateChunkData(null, null, null, chunkAccess); + } + + this.rand.setSeed(chunkX * var7 + chunkZ * var9 ^ seed); + + //Look for hollow asteroids to populate + if (!this.largeAsteroids.isEmpty()) + { + for (AsteroidData asteroidIndex : new ArrayList(this.largeAsteroids)) + { + if (!asteroidIndex.isHollow) + { + continue; + } + + float[] sizeYArray = asteroidIndex.sizeYArray; + int xMin = asteroidIndex.xMinArray; + int zMin = asteroidIndex.zMinArray; + int zSize = asteroidIndex.zSizeArray; + int asteroidY = asteroidIndex.asteroidYArray; + int asteroidSize = asteroidIndex.asteroidSizeArray; + boolean treesdone = false; + + if (rand.nextInt(AsteroidChunkGenerator.TREE_CHANCE) == 0) + { + int treeType = rand.nextInt(3); + if (treeType == 1) + { + treeType = 0; + } + BlockState log = Blocks.OAK_LOG.defaultBlockState(); + BlockState leaves = Blocks.OAK_LEAVES.defaultBlockState(); + /**WorldGenTrees wg = new WorldGenTrees(false, 2, log, leaves, false); + for (int tries = 0; tries < 5; tries++) + { + int i = rand.nextInt(16) + x + 8; + int k = rand.nextInt(16) + z + 8; + if (wg.generate(world, rand, new BlockPos(i, this.getTerrainHeightAt(i - x, k - z, sizeYArray, xMin, zMin, zSize, asteroidY, asteroidSize), k))) + { + break; + } + }**/ + treesdone = true; + } + if (!treesdone || rand.nextInt(AsteroidChunkGenerator.TALL_GRASS_CHANCE) == 0) + { + int i = rand.nextInt(16) + x + 8; + int k = rand.nextInt(16) + z + 8; + //new WorldGenTallGrass(GRASS_TYPE).generate(world, rand, new BlockPos(i, this.getTerrainHeightAt(i - x, k - z, sizeYArray, xMin, zMin, zSize, asteroidY, asteroidSize), k)); + } + if (rand.nextInt(AsteroidChunkGenerator.FLOWER_CHANCE) == 0) + { + int i = rand.nextInt(16) + x + 8; + int k = rand.nextInt(16) + z + 8; + int[] types = new int[]{2, 4, 5, 7}; + //new WorldGenFlowers(this.FLOWER, Blocks.POPPY).generate(world, rand, new BlockPos(i, this.getTerrainHeightAt(i - x, k - z, sizeYArray, xMin, zMin, zSize, asteroidY, asteroidSize), k)); + } + if (rand.nextInt(AsteroidChunkGenerator.LAVA_CHANCE) == 0) + { + int i = rand.nextInt(16) + x + 8; + int k = rand.nextInt(16) + z + 8; + //new WorldGenLakes(this.LAVA).generate(world, rand, new BlockPos(i, this.getTerrainHeightAt(i - x, k - z, sizeYArray, xMin, zMin, zSize, asteroidY, asteroidSize), k)); + } + if (rand.nextInt(AsteroidChunkGenerator.WATER_CHANCE) == 0) + { + int i = rand.nextInt(16) + x + 8; + int k = rand.nextInt(16) + z + 8; + //new WorldGenLakes(this.WATER).generate(world, rand, new BlockPos(i, this.getTerrainHeightAt(i - x, k - z, sizeYArray, xMin, zMin, zSize, asteroidY, asteroidSize), k)); + } + } + } + + //Update all block lighting + for (int xx = 0; xx < 16; xx++) + { + int xPos = x + xx; + for (int zz = 0; zz < 16; zz++) + { + int zPos = z + zz; + + //Asteroid at min height 48, size 20, can't have lit blocks below 16 + for (int y = 16; y < 240; y++) + { +//LIGHTTEMP world.checkLightFor(EnumSkyBlock.BLOCK, new BlockPos(xPos, y, zPos)); + } + } + } + + //this.dungeonGenerator.generate(this.world, this.rand, new ChunkPos(chunkX, chunkZ)); + } + + @Override + public void buildSurface(WorldGenRegion region, StructureManager structureManager, RandomState randomState, ChunkAccess chunkAccess) { + + } + + @Override + public void spawnOriginalMobs(WorldGenRegion region) { + + } + + @Override + public int getGenDepth() { + return 0; + } + + @Override + public CompletableFuture fillFromNoise(Executor executor, Blender blender, RandomState randomState, StructureManager structureManager, ChunkAccess chunkAccess) { + + CompletableFuture future = new CompletableFuture<>(); + + executor.execute(() -> { + try { + // Example asynchronous operation (replace with your actual logic) + ChunkAccess result = generateChunkData(blender, randomState, structureManager, chunkAccess); + future.complete(result); + } catch (Exception e) { + future.completeExceptionally(e); + } + }); + + return future; + } + + public void resetBase() + { + //this.dungeonGenerator.reset(); + } + + + + @Override + public int getSeaLevel() { + return 0; + } + + @Override + public int getMinY() { + return 0; + } + + @Override + public int getBaseHeight(int i, int j, Heightmap.Types types, LevelHeightAccessor levelHeightAccessor, RandomState randomState) { + return 0; + } + + @Override + public NoiseColumn getBaseColumn(int i, int j, LevelHeightAccessor levelHeightAccessor, RandomState randomState) { + return null; + } + + @Override + public void addDebugScreenInfo(List list, RandomState randomState, BlockPos blockPos) { + + } + + private float randFromPointPos(int x, int z) + { + int n = x + z * 57; + n ^= n << 13; + n = n * (n * n * 15731 + 789221) + 1376312589 & 0x3fffffff; + return 1.0F - n / 1073741824.0F; + } + + private final void setOtherAxisFrequency(float frequency) + { + this.asteroidSkewX.frequencyY = frequency; + this.asteroidSkewX.frequencyZ = frequency; + + this.asteroidSkewY.frequencyX = frequency; + this.asteroidSkewY.frequencyZ = frequency; + + this.asteroidSkewZ.frequencyX = frequency; + this.asteroidSkewZ.frequencyY = frequency; + } + + private final int clamp(int x, int min, int max) + { + if (x < min) + { + x = min; + } + else if (x > max) + { + x = max; + } + return x; + } + + private final double clamp(double x, double min, double max) + { + if (x < min) + { + x = min; + } + else if (x > max) + { + x = max; + } + return x; + } + private float randFromPoint(int x, int y, int z) + { + int n = x + z * 57 + y * 571; + n ^= n << 13; + n = n * (n * n * 15731 + 789221) + 1376312589 & 0x7fffffff; + return 1.0F - n / 1073741824.0F; + } + + private float randFromPoint(int x, int z) + { + int n = x + z * 57; + n ^= n << 13; + n = n * (n * n * 15731 + 789221) + 1376312589 & 0x7fffffff; + return 1.0F - n / 1073741824.0F; + } + + public void addAsteroid(int x, int y, int z, int size, int core) + { + AsteroidData coords = new AsteroidData(x, y, z, size, core); + if (!this.asteroids.contains(coords)) + { + if (this.dataNotLoaded) + { + this.loadAsteroidSavedData(); + } + if (!this.asteroids.contains(coords)) + { + this.addToNBT(this.datafile.datacompound, coords); + this.asteroids.add(coords); + } + } + } + + private void addToNBT(CompoundTag nbt, AsteroidData coords) + { + ListTag coordList = nbt.getList("coords", 10); + CompoundTag tag = new CompoundTag(); + coords.writeToNBT(tag); + coordList.add(tag); + nbt.put("coords", coordList); + this.datafile.setDirty(); + Path dataPath = Path.of(currentWorldSaveDirectory.toString(), saveDataID); + Path dataFile = dataPath.resolve("data.dat"); + this.setData(dataFile, datafile); + } + + private void writeToNBT(CompoundTag nbt) + { + ListTag coordList = new ListTag(); + for (AsteroidData coords : this.asteroids) + { + CompoundTag tag = new CompoundTag(); + coords.writeToNBT(tag); + coordList.add(tag); + } + nbt.put("coords", coordList); + this.datafile.setDirty(); + Path dataPath = Path.of(currentWorldSaveDirectory.toString(), saveDataID); + Path dataFile = dataPath.resolve("data.dat"); + this.setData(dataFile, datafile); + } + + private static class AsteroidData + { + public boolean isHollow; + public float[] sizeYArray; + public int xMinArray; + public int zMinArray; + public int xMax; + public int zMax; + public int zSizeArray; + public int asteroidSizeArray; + public int asteroidXArray; + public int asteroidYArray; + public int asteroidZArray; + + public AsteroidData(boolean hollow, float[] sizeYArray2, int xMin, int zMin, int xmax, int zmax, int zSize, int size, int asteroidX, int asteroidY, int asteroidZ) + { + this.isHollow = hollow; + this.sizeYArray = sizeYArray2.clone(); + this.xMinArray = xMin; + this.zMinArray = zMin; + this.xMax = xmax; + this.zMax = zmax; + this.zSizeArray = zSize; + this.asteroidSizeArray = size; + this.asteroidXArray = asteroidX; + this.asteroidYArray = asteroidY; + this.asteroidZArray = asteroidZ; + } + protected BlockVec3 centre; + protected int sizeAndLandedFlag = 15; + protected int coreAndSpawnedFlag = -2; + + public AsteroidData(int x, int y, int z) + { + this.centre = new BlockVec3(x, y, z); + } + + public AsteroidData(int x, int y, int z, int size, int core) + { + this.centre = new BlockVec3(x, y, z); + this.sizeAndLandedFlag = size; + this.coreAndSpawnedFlag = core; + } + + public AsteroidData(BlockVec3 bv) + { + this.centre = bv; + } + + @Override + public int hashCode() + { + if (this.centre != null) + { + return this.centre.hashCode(); + } + else + { + return 0; + } + } + + @Override + public boolean equals(Object o) + { + if (o instanceof AsteroidData) + { + BlockVec3 vector = ((AsteroidData) o).centre; + return this.centre.x == vector.x && this.centre.y == vector.y && this.centre.z == vector.z; + } + + if (o instanceof BlockVec3) + { + BlockVec3 vector = (BlockVec3) o; + return this.centre.x == vector.x && this.centre.y == vector.y && this.centre.z == vector.z; + } + + return false; + } + + public CompoundTag writeToNBT(CompoundTag tag) + { + tag.putInt("x", this.centre.x); + tag.putInt("y", this.centre.y); + tag.putInt("z", this.centre.z); + tag.putInt("coreAndFlag", this.coreAndSpawnedFlag); + tag.putInt("sizeAndFlag", this.sizeAndLandedFlag); + + return tag; + } + + public static AsteroidData readFromNBT(CompoundTag tag) + { + BlockVec3 tempVector = new BlockVec3(); + tempVector.x = tag.getInt("x"); + tempVector.y = tag.getInt("y"); + tempVector.z = tag.getInt("z"); + + AsteroidData roid = new AsteroidData(tempVector); + if (tag.hasUUID("coreAndFlag")) + { + roid.coreAndSpawnedFlag = tag.getInt("coreAndFlag"); + } + if (tag.hasUUID("sizeAndFlag")) + { + roid.sizeAndLandedFlag = tag.getInt("sizeAndFlag"); + } + + return roid; + } + } + + private int getIndex(int x, int y, int z) + { + return x * AsteroidChunkGenerator.CHUNK_SIZE_Y * 16 | z * AsteroidChunkGenerator.CHUNK_SIZE_Y | y; + } + + public void loadAsteroidSavedData() { + Path dataPath = Path.of(currentWorldSaveDirectory.toString(), saveDataID); + Path dataFile = dataPath.resolve("data.dat"); + + this.datafile = this.loadData(dataFile); + + if (this.datafile == null) + { + this.datafile = new AsteroidSaveData(""); + this.writeToNBT(this.datafile.datacompound); + this.setData(dataFile, this.datafile); + } + else + { + this.readFromNBT(this.datafile.datacompound); + } + + this.dataNotLoaded = false; + + } + + public void setData(Path filePath, AsteroidSaveData data) { + try { + NbtIo.write(data.datacompound, filePath); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public AsteroidSaveData loadData(Path filePath) { + if (Files.exists(filePath)) + { + CompoundTag tag; + try { + tag = NbtIo.read(filePath); + } catch (IOException e) { + throw new RuntimeException(e); + } + AsteroidSaveData saveData = new AsteroidSaveData(""); + saveData.datacompound = tag; + return saveData; + } + else + { + return null; + } + } + + + private void readFromNBT(CompoundTag nbt) + { + ListTag coordList = nbt.getList("coords", 10); + if (coordList.size() > 0) + { + for (int j = 0; j < coordList.size(); j++) + { + CompoundTag tag1 = coordList.getCompound(j); + + if (tag1 != null) + { + this.asteroids.add(AsteroidData.readFromNBT(tag1)); + } + } + } + } + + public BlockVec3 isLargeAsteroidAt(int x0, int z0) + { + int xToCheck; + int zToCheck; + for (int i0 = 0; i0 <= 32; i0++) + { + for (int i1 = -i0; i1 <= i0; i1++) + { + xToCheck = (x0 >> 4) + i0; + zToCheck = (z0 >> 4) + i1; + + if (isLargeAsteroidAt0(xToCheck * 16, zToCheck * 16)) + { + return new BlockVec3(xToCheck * 16, 0, zToCheck * 16); + } + + xToCheck = (x0 >> 4) + i0; + zToCheck = (z0 >> 4) - i1; + + if (isLargeAsteroidAt0(xToCheck * 16, zToCheck * 16)) + { + return new BlockVec3(xToCheck * 16, 0, zToCheck * 16); + } + + xToCheck = (x0 >> 4) - i0; + zToCheck = (z0 >> 4) + i1; + + if (isLargeAsteroidAt0(xToCheck * 16, zToCheck * 16)) + { + return new BlockVec3(xToCheck * 16, 0, zToCheck * 16); + } + + xToCheck = (x0 >> 4) - i0; + zToCheck = (z0 >> 4) - i1; + + if (isLargeAsteroidAt0(xToCheck * 16, zToCheck * 16)) + { + return new BlockVec3(xToCheck * 16, 0, zToCheck * 16); + } + } + } + + return null; + } + + private boolean isLargeAsteroidAt0(int x0, int z0) + { + for (int x = x0; x < x0 + AsteroidChunkGenerator.CHUNK_SIZE_X; x += 2) + { + for (int z = z0; z < z0 + AsteroidChunkGenerator.CHUNK_SIZE_Z; z += 2) + { + if ((Math.abs(this.randFromPoint(x, z)) < (this.asteroidDensity.getNoise(x, z) + .4) / AsteroidChunkGenerator.ASTEROID_CHANCE)) + { + return true; + } + } + } + + return false; + } + +} diff --git a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidSaveData.java b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidSaveData.java new file mode 100644 index 000000000..bf0ef9471 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidSaveData.java @@ -0,0 +1,51 @@ +package dev.galacticraft.mod.world.gen.custom; + +import dev.galacticraft.mod.Constant; +import dev.galacticraft.mod.data.GCDataGenerator; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; +import net.minecraft.data.CachedOutput; +import net.minecraft.data.DataProvider; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtIo; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.dedicated.DedicatedServer; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.datafix.DataFixTypes; +import net.minecraft.world.level.saveddata.SavedData; +import net.minecraft.world.level.storage.DimensionDataStorage; +import net.minecraft.world.level.storage.LevelStorageSource; + +import java.io.*; +import java.nio.file.Path; +import java.util.concurrent.CompletableFuture; + +public class AsteroidSaveData extends SavedData{ + + public static final String saveDataID = "dimensions/galacticraft/asteroid/data"; + + public CompoundTag datacompound; + + public AsteroidSaveData(String s) + { + super(); + this.datacompound = new CompoundTag(); + } + + public void readFromNBT(CompoundTag nbt) + { + this.datacompound = nbt.getCompound("asteroids"); + } + + @Override + public CompoundTag save(CompoundTag nbt) + { + nbt.put("asteroids", this.datacompound); + return nbt; + } + + public static AsteroidSaveData load(CompoundTag compound) { + String value = compound.getString("someValue"); + return new AsteroidSaveData(value); + } +} diff --git a/src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlock.java b/src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlock.java new file mode 100644 index 000000000..7c24f90bb --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlock.java @@ -0,0 +1,22 @@ +package dev.galacticraft.mod.world.gen.custom; + +import net.minecraft.world.level.block.Block; + +import java.util.ArrayList; +public class SpecialAsteroidBlock +{ + public Block block; + public int probability; + public double thickness; //Arbitrary scale from 0 to 1; + public int index; + public static ArrayList register = new ArrayList<>(); + + public SpecialAsteroidBlock(Block block, int probability, double thickness) + { + this.block = block; + this.probability = probability; + this.thickness = thickness; + this.index = register.size(); + register.add(this); + } +} diff --git a/src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlockHandler.java b/src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlockHandler.java new file mode 100644 index 000000000..5a2f1b437 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlockHandler.java @@ -0,0 +1,46 @@ +package dev.galacticraft.mod.world.gen.custom; + +import java.util.ArrayList; +import java.util.Random; +public class SpecialAsteroidBlockHandler +{ + ArrayList asteroidBlocks; + + public SpecialAsteroidBlockHandler(SpecialAsteroidBlock... asteroidBlocks) + { + this.asteroidBlocks = new ArrayList(); + for (SpecialAsteroidBlock asteroidBlock : this.asteroidBlocks) + { + for (int i = 0; i < asteroidBlock.probability; i++) + { + this.asteroidBlocks.add(asteroidBlock); + } + } + } + + public SpecialAsteroidBlockHandler() + { + this.asteroidBlocks = new ArrayList(); + } + + public void addBlock(SpecialAsteroidBlock asteroidBlock) + { + for (int i = 0; i < asteroidBlock.probability; i++) + { + this.asteroidBlocks.add(asteroidBlock); + } + } + + public SpecialAsteroidBlock getBlock(Random rand, int size) + { + int s = this.asteroidBlocks.size(); + if (s < 10) + { + return this.asteroidBlocks.get(rand.nextInt(s)); + } + + Double r = rand.nextDouble(); + int index = (int) (s * Math.pow(r, (size + 5) * 0.05D)); + return this.asteroidBlocks.get(index); + } +} From 25ec6736623a9053115a7c63898bedb26016f138 Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Wed, 29 May 2024 10:00:59 +1000 Subject: [PATCH 04/23] Fixed File not exists when loading Asteroid Dimension --- .../world/gen/custom/AsteroidChunkGenerator.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java index 4a7b25cb3..6fa847799 100644 --- a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java +++ b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java @@ -932,6 +932,19 @@ public void loadAsteroidSavedData() { if (this.datafile == null) { + if (!Files.exists(dataFile)) + { + try { + Files.createDirectories(dataPath); + } catch (IOException e) { + throw new RuntimeException(e); + } + try { + Files.createFile(dataFile); + } catch (IOException e) { + throw new RuntimeException(e); + } + } this.datafile = new AsteroidSaveData(""); this.writeToNBT(this.datafile.datacompound); this.setData(dataFile, this.datafile); From b2cc1c3f86519350d1fb1c80ede68b4ae2749285 Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Sun, 2 Jun 2024 20:55:39 +1000 Subject: [PATCH 05/23] Reworked canned food items Canned food items can now be created from any food with ease. planning to add automatic food detection that creates cans for any mods foods. --- .../assets/galacticraft/lang/en_us.json | 6 +- .../models/item/canned_dehydrated_apple.json | 6 - .../models/item/canned_dehydrated_carrot.json | 6 - .../models/item/canned_dehydrated_melon.json | 6 - .../models/item/canned_dehydrated_potato.json | 6 - .../models/item/canned_food_template.json | 7 ++ .../{canned_beef.json => empty_food_can.json} | 2 +- .../recipes/food/canned_beef.json | 34 ------ .../recipes/food/canned_dehydrated_apple.json | 34 ------ .../food/canned_dehydrated_carrot.json | 34 ------ .../recipes/food/canned_dehydrated_melon.json | 34 ------ .../food/canned_dehydrated_potato.json | 34 ------ .../galacticraft/recipes/canned_beef.json | 18 --- .../recipes/canned_dehydrated_apple.json | 18 --- .../recipes/canned_dehydrated_carrot.json | 18 --- .../recipes/canned_dehydrated_melon.json | 18 --- .../recipes/canned_dehydrated_potato.json | 18 --- .../java/dev/galacticraft/mod/Constant.java | 8 +- .../galacticraft/mod/GalacticraftClient.java | 79 ++++++++++++- .../mod/content/entity/SmallAsteroid.java | 35 ++++++ .../mod/content/item/CannedFoodItem.java | 111 +++++++++++++++++- .../mod/content/item/GCCreativeModeTabs.java | 16 ++- .../mod/content/item/GCFoodComponent.java | 6 +- .../mod/content/item/GCItems.java | 51 ++++++-- .../mod/data/model/GCModelProvider.java | 7 +- .../data/recipes/GCMiscRecipeProvider.java | 35 ------ .../galacticraft/mod/util/TextureUtils.java | 69 +++++++++++ .../textures/item/canned_beef.png | Bin 3314 -> 0 bytes .../textures/item/canned_dehydrated_apple.png | Bin 17831 -> 0 bytes .../item/canned_dehydrated_carrot.png | Bin 17838 -> 0 bytes .../textures/item/canned_dehydrated_melon.png | Bin 17869 -> 0 bytes .../item/canned_dehydrated_potato.png | Bin 17826 -> 0 bytes .../textures/item/canned_food_label.png | Bin 0 -> 193 bytes .../textures/item/canned_food_template.png | Bin 0 -> 665 bytes 34 files changed, 351 insertions(+), 365 deletions(-) delete mode 100644 src/main/generated/assets/galacticraft/models/item/canned_dehydrated_apple.json delete mode 100644 src/main/generated/assets/galacticraft/models/item/canned_dehydrated_carrot.json delete mode 100644 src/main/generated/assets/galacticraft/models/item/canned_dehydrated_melon.json delete mode 100644 src/main/generated/assets/galacticraft/models/item/canned_dehydrated_potato.json create mode 100644 src/main/generated/assets/galacticraft/models/item/canned_food_template.json rename src/main/generated/assets/galacticraft/models/item/{canned_beef.json => empty_food_can.json} (53%) delete mode 100644 src/main/generated/data/galacticraft/advancements/recipes/food/canned_beef.json delete mode 100644 src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_apple.json delete mode 100644 src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_carrot.json delete mode 100644 src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_melon.json delete mode 100644 src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_potato.json delete mode 100644 src/main/generated/data/galacticraft/recipes/canned_beef.json delete mode 100644 src/main/generated/data/galacticraft/recipes/canned_dehydrated_apple.json delete mode 100644 src/main/generated/data/galacticraft/recipes/canned_dehydrated_carrot.json delete mode 100644 src/main/generated/data/galacticraft/recipes/canned_dehydrated_melon.json delete mode 100644 src/main/generated/data/galacticraft/recipes/canned_dehydrated_potato.json create mode 100644 src/main/java/dev/galacticraft/mod/content/entity/SmallAsteroid.java create mode 100644 src/main/java/dev/galacticraft/mod/util/TextureUtils.java delete mode 100644 src/main/resources/assets/galacticraft/textures/item/canned_beef.png delete mode 100644 src/main/resources/assets/galacticraft/textures/item/canned_dehydrated_apple.png delete mode 100644 src/main/resources/assets/galacticraft/textures/item/canned_dehydrated_carrot.png delete mode 100644 src/main/resources/assets/galacticraft/textures/item/canned_dehydrated_melon.png delete mode 100644 src/main/resources/assets/galacticraft/textures/item/canned_dehydrated_potato.png create mode 100644 src/main/resources/assets/galacticraft/textures/item/canned_food_label.png create mode 100644 src/main/resources/assets/galacticraft/textures/item/canned_food_template.png diff --git a/src/main/generated/assets/galacticraft/lang/en_us.json b/src/main/generated/assets/galacticraft/lang/en_us.json index ff23877aa..984005860 100644 --- a/src/main/generated/assets/galacticraft/lang/en_us.json +++ b/src/main/generated/assets/galacticraft/lang/en_us.json @@ -350,11 +350,6 @@ "item.galacticraft.blue_solar_wafer": "Blue Solar Wafer", "item.galacticraft.brown_parachute": "Brown Parachute", "item.galacticraft.burger_bun": "Burger Bun", - "item.galacticraft.canned_beef": "Canned Beef", - "item.galacticraft.canned_dehydrated_apple": "Canned Dehydrated Apple", - "item.galacticraft.canned_dehydrated_carrot": "Canned Dehydrated Carrot", - "item.galacticraft.canned_dehydrated_melon": "Canned Dehydrated Melon", - "item.galacticraft.canned_dehydrated_potato": "Canned Dehydrated Potato", "item.galacticraft.canvas": "Canvas", "item.galacticraft.carbon_fragments": "Carbon Fragments", "item.galacticraft.cargo_rocket_schematic": "Cargo Rocket Schematic", @@ -462,6 +457,7 @@ "item.galacticraft.tier_2_rocket_schematic": "Tier 2 Rocket Schematic", "item.galacticraft.tier_3_rocket_schematic": "Tier 3 Rocket Schematic", "item.galacticraft.tin_canister": "Tin Canister", + "item.galacticraft.empty_food_can": "Empty Food Can", "item.galacticraft.tin_ingot": "Tin Ingot", "item.galacticraft.tin_nugget": "Tin Nugget", "item.galacticraft.titanium_axe": "Titanium Axe", diff --git a/src/main/generated/assets/galacticraft/models/item/canned_dehydrated_apple.json b/src/main/generated/assets/galacticraft/models/item/canned_dehydrated_apple.json deleted file mode 100644 index 4fb438ca7..000000000 --- a/src/main/generated/assets/galacticraft/models/item/canned_dehydrated_apple.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "galacticraft:item/canned_dehydrated_apple" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/canned_dehydrated_carrot.json b/src/main/generated/assets/galacticraft/models/item/canned_dehydrated_carrot.json deleted file mode 100644 index 7313bcbd1..000000000 --- a/src/main/generated/assets/galacticraft/models/item/canned_dehydrated_carrot.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "galacticraft:item/canned_dehydrated_carrot" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/canned_dehydrated_melon.json b/src/main/generated/assets/galacticraft/models/item/canned_dehydrated_melon.json deleted file mode 100644 index 2926a2db4..000000000 --- a/src/main/generated/assets/galacticraft/models/item/canned_dehydrated_melon.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "galacticraft:item/canned_dehydrated_melon" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/canned_dehydrated_potato.json b/src/main/generated/assets/galacticraft/models/item/canned_dehydrated_potato.json deleted file mode 100644 index 3ff71bf5d..000000000 --- a/src/main/generated/assets/galacticraft/models/item/canned_dehydrated_potato.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "galacticraft:item/canned_dehydrated_potato" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/canned_food_template.json b/src/main/generated/assets/galacticraft/models/item/canned_food_template.json new file mode 100644 index 000000000..a2fc16bd0 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/canned_food_template.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraft:item/canned_food_template", + "layer1": "galacticraft:item/canned_food_label" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/canned_beef.json b/src/main/generated/assets/galacticraft/models/item/empty_food_can.json similarity index 53% rename from src/main/generated/assets/galacticraft/models/item/canned_beef.json rename to src/main/generated/assets/galacticraft/models/item/empty_food_can.json index 1adb6b36c..4d31182b7 100644 --- a/src/main/generated/assets/galacticraft/models/item/canned_beef.json +++ b/src/main/generated/assets/galacticraft/models/item/empty_food_can.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "galacticraft:item/canned_beef" + "layer0": "galacticraft:item/canned_food_template" } } \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/advancements/recipes/food/canned_beef.json b/src/main/generated/data/galacticraft/advancements/recipes/food/canned_beef.json deleted file mode 100644 index 92a9a0977..000000000 --- a/src/main/generated/data/galacticraft/advancements/recipes/food/canned_beef.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "galacticraft:canned_beef" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_tin_canister": { - "conditions": { - "items": [ - { - "items": [ - "galacticraft:tin_canister" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_tin_canister" - ] - ], - "rewards": { - "recipes": [ - "galacticraft:canned_beef" - ] - } -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_apple.json b/src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_apple.json deleted file mode 100644 index 1f8deaf63..000000000 --- a/src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_apple.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "galacticraft:canned_dehydrated_apple" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_tin_canister": { - "conditions": { - "items": [ - { - "items": [ - "galacticraft:tin_canister" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_tin_canister" - ] - ], - "rewards": { - "recipes": [ - "galacticraft:canned_dehydrated_apple" - ] - } -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_carrot.json b/src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_carrot.json deleted file mode 100644 index b054d6ee0..000000000 --- a/src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_carrot.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "galacticraft:canned_dehydrated_carrot" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_tin_canister": { - "conditions": { - "items": [ - { - "items": [ - "galacticraft:tin_canister" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_tin_canister" - ] - ], - "rewards": { - "recipes": [ - "galacticraft:canned_dehydrated_carrot" - ] - } -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_melon.json b/src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_melon.json deleted file mode 100644 index bbad9edf3..000000000 --- a/src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_melon.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "galacticraft:canned_dehydrated_melon" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_tin_canister": { - "conditions": { - "items": [ - { - "items": [ - "galacticraft:tin_canister" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_tin_canister" - ] - ], - "rewards": { - "recipes": [ - "galacticraft:canned_dehydrated_melon" - ] - } -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_potato.json b/src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_potato.json deleted file mode 100644 index 7a3117b12..000000000 --- a/src/main/generated/data/galacticraft/advancements/recipes/food/canned_dehydrated_potato.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_the_recipe": { - "conditions": { - "recipe": "galacticraft:canned_dehydrated_potato" - }, - "trigger": "minecraft:recipe_unlocked" - }, - "has_tin_canister": { - "conditions": { - "items": [ - { - "items": [ - "galacticraft:tin_canister" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_tin_canister" - ] - ], - "rewards": { - "recipes": [ - "galacticraft:canned_dehydrated_potato" - ] - } -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/recipes/canned_beef.json b/src/main/generated/data/galacticraft/recipes/canned_beef.json deleted file mode 100644 index 3da5fe375..000000000 --- a/src/main/generated/data/galacticraft/recipes/canned_beef.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "galacticraft:tin_canister" - }, - { - "item": "galacticraft:ground_beef" - }, - { - "item": "galacticraft:ground_beef" - } - ], - "result": { - "item": "galacticraft:canned_beef" - } -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/recipes/canned_dehydrated_apple.json b/src/main/generated/data/galacticraft/recipes/canned_dehydrated_apple.json deleted file mode 100644 index 30db3e903..000000000 --- a/src/main/generated/data/galacticraft/recipes/canned_dehydrated_apple.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "galacticraft:tin_canister" - }, - { - "item": "minecraft:apple" - }, - { - "item": "minecraft:apple" - } - ], - "result": { - "item": "galacticraft:canned_dehydrated_apple" - } -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/recipes/canned_dehydrated_carrot.json b/src/main/generated/data/galacticraft/recipes/canned_dehydrated_carrot.json deleted file mode 100644 index c80bd8ade..000000000 --- a/src/main/generated/data/galacticraft/recipes/canned_dehydrated_carrot.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "galacticraft:tin_canister" - }, - { - "item": "minecraft:carrot" - }, - { - "item": "minecraft:carrot" - } - ], - "result": { - "item": "galacticraft:canned_dehydrated_carrot" - } -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/recipes/canned_dehydrated_melon.json b/src/main/generated/data/galacticraft/recipes/canned_dehydrated_melon.json deleted file mode 100644 index 77043b4c2..000000000 --- a/src/main/generated/data/galacticraft/recipes/canned_dehydrated_melon.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "galacticraft:tin_canister" - }, - { - "item": "minecraft:melon_slice" - }, - { - "item": "minecraft:melon_slice" - } - ], - "result": { - "item": "galacticraft:canned_dehydrated_melon" - } -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/recipes/canned_dehydrated_potato.json b/src/main/generated/data/galacticraft/recipes/canned_dehydrated_potato.json deleted file mode 100644 index 01d0ba042..000000000 --- a/src/main/generated/data/galacticraft/recipes/canned_dehydrated_potato.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "galacticraft:tin_canister" - }, - { - "item": "minecraft:potato" - }, - { - "item": "minecraft:potato" - } - ], - "result": { - "item": "galacticraft:canned_dehydrated_potato" - } -} \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/Constant.java b/src/main/java/dev/galacticraft/mod/Constant.java index 3cfacf0d3..bae7bb1fa 100644 --- a/src/main/java/dev/galacticraft/mod/Constant.java +++ b/src/main/java/dev/galacticraft/mod/Constant.java @@ -307,6 +307,7 @@ static ResourceLocation getId(String s) { interface Item { String ITEM_GROUP = "items"; + String ITEM_GROUP_CANS = "cans"; String RAW_SILICON = "raw_silicon"; String RAW_METEORIC_IRON = "raw_meteoric_iron"; String METEORIC_IRON_INGOT = "meteoric_iron_ingot"; @@ -357,6 +358,7 @@ interface Item { String STEEL_POLE = "steel_pole"; String COPPER_CANISTER = "copper_canister"; String TIN_CANISTER = "tin_canister"; + String EMPTY_FOOD_CAN = "empty_food_can"; String THERMAL_CLOTH = "thermal_cloth"; String ISOTHERMAL_FABRIC = "isothermal_fabric"; String ORION_DRIVE = "orion_drive"; @@ -371,12 +373,6 @@ interface Item { String GROUND_BEEF = "ground_beef"; String BEEF_PATTY = "beef_patty"; String CHEESEBURGER = "cheeseburger"; - //CANNED FOOD - String CANNED_DEHYDRATED_APPLE = "canned_dehydrated_apple"; - String CANNED_DEHYDRATED_CARROT = "canned_dehydrated_carrot"; - String CANNED_DEHYDRATED_MELON = "canned_dehydrated_melon"; - String CANNED_DEHYDRATED_POTATO = "canned_dehydrated_potato"; - String CANNED_BEEF = "canned_beef"; //ROCKET PARTS String TIER_1_HEAVY_DUTY_PLATE = "heavy_plating"; String TIER_2_HEAVY_DUTY_PLATE = "heavy_plating_t2"; diff --git a/src/main/java/dev/galacticraft/mod/GalacticraftClient.java b/src/main/java/dev/galacticraft/mod/GalacticraftClient.java index 169783ca9..33e279ce3 100644 --- a/src/main/java/dev/galacticraft/mod/GalacticraftClient.java +++ b/src/main/java/dev/galacticraft/mod/GalacticraftClient.java @@ -22,6 +22,7 @@ package dev.galacticraft.mod; +import com.sun.jna.platform.win32.DdemlUtil; import dev.galacticraft.api.client.tabs.InventoryTabRegistry; import dev.galacticraft.machinelib.client.api.model.MachineModelRegistry; import dev.galacticraft.mod.client.GCKeyBinds; @@ -45,6 +46,7 @@ import dev.galacticraft.mod.content.GCEntityTypes; import dev.galacticraft.mod.content.block.environment.FallenMeteorBlock; import dev.galacticraft.mod.content.entity.orbital.RocketEntity; +import dev.galacticraft.mod.content.item.CannedFoodItem; import dev.galacticraft.mod.content.item.GCItems; import dev.galacticraft.mod.events.ClientEventHandler; import dev.galacticraft.mod.misc.cape.CapesLoader; @@ -52,11 +54,13 @@ import dev.galacticraft.mod.screen.GCMenuTypes; import dev.galacticraft.mod.screen.GCPlayerInventoryMenu; import dev.galacticraft.mod.screen.RocketMenu; +import dev.galacticraft.mod.util.TextureUtils; import io.netty.buffer.Unpooled; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; @@ -65,16 +69,49 @@ import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; import net.fabricmc.fabric.api.client.rendering.v1.LivingEntityFeatureRendererRegistrationCallback; +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.resource.ResourceManagerHelper; +import net.fabricmc.fabric.impl.client.rendering.ColorProviderRegistryImpl; +import net.minecraft.client.Minecraft; +import net.minecraft.client.color.item.ItemColor; import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.ThrownItemRenderer; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.resources.model.ModelManager; +import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.ComponentContents; +import net.minecraft.network.chat.contents.TranslatableContents; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.PackType; +import net.minecraft.server.packs.resources.Resource; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; import net.minecraft.world.level.material.Fluids; +import javax.imageio.ImageIO; +import javax.swing.event.EventListenerList; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.*; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static dev.galacticraft.mod.content.item.GCItems.CANNED_FOOD_ITEMS; +import static dev.galacticraft.mod.util.TextureUtils.getAverageColor; + @Environment(EnvType.CLIENT) public class GalacticraftClient implements ClientModInitializer { + + private boolean colorsInitialized = false; + @Override public void onInitializeClient() { long startInitTime = System.currentTimeMillis(); @@ -180,8 +217,39 @@ public void onInitializeClient() { LivingEntityFeatureRendererRegistrationCallback.EVENT.register((entityType, entityRenderer, registrationHelper, context) -> { }); - + //couldn't be bothered finding a better way to get the texture of the items so overrides exists now + List nameOverride = new ArrayList<>(); + nameOverride.add(new String[]{"enchanted_golden_apple", "golden_apple"}); ModelLoadingPlugin.register(GCModelLoader.INSTANCE); + ClientTickEvents.END_CLIENT_TICK.register(client -> { + if (!colorsInitialized) + { + if (client.player != null && client.level != null) + { + CANNED_FOOD_ITEMS.forEach(cannedFoodItem -> { + Item cannedItem = cannedFoodItem.getCannedItem(); + String nameComponent = cannedItem.toString(); + String itemName = extractInsideBrackets(nameComponent); + assert itemName != null; + String[] parts = itemName.split(":"); + String namespace = parts[0]; + String item = parts[1]; + for (String[] element: nameOverride) + { + if (parts[1].equals(element[0])) + { + item = element[1]; + } + } + ResourceLocation textureLocation = new ResourceLocation(namespace, "textures/item/" + item + ".png"); + int avgColor = getAverageColor(textureLocation); + cannedFoodItem.setColor(avgColor); + }); + colorsInitialized = true; + } + } + }); + Constant.LOGGER.info("Client initialization complete. (Took {}ms.)", System.currentTimeMillis() - startInitTime); } @@ -200,4 +268,13 @@ public static void init() { GCDimensionEffects.register(); } + + public static String extractInsideBrackets(String input) { + int startIndex = input.indexOf('{'); + int endIndex = input.indexOf('}'); + if (startIndex != -1 && endIndex != -1 && startIndex < endIndex) { + return input.substring(startIndex + 1, endIndex); + } + return null; + } } diff --git a/src/main/java/dev/galacticraft/mod/content/entity/SmallAsteroid.java b/src/main/java/dev/galacticraft/mod/content/entity/SmallAsteroid.java new file mode 100644 index 000000000..dd9353e3f --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/content/entity/SmallAsteroid.java @@ -0,0 +1,35 @@ +package dev.galacticraft.mod.content.entity; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.Level; + +public class SmallAsteroid extends Entity { + + //private static final DataParameter SPIN_PITCH = EntityDataManager.createKey(EntitySmallAsteroid.class, DataSerializers.FLOAT); + //private static final DataParameter SPIN_YAW = EntityDataManager.createKey(EntitySmallAsteroid.class, DataSerializers.FLOAT); + //private static final DataParameter ASTEROID_TYPE = EntityDataManager.createKey(EntitySmallAsteroid.class, DataSerializers.VARINT); + public float spinPitch; + public float spinYaw; + public int type; + private boolean firstUpdate = true; + public SmallAsteroid(EntityType entityType, Level level) { + super(entityType, level); + } + + @Override + protected void defineSynchedData() { + + } + + @Override + protected void readAdditionalSaveData(CompoundTag nbt) { + + } + + @Override + protected void addAdditionalSaveData(CompoundTag nbt) { + + } +} diff --git a/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java b/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java index 3e685806a..8a2a48d03 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java +++ b/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java @@ -22,20 +22,123 @@ package dev.galacticraft.mod.content.item; +import dev.galacticraft.mod.Constant; +import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin; +import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; +import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; +import net.minecraft.client.Minecraft; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.CreativeModeTabs; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Rarity; import net.minecraft.world.level.Level; +import net.minecraft.network.chat.Component; + +import java.awt.*; +import java.io.IOException; +import java.util.Collection; + +import static dev.galacticraft.mod.Constant.MOD_ID; public class CannedFoodItem extends Item { - public CannedFoodItem(Properties settings) { + private final String name; + private final String displayName; + private final Item cannedItem; + private int color; + + @Override + public ItemStack finishUsingItem(ItemStack itemStack, Level level, LivingEntity livingEntity) { + //COURTESY OF POTATO + super.finishUsingItem(itemStack, level, livingEntity); + if (itemStack.isEmpty()) { + return new ItemStack(GCItems.TIN_CANISTER); + } + + if (livingEntity instanceof Player player) { + if (!player.getAbilities().instabuild) { + ItemStack canStack = new ItemStack(GCItems.EMPTY_FOOD_CAN); + if (!player.getInventory().add(canStack)) { + player.drop(canStack, false); + } + } + } + return itemStack; + } + + public CannedFoodItem(Properties settings, String name, String displayName, Item cannedItem) { super(settings); + this.name = name; + this.displayName = displayName; + this.cannedItem = cannedItem; + this.color = 0; } @Override - public ItemStack finishUsingItem(ItemStack itemStack, Level level, LivingEntity livingEntity) { - var itemStack2 = super.finishUsingItem(itemStack, level, livingEntity); - return livingEntity instanceof Player player && player.getAbilities().instabuild ? itemStack2 : new ItemStack(GCItems.TIN_CANISTER); + public void onCraftedBy(ItemStack stack, Level world, Player player) { + super.onCraftedBy(stack, world, player); + // Add functionality when the item is crafted (optional) + } + + public static CannedFoodItem newCan(Item cannedItem, String itemName, String displayName) + { + Properties settings = new Item.Properties().food(cannedItem.getFoodProperties()).rarity(cannedItem.getDefaultInstance().getRarity()); + CannedFoodItem item = new CannedFoodItem(settings, itemName, displayName, cannedItem); + //registers the new item ingame + Registry.register(BuiltInRegistries.ITEM, new ResourceLocation(MOD_ID, itemName), item); + //sets the model of the item + ModelLoadingPlugin.register(pluginContext -> { + pluginContext.resolveModel().register(context -> { + if (Constant.id("item/" + itemName).equals(context.id())) + { + return context.getOrLoadModel(Constant.id("item/canned_food_template")); + } + return null; + }); + }); + //adds the item to the galacticraft cans creative tab + ItemGroupEvents.modifyEntriesEvent(ResourceKey.create(Registries.CREATIVE_MODE_TAB, Constant.id(Constant.Item.ITEM_GROUP_CANS))).register(entries -> { + entries.accept(item.getDefaultInstance()); + }); + ColorProviderRegistry.ITEM.register((stack, tintIndex) -> { + return item.getColor(tintIndex); + },item); + return item; + } + + @Override + public Component getName(ItemStack stack) { + return Component.literal(this.displayName); + } + + @Override + public boolean isFoil(ItemStack stack) { + return this.cannedItem.getDefaultInstance().hasFoil(); + } + + public void setColor(int color) + { + this.color = color; + } + + public int getColor(int layer) { + // Specify color for each layer, you can add more layers and their colors + if (layer == 1) { + return this.color; + } else { + return 0xFFFFFF; // Default color (no tint) + } + } + + public Item getCannedItem() + { + return this.cannedItem; } } \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java index 539c67113..61b8e6221 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java @@ -164,11 +164,7 @@ public class GCCreativeModeTabs { output.accept(BEEF_PATTY); output.accept(CHEESEBURGER); - output.accept(CANNED_DEHYDRATED_APPLE); - output.accept(CANNED_DEHYDRATED_CARROT); - output.accept(CANNED_DEHYDRATED_MELON); - output.accept(CANNED_DEHYDRATED_POTATO); - output.accept(CANNED_BEEF); + output.accept(THROWABLE_METEOR_CHUNK); output.accept(HOT_THROWABLE_METEOR_CHUNK); @@ -412,6 +408,15 @@ public class GCCreativeModeTabs { // MACHINES }).build(); + //Todo: fix up my bad programming to be translatable + public static final CreativeModeTab CANNED_FOOD_GROUP = FabricItemGroup + .builder() + .icon(() -> new ItemStack(EMPTY_FOOD_CAN)) + .title(Component.literal("Galacticraft Cans")) + .displayItems((parameters, output) -> { + output.accept(EMPTY_FOOD_CAN); + }).build(); + public static final CreativeModeTab MACHINES_GROUP = FabricItemGroup .builder() .icon(() -> new ItemStack(GCItems.COAL_GENERATOR)) @@ -440,5 +445,6 @@ public static void register() { Registry.register(BuiltInRegistries.CREATIVE_MODE_TAB, Constant.id(Constant.Item.ITEM_GROUP), ITEMS_GROUP); Registry.register(BuiltInRegistries.CREATIVE_MODE_TAB, Constant.id(Constant.Block.ITEM_GROUP_BLOCKS), BLOCKS_GROUP); Registry.register(BuiltInRegistries.CREATIVE_MODE_TAB, Constant.id(Constant.Block.ITEM_GROUP_MACHINES), MACHINES_GROUP); + Registry.register(BuiltInRegistries.CREATIVE_MODE_TAB, Constant.id(Constant.Item.ITEM_GROUP_CANS), CANNED_FOOD_GROUP); } } \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCFoodComponent.java b/src/main/java/dev/galacticraft/mod/content/item/GCFoodComponent.java index 8eca03177..0e1f4bf3f 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCFoodComponent.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCFoodComponent.java @@ -33,9 +33,5 @@ public class GCFoodComponent { public static final FoodProperties BEEF_PATTY = new FoodProperties.Builder().nutrition(4).saturationMod(0.8F).meat().build(); public static final FoodProperties CHEESEBURGER = new FoodProperties.Builder().nutrition(14).saturationMod(4.0F).build(); - public static final FoodProperties DEHYDRATED_APPLE = new FoodProperties.Builder().nutrition(8).saturationMod(0.3F).build(); - public static final FoodProperties DEHYDRATED_CARROT = new FoodProperties.Builder().nutrition(8).saturationMod(0.6F).build(); - public static final FoodProperties DEHYDRATED_MELON = new FoodProperties.Builder().nutrition(4).saturationMod(0.3F).build(); - public static final FoodProperties DEHYDRATED_POTATO = new FoodProperties.Builder().nutrition(2).saturationMod(0.3F).build(); - public static final FoodProperties CANNED_BEEF = new FoodProperties.Builder().nutrition(8).saturationMod(0.6F).build(); + } diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java index af2cec19f..932397a2b 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java @@ -27,25 +27,35 @@ import dev.galacticraft.mod.content.GCFluids; import dev.galacticraft.mod.content.GCRegistry; import dev.galacticraft.mod.content.GCRocketParts; +import dev.galacticraft.mod.util.TextureUtils; import dev.galacticraft.mod.util.Translations; +import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin; import net.fabricmc.fabric.api.item.v1.FabricItemSettings; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.model.ModelManager; import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.*; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.DispenserBlock; +import org.intellij.lang.annotations.Identifier; import java.util.ArrayList; import java.util.List; +import static dev.galacticraft.mod.Constant.MOD_ID; + @SuppressWarnings("unused") public class GCItems { public static final GCRegistry ITEMS = new GCRegistry<>(BuiltInRegistries.ITEM); public static final List HIDDEN_ITEMS = new ArrayList<>(1); + public static final List CANNED_FOOD_ITEMS = new ArrayList<>(); + // === START BLOCKS === // TORCHES public static final Item GLOWSTONE_TORCH = ITEMS.register(Constant.Block.GLOWSTONE_TORCH, new StandingAndWallBlockItem(GCBlocks.GLOWSTONE_TORCH, GCBlocks.GLOWSTONE_WALL_TORCH, new Item.Properties(), Direction.DOWN)); @@ -277,6 +287,7 @@ public class GCItems { public static final Item STEEL_POLE = new Item(new Item.Properties()); public static final Item COPPER_CANISTER = new Item(new Item.Properties()); public static final Item TIN_CANISTER = ITEMS.register(Constant.Item.TIN_CANISTER, new Item(new Item.Properties())); + public static final Item EMPTY_FOOD_CAN = ITEMS.register(Constant.Item.EMPTY_FOOD_CAN, new Item(new Item.Properties())); public static final Item THERMAL_CLOTH = new Item(new Item.Properties()); public static final Item ISOTHERMAL_FABRIC = new Item(new Item.Properties()); public static final Item ORION_DRIVE = new Item(new Item.Properties()); @@ -292,13 +303,7 @@ public class GCItems { public static final Item GROUND_BEEF = ITEMS.register(Constant.Item.GROUND_BEEF, new Item(new Item.Properties().food(GCFoodComponent.GROUND_BEEF))); public static final Item BEEF_PATTY = ITEMS.register(Constant.Item.BEEF_PATTY, new Item(new Item.Properties().food(GCFoodComponent.BEEF_PATTY))); public static final Item CHEESEBURGER = ITEMS.register(Constant.Item.CHEESEBURGER, new Item(new Item.Properties().food(GCFoodComponent.CHEESEBURGER))); - - public static final Item CANNED_DEHYDRATED_APPLE = new CannedFoodItem(new Item.Properties().food(GCFoodComponent.DEHYDRATED_APPLE)); - public static final Item CANNED_DEHYDRATED_CARROT = new CannedFoodItem(new Item.Properties().food(GCFoodComponent.DEHYDRATED_CARROT)); - public static final Item CANNED_DEHYDRATED_MELON = new CannedFoodItem(new Item.Properties().food(GCFoodComponent.DEHYDRATED_MELON)); - public static final Item CANNED_DEHYDRATED_POTATO = new CannedFoodItem(new Item.Properties().food(GCFoodComponent.DEHYDRATED_POTATO)); - public static final Item CANNED_BEEF = new CannedFoodItem(new Item.Properties().food(GCFoodComponent.CANNED_BEEF)); - + // ROCKET PLATES public static final Item TIER_1_HEAVY_DUTY_PLATE = ITEMS.register(Constant.Item.TIER_1_HEAVY_DUTY_PLATE, new Item(new Item.Properties())); public static final Item TIER_2_HEAVY_DUTY_PLATE = ITEMS.register(Constant.Item.TIER_2_HEAVY_DUTY_PLATE, new Item(new Item.Properties())); @@ -418,9 +423,35 @@ public class GCItems { public static final Item MOON_BUGGY_SCHEMATIC = new SchematicItem(new Item.Properties()); public static final Item TIER_3_ROCKET_SCHEMATIC = new SchematicItem(new Item.Properties()); public static final Item ASTRO_MINER_SCHEMATIC = new SchematicItem(new Item.Properties()); + public static void register() { // === START BLOCKS === + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.APPLE,"canned_dehydrated_apple", "Canned Dehydrated Apple")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.CARROT,"canned_dehydrated_carrot", "Canned Dehydrated Carrot")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.MELON_SLICE, "canned_dehydrated_melon", "Canned Dehydrated Melon")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.POTATO, "canned_dehydrated_potato", "Canned Dehydrated Potato")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan( GCItems.GROUND_BEEF,"canned_beef", "Canned Beef")); + //filler items for testing purposes + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.GOLDEN_APPLE,"canned_golden_apple", "Canned Golden Apple")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.ENCHANTED_GOLDEN_APPLE,"canned_enchanted_golden_apple", "Canned Enchanted Golden Apple")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.SPIDER_EYE,"canned_spider_eye", "Canned Spider Eye")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.PUFFERFISH,"canned_pufferfish", "Canned Pufferfish")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.CHORUS_FRUIT,"canned_chorus_fruit", "Canned Chorus Fruit")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.SWEET_BERRIES,"canned_sweet_berries", "Canned Sweet Berries")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.GLOW_BERRIES,"canned_glow_berries", "Canned Glow Berries")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.GOLDEN_CARROT,"canned_golden_carrot", "Canned Golden Carrot")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.BAKED_POTATO,"canned_baked_potato", "Canned Baked Potato")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.POISONOUS_POTATO,"canned_poisonous_potato", "Canned Poisonous Potato")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.DRIED_KELP,"canned_kelp", "Canned Kelp")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.COD,"canned_cod", "Canned Cod")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.SALMON,"canned_salmon", "Canned Salmon")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.TROPICAL_FISH,"canned_tropical_fish", "Canned Tropical Fish")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.BREAD,"canned_bread", "Canned Bread")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.COOKIE,"canned_cookie", "Canned Cookie")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.PUMPKIN_PIE,"canned_pumpkin_pie", "Canned Pumpkin Pie")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.BEETROOT,"canned_beetroot", "Canned Beetroot")); + CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(GCItems.CHEESE_SLICE,"canned_cheese", "Canned Cheese")); // MOON NATURAL Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.MOON_TURF), MOON_TURF); @@ -650,12 +681,6 @@ public static void register() { Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Item.MOON_BERRIES), MOON_BERRIES); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Item.CHEESE_CURD), CHEESE_CURD); - Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Item.CANNED_DEHYDRATED_APPLE), CANNED_DEHYDRATED_APPLE); - Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Item.CANNED_DEHYDRATED_CARROT), CANNED_DEHYDRATED_CARROT); - Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Item.CANNED_DEHYDRATED_MELON), CANNED_DEHYDRATED_MELON); - Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Item.CANNED_DEHYDRATED_POTATO), CANNED_DEHYDRATED_POTATO); - Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Item.CANNED_BEEF), CANNED_BEEF); - // THROWABLE METEOR CHUNKS Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Item.THROWABLE_METEOR_CHUNK), THROWABLE_METEOR_CHUNK); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Item.HOT_THROWABLE_METEOR_CHUNK), HOT_THROWABLE_METEOR_CHUNK); diff --git a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java index 0e73218e2..5459369c5 100644 --- a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java @@ -407,12 +407,6 @@ public void generateItemModels(ItemModelGenerators generator) { generator.generateFlatItem(GCItems.BEEF_PATTY, ModelTemplates.FLAT_ITEM); generator.generateFlatItem(GCItems.CHEESEBURGER, ModelTemplates.FLAT_ITEM); - generator.generateFlatItem(GCItems.CANNED_DEHYDRATED_APPLE, ModelTemplates.FLAT_ITEM); - generator.generateFlatItem(GCItems.CANNED_DEHYDRATED_CARROT, ModelTemplates.FLAT_ITEM); - generator.generateFlatItem(GCItems.CANNED_DEHYDRATED_MELON, ModelTemplates.FLAT_ITEM); - generator.generateFlatItem(GCItems.CANNED_DEHYDRATED_POTATO, ModelTemplates.FLAT_ITEM); - generator.generateFlatItem(GCItems.CANNED_BEEF, ModelTemplates.FLAT_ITEM); - generator.generateFlatItem(GCItems.NOSE_CONE, ModelTemplates.FLAT_ITEM); generator.generateFlatItem(GCItems.HEAVY_NOSE_CONE, "_joined", ModelTemplates.FLAT_ITEM); @@ -434,6 +428,7 @@ public void generateItemModels(ItemModelGenerators generator) { } } + generator.generateFlatItem(GCItems.SENSOR_GLASSES, ModelTemplates.FLAT_ITEM); // TOOLS + WEAPONS diff --git a/src/main/java/dev/galacticraft/mod/data/recipes/GCMiscRecipeProvider.java b/src/main/java/dev/galacticraft/mod/data/recipes/GCMiscRecipeProvider.java index 714713e18..eccecb0ae 100644 --- a/src/main/java/dev/galacticraft/mod/data/recipes/GCMiscRecipeProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/recipes/GCMiscRecipeProvider.java @@ -365,41 +365,6 @@ public void buildRecipes(RecipeOutput output) { .pattern("CCC") .unlockedBy(getHasName(GCItems.CHEESE_CURD), has(GCItems.CHEESE_CURD)) .save(output); - - ShapelessRecipeBuilder.shapeless(RecipeCategory.FOOD, GCItems.CANNED_DEHYDRATED_APPLE) - .requires(GCItems.TIN_CANISTER) - .requires(Items.APPLE) - .requires(Items.APPLE) - .unlockedBy(getHasName(GCItems.TIN_CANISTER), has(GCItems.TIN_CANISTER)) - .save(output); - - ShapelessRecipeBuilder.shapeless(RecipeCategory.FOOD, GCItems.CANNED_DEHYDRATED_POTATO) - .requires(GCItems.TIN_CANISTER) - .requires(Items.POTATO) - .requires(Items.POTATO) - .unlockedBy(getHasName(GCItems.TIN_CANISTER), has(GCItems.TIN_CANISTER)) - .save(output); - - ShapelessRecipeBuilder.shapeless(RecipeCategory.FOOD, GCItems.CANNED_DEHYDRATED_CARROT) - .requires(GCItems.TIN_CANISTER) - .requires(Items.CARROT) - .requires(Items.CARROT) - .unlockedBy(getHasName(GCItems.TIN_CANISTER), has(GCItems.TIN_CANISTER)) - .save(output); - - ShapelessRecipeBuilder.shapeless(RecipeCategory.FOOD, GCItems.CANNED_DEHYDRATED_MELON) - .requires(GCItems.TIN_CANISTER) - .requires(Items.MELON_SLICE) - .requires(Items.MELON_SLICE) - .unlockedBy(getHasName(GCItems.TIN_CANISTER), has(GCItems.TIN_CANISTER)) - .save(output); - - ShapelessRecipeBuilder.shapeless(RecipeCategory.FOOD, GCItems.CANNED_BEEF) - .requires(GCItems.TIN_CANISTER) - .requires(GCItems.GROUND_BEEF) - .requires(GCItems.GROUND_BEEF) - .unlockedBy(getHasName(GCItems.TIN_CANISTER), has(GCItems.TIN_CANISTER)) - .save(output); } @Override diff --git a/src/main/java/dev/galacticraft/mod/util/TextureUtils.java b/src/main/java/dev/galacticraft/mod/util/TextureUtils.java new file mode 100644 index 000000000..654c22e92 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/util/TextureUtils.java @@ -0,0 +1,69 @@ +package dev.galacticraft.mod.util; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.resources.model.Material; +import net.minecraft.client.resources.model.ModelManager; +import net.minecraft.client.resources.model.ModelResourceLocation; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.Resource; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.Objects; +import java.util.Optional; + +public class TextureUtils { + public static int getAverageColor(ResourceLocation textureLocation) { + Optional resourceOptional = Minecraft.getInstance().getResourceManager().getResource(textureLocation); + if (resourceOptional.isEmpty()) { + throw new RuntimeException("Failed to find resource: " + textureLocation); + } + + try (InputStream is = resourceOptional.get().open()) { + BufferedImage image = ImageIO.read(is); + return calculateAverageColor(image); + } catch (IOException e) { + throw new RuntimeException("Failed to load image: " + textureLocation, e); + } + } + + private static int calculateAverageColor(BufferedImage image) { + long sumRed = 0; + long sumGreen = 0; + long sumBlue = 0; + int pixelCount = 0; + + for (int y = 0; y < image.getHeight(); y++) { + for (int x = 0; x < image.getWidth(); x++) { + + int rgb = image.getRGB(x, y); + if (rgb != 0) + { + int red = (rgb >> 16) & 0xFF; + int green = (rgb >> 8) & 0xFF; + int blue = rgb & 0xFF; + + sumRed += red; + sumGreen += green; + sumBlue += blue; + pixelCount++; + } + } + } + + int avgRed = (int) (sumRed / pixelCount); + int avgGreen = (int) (sumGreen / pixelCount); + int avgBlue = (int) (sumBlue / pixelCount); + + return (avgRed << 16) | (avgGreen << 8) | avgBlue; + } +} + diff --git a/src/main/resources/assets/galacticraft/textures/item/canned_beef.png b/src/main/resources/assets/galacticraft/textures/item/canned_beef.png deleted file mode 100644 index 0152403b12bd4ad6fe95a2fc38938e2424b95b6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3314 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 T4-aMWUVF8*bh0Qm_lfy8YYM?7 diff --git a/src/main/resources/assets/galacticraft/textures/item/canned_dehydrated_melon.png b/src/main/resources/assets/galacticraft/textures/item/canned_dehydrated_melon.png deleted file mode 100644 index 4ad74b81402bd185489185a5300878f3ea5e47f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17869 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 diff --git a/src/main/resources/assets/galacticraft/textures/item/canned_dehydrated_potato.png b/src/main/resources/assets/galacticraft/textures/item/canned_dehydrated_potato.png deleted file mode 100644 index 503db6df69057cc6f6f692d2d801e3e8d1bfc8ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17826 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/item/canned_food_template.png b/src/main/resources/assets/galacticraft/textures/item/canned_food_template.png new file mode 100644 index 0000000000000000000000000000000000000000..f7a7745a5d8b5903cf96d4e6484ec5a41675e4ad GIT binary patch literal 665 zcmV;K0%rY*P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0xn5JK~y+TrIO!E zQ(+j#zdL7hI&rnl=7F%7u$!`$%PC@lN>FswO&3AkNr;eFb=!}Bperv#=)yvxppcb| znp%lVDikg37v?t4nmc$BjX8Jr1NR=2j;^zW$u&53|HHzX5;uNpM=2DMS`kq! z7GbklwRitxG7zdAuuzY&mv1l{nb6L5UV)et(cRICO1qsYbqtm}!&19Fyn;X{Y~G;3;824f@88aVw^~u{sDhIYR9=(m^lh-x*yn`>96a2>)H((ODJ`PC zy$xSJe!}?c89aDCiNtaoi}Ul4G8vre>V&exJ(@M`zz?5C(G+vOriUaMxN}d-vhuOC`;5!Y^7PC00000NkvXXu0mjfUjsF_ literal 0 HcmV?d00001 From 7010fda0365ff7287bc636dc1c325c1c8f1bdb1a Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Wed, 26 Jun 2024 20:15:48 +1000 Subject: [PATCH 06/23] canned food items canned food items have been almost completed other than fixing appleskins api integration and creating a machine to make cans in survival --- ...ed_food_template.json => canned_food.json} | 0 .../galacticraft/models/item/empty_can.json | 7 + .../models/item/empty_food_can.json | 6 - .../java/dev/galacticraft/mod/Constant.java | 5 +- .../dev/galacticraft/mod/Galacticraft.java | 5 + .../galacticraft/mod/GalacticraftClient.java | 71 ++-- .../mod/content/CannedFoodTooltip.java | 18 + .../mod/content/ClientCannedFoodTooltip.java | 109 ++++++ .../mod/content/GCCelestialBodies.java | 4 +- .../mod/content/item/CannedFoodItem.java | 340 ++++++++++++++---- .../mod/content/item/GCCreativeModeTabs.java | 4 +- .../mod/content/item/GCItems.java | 31 +- .../mod/mixin/client/ClientTooltipMixin.java | 28 ++ .../mod/mixin/client/FabricItemMixin.java | 30 ++ src/main/resources/galacticraft.mixins.json | 2 + 15 files changed, 523 insertions(+), 137 deletions(-) rename src/main/generated/assets/galacticraft/models/item/{canned_food_template.json => canned_food.json} (100%) create mode 100644 src/main/generated/assets/galacticraft/models/item/empty_can.json delete mode 100644 src/main/generated/assets/galacticraft/models/item/empty_food_can.json create mode 100644 src/main/java/dev/galacticraft/mod/content/CannedFoodTooltip.java create mode 100644 src/main/java/dev/galacticraft/mod/content/ClientCannedFoodTooltip.java create mode 100644 src/main/java/dev/galacticraft/mod/mixin/client/ClientTooltipMixin.java create mode 100644 src/main/java/dev/galacticraft/mod/mixin/client/FabricItemMixin.java diff --git a/src/main/generated/assets/galacticraft/models/item/canned_food_template.json b/src/main/generated/assets/galacticraft/models/item/canned_food.json similarity index 100% rename from src/main/generated/assets/galacticraft/models/item/canned_food_template.json rename to src/main/generated/assets/galacticraft/models/item/canned_food.json diff --git a/src/main/generated/assets/galacticraft/models/item/empty_can.json b/src/main/generated/assets/galacticraft/models/item/empty_can.json new file mode 100644 index 000000000..a2fc16bd0 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/empty_can.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraft:item/canned_food_template", + "layer1": "galacticraft:item/canned_food_label" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/empty_food_can.json b/src/main/generated/assets/galacticraft/models/item/empty_food_can.json deleted file mode 100644 index 4d31182b7..000000000 --- a/src/main/generated/assets/galacticraft/models/item/empty_food_can.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "galacticraft:item/canned_food_template" - } -} \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/Constant.java b/src/main/java/dev/galacticraft/mod/Constant.java index fc93da4f6..f8683f0ef 100644 --- a/src/main/java/dev/galacticraft/mod/Constant.java +++ b/src/main/java/dev/galacticraft/mod/Constant.java @@ -306,8 +306,10 @@ static ResourceLocation getId(String s) { } interface Item { - String ITEM_GROUP = "items"; String ITEM_GROUP_CANS = "cans"; + String ITEM_GROUP = "items"; + String CANNED_FOOD = "canned_food"; + String EMPTY_CANNED_FOOD = "empty_can"; String RAW_SILICON = "raw_silicon"; String RAW_METEORIC_IRON = "raw_meteoric_iron"; String METEORIC_IRON_INGOT = "meteoric_iron_ingot"; @@ -358,7 +360,6 @@ interface Item { String STEEL_POLE = "steel_pole"; String COPPER_CANISTER = "copper_canister"; String TIN_CANISTER = "tin_canister"; - String EMPTY_FOOD_CAN = "empty_food_can"; String THERMAL_CLOTH = "thermal_cloth"; String ISOTHERMAL_FABRIC = "isothermal_fabric"; String ORION_DRIVE = "orion_drive"; diff --git a/src/main/java/dev/galacticraft/mod/Galacticraft.java b/src/main/java/dev/galacticraft/mod/Galacticraft.java index cc4b67a21..3f4a451c1 100644 --- a/src/main/java/dev/galacticraft/mod/Galacticraft.java +++ b/src/main/java/dev/galacticraft/mod/Galacticraft.java @@ -51,7 +51,12 @@ import dev.galacticraft.mod.world.gen.surfacebuilder.MoonSurfaceRules; import dev.galacticraft.mod.world.poi.GCPointOfInterestTypes; import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.event.registry.RegistryEntryAddedCallback; import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.item.Item; public class Galacticraft implements ModInitializer { public static final Config CONFIG = new ConfigImpl(FabricLoader.getInstance().getConfigDir().resolve("galacticraft.json").toFile()); diff --git a/src/main/java/dev/galacticraft/mod/GalacticraftClient.java b/src/main/java/dev/galacticraft/mod/GalacticraftClient.java index 33e279ce3..1b956c5e1 100644 --- a/src/main/java/dev/galacticraft/mod/GalacticraftClient.java +++ b/src/main/java/dev/galacticraft/mod/GalacticraftClient.java @@ -22,7 +22,6 @@ package dev.galacticraft.mod; -import com.sun.jna.platform.win32.DdemlUtil; import dev.galacticraft.api.client.tabs.InventoryTabRegistry; import dev.galacticraft.machinelib.client.api.model.MachineModelRegistry; import dev.galacticraft.mod.client.GCKeyBinds; @@ -69,41 +68,27 @@ import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; import net.fabricmc.fabric.api.client.rendering.v1.LivingEntityFeatureRendererRegistrationCallback; -import net.fabricmc.fabric.api.event.Event; -import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.fabricmc.fabric.api.resource.ResourceManagerHelper; -import net.fabricmc.fabric.impl.client.rendering.ColorProviderRegistryImpl; -import net.minecraft.client.Minecraft; -import net.minecraft.client.color.item.ItemColor; +import net.fabricmc.fabric.mixin.registry.sync.RegistriesAccessor; import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.ThrownItemRenderer; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.client.resources.model.ModelManager; -import net.minecraft.client.resources.model.ModelResourceLocation; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.ComponentContents; -import net.minecraft.network.chat.contents.TranslatableContents; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.PackType; import net.minecraft.server.packs.resources.Resource; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.material.Fluids; -import javax.imageio.ImageIO; -import javax.swing.event.EventListenerList; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; import java.util.*; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import static dev.galacticraft.mod.content.item.CannedFoodItem.registerCan; import static dev.galacticraft.mod.content.item.GCItems.CANNED_FOOD_ITEMS; import static dev.galacticraft.mod.util.TextureUtils.getAverageColor; @@ -220,6 +205,7 @@ public void onInitializeClient() { //couldn't be bothered finding a better way to get the texture of the items so overrides exists now List nameOverride = new ArrayList<>(); nameOverride.add(new String[]{"enchanted_golden_apple", "golden_apple"}); + nameOverride.add(new String[]{"air", "lime_dye"}); ModelLoadingPlugin.register(GCModelLoader.INSTANCE); ClientTickEvents.END_CLIENT_TICK.register(client -> { if (!colorsInitialized) @@ -227,30 +213,41 @@ public void onInitializeClient() { if (client.player != null && client.level != null) { CANNED_FOOD_ITEMS.forEach(cannedFoodItem -> { - Item cannedItem = cannedFoodItem.getCannedItem(); - String nameComponent = cannedItem.toString(); - String itemName = extractInsideBrackets(nameComponent); - assert itemName != null; - String[] parts = itemName.split(":"); - String namespace = parts[0]; - String item = parts[1]; - for (String[] element: nameOverride) - { - if (parts[1].equals(element[0])) + Optional cannedItem = CannedFoodItem.getContents(cannedFoodItem.getDefaultInstance()).findFirst(); + if (cannedItem.isPresent()) { + String nameComponent = cannedItem.toString(); + String itemName = extractInsideBrackets(nameComponent); + assert itemName != null; + String[] parts = itemName.split(":"); + String namespace = parts[0]; + String item = parts[1]; + for (String[] element: nameOverride) { - item = element[1]; + if (parts[1].equals(element[0])) + { + item = element[1]; + } } + ResourceLocation textureLocation = new ResourceLocation(namespace, "textures/item/" + item + ".png"); + int avgColor = getAverageColor(textureLocation); + cannedFoodItem.setColor(avgColor); } - ResourceLocation textureLocation = new ResourceLocation(namespace, "textures/item/" + item + ".png"); - int avgColor = getAverageColor(textureLocation); - cannedFoodItem.setColor(avgColor); }); colorsInitialized = true; } } }); - - + //For every edible food create a creative item of that canned food type + for (Item item : BuiltInRegistries.ITEM) + { + if (item.getFoodProperties() != null) + { + if (!(item instanceof CannedFoodItem)) + { + registerCan(item.getDefaultInstance()); + } + } + } Constant.LOGGER.info("Client initialization complete. (Took {}ms.)", System.currentTimeMillis() - startInitTime); } diff --git a/src/main/java/dev/galacticraft/mod/content/CannedFoodTooltip.java b/src/main/java/dev/galacticraft/mod/content/CannedFoodTooltip.java new file mode 100644 index 000000000..15c4a90d2 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/content/CannedFoodTooltip.java @@ -0,0 +1,18 @@ +package dev.galacticraft.mod.content; + +import net.minecraft.core.NonNullList; +import net.minecraft.world.inventory.tooltip.TooltipComponent; +import net.minecraft.world.item.ItemStack; + +public class CannedFoodTooltip implements TooltipComponent { + private final NonNullList items; + + public CannedFoodTooltip(NonNullList nonNullList) + { + this.items = nonNullList; + } + + public NonNullList getItems() { + return this.items; + } +} diff --git a/src/main/java/dev/galacticraft/mod/content/ClientCannedFoodTooltip.java b/src/main/java/dev/galacticraft/mod/content/ClientCannedFoodTooltip.java new file mode 100644 index 000000000..ec3b78ad0 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/content/ClientCannedFoodTooltip.java @@ -0,0 +1,109 @@ +package dev.galacticraft.mod.content; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientBundleTooltip; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; +import net.minecraft.core.NonNullList; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.tooltip.BundleTooltip; +import net.minecraft.world.inventory.tooltip.TooltipComponent; +import net.minecraft.world.item.ItemStack; + +@Environment(EnvType.CLIENT) +public class ClientCannedFoodTooltip implements ClientTooltipComponent { + private static final ResourceLocation BACKGROUND_SPRITE = new ResourceLocation("container/bundle/background"); + private static final int MARGIN_Y = 4; + private static final int BORDER_WIDTH = 1; + private static final int SLOT_SIZE_X = 18; + private static final int SLOT_SIZE_Y = 20; + private final NonNullList items; + + public ClientCannedFoodTooltip(CannedFoodTooltip cannedFoodTooltip) { + this.items = cannedFoodTooltip.getItems(); + } + + public int getHeight() { + return this.backgroundHeight() + 4; + } + + public int getWidth(Font textRenderer) { + return this.backgroundWidth(); + } + + private int backgroundWidth() { + return this.gridSizeX() * 18 + 2; + } + + private int backgroundHeight() { + return this.gridSizeY() * 20 + 2; + } + + public void renderImage(Font textRenderer, int x, int y, GuiGraphics context) { + int i = this.gridSizeX(); + int j = this.gridSizeY(); + //creates a background panel over the items + //context.blitSprite(BACKGROUND_SPRITE, x, y, this.backgroundWidth(), this.backgroundHeight()); + int weight = 1; + boolean bl = weight >= 64; + int k = 0; + + for(int l = 0; l < j; ++l) { + for(int m = 0; m < i; ++m) { + int n = x + m * 18 + 1; + int o = y + l * 20 + 1; + this.renderSlot(n, o, k++, bl, context, textRenderer); + } + } + + } + + private void renderSlot(int x, int y, int index, boolean shouldBlock, GuiGraphics context, Font textRenderer) { + if (index >= this.items.size()) { + //creates a ending slot used for bundle not items contained + //this.blit(context, x, y, shouldBlock ? ClientCannedFoodTooltip.Texture.BLOCKED_SLOT : ClientCannedFoodTooltip.Texture.SLOT); + } else { + ItemStack itemStack = (ItemStack)this.items.get(index); + this.blit(context, x, y, ClientCannedFoodTooltip.Texture.SLOT); + context.renderItem(itemStack, x + 1, y + 1, index); + context.renderItemDecorations(textRenderer, itemStack, x + 1, y + 1); + //used to highlight the item slot + //not needed +// if (index == 0) { +// AbstractContainerScreen.renderSlotHighlight(context, x + 1, y + 1, 0); +// } + + } + } + + private void blit(GuiGraphics context, int x, int y, ClientCannedFoodTooltip.Texture sprite) { + context.blitSprite(sprite.sprite, x, y, 0, sprite.w, sprite.h); + } + + private int gridSizeX() { + return Math.max(2, (int)Math.ceil(Math.sqrt((double)this.items.size() + 1.0))); + } + + private int gridSizeY() { + return (int)Math.ceil(((double)this.items.size() + 1.0) / (double)this.gridSizeX()); + } + + @Environment(EnvType.CLIENT) + private static enum Texture { + BLOCKED_SLOT(new ResourceLocation("container/bundle/blocked_slot"), 18, 20), + SLOT(new ResourceLocation("container/bundle/slot"), 18, 20); + + public final ResourceLocation sprite; + public final int w; + public final int h; + + private Texture(ResourceLocation resourceLocation, int j, int k) { + this.sprite = resourceLocation; + this.w = j; + this.h = k; + } + } +} diff --git a/src/main/java/dev/galacticraft/mod/content/GCCelestialBodies.java b/src/main/java/dev/galacticraft/mod/content/GCCelestialBodies.java index 2b1ef7471..ce3e7c43e 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCCelestialBodies.java +++ b/src/main/java/dev/galacticraft/mod/content/GCCelestialBodies.java @@ -219,8 +219,8 @@ public static void bootstrapRegistries(BootstapContext> cont ))); context.register(ASTEROIDS, DecorativePlanet.INSTANCE.configure(new DecorativePlanetConfig( - Component.translatable(Translations.CelestialBody.ASTEROIDS), - Component.translatable(Translations.CelestialBody.ASTEROIDS_DESC), + Component.translatable(Translations.CelestialBody.ASTEROID), + Component.translatable(Translations.CelestialBody.ASTEROID_DESC), sol, OrbitalCelestialPositionType.INSTANCE.configure(new OrbitalCelestialPositionConfig(45.0F, 1.375F, 0.0F, true)), SpinningIconCelestialDisplayType.INSTANCE.configure(new IconCelestialDisplayConfig(Constant.id("textures/gui/celestialbodies/asteroid.png"), 0, 0, 16, 16)), diff --git a/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java b/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java index 8a2a48d03..a9f2b695c 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java +++ b/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java @@ -23,61 +23,90 @@ package dev.galacticraft.mod.content.item; import dev.galacticraft.mod.Constant; -import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin; -import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; +import dev.galacticraft.mod.content.CannedFoodTooltip; +import net.fabricmc.fabric.api.item.v1.FabricItemStack; import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; +import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.client.Minecraft; -import net.minecraft.core.Registry; -import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.NonNullList; import net.minecraft.core.registries.Registries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.Tag; +import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.stats.Stats; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.food.FoodProperties; -import net.minecraft.world.item.CreativeModeTabs; +import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Rarity; import net.minecraft.world.level.Level; -import net.minecraft.network.chat.Component; +import org.jetbrains.annotations.NotNull; -import java.awt.*; -import java.io.IOException; -import java.util.Collection; +import java.util.*; +import java.util.function.BiConsumer; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Collector; +import java.util.stream.Stream; -import static dev.galacticraft.mod.Constant.MOD_ID; +import static dev.galacticraft.mod.content.item.GCItems.CANNED_FOOD; +import static dev.galacticraft.mod.content.item.GCItems.EMPTY_CANNED_FOOD; -public class CannedFoodItem extends Item { - private final String name; - private final String displayName; - private final Item cannedItem; +public class CannedFoodItem extends Item implements FabricItemStack { private int color; + @Override - public ItemStack finishUsingItem(ItemStack itemStack, Level level, LivingEntity livingEntity) { - //COURTESY OF POTATO - super.finishUsingItem(itemStack, level, livingEntity); - if (itemStack.isEmpty()) { - return new ItemStack(GCItems.TIN_CANISTER); - } - - if (livingEntity instanceof Player player) { - if (!player.getAbilities().instabuild) { - ItemStack canStack = new ItemStack(GCItems.EMPTY_FOOD_CAN); - if (!player.getInventory().add(canStack)) { - player.drop(canStack, false); + public @NotNull ItemStack finishUsingItem(ItemStack itemStack, Level level, LivingEntity livingEntity) { + if (!level.isClientSide) + { + int consumingItems = getItemsToBeConsumed(itemStack); + assert itemStack.getTag() != null; + CompoundTag copyTag = itemStack.getTag().copy(); + super.finishUsingItem(itemStack, level, livingEntity); + if (livingEntity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, itemStack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + ItemStack can = new ItemStack(CANNED_FOOD); + can.setTag(copyTag.copy()); + for (int i = 0; i < consumingItems; i++) { + removeOne(can); + System.out.println("removed item"); + System.out.println(can.getTag()); + } + if (itemStack.isEmpty()) { + if (getContents(can).findAny().isEmpty()) + { + can = new ItemStack(EMPTY_CANNED_FOOD); + } + return can; + }else + { + if (livingEntity instanceof Player player) { + if (!player.getAbilities().instabuild) { + + if (getContents(can).findAny().isEmpty()) + { + can = new ItemStack(EMPTY_CANNED_FOOD); + } + if (!player.getInventory().add(can)) { + player.drop(can, false); + } + } } } } return itemStack; } - public CannedFoodItem(Properties settings, String name, String displayName, Item cannedItem) { + public CannedFoodItem(Properties settings) { super(settings); - this.name = name; - this.displayName = displayName; - this.cannedItem = cannedItem; this.color = 0; } @@ -87,40 +116,27 @@ public void onCraftedBy(ItemStack stack, Level world, Player player) { // Add functionality when the item is crafted (optional) } - public static CannedFoodItem newCan(Item cannedItem, String itemName, String displayName) + public static void registerCan(ItemStack cannedFoodType) { - Properties settings = new Item.Properties().food(cannedItem.getFoodProperties()).rarity(cannedItem.getDefaultInstance().getRarity()); - CannedFoodItem item = new CannedFoodItem(settings, itemName, displayName, cannedItem); - //registers the new item ingame - Registry.register(BuiltInRegistries.ITEM, new ResourceLocation(MOD_ID, itemName), item); - //sets the model of the item - ModelLoadingPlugin.register(pluginContext -> { - pluginContext.resolveModel().register(context -> { - if (Constant.id("item/" + itemName).equals(context.id())) - { - return context.getOrLoadModel(Constant.id("item/canned_food_template")); - } - return null; - }); - }); - //adds the item to the galacticraft cans creative tab ItemGroupEvents.modifyEntriesEvent(ResourceKey.create(Registries.CREATIVE_MODE_TAB, Constant.id(Constant.Item.ITEM_GROUP_CANS))).register(entries -> { - entries.accept(item.getDefaultInstance()); + ItemStack cannedFoodItem = CANNED_FOOD.getDefaultInstance(); + add(cannedFoodItem, cannedFoodType); + entries.accept(cannedFoodItem); }); - ColorProviderRegistry.ITEM.register((stack, tintIndex) -> { - return item.getColor(tintIndex); - },item); - return item; - } - - @Override - public Component getName(ItemStack stack) { - return Component.literal(this.displayName); } @Override - public boolean isFoil(ItemStack stack) { - return this.cannedItem.getDefaultInstance().hasFoil(); + public @NotNull Component getName(ItemStack stack) { + if (getContents(stack).findAny().isEmpty()) + { + return Component.literal("Empty Food Can"); + }else + { + String result = getContents(stack) + .map(CannedFoodItem::getItemDisplayName) + .collect(new TopNCollector<>(3)); + return Component.literal("Canned " + result); + } } public void setColor(int color) @@ -137,8 +153,208 @@ public int getColor(int layer) { } } - public Item getCannedItem() + @Override + public @NotNull Optional getTooltipImage(ItemStack stack) { - return this.cannedItem; + NonNullList nonNullList = NonNullList.create(); + Stream stream = getContents(stack); + Objects.requireNonNull(nonNullList); + stream.forEach(nonNullList::add); + return Optional.of(new CannedFoodTooltip(nonNullList)); + } + + public static Stream getContents(ItemStack stack) { + CompoundTag compoundTag = stack.getTag(); + if (compoundTag == null) { + return Stream.empty(); + } else { + ListTag listTag = compoundTag.getList("Items", 10); + Stream stream = listTag.stream(); + Objects.requireNonNull(CompoundTag.class); + return stream.map(CompoundTag.class::cast).map(ItemStack::of); + } + } + + public static boolean isCannedFoodItem(ItemStack stack) { + return stack.getItem() instanceof CannedFoodItem; + } + + private static void removeOne(ItemStack stack) { + CompoundTag compoundTag = stack.getOrCreateTag(); + if (compoundTag.contains("Items")) + { + ListTag listTag = compoundTag.getList("Items", 10); + if (!listTag.isEmpty()) + { + Tag tag = listTag.get(0); + if (tag instanceof CompoundTag tagCompound) { + ItemStack itemStack = ItemStack.of(tagCompound); + int itemCount = itemStack.getCount(); + if (itemCount != 1) + { + itemStack.shrink(1); + CompoundTag compoundNew = new CompoundTag(); + itemStack.save(compoundNew); + listTag.set(0, compoundNew); + }else + { + listTag.remove(0); + } + } + if (listTag.isEmpty()) { + stack.removeTagKey("Items"); + } + } + } + } + + private static void add(ItemStack cannedFood, ItemStack stack) { + if (!stack.isEmpty() && stack.getItem().canFitInsideContainerItems()) { + CompoundTag compoundTag = cannedFood.getOrCreateTag(); + if (!compoundTag.contains("Items")) { + compoundTag.put("Items", new ListTag()); + } + + //the max that the canned food item can hold + int k = Math.min(stack.getCount(), 16); + if (k != 0) + { + ListTag listTag = compoundTag.getList("Items", 10); + ItemStack itemStack2 = stack.copyWithCount(k); + CompoundTag compoundTag3 = new CompoundTag(); + itemStack2.save(compoundTag3); + listTag.add(0, compoundTag3); + } + } + } + + private static String getItemDisplayName(ItemStack itemStack) { + Component displayName = itemStack.getDisplayName(); + return stripControlCodes(displayName.getString()); + } + + private static String stripControlCodes(String input) { + return input.replaceAll("]", "").replaceAll("\\[", ""); + } + + public static class TopNCollector implements Collector, String> { + private final int n; + + public TopNCollector(int n) { + this.n = n; + } + + @Override + public Supplier> supplier() { + return ArrayList::new; + } + + @Override + public BiConsumer, T> accumulator() { + return (list, item) -> { + if (list.size() < n) { + list.add(item); + } else if (list.size() == n) { + list.add((T)"..."); + } + }; + } + + @Override + public BinaryOperator> combiner() { + return (list1, list2) -> { + list1.addAll(list2); + if (list1.size() > n) { + list1 = list1.subList(0, n); + list1.add((T) "..."); + } + return list1; + }; + } + + @Override + public Function, String> finisher() { + return list -> { + boolean greaterThanN = false; + if (list.size() > n) { + greaterThanN = true; + list.remove(3); + } + String string = String.join(", ", list.toArray(new String[0])); + if (greaterThanN) + { + string = string + "..."; + } + return string; + }; + } + + @Override + public Set characteristics() { + return new HashSet<>(); + } + } + + public static FoodProperties getCanFoodProperties(ItemStack stack) { + int playerHunger = 0; + if (Minecraft.getInstance().player != null) { + playerHunger = Minecraft.getInstance().player.getFoodData().getFoodLevel(); + } + int nutritionRequired = 20 - playerHunger; + int canNutrition = 0; + int canSaturation = 0; + if (nutritionRequired != 0) + { + Stream stream = getContents(stack); + for (ItemStack foodItem : stream.toList()) + { + int itemCount = foodItem.getCount(); + for (int i = 0; i < itemCount; i++) + { + canNutrition += Objects.requireNonNull(foodItem.getFoodComponent()).getNutrition(); + canSaturation += foodItem.getFoodComponent().getSaturationModifier(); + if (canNutrition >= nutritionRequired) + { + return new FoodProperties.Builder().nutrition(canNutrition).saturationMod(canSaturation).build(); + } + } + } + if (canNutrition == 0) + { + return null; + }else + { + return new FoodProperties.Builder().nutrition(canNutrition).saturationMod(canSaturation).build(); + } + } + return null; + } + + public static int getItemsToBeConsumed(ItemStack stack) { + int playerHunger = 0; + if (Minecraft.getInstance().player != null) { + playerHunger = Minecraft.getInstance().player.getFoodData().getFoodLevel(); + } + int nutritionRequired = 20 - playerHunger; + int canNutrition = 0; + int itemsToBeConsumed = 0; + if (nutritionRequired != 0) + { + Stream stream = getContents(stack); + for (ItemStack foodItem : stream.toList()) + { + int itemCount = foodItem.getCount(); + for (int i = 0; i < itemCount; i++) + { + itemsToBeConsumed += 1; + canNutrition += Objects.requireNonNull(foodItem.getFoodComponent()).getNutrition(); + if (canNutrition >= nutritionRequired) + { + return itemsToBeConsumed; + } + } + } + } + return itemsToBeConsumed; } } \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java index 58df96875..ac0c2d3d5 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java @@ -412,10 +412,10 @@ public class GCCreativeModeTabs { //Todo: fix up my bad programming to be translatable public static final CreativeModeTab CANNED_FOOD_GROUP = FabricItemGroup .builder() - .icon(() -> new ItemStack(EMPTY_FOOD_CAN)) + .icon(() -> new ItemStack(CANNED_FOOD)) .title(Component.literal("Galacticraft Cans")) .displayItems((parameters, output) -> { - output.accept(EMPTY_FOOD_CAN); + output.accept(EMPTY_CANNED_FOOD); }).build(); public static final CreativeModeTab MACHINES_GROUP = FabricItemGroup diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java index 4b048313c..15d6676dc 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java @@ -288,7 +288,6 @@ public class GCItems { public static final Item STEEL_POLE = new Item(new Item.Properties()); public static final Item COPPER_CANISTER = new Item(new Item.Properties()); public static final Item TIN_CANISTER = ITEMS.register(Constant.Item.TIN_CANISTER, new Item(new Item.Properties())); - public static final Item EMPTY_FOOD_CAN = ITEMS.register(Constant.Item.EMPTY_FOOD_CAN, new Item(new Item.Properties())); public static final Item THERMAL_CLOTH = new Item(new Item.Properties()); public static final Item ISOTHERMAL_FABRIC = new Item(new Item.Properties()); public static final Item ORION_DRIVE = new Item(new Item.Properties()); @@ -426,34 +425,14 @@ public class GCItems { public static final Item TIER_3_ROCKET_SCHEMATIC = new SchematicItem(new Item.Properties()); public static final Item ASTRO_MINER_SCHEMATIC = new SchematicItem(new Item.Properties()); + public static final CannedFoodItem CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(new FoodProperties.Builder().nutrition(20).saturationMod(1).build())); + public static final CannedFoodItem EMPTY_CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(null)); + public static void register() { // === START BLOCKS === - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.APPLE,"canned_dehydrated_apple", "Canned Dehydrated Apple")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.CARROT,"canned_dehydrated_carrot", "Canned Dehydrated Carrot")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.MELON_SLICE, "canned_dehydrated_melon", "Canned Dehydrated Melon")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.POTATO, "canned_dehydrated_potato", "Canned Dehydrated Potato")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan( GCItems.GROUND_BEEF,"canned_beef", "Canned Beef")); - //filler items for testing purposes - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.GOLDEN_APPLE,"canned_golden_apple", "Canned Golden Apple")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.ENCHANTED_GOLDEN_APPLE,"canned_enchanted_golden_apple", "Canned Enchanted Golden Apple")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.SPIDER_EYE,"canned_spider_eye", "Canned Spider Eye")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.PUFFERFISH,"canned_pufferfish", "Canned Pufferfish")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.CHORUS_FRUIT,"canned_chorus_fruit", "Canned Chorus Fruit")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.SWEET_BERRIES,"canned_sweet_berries", "Canned Sweet Berries")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.GLOW_BERRIES,"canned_glow_berries", "Canned Glow Berries")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.GOLDEN_CARROT,"canned_golden_carrot", "Canned Golden Carrot")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.BAKED_POTATO,"canned_baked_potato", "Canned Baked Potato")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.POISONOUS_POTATO,"canned_poisonous_potato", "Canned Poisonous Potato")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.DRIED_KELP,"canned_kelp", "Canned Kelp")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.COD,"canned_cod", "Canned Cod")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.SALMON,"canned_salmon", "Canned Salmon")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.TROPICAL_FISH,"canned_tropical_fish", "Canned Tropical Fish")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.BREAD,"canned_bread", "Canned Bread")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.COOKIE,"canned_cookie", "Canned Cookie")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.PUMPKIN_PIE,"canned_pumpkin_pie", "Canned Pumpkin Pie")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(Items.BEETROOT,"canned_beetroot", "Canned Beetroot")); - CANNED_FOOD_ITEMS.add(CannedFoodItem.newCan(GCItems.CHEESE_SLICE,"canned_cheese", "Canned Cheese")); + Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Item.EMPTY_CANNED_FOOD), EMPTY_CANNED_FOOD); + Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Item.CANNED_FOOD), CANNED_FOOD); // MOON NATURAL Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.MOON_TURF), MOON_TURF); diff --git a/src/main/java/dev/galacticraft/mod/mixin/client/ClientTooltipMixin.java b/src/main/java/dev/galacticraft/mod/mixin/client/ClientTooltipMixin.java new file mode 100644 index 000000000..ed1183f1b --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/mixin/client/ClientTooltipMixin.java @@ -0,0 +1,28 @@ +package dev.galacticraft.mod.mixin.client; + +import dev.galacticraft.mod.content.CannedFoodTooltip; +import dev.galacticraft.mod.content.ClientCannedFoodTooltip; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientBundleTooltip; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; +import net.minecraft.world.inventory.tooltip.BundleTooltip; +import net.minecraft.world.inventory.tooltip.TooltipComponent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +@Mixin(ClientTooltipComponent.class) +public interface ClientTooltipMixin { + /** + * @author me + * @reason to add exception for CannedFoodTooltip component + */ + @Overwrite + static ClientTooltipComponent create(TooltipComponent data) { + if (data instanceof BundleTooltip) { + return new ClientBundleTooltip((BundleTooltip)data); + } else if (data instanceof CannedFoodTooltip){ + return new ClientCannedFoodTooltip((CannedFoodTooltip)data); + } else { + throw new IllegalArgumentException("Unknown TooltipComponent"); + } + } +} diff --git a/src/main/java/dev/galacticraft/mod/mixin/client/FabricItemMixin.java b/src/main/java/dev/galacticraft/mod/mixin/client/FabricItemMixin.java new file mode 100644 index 000000000..0ada2b8c3 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/mixin/client/FabricItemMixin.java @@ -0,0 +1,30 @@ +package dev.galacticraft.mod.mixin.client; + +import net.fabricmc.fabric.api.item.v1.FabricItem; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import static dev.galacticraft.mod.content.item.CannedFoodItem.getCanFoodProperties; +import static dev.galacticraft.mod.content.item.CannedFoodItem.isCannedFoodItem; + +@Mixin(FabricItem.class) +public interface FabricItemMixin { + /** + * @author me + * @reason allows canned food to be eaten with different amounts of nutrition for each item + */ + @Overwrite + default @Nullable FoodProperties getFoodComponent(ItemStack stack) { + if (isCannedFoodItem(stack)) + { + return getCanFoodProperties(stack); + }else + { + return ((Item) this).getFoodProperties(); + } + } +} diff --git a/src/main/resources/galacticraft.mixins.json b/src/main/resources/galacticraft.mixins.json index 66514a244..d9ecfe67e 100644 --- a/src/main/resources/galacticraft.mixins.json +++ b/src/main/resources/galacticraft.mixins.json @@ -28,6 +28,8 @@ "client.ClientPacketListenerMixin" ], "client": [ + "client.ClientTooltipMixin", + "client.FabricItemMixin", "client.AbstractClientPlayerMixin", "client.AlphaWarningTitleScreenMixin", "client.AnimalModelAgeableListModel", From af5ca3b8ba1e1840796363a277a6b33acfa833e4 Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Wed, 26 Jun 2024 23:11:54 +1000 Subject: [PATCH 07/23] canned food complete canned food items completed - added total nutrition - fixed whitespace - added appleskin integration for canned food Todo - create canning machine to make canned food accessible in survival --- build.gradle.kts | 7 +++ gradle.properties | 1 + .../mod/compat/AppleSkinEventHandler.java | 27 ++++++++++++ .../mod/content/item/CannedFoodItem.java | 44 ++++++++++++++++--- .../mod/content/item/GCItems.java | 2 +- src/main/resources/fabric.mod.json | 3 ++ 6 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 src/main/java/dev/galacticraft/mod/compat/AppleSkinEventHandler.java diff --git a/build.gradle.kts b/build.gradle.kts index 74c43863e..d831e2766 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -47,6 +47,7 @@ val jeiVersion = project.property("jei.version").toString() val badpacketsVersion = project.property("badpackets.version").toString() val wthitVersion = project.property("wthit.version").toString() val architecturyVersion = project.property("architectury.version").toString() +val appleskinVersion = project.property("appleskin.version").toString() val objVersion = project.property("obj.version").toString() plugins { @@ -191,6 +192,11 @@ repositories { includeGroup("mezz.jei") } } + maven("https://maven.ryanliptak.com/") { + content { + includeGroup("squeek.appleskin") + } + } } configurations { @@ -230,6 +236,7 @@ dependencies { "compat"("me.shedaniel.cloth:cloth-config-fabric:$clothConfigVersion") "compat"("mcp.mobius.waila:wthit:fabric-$wthitVersion") "compat"("dev.architectury:architectury-fabric:$architecturyVersion") // required for REI fluid support + "compat"("squeek.appleskin:appleskin-fabric:$appleskinVersion") multicompat(group = "me.shedaniel", api = "RoughlyEnoughItems-api-fabric", diff --git a/gradle.properties b/gradle.properties index c9b2bb6fc..7449f8f45 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,3 +23,4 @@ badpackets.version=0.6.1 wthit.version=10.4.0 obj.version=0.4.0 architectury.version=11.1.17 +appleskin.version=mc1.20.3-2.5.1 \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/compat/AppleSkinEventHandler.java b/src/main/java/dev/galacticraft/mod/compat/AppleSkinEventHandler.java new file mode 100644 index 000000000..c71cbdf0c --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/compat/AppleSkinEventHandler.java @@ -0,0 +1,27 @@ +package dev.galacticraft.mod.compat; + +import net.minecraft.world.food.FoodProperties; +import squeek.appleskin.api.AppleSkinApi; +import squeek.appleskin.api.event.FoodValuesEvent; +import squeek.appleskin.api.food.FoodValues; + +import static dev.galacticraft.mod.content.item.CannedFoodItem.getCanFoodProperties; +import static dev.galacticraft.mod.content.item.CannedFoodItem.isCannedFoodItem; + +public class AppleSkinEventHandler implements AppleSkinApi +{ + + @Override + public void registerEvents() { + FoodValuesEvent.EVENT.register(foodValuesEvent -> { + if (isCannedFoodItem(foodValuesEvent.itemStack)) + { + FoodProperties foodProperties = getCanFoodProperties(foodValuesEvent.itemStack); + if (foodProperties != null) + { + foodValuesEvent.modifiedFoodValues = new FoodValues(foodProperties.getNutrition(), foodProperties.getSaturationModifier()); + } + } + }); + } +} diff --git a/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java b/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java index a9f2b695c..6e2c9e0d7 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java +++ b/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java @@ -26,6 +26,7 @@ import dev.galacticraft.mod.content.CannedFoodTooltip; import net.fabricmc.fabric.api.item.v1.FabricItemStack; import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; +import net.minecraft.ChatFormatting; import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.client.Minecraft; import net.minecraft.core.NonNullList; @@ -43,10 +44,14 @@ import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.awt.*; import java.util.*; +import java.util.List; import java.util.function.BiConsumer; import java.util.function.BinaryOperator; import java.util.function.Function; @@ -156,11 +161,24 @@ public int getColor(int layer) { @Override public @NotNull Optional getTooltipImage(ItemStack stack) { - NonNullList nonNullList = NonNullList.create(); - Stream stream = getContents(stack); - Objects.requireNonNull(nonNullList); - stream.forEach(nonNullList::add); - return Optional.of(new CannedFoodTooltip(nonNullList)); + if (getContents(stack).findAny().isPresent()) + { + NonNullList nonNullList = NonNullList.create(); + Stream stream = getContents(stack); + Objects.requireNonNull(nonNullList); + stream.forEach(nonNullList::add); + return Optional.of(new CannedFoodTooltip(nonNullList)); + }else + { + return Optional.empty(); + } + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level world, List tooltip, TooltipFlag context) { + if (getContents(stack).findAny().isPresent()) { + tooltip.add(Component.literal("Total Nutrition: " + getTotalNutrition(stack)).withColor(ChatFormatting.DARK_GRAY.getColor())); + } } public static Stream getContents(ItemStack stack) { @@ -302,7 +320,7 @@ public static FoodProperties getCanFoodProperties(ItemStack stack) { } int nutritionRequired = 20 - playerHunger; int canNutrition = 0; - int canSaturation = 0; + float canSaturation = 0f; if (nutritionRequired != 0) { Stream stream = getContents(stack); @@ -330,6 +348,20 @@ public static FoodProperties getCanFoodProperties(ItemStack stack) { return null; } + public static int getTotalNutrition(ItemStack stack) { + int canNutrition = 0; + Stream stream = getContents(stack); + for (ItemStack foodItem : stream.toList()) + { + int itemCount = foodItem.getCount(); + for (int i = 0; i < itemCount; i++) + { + canNutrition += Objects.requireNonNull(foodItem.getFoodComponent()).getNutrition(); + } + } + return canNutrition; + } + public static int getItemsToBeConsumed(ItemStack stack) { int playerHunger = 0; if (Minecraft.getInstance().player != null) { diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java index 15d6676dc..79c677549 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java @@ -425,7 +425,7 @@ public class GCItems { public static final Item TIER_3_ROCKET_SCHEMATIC = new SchematicItem(new Item.Properties()); public static final Item ASTRO_MINER_SCHEMATIC = new SchematicItem(new Item.Properties()); - public static final CannedFoodItem CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(new FoodProperties.Builder().nutrition(20).saturationMod(1).build())); + public static final CannedFoodItem CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(new FoodProperties.Builder().nutrition(0).saturationMod(0).build())); public static final CannedFoodItem EMPTY_CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(null)); diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index eee30c83b..e5c6f4b7d 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -139,6 +139,9 @@ ], "jei_mod_plugin": [ "dev.galacticraft.mod.compat.jei.GCJEIPlugin" + ], + "appleskin": [ + "dev.galacticraft.mod.compat.AppleSkinEventHandler" ] }, "mixins": [ From 55ad014b4cfc512406b2af2eb9704212e21734ba Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Thu, 11 Jul 2024 02:46:34 +1000 Subject: [PATCH 08/23] Fully finished food canner food canner fully implemented and works completely. also put licencensing on all new files i have created --- .../galacticraft/blockstates/food_canner.json | 7 + .../assets/galacticraft/lang/en_us.json | 6 + .../galacticraft/models/item/food_canner.json | 3 + .../generated/data/c/tags/items/foods.json | 12 + .../recipes/misc/food_canner.json | 35 + .../loot_tables/blocks/food_canner.json | 20 + .../galacticraft/recipes/food_canner.json | 26 + .../galacticraft/tags/blocks/machines.json | 1 + .../galacticraft/api/perlin/FishyNoise.java | 22 + .../galacticraft/api/perlin/NoiseModule.java | 22 + .../galacticraft/api/perlin/SimplexNoise.java | 22 + .../api/perlin/generator/Billowed.java | 22 + .../api/perlin/generator/Gradient.java | 22 + .../api/perlin/generator/RidgedMulti.java | 22 + .../galacticraft/api/vector/BlockVec3.java | 22 + .../impl/internal/fabric/GalacticraftAPI.java | 12 +- .../java/dev/galacticraft/mod/Constant.java | 3 + .../galacticraft/mod/GalacticraftClient.java | 1 + .../galacticraft/mod/api/config/Config.java | 1 + .../gui/screen/ingame/FoodCannerScreen.java | 201 +++++ .../mod/compat/AppleSkinEventHandler.java | 22 + .../galacticraft/mod/config/ConfigImpl.java | 21 + .../mod/content/CannedFoodTooltip.java | 22 + .../mod/content/ClientCannedFoodTooltip.java | 22 + .../mod/content/GCBlockEntityTypes.java | 2 + .../galacticraft/mod/content/GCBlocks.java | 1 + .../mod/content/GCChunkGenerator.java | 22 + .../mod/content/GCChunkGeneratorRegistry.java | 22 + .../mod/content/GCMachineTypes.java | 79 ++ .../entity/machine/FoodCannerBlockEntity.java | 738 ++++++++++++++++++ .../block/special/AirlockSealBlock.java | 22 + .../mod/content/entity/SmallAsteroid.java | 22 + .../mod/content/item/CannedFoodItem.java | 78 +- .../mod/content/item/GCCreativeModeTabs.java | 2 + .../mod/content/item/GCItems.java | 6 +- .../mod/data/GCBlockLootTableProvider.java | 1 + .../mod/data/GCTranslationProvider.java | 1 + .../mod/data/model/GCModelProvider.java | 1 + .../mod/data/recipes/GCMachineRecipes.java | 11 + .../mod/data/tag/GCBlockTagProvider.java | 1 + .../mod/data/tag/GCItemTagProvider.java | 12 + .../mod/lookup/GCApiLookupProviders.java | 1 + .../mod/machine/GCMachineStatuses.java | 4 + .../mod/mixin/client/ClientTooltipMixin.java | 26 +- .../mod/mixin/client/FabricItemMixin.java | 27 +- .../mod/screen/FoodCannerMenu.java | 98 +++ .../galacticraft/mod/screen/GCMenuTypes.java | 2 + .../galacticraft/mod/util/TextureUtils.java | 22 + .../galacticraft/mod/util/Translations.java | 5 + .../gen/custom/AsteroidChunkGenerator.java | 22 + .../world/gen/custom/AsteroidSaveData.java | 22 + .../gen/custom/SpecialAsteroidBlock.java | 22 + .../custom/SpecialAsteroidBlockHandler.java | 22 + .../models/machine/food_canner.json | 8 + .../gui/circuit_fabricator_screen.png | Bin 1485 -> 1725 bytes .../textures/gui/food_canner_screen.png | Bin 0 -> 2608 bytes 56 files changed, 1852 insertions(+), 19 deletions(-) create mode 100644 src/main/generated/assets/galacticraft/blockstates/food_canner.json create mode 100644 src/main/generated/assets/galacticraft/models/item/food_canner.json create mode 100644 src/main/generated/data/c/tags/items/foods.json create mode 100644 src/main/generated/data/galacticraft/advancements/recipes/misc/food_canner.json create mode 100644 src/main/generated/data/galacticraft/loot_tables/blocks/food_canner.json create mode 100644 src/main/generated/data/galacticraft/recipes/food_canner.json create mode 100644 src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/FoodCannerScreen.java create mode 100644 src/main/java/dev/galacticraft/mod/content/block/entity/machine/FoodCannerBlockEntity.java create mode 100644 src/main/java/dev/galacticraft/mod/screen/FoodCannerMenu.java create mode 100644 src/main/resources/assets/galacticraft/models/machine/food_canner.json create mode 100644 src/main/resources/assets/galacticraft/textures/gui/food_canner_screen.png diff --git a/src/main/generated/assets/galacticraft/blockstates/food_canner.json b/src/main/generated/assets/galacticraft/blockstates/food_canner.json new file mode 100644 index 000000000..695c92fb0 --- /dev/null +++ b/src/main/generated/assets/galacticraft/blockstates/food_canner.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "galacticraft:machine/food_canner" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/lang/en_us.json b/src/main/generated/assets/galacticraft/lang/en_us.json index 9cdb97afa..2ccb5b38c 100644 --- a/src/main/generated/assets/galacticraft/lang/en_us.json +++ b/src/main/generated/assets/galacticraft/lang/en_us.json @@ -193,6 +193,7 @@ "block.galacticraft.oxygen_collector": "Oxygen Collector", "block.galacticraft.oxygen_collector.description": "Oxygen Collector will store oxygen collected from leaves in the surrounding area.", "block.galacticraft.oxygen_compressor": "Oxygen Compressor", + "block.galacticraft.food_canner": "Food Canner", "block.galacticraft.oxygen_decompressor": "Oxygen Decompressor", "block.galacticraft.oxygen_sealer": "Oxygen Sealer", "block.galacticraft.oxygen_storage_module": "Oxygen Storage Module", @@ -278,6 +279,7 @@ "config.galacticraft.energy.machines.energy_storage_size": "Default Machine Energy Storage Size", "config.galacticraft.energy.machines.oxygen_collector_energy_consumption_rate": "Oxygen Collector Energy Consumption Rate/t", "config.galacticraft.energy.machines.oxygen_compressor_energy_consumption_rate": "Oxygen Compressor Energy Consumption Rate/t", + "config.galacticraft.energy.machines.food_canner_energy_consumption_rate": "Food Canner Energy Consumption Rate/t", "config.galacticraft.energy.machines.oxygen_decompressor_energy_consumption_rate": "Oxygen Decompressor Energy Consumption Rate/t", "config.galacticraft.energy.machines.refinery_energy_consumption_rate": "Refinery Energy Consumption Rate/t", "config.galacticraft.energy.machines.solar_panel_energy_production_rate": "Solar Panel Energy Production Rate/t", @@ -612,6 +614,10 @@ "ui.galacticraft.status.already_sealed": "Already Sealed", "ui.galacticraft.status.area_too_large": "Area Too Large", "ui.galacticraft.status.blocked": "Blocked", + "ui.galacticraft.status.missing_empty_can": "Missing Empty Can", + "ui.galacticraft.status.canning": "Canning", + "ui.galacticraft.status.no_food": "No Food", + "ui.galacticraft.status.transferring_can": "Transferring Can", "ui.galacticraft.status.collecting": "Collecting", "ui.galacticraft.status.compressing": "Compressing", "ui.galacticraft.status.cooling_down": "Cooling Down", diff --git a/src/main/generated/assets/galacticraft/models/item/food_canner.json b/src/main/generated/assets/galacticraft/models/item/food_canner.json new file mode 100644 index 000000000..e5bea2f4e --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/food_canner.json @@ -0,0 +1,3 @@ +{ + "parent": "galacticraft:block/food_canner" +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/items/foods.json b/src/main/generated/data/c/tags/items/foods.json new file mode 100644 index 000000000..369b2897e --- /dev/null +++ b/src/main/generated/data/c/tags/items/foods.json @@ -0,0 +1,12 @@ +{ + "replace": false, + "values": [ + "galacticraft:moon_berry_bush", + "galacticraft:cheese_curd", + "galacticraft:cheese_slice", + "galacticraft:burger_bun", + "galacticraft:ground_beef", + "galacticraft:beef_patty", + "galacticraft:cheeseburger" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/advancements/recipes/misc/food_canner.json b/src/main/generated/data/galacticraft/advancements/recipes/misc/food_canner.json new file mode 100644 index 000000000..7ab970298 --- /dev/null +++ b/src/main/generated/data/galacticraft/advancements/recipes/misc/food_canner.json @@ -0,0 +1,35 @@ +{ + //TODO come back to this and change recipe requirements + "parent": "minecraft:recipes/root", + "criteria": { + "has_oxygen_concentrator": { + "conditions": { + "items": [ + { + "items": [ + "galacticraft:oxygen_concentrator" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "galacticraft:food_canner" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_oxygen_concentrator" + ] + ], + "rewards": { + "recipes": [ + "galacticraft:food_canner" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/food_canner.json b/src/main/generated/data/galacticraft/loot_tables/blocks/food_canner.json new file mode 100644 index 000000000..16dfecdee --- /dev/null +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/food_canner.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "galacticraft:food_canner" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/recipes/food_canner.json b/src/main/generated/data/galacticraft/recipes/food_canner.json new file mode 100644 index 000000000..9010619e4 --- /dev/null +++ b/src/main/generated/data/galacticraft/recipes/food_canner.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": { + "item": "galacticraft:compressed_aluminum" + }, + "B": { + "item": "galacticraft:compressed_bronze" + }, + "C": { + "item": "galacticraft:oxygen_concentrator" + }, + "S": { + "item": "galacticraft:compressed_steel" + } + }, + "pattern": [ + "SAS", + "ACA", + "SBS" + ], + "result": { + "item": "galacticraft:food_canner" + } +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/tags/blocks/machines.json b/src/main/generated/data/galacticraft/tags/blocks/machines.json index 8526b455b..111b488c9 100644 --- a/src/main/generated/data/galacticraft/tags/blocks/machines.json +++ b/src/main/generated/data/galacticraft/tags/blocks/machines.json @@ -16,6 +16,7 @@ "galacticraft:oxygen_bubble_distributor", "galacticraft:oxygen_decompressor", "galacticraft:oxygen_compressor", + "galacticraft:food_canner", "galacticraft:oxygen_storage_module", "galacticraft:fuel_loader" ] diff --git a/src/main/java/dev/galacticraft/api/perlin/FishyNoise.java b/src/main/java/dev/galacticraft/api/perlin/FishyNoise.java index 5daaa8b33..d2d109aac 100644 --- a/src/main/java/dev/galacticraft/api/perlin/FishyNoise.java +++ b/src/main/java/dev/galacticraft/api/perlin/FishyNoise.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.api.perlin; import java.util.Random; diff --git a/src/main/java/dev/galacticraft/api/perlin/NoiseModule.java b/src/main/java/dev/galacticraft/api/perlin/NoiseModule.java index 3d44ac82f..fafaa8e1c 100644 --- a/src/main/java/dev/galacticraft/api/perlin/NoiseModule.java +++ b/src/main/java/dev/galacticraft/api/perlin/NoiseModule.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.api.perlin; public abstract class NoiseModule diff --git a/src/main/java/dev/galacticraft/api/perlin/SimplexNoise.java b/src/main/java/dev/galacticraft/api/perlin/SimplexNoise.java index e83152c00..4a10482e3 100644 --- a/src/main/java/dev/galacticraft/api/perlin/SimplexNoise.java +++ b/src/main/java/dev/galacticraft/api/perlin/SimplexNoise.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.api.perlin; import java.util.Random; diff --git a/src/main/java/dev/galacticraft/api/perlin/generator/Billowed.java b/src/main/java/dev/galacticraft/api/perlin/generator/Billowed.java index 293ce2fde..0e4090c09 100644 --- a/src/main/java/dev/galacticraft/api/perlin/generator/Billowed.java +++ b/src/main/java/dev/galacticraft/api/perlin/generator/Billowed.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.api.perlin.generator; import dev.galacticraft.api.perlin.FishyNoise; diff --git a/src/main/java/dev/galacticraft/api/perlin/generator/Gradient.java b/src/main/java/dev/galacticraft/api/perlin/generator/Gradient.java index ac950205a..011fe4f65 100644 --- a/src/main/java/dev/galacticraft/api/perlin/generator/Gradient.java +++ b/src/main/java/dev/galacticraft/api/perlin/generator/Gradient.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.api.perlin.generator; import dev.galacticraft.api.perlin.FishyNoise; diff --git a/src/main/java/dev/galacticraft/api/perlin/generator/RidgedMulti.java b/src/main/java/dev/galacticraft/api/perlin/generator/RidgedMulti.java index 8ac7c88dd..8527ed426 100644 --- a/src/main/java/dev/galacticraft/api/perlin/generator/RidgedMulti.java +++ b/src/main/java/dev/galacticraft/api/perlin/generator/RidgedMulti.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.api.perlin.generator; import dev.galacticraft.api.perlin.FishyNoise; diff --git a/src/main/java/dev/galacticraft/api/vector/BlockVec3.java b/src/main/java/dev/galacticraft/api/vector/BlockVec3.java index 9af254139..7d3d637c8 100644 --- a/src/main/java/dev/galacticraft/api/vector/BlockVec3.java +++ b/src/main/java/dev/galacticraft/api/vector/BlockVec3.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.api.vector; import dev.galacticraft.mod.world.dimension.GCDimensions; import net.minecraft.CrashReport; diff --git a/src/main/java/dev/galacticraft/impl/internal/fabric/GalacticraftAPI.java b/src/main/java/dev/galacticraft/impl/internal/fabric/GalacticraftAPI.java index 3b213f83f..a4e6fbeb6 100644 --- a/src/main/java/dev/galacticraft/impl/internal/fabric/GalacticraftAPI.java +++ b/src/main/java/dev/galacticraft/impl/internal/fabric/GalacticraftAPI.java @@ -43,6 +43,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.SimpleContainer; import net.minecraft.world.level.Level; +import net.minecraft.world.level.storage.LevelResource; import net.minecraft.world.level.storage.LevelStorageSource; import org.jetbrains.annotations.ApiStatus; @@ -98,7 +99,14 @@ private void onServerStarted(MinecraftServer server) { } private void updateWorldSaveDirectory(MinecraftServer server) { - currentWorldSaveDirectory = Path.of(Minecraft.getInstance().getLevelSource().getBaseDir().toString(), server.getWorldData().getLevelName()); - System.out.println("World Save Directory: " + currentWorldSaveDirectory.toString()); + // Get the main (overworld) level from the server + ServerLevel overworld = server.getLevel(net.minecraft.world.level.Level.OVERWORLD); + + if (overworld != null) { + currentWorldSaveDirectory = overworld.getServer().getWorldPath(LevelResource.ROOT); + System.out.println("World Save Directory: " + currentWorldSaveDirectory.toString()); + } else { + System.err.println("Error: Overworld level is null"); + } } } diff --git a/src/main/java/dev/galacticraft/mod/Constant.java b/src/main/java/dev/galacticraft/mod/Constant.java index f8683f0ef..0176b62e1 100644 --- a/src/main/java/dev/galacticraft/mod/Constant.java +++ b/src/main/java/dev/galacticraft/mod/Constant.java @@ -226,6 +226,7 @@ interface Block { String OXYGEN_BUBBLE_DISTRIBUTOR = "oxygen_bubble_distributor"; String OXYGEN_COLLECTOR = "oxygen_collector"; String OXYGEN_COMPRESSOR = "oxygen_compressor"; + String FOOD_CANNER = "food_canner"; String OXYGEN_DECOMPRESSOR = "oxygen_decompressor"; String OXYGEN_DETECTOR = "oxygen_detector"; String OXYGEN_SEALER = "oxygen_sealer"; @@ -518,6 +519,7 @@ interface ScreenTexture { ResourceLocation PLANET_ICONS = id("textures/gui/planet_icons.png"); ResourceLocation BUBBLE_DISTRIBUTOR_SCREEN = id("textures/gui/oxygen_bubble_distributor_screen.png"); ResourceLocation OXYGEN_COMPRESSOR_SCREEN = id("textures/gui/oxygen_compressor_screen.png"); + ResourceLocation FOOD_CANNER_SCREEN = id("textures/gui/food_canner_screen.png"); ResourceLocation OXYGEN_STORAGE_MODULE_SCREEN = id("textures/gui/oxygen_storage_module_screen.png"); ResourceLocation OXYGEN_SEALER_SCREEN = id("textures/gui/oxygen_sealer_screen.png"); ResourceLocation FUEL_LOADER_SCREEN = id("textures/gui/fuel_loader_screen.png"); @@ -638,6 +640,7 @@ interface Menu { String OXYGEN_COLLECTOR_MENU = "oxygen_collector_menu"; String BUBBLE_DISTRIBUTOR_MENU = "bubble_distributor_menu"; String OXYGEN_COMPRESSOR_MENU = "oxygen_compressor_menu"; + String FOOD_CANNER_MENU = "food_canner_menu"; String OXYGEN_DECOMPRESSOR_MENU = "oxygen_decompressor_menu"; String OXYGEN_STORAGE_MODULE_MENU = "oxygen_storage_module_menu"; String OXYGEN_SEALER_MENU = "oxygen_sealer_menu"; diff --git a/src/main/java/dev/galacticraft/mod/GalacticraftClient.java b/src/main/java/dev/galacticraft/mod/GalacticraftClient.java index 1b956c5e1..941090d6a 100644 --- a/src/main/java/dev/galacticraft/mod/GalacticraftClient.java +++ b/src/main/java/dev/galacticraft/mod/GalacticraftClient.java @@ -116,6 +116,7 @@ public void onInitializeClient() { MenuScreens.register(GCMenuTypes.ENERGY_STORAGE_MODULE, EnergyStorageModuleScreen::new); MenuScreens.register(GCMenuTypes.OXYGEN_COLLECTOR, OxygenCollectorScreen::new); MenuScreens.register(GCMenuTypes.OXYGEN_COMPRESSOR, OxygenCompressorScreen::new); + MenuScreens.register(GCMenuTypes.FOOD_CANNER, FoodCannerScreen::new); MenuScreens.register(GCMenuTypes.OXYGEN_DECOMPRESSOR, OxygenDecompressorScreen::new); MenuScreens.register(GCMenuTypes.PLAYER_INV_GC, GCPlayerInventoryScreen::new); MenuScreens.register(GCMenuTypes.OXYGEN_BUBBLE_DISTRIBUTOR, OxygenBubbleDistributorScreen::new); diff --git a/src/main/java/dev/galacticraft/mod/api/config/Config.java b/src/main/java/dev/galacticraft/mod/api/config/Config.java index 6b5728278..5c70bad59 100644 --- a/src/main/java/dev/galacticraft/mod/api/config/Config.java +++ b/src/main/java/dev/galacticraft/mod/api/config/Config.java @@ -52,6 +52,7 @@ public interface Config { long machineEnergyStorageSize(); long oxygenCompressorEnergyConsumptionRate(); + long foodCannerEnergyConsumptionRate(); long oxygenDecompressorEnergyConsumptionRate(); diff --git a/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/FoodCannerScreen.java b/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/FoodCannerScreen.java new file mode 100644 index 000000000..6acfef48c --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/FoodCannerScreen.java @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package dev.galacticraft.mod.client.gui.screen.ingame; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import dev.galacticraft.machinelib.api.menu.MachineMenu; +import dev.galacticraft.machinelib.api.menu.sync.MenuSyncHandler; +import dev.galacticraft.machinelib.client.api.screen.MachineScreen; +import dev.galacticraft.mod.Constant; +import dev.galacticraft.mod.content.block.entity.machine.FoodCannerBlockEntity; +import dev.galacticraft.mod.machine.GCMachineStatuses; +import dev.galacticraft.mod.screen.FoodCannerMenu; +import dev.galacticraft.mod.util.DrawableUtil; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Inventory; +import org.jetbrains.annotations.MustBeInvokedByOverriders; + +import java.util.function.Consumer; + +@Environment(EnvType.CLIENT) +public class FoodCannerScreen extends MachineScreen { + public FoodCannerScreen(FoodCannerMenu handler, Inventory inv, Component title) { + super(handler, title, Constant.ScreenTexture.FOOD_CANNER_SCREEN); + this.imageHeight = 171; + this.capacitorX = 8; + this.capacitorY = 13; + this.titleLabelY = 4; + } + + private void drawProgressBar(PoseStack matrices) { + if (this.menu.state.isActive()) { + int progress = this.menu.getProgress(); + if (inBounds(progress, 1, 9)) + { + //transferring can + draw(68, 30, 36, 189, 4, progress, matrices); + } + if (this.menu.getFirstRowConsumed() == 1) + { + if (inBounds(progress, 10, 36)) + { + if (inBounds(progress, 10, 17)) + { + draw(97, 19, 65, 178, 9 - progress, 4, matrices); + } + if (progress > 17) + { + draw(89, 19, 57, 178, 8, 4, matrices); + } + if (inBounds(progress, 18, 19)) + { + draw(89, 19, 57, 178, 17 - progress, 3, matrices); + } + if (progress > 19) + { + draw(86, 19, 54, 178, 3, 3, matrices); + } + if (inBounds(progress, 20, 36)) + { + draw(86, 22, 54, 181, 4, progress - 19, matrices); + } + } + if (inBounds(progress, 37, 106)) + { + draw(86, 19, 54, 178, 11, 20, matrices); + } + } + if (this.menu.getSecondRowConsumed() == 1) + { + if (inBounds(progress, 37, 44)) + { + draw(97, 39, 65, 198, 36 - progress, 2, matrices); + } + if (inBounds(progress, 45, 106)) + { + draw(89, 39, 57, 198, 8, 2, matrices); + } + } + if (this.menu.getThirdRowConsumed() == 1) + { + if (inBounds(progress, 79, 86)) + { + draw(97, 57, 65, 216, 78 - progress, 2, matrices); + } + if (inBounds(progress, 87, 106)) + { + draw(89, 57, 57, 216, 8, 2, matrices); + } + if (inBounds(progress, 87, 96)) + { + draw(87, 59, 55, 218, 2, 86 - progress, matrices); + } + if (inBounds(progress, 97, 106)) + { + draw(87, 59, 55, 218, 2, -10, matrices); + } + } + if (this.menu.getForthRowConsumed() == 1) + { + if (inBounds(progress, 53, 62)) + { + draw(97, 75, 65, 234, 52 - progress, 2, matrices); + } + if (inBounds(progress, 63, 106)) + { + draw(87, 75, 55, 234, 10, 2, matrices); + } + if (inBounds(progress, 63, 78)) + { + draw(87, 75, 55, 234, 2, 62 - progress, matrices); + } + if (inBounds(progress, 79, 106)) + { + draw(87, 75, 55, 234, 2, -16, matrices); + } + if (inBounds(progress, 87, 96)) + { + draw(87, 59, 55, 218, 2, 86 - progress, matrices); + } + if (inBounds(progress, 97, 106)) + { + draw(87, 59, 55, 218, 2, -10, matrices); + } + } + if (inBounds(progress, 45, 52)) + { + draw(87, 39, 55, 198, 2, progress - 44, matrices); + } + if (this.menu.getFirstRowConsumed() == 1 || this.menu.getSecondRowConsumed() == 1) + { + if (inBounds(progress, 52, 106)) + { + draw(87, 39, 55, 198, 2, 8, matrices); + } + } + if (inBounds(progress, 97, 106)) + { + draw(89, 47, 57, 206, 96 - progress, 2, matrices); + } + if (progress > 106) + { + //transferring full can + draw(68, 57, 36, 216, 4, progress - 106 ,matrices); + } + } + } + @Override + protected void renderMachineBackground(GuiGraphics graphics, int mouseX, int mouseY, float delta) { + super.renderMachineBackground(graphics, mouseX, mouseY, delta); + this.drawProgressBar(graphics.pose()); + } + + private boolean inBounds(int value, int min, int max) + { + return (value >= min && value <= max); + } + + private void draw(int x, int y, int drawX, int drawY, int width, int height, PoseStack matrices) + { + if (width < 0) + { + if (height < 0) + { + DrawableUtil.drawProgressTexture(matrices, this.leftPos + x + width, this.topPos + y + height, drawX + width, drawY + height, -width, -height); + }else + { + DrawableUtil.drawProgressTexture(matrices, this.leftPos + x + width, this.topPos + y, drawX + width, drawY, -width, height); + } + } else if (height < 0) + { + DrawableUtil.drawProgressTexture(matrices, this.leftPos + x, this.topPos + y + height, drawX, drawY + height, width, -height); + }else + { + DrawableUtil.drawProgressTexture(matrices, this.leftPos + x, this.topPos + y, drawX, drawY, width, height); + } + } +} diff --git a/src/main/java/dev/galacticraft/mod/compat/AppleSkinEventHandler.java b/src/main/java/dev/galacticraft/mod/compat/AppleSkinEventHandler.java index c71cbdf0c..12ac89939 100644 --- a/src/main/java/dev/galacticraft/mod/compat/AppleSkinEventHandler.java +++ b/src/main/java/dev/galacticraft/mod/compat/AppleSkinEventHandler.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.compat; import net.minecraft.world.food.FoodProperties; diff --git a/src/main/java/dev/galacticraft/mod/config/ConfigImpl.java b/src/main/java/dev/galacticraft/mod/config/ConfigImpl.java index 63c1d24ff..7903c52a2 100644 --- a/src/main/java/dev/galacticraft/mod/config/ConfigImpl.java +++ b/src/main/java/dev/galacticraft/mod/config/ConfigImpl.java @@ -56,6 +56,7 @@ public class ConfigImpl implements Config { private long electricCompressorEnergyConsumptionRate = Constant.Energy.T2_MACHINE_ENERGY_USAGE; private long electricArcFurnaceEnergyConsumptionRate = Constant.Energy.T2_MACHINE_ENERGY_USAGE; private long oxygenCollectorEnergyConsumptionRate = Constant.Energy.T1_MACHINE_ENERGY_USAGE; + private long foodCannerEnergyConsumptionRate = Constant.Energy.T1_MACHINE_ENERGY_USAGE; private long refineryEnergyConsumptionRate = Constant.Energy.T2_MACHINE_ENERGY_USAGE; private long electricFurnaceEnergyConsumptionRate = Constant.Energy.T2_MACHINE_ENERGY_USAGE; private long energyStorageModuleStorageSize = 300_000; @@ -209,10 +210,20 @@ public long oxygenCompressorEnergyConsumptionRate() { return oxygenCompressorEnergyConsumptionRate; } + public void setOxygenCompressorEnergyConsumptionRate(long amount) { this.oxygenCompressorEnergyConsumptionRate = amount; } + @Override + public long foodCannerEnergyConsumptionRate() { + return foodCannerEnergyConsumptionRate; + } + + public void setFoodCannerEnergyConsumptionRate(long amount) { + this.foodCannerEnergyConsumptionRate = amount; + } + @Override public long oxygenDecompressorEnergyConsumptionRate() { return oxygenDecompressorEnergyConsumptionRate; @@ -422,6 +433,16 @@ public Screen create(Screen parent) { .build() ); + machines.add(new LongFieldBuilder( + Component.translatable(Translations.Config.RESET), + Component.translatable(Translations.Config.FOOD_CANNER_ENERGY_CONSUMPTION_RATE), + config.foodCannerEnergyConsumptionRate()) + .setSaveConsumer(config::setFoodCannerEnergyConsumptionRate) + .setDefaultValue(15) + .requireRestart() + .build() + ); + machines.add(new LongFieldBuilder( Component.translatable(Translations.Config.RESET), Component.translatable(Translations.Config.OXYGEN_DECOMPRESSOR_ENERGY_CONSUMPTION_RATE), diff --git a/src/main/java/dev/galacticraft/mod/content/CannedFoodTooltip.java b/src/main/java/dev/galacticraft/mod/content/CannedFoodTooltip.java index 15c4a90d2..5bed9ce90 100644 --- a/src/main/java/dev/galacticraft/mod/content/CannedFoodTooltip.java +++ b/src/main/java/dev/galacticraft/mod/content/CannedFoodTooltip.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.content; import net.minecraft.core.NonNullList; diff --git a/src/main/java/dev/galacticraft/mod/content/ClientCannedFoodTooltip.java b/src/main/java/dev/galacticraft/mod/content/ClientCannedFoodTooltip.java index ec3b78ad0..429d599d2 100644 --- a/src/main/java/dev/galacticraft/mod/content/ClientCannedFoodTooltip.java +++ b/src/main/java/dev/galacticraft/mod/content/ClientCannedFoodTooltip.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.content; import net.fabricmc.api.EnvType; diff --git a/src/main/java/dev/galacticraft/mod/content/GCBlockEntityTypes.java b/src/main/java/dev/galacticraft/mod/content/GCBlockEntityTypes.java index 2795e2bf2..a61575a3a 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCBlockEntityTypes.java +++ b/src/main/java/dev/galacticraft/mod/content/GCBlockEntityTypes.java @@ -58,6 +58,7 @@ public class GCBlockEntityTypes { public static final BlockEntityType ELECTRIC_FURNACE = FabricBlockEntityTypeBuilder.create(ElectricFurnaceBlockEntity::new, GCBlocks.ELECTRIC_FURNACE).build(); public static final BlockEntityType ELECTRIC_ARC_FURNACE = FabricBlockEntityTypeBuilder.create(ElectricArcFurnaceBlockEntity::new, GCBlocks.ELECTRIC_ARC_FURNACE).build(); public static final BlockEntityType REFINERY = FabricBlockEntityTypeBuilder.create(RefineryBlockEntity::new, GCBlocks.REFINERY).build(); + public static final BlockEntityType FOOD_CANNER = FabricBlockEntityTypeBuilder.create(FoodCannerBlockEntity::new, GCBlocks.FOOD_CANNER).build(); // OXYGEN MACHINES public static final BlockEntityType OXYGEN_COLLECTOR = FabricBlockEntityTypeBuilder.create(OxygenCollectorBlockEntity::new, GCBlocks.OXYGEN_COLLECTOR).build(); @@ -106,6 +107,7 @@ public static void register() { Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.OXYGEN_COLLECTOR), OXYGEN_COLLECTOR); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.OXYGEN_COMPRESSOR), OXYGEN_COMPRESSOR); + Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.FOOD_CANNER), FOOD_CANNER); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.OXYGEN_DECOMPRESSOR), OXYGEN_DECOMPRESSOR); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.OXYGEN_SEALER), OXYGEN_SEALER); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.OXYGEN_BUBBLE_DISTRIBUTOR), OXYGEN_BUBBLE_DISTRIBUTOR); diff --git a/src/main/java/dev/galacticraft/mod/content/GCBlocks.java b/src/main/java/dev/galacticraft/mod/content/GCBlocks.java index 150097925..286828e3b 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCBlocks.java +++ b/src/main/java/dev/galacticraft/mod/content/GCBlocks.java @@ -289,6 +289,7 @@ public class GCBlocks { public static final Block OXYGEN_BUBBLE_DISTRIBUTOR = BLOCKS.register(Constant.Block.OXYGEN_BUBBLE_DISTRIBUTOR, new MachineBlock<>(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).strength(3.0F, 5.0F).sound(SoundType.METAL), Constant.id(Constant.Block.OXYGEN_BUBBLE_DISTRIBUTOR))); public static final Block OXYGEN_DECOMPRESSOR = BLOCKS.register(Constant.Block.OXYGEN_DECOMPRESSOR, new MachineBlock<>(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).strength(3.0F, 5.0F).sound(SoundType.METAL), Constant.id(Constant.Block.OXYGEN_DECOMPRESSOR))); public static final Block OXYGEN_COMPRESSOR = BLOCKS.register(Constant.Block.OXYGEN_COMPRESSOR, new MachineBlock<>(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).strength(3.0F, 5.0F).sound(SoundType.METAL), Constant.id(Constant.Block.OXYGEN_COMPRESSOR))); + public static final Block FOOD_CANNER = BLOCKS.register(Constant.Block.FOOD_CANNER, new MachineBlock<>(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).strength(3.0F, 5.0F).sound(SoundType.METAL), Constant.id(Constant.Block.FOOD_CANNER))); public static final Block OXYGEN_STORAGE_MODULE = BLOCKS.register(Constant.Block.OXYGEN_STORAGE_MODULE, new MachineBlock<>(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).strength(3.0F, 5.0F).sound(SoundType.METAL), Constant.id(Constant.Block.OXYGEN_STORAGE_MODULE))); public static final Block FUEL_LOADER = BLOCKS.register(Constant.Block.FUEL_LOADER, new FuelLoaderBlock(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).strength(3.0F, 5.0F).sound(SoundType.METAL))); diff --git a/src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java b/src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java index 48362a4e8..9d9755e9d 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java +++ b/src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.content; import com.mojang.serialization.Codec; diff --git a/src/main/java/dev/galacticraft/mod/content/GCChunkGeneratorRegistry.java b/src/main/java/dev/galacticraft/mod/content/GCChunkGeneratorRegistry.java index 3f894837b..bbd57ce8f 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCChunkGeneratorRegistry.java +++ b/src/main/java/dev/galacticraft/mod/content/GCChunkGeneratorRegistry.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.content; import com.mojang.serialization.Codec; diff --git a/src/main/java/dev/galacticraft/mod/content/GCMachineTypes.java b/src/main/java/dev/galacticraft/mod/content/GCMachineTypes.java index 74557cf80..576ec8b31 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCMachineTypes.java +++ b/src/main/java/dev/galacticraft/mod/content/GCMachineTypes.java @@ -23,6 +23,7 @@ package dev.galacticraft.mod.content; import dev.galacticraft.api.gas.Gases; +import dev.galacticraft.machinelib.api.filter.ResourceFilter; import dev.galacticraft.machinelib.api.filter.ResourceFilters; import dev.galacticraft.machinelib.api.machine.MachineType; import dev.galacticraft.machinelib.api.menu.MachineMenu; @@ -35,13 +36,16 @@ import dev.galacticraft.machinelib.api.transfer.InputType; import dev.galacticraft.mod.Galacticraft; import dev.galacticraft.mod.content.block.entity.machine.*; +import dev.galacticraft.mod.content.item.CannedFoodItem; import dev.galacticraft.mod.content.item.GCItems; import dev.galacticraft.mod.recipe.CompressingRecipe; import dev.galacticraft.mod.recipe.FabricationRecipe; import dev.galacticraft.mod.screen.*; +import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider; import net.fabricmc.fabric.api.registry.FuelRegistry; import net.fabricmc.fabric.api.tag.convention.v1.ConventionalItemTags; import net.fabricmc.fabric.api.transfer.v1.fluid.FluidConstants; +import net.minecraft.nbt.CompoundTag; import net.minecraft.world.Container; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.Items; @@ -354,6 +358,81 @@ public class GCMachineTypes { ) ); + public static final MachineType FOOD_CANNER = MachineType.create( + GCBlocks.FOOD_CANNER, + GCBlockEntityTypes.FOOD_CANNER, + GCMenuTypes.FOOD_CANNER, + () -> MachineEnergyStorage.create( + Galacticraft.CONFIG.machineEnergyStorageSize(), + Galacticraft.CONFIG.foodCannerEnergyConsumptionRate() * 2, + Galacticraft.CONFIG.foodCannerEnergyConsumptionRate() * 2, + true, + false + ), + MachineItemStorage.of( + ItemResourceSlot.builder(InputType.TRANSFER) + .pos(8, 67) + .filter(ResourceFilters.CAN_EXTRACT_ENERGY), + ItemResourceSlot.builder(InputType.INPUT) + .pos(62, 13) + .filter(ResourceFilters.ofResource(GCItems.EMPTY_CANNED_FOOD)), + ItemResourceSlot.builder(InputType.STORAGE) + .pos(62, 40) + .capacity(1) + .filter(ResourceFilters.ofResource(GCItems.EMPTY_CANNED_FOOD)), + ItemResourceSlot.builder(InputType.RECIPE_OUTPUT) + .pos(62, 67), + ItemResourceSlot.builder(InputType.INPUT) + .pos(98, 13) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(InputType.INPUT) + .pos(116, 13) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(InputType.INPUT) + .pos(134, 13) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(InputType.INPUT) + .pos(152, 13) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(InputType.INPUT) + .pos(98, 31) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(InputType.INPUT) + .pos(116, 31) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(InputType.INPUT) + .pos(134, 31) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(InputType.INPUT) + .pos(152, 31) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(InputType.INPUT) + .pos(98, 49) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(InputType.INPUT) + .pos(116, 49) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(InputType.INPUT) + .pos(134, 49) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(InputType.INPUT) + .pos(152, 49) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(InputType.INPUT) + .pos(98, 67) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(InputType.INPUT) + .pos(116, 67) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(InputType.INPUT) + .pos(134, 67) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(InputType.INPUT) + .pos(152, 67) + .filter((item, tag) -> item != null && item.isEdible() && !(item instanceof CannedFoodItem)) + ) + ); + public static final MachineType> OXYGEN_DECOMPRESSOR = MachineType.create( GCBlocks.OXYGEN_DECOMPRESSOR, GCBlockEntityTypes.OXYGEN_DECOMPRESSOR, diff --git a/src/main/java/dev/galacticraft/mod/content/block/entity/machine/FoodCannerBlockEntity.java b/src/main/java/dev/galacticraft/mod/content/block/entity/machine/FoodCannerBlockEntity.java new file mode 100644 index 000000000..3c5bb843f --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/content/block/entity/machine/FoodCannerBlockEntity.java @@ -0,0 +1,738 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package dev.galacticraft.mod.content.block.entity.machine; + +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import dev.galacticraft.api.gas.Gases; +import dev.galacticraft.machinelib.api.block.entity.MachineBlockEntity; +import dev.galacticraft.machinelib.api.machine.MachineStatus; +import dev.galacticraft.machinelib.api.machine.MachineStatuses; +import dev.galacticraft.machinelib.api.menu.MachineMenu; +import dev.galacticraft.machinelib.api.storage.slot.FluidResourceSlot; +import dev.galacticraft.machinelib.api.storage.slot.ItemResourceSlot; +import dev.galacticraft.machinelib.impl.compat.vanilla.StorageSlot; +import dev.galacticraft.mod.Constant; +import dev.galacticraft.mod.Galacticraft; +import dev.galacticraft.mod.content.GCMachineTypes; +import dev.galacticraft.mod.content.item.CannedFoodItem; +import dev.galacticraft.mod.content.item.GCItems; +import dev.galacticraft.mod.machine.GCMachineStatuses; +import dev.galacticraft.mod.screen.CoalGeneratorMenu; +import dev.galacticraft.mod.screen.FoodCannerMenu; +import dev.galacticraft.mod.util.FluidUtil; +import net.fabricmc.fabric.api.transfer.v1.fluid.FluidStorage; +import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant; +import net.fabricmc.fabric.api.transfer.v1.storage.Storage; +import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.*; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.profiling.ProfilerFiller; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Stream; + +import static dev.galacticraft.mod.content.item.CannedFoodItem.*; + +public class FoodCannerBlockEntity extends MachineBlockEntity { + public static final int CHARGE_SLOT = 0; + public static final int INPUT_SLOT = 1; + public static final int STORAGE_SLOT = 2; + public static final int OUTPUT_SLOT = 3; + //x0 -> x3 && y0 -> y3 x0 and y0 top left x3 and y3 bottom right + public static final int FOOD_INPUT_SLOT_1 = 4; + public static final int FOOD_INPUT_SLOT_2 = 5; + public static final int FOOD_INPUT_SLOT_3 = 6; + public static final int FOOD_INPUT_SLOT_4 = 7; + public static final int FOOD_INPUT_SLOT_5 = 8; + public static final int FOOD_INPUT_SLOT_6 = 9; + public static final int FOOD_INPUT_SLOT_7 = 10; + public static final int FOOD_INPUT_SLOT_8 = 11; + public static final int FOOD_INPUT_SLOT_9 = 12; + public static final int FOOD_INPUT_SLOT_10 = 13; + public static final int FOOD_INPUT_SLOT_11 = 14; + public static final int FOOD_INPUT_SLOT_12 = 15; + public static final int FOOD_INPUT_SLOT_13 = 16; + public static final int FOOD_INPUT_SLOT_14 = 17; + public static final int FOOD_INPUT_SLOT_15 = 18; + public static final int FOOD_INPUT_SLOT_16 = 19; + + private int progress = 1; + + private int firstRowConsumed = 0; + private int secondRowConsumed = 0; + private int thirdRowConsumed = 0; + private int forthRowConsumed = 0; + private final int maxProgress = 115; + private boolean transferring_can = false; + private boolean transferring_food = false; + + private ItemStack storage; + + + public FoodCannerBlockEntity(BlockPos pos, BlockState state) { + super(GCMachineTypes.FOOD_CANNER, pos, state); + this.storage = GCItems.CANNED_FOOD.getDefaultInstance(); + } + + @Override + protected void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull ProfilerFiller profiler) { + super.tickConstant(world, pos, state, profiler); + this.chargeFromStack(CHARGE_SLOT); + } + + @Override + protected @NotNull MachineStatus tick(@NotNull ServerLevel level, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull ProfilerFiller profiler) { + progress(); + if (noEnergy()) + { + return MachineStatuses.NOT_ENOUGH_ENERGY; + } + if (inputSlotEmpty()) + { + if (!transferring_can && storageSlotEmpty()) + { + setProgress(1); + return GCMachineStatuses.MISSING_EMPTY_CAN; + } + } + if (storageSlotEmpty()) + { + if (getProgress() == 1 && !transferring_can) + { + this.transferring_can = true; + this.itemStorage().getSlot(INPUT_SLOT).extractOne(); + return GCMachineStatuses.TRANSFERRING_CAN; + } + if (getProgress() == 10) + { + if (transferring_can) + { + if (transferring_food) + { + this.transferring_can = false; + this.itemStorage().getSlot(STORAGE_SLOT).insert(this.storage.getItem(), this.storage.getTag(), 1); + } + else + { + this.transferring_can = false; + this.itemStorage().getSlot(STORAGE_SLOT).insert(GCItems.CANNED_FOOD, 1); + this.storage = GCItems.CANNED_FOOD.getDefaultInstance(); + } + } + else + { + setProgress(1); + resetConsumedRows(); + return GCMachineStatuses.MISSING_EMPTY_CAN; + } + } + } + boolean row0 = !checkRowItems(0).isEmpty(); + boolean row1 = !checkRowItems(1).isEmpty(); + boolean row2 = !checkRowItems(2).isEmpty(); + boolean row3 = !checkRowItems(3).isEmpty(); + if (progress < 107 && getSize(this.storage) == MAX_FOOD && !transferring_can && !transferring_food) + { + setProgress(107); + } + if (!(row0 || row1 || row2 || row3) && !transferring_can && !transferring_food) + { + if (storageContainsFood()) + { + setProgress(107); + } + else + { + return GCMachineStatuses.NO_FOOD; + } + } + if (getProgress() == 10) + { + transferring_food = false; + if (row0) + { + if (getSize(this.storage) < MAX_FOOD) + { + transferring_food = true; + setFirstRowConsumed(1); + List leftover = addToCan(checkRow(0), this.storage); + clearRow(0, leftover); + return GCMachineStatuses.CANNING; + } + + } + else + { + setProgress(37); + } + } + if (getProgress() == 37) + { + if (this.itemStorage().getSlot(STORAGE_SLOT).isEmpty() && transferring_food) + { + setProgress(1); + return GCMachineStatuses.MISSING_EMPTY_CAN; + } + transferring_food = false; + if (row1) + { + if (getSize(this.storage) < MAX_FOOD) + { + transferring_food = true; + setSecondRowConsumed(1); + List leftover = addToCan(checkRow(1), this.storage); + clearRow(1, leftover); + return GCMachineStatuses.CANNING; + } + + } + else + { + if (getFirstRowConsumed() == 1) + { + transferring_food = true; + setProgress(46); + } + else + { + setProgress(53); + } + + } + } + if (getProgress() == 53) + { + if (this.itemStorage().getSlot(STORAGE_SLOT).isEmpty() && transferring_food) + { + setProgress(1); + return GCMachineStatuses.MISSING_EMPTY_CAN; + } + transferring_food = false; + if (row3) + { + if (getSize(this.storage) < MAX_FOOD) + { + transferring_food = true; + setForthRowConsumed(1); + List leftover = addToCan(checkRow(3), this.storage); + clearRow(3, leftover); + return GCMachineStatuses.CANNING; + } + + } + else + { + setProgress(79); + } + } + if (getProgress() == 79) + { + if (this.itemStorage().getSlot(STORAGE_SLOT).isEmpty() && transferring_food) + { + setProgress(1); + return GCMachineStatuses.MISSING_EMPTY_CAN; + } + transferring_food = false; + if (row2) + { + if (getSize(this.storage) < MAX_FOOD) + { + transferring_food = true; + setThirdRowConsumed(1); + List leftover = addToCan(checkRow(2), this.storage); + clearRow(2, leftover); + return GCMachineStatuses.CANNING; + } + + } + else + { + if (getFirstRowConsumed() == 1 || getSecondRowConsumed() == 1) + { + transferring_food = true; + setProgress(97); + if (getForthRowConsumed() == 1) + { + transferring_food = true; + setProgress(87); + } + }else if (getForthRowConsumed() == 1) + { + transferring_food = true; + setProgress(87); + }else + { + setProgress(107); + } + + } + } + + if (getProgress() == 107) + { + if (this.itemStorage().getSlot(STORAGE_SLOT).isEmpty() && transferring_food) + { + setProgress(1); + resetConsumedRows(); + return GCMachineStatuses.MISSING_EMPTY_CAN; + } + transferring_food = false; + if (outputFull()) + { + if (storageSlotEmpty()) + { + this.storage = GCItems.CANNED_FOOD.getDefaultInstance(); + resetConsumedRows(); + setProgress(1); + return MachineStatuses.OUTPUT_FULL; + } + if (this.itemStorage().getItem(STORAGE_SLOT) != this.storage) + { + this.itemStorage().getSlot(STORAGE_SLOT).extractOne(); + this.itemStorage().getSlot(STORAGE_SLOT).insert(this.storage.getItem(), this.storage.getTag(), 1); + } + if (getSize(this.storage) < MAX_FOOD && (row0 || row1 || row2 || row3)) + { + setProgress(10); + resetConsumedRows(); + return MachineStatuses.OUTPUT_FULL ; + } + return MachineStatuses.OUTPUT_FULL; + } + transferring_can = true; + this.itemStorage().getSlot(STORAGE_SLOT).extractOne(); + return GCMachineStatuses.TRANSFERRING_CAN; + } + if (getProgress() == 115 && transferring_can) + { + transferring_can = false; + this.itemStorage().getSlot(OUTPUT_SLOT).insert(this.storage.getItem(), this.storage.getTag(), 1); + this.storage = GCItems.CANNED_FOOD.getDefaultInstance(); + resetConsumedRows(); + setProgress(1); + return MachineStatuses.OUTPUT_FULL; + } + + return GCMachineStatuses.CANNING; + } + + private void resetConsumedRows() { + setFirstRowConsumed(0); + setSecondRowConsumed(0); + setThirdRowConsumed(0); + setForthRowConsumed(0); + } + + private boolean storageContainsFood() { + return getContents(this.storage).findAny().isPresent(); + } + + private boolean inputSlotEmpty() { + return this.itemStorage().getSlot(INPUT_SLOT).isEmpty(); + } + + private boolean storageSlotEmpty() { + return this.itemStorage().getSlot(STORAGE_SLOT).isEmpty(); + } + + private boolean noEnergy() { + return !this.energyStorage().canExtract(Galacticraft.CONFIG.foodCannerEnergyConsumptionRate()); + } + + private boolean outputFull() { + return this.itemStorage().getSlot(OUTPUT_SLOT).isFull(); + } + + + private void clearRow(int row) { + if (row == 0) + { + this.itemStorage().getSlot(FOOD_INPUT_SLOT_1).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_1).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_2).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_2).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_3).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_3).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_4).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_4).getCount()); + } + if (row == 1) + { + this.itemStorage().getSlot(FOOD_INPUT_SLOT_5).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_5).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_6).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_6).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_7).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_7).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_8).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_8).getCount()); + } + if (row == 2) + { + this.itemStorage().getSlot(FOOD_INPUT_SLOT_9).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_9).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_10).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_10).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_11).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_11).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_12).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_12).getCount()); + } + if (row == 3) + { + this.itemStorage().getSlot(FOOD_INPUT_SLOT_13).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_13).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_14).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_14).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_15).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_15).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_16).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_16).getCount()); + } + } + private void clearRow(int row, List stacks) { + clearRow(row); + if (row == 0) + { + this.itemStorage().getSlot(FOOD_INPUT_SLOT_1).insert(stacks.get(0).getItem(), stacks.get(0).getTag(), stacks.get(0).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_2).insert(stacks.get(1).getItem(), stacks.get(1).getTag(), stacks.get(1).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_3).insert(stacks.get(2).getItem(), stacks.get(2).getTag(), stacks.get(2).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_4).insert(stacks.get(3).getItem(), stacks.get(3).getTag(), stacks.get(3).getCount()); + } + if (row == 1) + { + this.itemStorage().getSlot(FOOD_INPUT_SLOT_5).insert(stacks.get(0).getItem(), stacks.get(0).getTag(), stacks.get(0).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_6).insert(stacks.get(1).getItem(), stacks.get(1).getTag(), stacks.get(1).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_7).insert(stacks.get(2).getItem(), stacks.get(2).getTag(), stacks.get(2).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_8).insert(stacks.get(3).getItem(), stacks.get(3).getTag(), stacks.get(3).getCount()); + } + if (row == 2) + { + this.itemStorage().getSlot(FOOD_INPUT_SLOT_9).insert(stacks.get(0).getItem(), stacks.get(0).getTag(), stacks.get(0).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_10).insert(stacks.get(1).getItem(), stacks.get(1).getTag(), stacks.get(1).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_11).insert(stacks.get(2).getItem(), stacks.get(2).getTag(), stacks.get(2).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_12).insert(stacks.get(3).getItem(), stacks.get(3).getTag(), stacks.get(3).getCount()); + } + if (row == 3) + { + this.itemStorage().getSlot(FOOD_INPUT_SLOT_13).insert(stacks.get(0).getItem(), stacks.get(0).getTag(), stacks.get(0).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_14).insert(stacks.get(1).getItem(), stacks.get(1).getTag(), stacks.get(1).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_15).insert(stacks.get(2).getItem(), stacks.get(2).getTag(), stacks.get(2).getCount()); + this.itemStorage().getSlot(FOOD_INPUT_SLOT_16).insert(stacks.get(3).getItem(), stacks.get(3).getTag(), stacks.get(3).getCount()); + } + } + + private List checkRow(int row) + { + List stacks = new ArrayList<>(); + if (row == 0) + { + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_1).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_1)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_2).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_2)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_3).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_3)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_4).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_4)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + } + if (row == 1) + { + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_5).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_5)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_6).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_6)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_7).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_7)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_8).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_8)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + } + if (row == 2) + { + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_9).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_9)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_10).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_10)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_11).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_11)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_12).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_12)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + } + if (row == 3) + { + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_13).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_13)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_14).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_14)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_15).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_15)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_16).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_16)); + }else + { + stacks.add(Items.AIR.getDefaultInstance()); + } + } + return stacks; + } + + private List checkRowItems(int row) + { + List stacks = new ArrayList<>(); + if (row == 0) + { + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_1).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_1)); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_2).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_2)); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_3).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_3)); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_4).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_4)); + } + } + if (row == 1) + { + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_5).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_5)); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_6).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_6)); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_7).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_7)); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_8).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_8)); + } + } + if (row == 2) + { + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_9).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_9)); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_10).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_10)); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_11).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_11)); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_12).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_12)); + } + } + if (row == 3) + { + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_13).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_13)); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_14).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_14)); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_15).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_15)); + } + if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_16).isEmpty()) + { + stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_16)); + } + } + return stacks; + } + + private void progress() + { + if (this.isActive()) + { + this.progress += 1; + } + if (this.progress > this.maxProgress) setProgress(1); + } + + public int getProgress() { + return this.progress; + } + + public void setProgress(int progress) { + this.progress = progress; + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(int syncId, Inventory inv, Player player) { + if (this.getSecurity().hasAccess(player)) return new FoodCannerMenu(syncId, (ServerPlayer) player, this); + return null; + } + + @Override + public void load(CompoundTag nbt) { + super.load(nbt); + setProgress(nbt.getInt(Constant.Nbt.PROGRESS)); + this.transferring_can = nbt.getBoolean("TRANSFERRING_CAN"); + this.transferring_food = nbt.getBoolean("TRANSFERRING_FOOD"); + ItemStack itemStack = GCItems.CANNED_FOOD.getDefaultInstance(); + itemStack.setTag(listTagToCompoundTag(nbt.getList("STORAGE", ListTag.TAG_COMPOUND))); + this.storage = itemStack; + + } + + + @Override + public void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + tag.putInt(Constant.Nbt.PROGRESS, this.progress); + tag.putBoolean("TRANSFERRING_CAN", this.transferring_can); + tag.putBoolean("TRANSFERRING_FOOD", this.transferring_food); + tag.put("STORAGE", compoundTagToListTag(this.storage.getTag())); + } + + public static CompoundTag listTagToCompoundTag(ListTag listTag) { + CompoundTag compoundTag = new CompoundTag(); + compoundTag.put("Items", listTag); // Store the ListTag under the key "Items" + return compoundTag; + } + + public static ListTag compoundTagToListTag(CompoundTag compoundTag){ + if (compoundTag != null) { + return compoundTag.getList("Items", ListTag.TAG_COMPOUND); // Retrieve the ListTag stored under the key "Items" + } else { + return new ListTag(); // Return an empty ListTag if the key doesn't exist + } + } + + public int getFirstRowConsumed() { + return firstRowConsumed; + } + public void setFirstRowConsumed(int value) { + this.firstRowConsumed = value; + } + public int getSecondRowConsumed() { + return secondRowConsumed; + } + public void setSecondRowConsumed(int value) { + this.secondRowConsumed = value; + } + public int getThirdRowConsumed() { + return thirdRowConsumed; + } + public void setThirdRowConsumed(int value) { + this.thirdRowConsumed = value; + } + public int getForthRowConsumed() { + return forthRowConsumed; + } + public void setForthRowConsumed(int value) { + this.forthRowConsumed = value; + } +} \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/content/block/special/AirlockSealBlock.java b/src/main/java/dev/galacticraft/mod/content/block/special/AirlockSealBlock.java index 9af7ea0e1..e6dadc2e5 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/special/AirlockSealBlock.java +++ b/src/main/java/dev/galacticraft/mod/content/block/special/AirlockSealBlock.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.content.block.special; import com.mojang.serialization.MapCodec; diff --git a/src/main/java/dev/galacticraft/mod/content/entity/SmallAsteroid.java b/src/main/java/dev/galacticraft/mod/content/entity/SmallAsteroid.java index dd9353e3f..b29f6fd7b 100644 --- a/src/main/java/dev/galacticraft/mod/content/entity/SmallAsteroid.java +++ b/src/main/java/dev/galacticraft/mod/content/entity/SmallAsteroid.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.content.entity; import net.minecraft.nbt.CompoundTag; diff --git a/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java b/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java index 6e2c9e0d7..4f063201e 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java +++ b/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java @@ -44,12 +44,12 @@ import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.awt.*; import java.util.*; import java.util.List; import java.util.function.BiConsumer; @@ -65,6 +65,8 @@ public class CannedFoodItem extends Item implements FabricItemStack { private int color; + public static final int MAX_FOOD = 16; + @Override public @NotNull ItemStack finishUsingItem(ItemStack itemStack, Level level, LivingEntity livingEntity) { @@ -82,8 +84,6 @@ public class CannedFoodItem extends Item implements FabricItemStack { can.setTag(copyTag.copy()); for (int i = 0; i < consumingItems; i++) { removeOne(can); - System.out.println("removed item"); - System.out.println(can.getTag()); } if (itemStack.isEmpty()) { if (getContents(can).findAny().isEmpty()) @@ -186,7 +186,7 @@ public static Stream getContents(ItemStack stack) { if (compoundTag == null) { return Stream.empty(); } else { - ListTag listTag = compoundTag.getList("Items", 10); + ListTag listTag = compoundTag.getList("Items", ListTag.TAG_COMPOUND); Stream stream = listTag.stream(); Objects.requireNonNull(CompoundTag.class); return stream.map(CompoundTag.class::cast).map(ItemStack::of); @@ -226,7 +226,7 @@ private static void removeOne(ItemStack stack) { } } - private static void add(ItemStack cannedFood, ItemStack stack) { + public static void add(ItemStack cannedFood, ItemStack stack) { if (!stack.isEmpty() && stack.getItem().canFitInsideContainerItems()) { CompoundTag compoundTag = cannedFood.getOrCreateTag(); if (!compoundTag.contains("Items")) { @@ -234,16 +234,80 @@ private static void add(ItemStack cannedFood, ItemStack stack) { } //the max that the canned food item can hold - int k = Math.min(stack.getCount(), 16); + int k = Math.min(stack.getCount(), MAX_FOOD); if (k != 0) { ListTag listTag = compoundTag.getList("Items", 10); ItemStack itemStack2 = stack.copyWithCount(k); CompoundTag compoundTag3 = new CompoundTag(); itemStack2.save(compoundTag3); - listTag.add(0, compoundTag3); + int iter = -1; + for (int i = 0; i < listTag.size(); i++) { + if (listTag.getCompound(i).get("id").getAsString().equals(compoundTag3.get("id").getAsString())) + { + System.out.println(i); + iter = i; + } + } + if (iter == -1) + { + listTag.add(0, compoundTag3); + }else + { + itemStack2.setCount(listTag.getCompound(iter).getInt("Count") + 1); + itemStack2.save(compoundTag3); + listTag.set(iter, compoundTag3); + } + } + } + } + + public static List addToCan(List items, ItemStack can) + { + int size = getSize(can); + int iter = 0; + if (size < MAX_FOOD) + { + for (int i = 0; i < MAX_FOOD - size; i++) { + if (!items.isEmpty()) + { + if (iter > 3) + { + return items; + } + if (items.get(iter).getCount() == 0) + { + ++iter; + i--; + }else if (items.get(iter).getCount() > 1) + { + add(can,items.get(iter).copyWithCount(1)); + items.set(iter, items.get(iter).copyWithCount(items.get(iter).getCount() - 1)); + } + else + { + add(can,items.get(iter).copyWithCount(1)); + items.set(iter, Items.AIR.getDefaultInstance()); + ++iter; + } + } + } + } + return items; + } + + public static int getSize(ItemStack can) + { + int size = 0; + List contents = getContents(can).toList(); + if (!contents.isEmpty()) + { + //can has something inside it + for (ItemStack content : contents) { + size += content.getCount(); } } + return size; } private static String getItemDisplayName(ItemStack itemStack) { diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java index ac0c2d3d5..9cef2f868 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java @@ -41,6 +41,7 @@ import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.ItemStack; +import static dev.galacticraft.mod.content.GCBlocks.FOOD_CANNER; import static dev.galacticraft.mod.content.item.GCItems.*; public class GCCreativeModeTabs { @@ -438,6 +439,7 @@ public class GCCreativeModeTabs { output.accept(OXYGEN_BUBBLE_DISTRIBUTOR); output.accept(OXYGEN_DECOMPRESSOR); output.accept(OXYGEN_COMPRESSOR); + output.accept(FOOD_CANNER); output.accept(OXYGEN_STORAGE_MODULE); output.accept(FUEL_LOADER); }).build(); diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java index 79c677549..19c574b8e 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java @@ -224,6 +224,7 @@ public class GCItems { public static final Item OXYGEN_BUBBLE_DISTRIBUTOR = new BlockItem(GCBlocks.OXYGEN_BUBBLE_DISTRIBUTOR, new Item.Properties()); public static final Item OXYGEN_DECOMPRESSOR = new BlockItem(GCBlocks.OXYGEN_DECOMPRESSOR, new Item.Properties()); public static final Item OXYGEN_COMPRESSOR = new BlockItem(GCBlocks.OXYGEN_COMPRESSOR, new Item.Properties()); + public static final Item FOOD_CANNER = new BlockItem(GCBlocks.FOOD_CANNER, new Item.Properties()); public static final Item OXYGEN_STORAGE_MODULE = new BlockItem(GCBlocks.OXYGEN_STORAGE_MODULE, new Item.Properties()); public static final Item FUEL_LOADER = new BlockItem(GCBlocks.FUEL_LOADER, new Item.Properties()); public static final Item ROCKET_WORKBENCH = new BlockItem(GCBlocks.ROCKET_WORKBENCH, new Item.Properties()); @@ -425,8 +426,8 @@ public class GCItems { public static final Item TIER_3_ROCKET_SCHEMATIC = new SchematicItem(new Item.Properties()); public static final Item ASTRO_MINER_SCHEMATIC = new SchematicItem(new Item.Properties()); - public static final CannedFoodItem CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(new FoodProperties.Builder().nutrition(0).saturationMod(0).build())); - public static final CannedFoodItem EMPTY_CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(null)); + public static final CannedFoodItem CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(new FoodProperties.Builder().nutrition(0).saturationMod(0).build()).stacksTo(1)); + public static final CannedFoodItem EMPTY_CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(null).stacksTo(64)); public static void register() { @@ -588,6 +589,7 @@ public static void register() { Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.OXYGEN_BUBBLE_DISTRIBUTOR), OXYGEN_BUBBLE_DISTRIBUTOR); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.OXYGEN_DECOMPRESSOR), OXYGEN_DECOMPRESSOR); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.OXYGEN_COMPRESSOR), OXYGEN_COMPRESSOR); + Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.FOOD_CANNER), FOOD_CANNER); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.OXYGEN_STORAGE_MODULE), OXYGEN_STORAGE_MODULE); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.FUEL_LOADER), FUEL_LOADER); diff --git a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java index c338f3305..e51cac8d5 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java @@ -247,6 +247,7 @@ public void generate() { this.dropSelf(GCBlocks.OXYGEN_BUBBLE_DISTRIBUTOR); this.dropSelf(GCBlocks.OXYGEN_DECOMPRESSOR); this.dropSelf(GCBlocks.OXYGEN_COMPRESSOR); + this.dropSelf(GCBlocks.FOOD_CANNER); this.dropSelf(GCBlocks.OXYGEN_STORAGE_MODULE); this.dropSelf(GCBlocks.FUEL_LOADER); diff --git a/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java b/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java index 9af55d20f..17304fa99 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java @@ -164,6 +164,7 @@ protected void generateTranslations(HolderLookup.@NotNull Provider registries) { this.add(Config.ENERGY_STORAGE_SIZE, "Default Machine Energy Storage Size"); this.add(Config.OXYGEN_COLLECTOR_ENERGY_CONSUMPTION_RATE, "Oxygen Collector Energy Consumption Rate/t"); this.add(Config.OXYGEN_COMPRESSOR_ENERGY_CONSUMPTION_RATE, "Oxygen Compressor Energy Consumption Rate/t"); + this.add(Config.FOOD_CANNER_ENERGY_CONSUMPTION_RATE, "Food Canner Energy Consumption Rate/t"); this.add(Config.OXYGEN_DECOMPRESSOR_ENERGY_CONSUMPTION_RATE, "Oxygen Decompressor Energy Consumption Rate/t"); this.add(Config.REFINERY_ENERGY_CONSUMPTION_RATE, "Refinery Energy Consumption Rate/t"); this.add(Config.SOLAR_PANEL_ENERGY_PRODUCTION_RATE, "Solar Panel Energy Production Rate/t"); diff --git a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java index 1e66ef759..c28e77e83 100644 --- a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java @@ -230,6 +230,7 @@ public void generateBlockStateModels(BlockModelGenerators generator) { createMachineDelegate(generator, GCBlocks.OXYGEN_BUBBLE_DISTRIBUTOR); createMachineDelegate(generator, GCBlocks.OXYGEN_DECOMPRESSOR); createMachineDelegate(generator, GCBlocks.OXYGEN_COMPRESSOR); + createMachineDelegate(generator, GCBlocks.FOOD_CANNER); createMachineDelegate(generator, GCBlocks.OXYGEN_STORAGE_MODULE); createMachineDelegate(generator, GCBlocks.FUEL_LOADER); diff --git a/src/main/java/dev/galacticraft/mod/data/recipes/GCMachineRecipes.java b/src/main/java/dev/galacticraft/mod/data/recipes/GCMachineRecipes.java index 130ef7a9c..f9c610ecb 100644 --- a/src/main/java/dev/galacticraft/mod/data/recipes/GCMachineRecipes.java +++ b/src/main/java/dev/galacticraft/mod/data/recipes/GCMachineRecipes.java @@ -194,6 +194,17 @@ public void buildRecipes(RecipeOutput output) { .unlockedBy(getHasName(GCItems.OXYGEN_CONCENTRATOR), has(GCItems.OXYGEN_CONCENTRATOR)) .save(output); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, GCItems.FOOD_CANNER) + .define('S', GCItems.COMPRESSED_STEEL) + .define('B', GCItems.COMPRESSED_BRONZE) + .define('C', GCItems.OXYGEN_CONCENTRATOR) + .define('A', GCItems.COMPRESSED_ALUMINUM) + .pattern("SAS") + .pattern("ACA") + .pattern("SBS") + .unlockedBy(getHasName(GCItems.OXYGEN_CONCENTRATOR), has(GCItems.OXYGEN_CONCENTRATOR)) + .save(output); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, GCItems.OXYGEN_DECOMPRESSOR) .define('S', GCItems.COMPRESSED_STEEL) .define('R', Items.REDSTONE_TORCH) diff --git a/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java b/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java index 529256220..e642b120f 100644 --- a/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java @@ -84,6 +84,7 @@ protected void addTags(HolderLookup.Provider provider) { GCBlocks.OXYGEN_BUBBLE_DISTRIBUTOR, GCBlocks.OXYGEN_DECOMPRESSOR, GCBlocks.OXYGEN_COMPRESSOR, + GCBlocks.FOOD_CANNER, GCBlocks.OXYGEN_STORAGE_MODULE, GCBlocks.FUEL_LOADER ); diff --git a/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java b/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java index a98aa218d..0f9e86788 100644 --- a/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java @@ -30,6 +30,7 @@ import net.minecraft.core.HolderLookup; import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; +import net.minecraft.world.food.Foods; import net.minecraft.world.item.Item; import java.util.concurrent.CompletableFuture; @@ -115,6 +116,17 @@ protected void addTags(HolderLookup.Provider provider) { GCItems.ILMENITE_ORE, GCItems.GALENA_ORE ); + + // Food Tags + tag(ConventionalItemTags.FOODS).add( + GCItems.MOON_BERRIES, + GCItems.CHEESE_CURD, + GCItems.CHEESE_SLICE, + GCItems.BURGER_BUN, + GCItems.GROUND_BEEF, + GCItems.BEEF_PATTY, + GCItems.CHEESEBURGER + ); } protected FabricTagProvider.FabricTagBuilder tag(TagKey tag) { diff --git a/src/main/java/dev/galacticraft/mod/lookup/GCApiLookupProviders.java b/src/main/java/dev/galacticraft/mod/lookup/GCApiLookupProviders.java index 1383ab5ba..f09b48f97 100644 --- a/src/main/java/dev/galacticraft/mod/lookup/GCApiLookupProviders.java +++ b/src/main/java/dev/galacticraft/mod/lookup/GCApiLookupProviders.java @@ -52,6 +52,7 @@ public class GCApiLookupProviders { GCBlocks.REFINERY, GCBlocks.OXYGEN_COLLECTOR, GCBlocks.OXYGEN_COMPRESSOR, + GCBlocks.FOOD_CANNER, GCBlocks.OXYGEN_DECOMPRESSOR, GCBlocks.OXYGEN_SEALER, GCBlocks.OXYGEN_BUBBLE_DISTRIBUTOR, diff --git a/src/main/java/dev/galacticraft/mod/machine/GCMachineStatuses.java b/src/main/java/dev/galacticraft/mod/machine/GCMachineStatuses.java index 50896a047..7449a1759 100644 --- a/src/main/java/dev/galacticraft/mod/machine/GCMachineStatuses.java +++ b/src/main/java/dev/galacticraft/mod/machine/GCMachineStatuses.java @@ -28,8 +28,12 @@ public final class GCMachineStatuses { public static final MachineStatus COLLECTING = MachineStatus.create(Translations.MachineStatus.COLLECTING, ChatFormatting.GREEN, MachineStatus.Type.WORKING); + public static final MachineStatus CANNING = MachineStatus.create(Translations.MachineStatus.CANNING, ChatFormatting.GREEN, MachineStatus.Type.WORKING); + public static final MachineStatus TRANSFERRING_CAN = MachineStatus.create(Translations.MachineStatus.TRANSFERRING_CAN, ChatFormatting.GREEN, MachineStatus.Type.PARTIALLY_WORKING); + public static final MachineStatus NO_FOOD = MachineStatus.create(Translations.MachineStatus.NO_FOOD, ChatFormatting.RED, MachineStatus.Type.MISSING_ITEMS); public static final MachineStatus PARTIALLY_BLOCKED = MachineStatus.create(Translations.MachineStatus.PARTIALLY_BLOCKED, ChatFormatting.GRAY, MachineStatus.Type.PARTIALLY_WORKING); public static final MachineStatus BLOCKED = MachineStatus.create(Translations.MachineStatus.BLOCKED, ChatFormatting.RED, MachineStatus.Type.OTHER); + public static final MachineStatus MISSING_EMPTY_CAN = MachineStatus.create(Translations.MachineStatus.MISSING_EMPTY_CAN, ChatFormatting.RED, MachineStatus.Type.MISSING_ITEMS); public static final MachineStatus NIGHT = MachineStatus.create(Translations.MachineStatus.NIGHT, ChatFormatting.DARK_BLUE, MachineStatus.Type.PARTIALLY_WORKING); public static final MachineStatus RAIN = MachineStatus.create(Translations.MachineStatus.RAIN, ChatFormatting.BLUE, MachineStatus.Type.PARTIALLY_WORKING); public static final MachineStatus FABRICATING = MachineStatus.create(Translations.MachineStatus.FABRICATING, ChatFormatting.GREEN, MachineStatus.Type.WORKING); diff --git a/src/main/java/dev/galacticraft/mod/mixin/client/ClientTooltipMixin.java b/src/main/java/dev/galacticraft/mod/mixin/client/ClientTooltipMixin.java index ed1183f1b..16dfe1818 100644 --- a/src/main/java/dev/galacticraft/mod/mixin/client/ClientTooltipMixin.java +++ b/src/main/java/dev/galacticraft/mod/mixin/client/ClientTooltipMixin.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.mixin.client; import dev.galacticraft.mod.content.CannedFoodTooltip; @@ -11,10 +33,6 @@ @Mixin(ClientTooltipComponent.class) public interface ClientTooltipMixin { - /** - * @author me - * @reason to add exception for CannedFoodTooltip component - */ @Overwrite static ClientTooltipComponent create(TooltipComponent data) { if (data instanceof BundleTooltip) { diff --git a/src/main/java/dev/galacticraft/mod/mixin/client/FabricItemMixin.java b/src/main/java/dev/galacticraft/mod/mixin/client/FabricItemMixin.java index 0ada2b8c3..b9777ba07 100644 --- a/src/main/java/dev/galacticraft/mod/mixin/client/FabricItemMixin.java +++ b/src/main/java/dev/galacticraft/mod/mixin/client/FabricItemMixin.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.mixin.client; import net.fabricmc.fabric.api.item.v1.FabricItem; @@ -13,10 +35,7 @@ @Mixin(FabricItem.class) public interface FabricItemMixin { - /** - * @author me - * @reason allows canned food to be eaten with different amounts of nutrition for each item - */ + @Overwrite default @Nullable FoodProperties getFoodComponent(ItemStack stack) { if (isCannedFoodItem(stack)) diff --git a/src/main/java/dev/galacticraft/mod/screen/FoodCannerMenu.java b/src/main/java/dev/galacticraft/mod/screen/FoodCannerMenu.java new file mode 100644 index 000000000..47211baeb --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/screen/FoodCannerMenu.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package dev.galacticraft.mod.screen; + +import dev.galacticraft.machinelib.api.menu.MachineMenu; +import dev.galacticraft.machinelib.api.menu.sync.MenuSyncHandler; +import dev.galacticraft.mod.content.GCMachineTypes; +import dev.galacticraft.mod.content.block.entity.machine.CoalGeneratorBlockEntity; +import dev.galacticraft.mod.content.block.entity.machine.FoodCannerBlockEntity; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Inventory; +import org.jetbrains.annotations.NotNull; + +import java.util.function.Consumer; + +public class FoodCannerMenu extends MachineMenu { + private int progress; + + private int firstRowConsumed; + private int secondRowConsumed; + private int thirdRowConsumed; + private int forthRowConsumed; + + public FoodCannerMenu(int syncId, @NotNull ServerPlayer player, @NotNull FoodCannerBlockEntity machine) { + super(syncId, player, machine); + } + + public FoodCannerMenu(int syncId, @NotNull Inventory inventory, @NotNull FriendlyByteBuf buf) { + super(syncId, inventory, buf, 8, 89, GCMachineTypes.FOOD_CANNER); + } + + @Override + public void registerSyncHandlers(Consumer consumer) { + super.registerSyncHandlers(consumer); + + consumer.accept(MenuSyncHandler.simple(this.machine::getProgress, this::setProgress)); + consumer.accept(MenuSyncHandler.simple(this.machine::getFirstRowConsumed, this::setFirstRowConsumed)); + consumer.accept(MenuSyncHandler.simple(this.machine::getSecondRowConsumed, this::setSecondRowConsumed)); + consumer.accept(MenuSyncHandler.simple(this.machine::getThirdRowConsumed, this::setThirdRowConsumed)); + consumer.accept(MenuSyncHandler.simple(this.machine::getForthRowConsumed, this::setForthRowConsumed)); + } + + + public int getProgress() { + return progress; + } + + public void setProgress(int value) { + this.progress = value; + } + + public int getFirstRowConsumed() { + return firstRowConsumed; + } + public void setFirstRowConsumed(int value) { + this.firstRowConsumed = value; + } + public int getSecondRowConsumed() { + return secondRowConsumed; + } + public void setSecondRowConsumed(int value) { + this.secondRowConsumed = value; + } + public int getThirdRowConsumed() { + return thirdRowConsumed; + } + public void setThirdRowConsumed(int value) { + this.thirdRowConsumed = value; + } + public int getForthRowConsumed() { + return forthRowConsumed; + } + public void setForthRowConsumed(int value) { + this.forthRowConsumed = value; + } + +} diff --git a/src/main/java/dev/galacticraft/mod/screen/GCMenuTypes.java b/src/main/java/dev/galacticraft/mod/screen/GCMenuTypes.java index 347b34086..a63c87a1f 100644 --- a/src/main/java/dev/galacticraft/mod/screen/GCMenuTypes.java +++ b/src/main/java/dev/galacticraft/mod/screen/GCMenuTypes.java @@ -56,6 +56,7 @@ public class GCMenuTypes { public static final MenuType OXYGEN_COLLECTOR = MachineMenu.createType(OxygenCollectorMenu::new); public static final MenuType> OXYGEN_COMPRESSOR = MachineMenu.createSimple(() -> GCMachineTypes.OXYGEN_COMPRESSOR); + public static final MenuType FOOD_CANNER = MachineMenu.createType(FoodCannerMenu::new); public static final MenuType> OXYGEN_DECOMPRESSOR = MachineMenu.createSimple(() -> GCMachineTypes.OXYGEN_DECOMPRESSOR); public static final MenuType> OXYGEN_SEALER = MachineMenu.createSimple(() -> GCMachineTypes.OXYGEN_SEALER); @@ -90,6 +91,7 @@ public static void register() { Registry.register(BuiltInRegistries.MENU, Constant.id(Constant.Menu.OXYGEN_COLLECTOR_MENU), OXYGEN_COLLECTOR); Registry.register(BuiltInRegistries.MENU, Constant.id(Constant.Menu.OXYGEN_COMPRESSOR_MENU), OXYGEN_COMPRESSOR); + Registry.register(BuiltInRegistries.MENU, Constant.id(Constant.Menu.FOOD_CANNER_MENU), FOOD_CANNER); Registry.register(BuiltInRegistries.MENU, Constant.id(Constant.Menu.OXYGEN_DECOMPRESSOR_MENU), OXYGEN_DECOMPRESSOR); Registry.register(BuiltInRegistries.MENU, Constant.id(Constant.Menu.BUBBLE_DISTRIBUTOR_MENU), OXYGEN_BUBBLE_DISTRIBUTOR); Registry.register(BuiltInRegistries.MENU, Constant.id(Constant.Menu.OXYGEN_SEALER_MENU), OXYGEN_SEALER); diff --git a/src/main/java/dev/galacticraft/mod/util/TextureUtils.java b/src/main/java/dev/galacticraft/mod/util/TextureUtils.java index 654c22e92..fd82a42f3 100644 --- a/src/main/java/dev/galacticraft/mod/util/TextureUtils.java +++ b/src/main/java/dev/galacticraft/mod/util/TextureUtils.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.util; import net.minecraft.client.Minecraft; diff --git a/src/main/java/dev/galacticraft/mod/util/Translations.java b/src/main/java/dev/galacticraft/mod/util/Translations.java index 5d074e158..b42fb73a8 100644 --- a/src/main/java/dev/galacticraft/mod/util/Translations.java +++ b/src/main/java/dev/galacticraft/mod/util/Translations.java @@ -91,6 +91,7 @@ interface Config { String ENERGY_STORAGE_MODULE_STORAGE_SIZE = "config.galacticraft.energy.machines.energy_storage_module_storage_size"; String ENERGY_STORAGE_SIZE = "config.galacticraft.energy.machines.energy_storage_size"; String OXYGEN_COMPRESSOR_ENERGY_CONSUMPTION_RATE = "config.galacticraft.energy.machines.oxygen_compressor_energy_consumption_rate"; + String FOOD_CANNER_ENERGY_CONSUMPTION_RATE = "config.galacticraft.energy.machines.food_canner_energy_consumption_rate"; String OXYGEN_DECOMPRESSOR_ENERGY_CONSUMPTION_RATE = "config.galacticraft.energy.machines.oxygen_decompressor_energy_consumption_rate"; String CLIENT = "config.galacticraft.client"; @@ -220,7 +221,11 @@ interface MachineStatus { String ALREADY_SEALED = "ui.galacticraft.status.already_sealed"; String AREA_TOO_LARGE = "ui.galacticraft.status.area_too_large"; String BLOCKED = "ui.galacticraft.status.blocked"; + String MISSING_EMPTY_CAN = "ui.galacticraft.status.missing_empty_can"; String COLLECTING = "ui.galacticraft.status.collecting"; + String CANNING = "ui.galacticraft.status.canning"; + String TRANSFERRING_CAN = "ui.galacticraft.status.transferring_can"; + String NO_FOOD = "ui.galacticraft.status.no_food"; String COMPRESSING = "ui.galacticraft.status.compressing"; String COOLING_DOWN = "ui.galacticraft.status.cooling_down"; String DECOMPRESSING = "ui.galacticraft.status.decompressing"; diff --git a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java index 6fa847799..46b37f12a 100644 --- a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java +++ b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.world.gen.custom; import com.mojang.serialization.Codec; diff --git a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidSaveData.java b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidSaveData.java index bf0ef9471..e7a314a08 100644 --- a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidSaveData.java +++ b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidSaveData.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.world.gen.custom; import dev.galacticraft.mod.Constant; diff --git a/src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlock.java b/src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlock.java index 7c24f90bb..dcc5ab266 100644 --- a/src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlock.java +++ b/src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlock.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.world.gen.custom; import net.minecraft.world.level.block.Block; diff --git a/src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlockHandler.java b/src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlockHandler.java index 5a2f1b437..dcfeeec11 100644 --- a/src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlockHandler.java +++ b/src/main/java/dev/galacticraft/mod/world/gen/custom/SpecialAsteroidBlockHandler.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.world.gen.custom; import java.util.ArrayList; diff --git a/src/main/resources/assets/galacticraft/models/machine/food_canner.json b/src/main/resources/assets/galacticraft/models/machine/food_canner.json new file mode 100644 index 000000000..488777b0d --- /dev/null +++ b/src/main/resources/assets/galacticraft/models/machine/food_canner.json @@ -0,0 +1,8 @@ +{ + "machinelib:generate": "machinelib:z_axis", + "sprites": { + "front": "galacticraft:block/food_canner", + "back": "galacticraft:block/food_canner_back", + "sided": true + } +} \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/textures/gui/circuit_fabricator_screen.png b/src/main/resources/assets/galacticraft/textures/gui/circuit_fabricator_screen.png index 37bf7f2b080d1b9db56062c329094bce81f62d65..b85693aef435637350faa9d687059caa1add0573 100644 GIT binary patch delta 924 zcmX@hy_a`_as&f=iKnkC`wKQ{CMNkN#kCm>3=HBWt`Q}{`DrEPiAAXl?mjL7e(nlo zsYMFLdM1UfOCAE1aFi7IxdUa4fouk^22FV&#ggvm>&U>cv7h@-BI`y)0p|K7Z+Dmf zOW8ji1>Vt|6$h=OE0(V!)CM3ZkuandCP7~Fkj=eb^jkuaeTn};ELDo*s8`{ z=j;3+hk$_s^8w!*|4I@qO6!yTCkrRYfBC)7!g!8M!jnv}yhCC`!GoQ7416CMN|*)s z{;X1OxUmN;bHIx6+u^?_Wf&g&1v4c)`SYBq$CeLbD1>~);IXIjj>3UCzuCY7Yxopo zW?WM~uwfg+xi@pqaX3UXD8GC8qPA|`GlqYEtLon@zqN!PV#0#7hW~F~t&>++6Wg%S z`U~TMD!InjOh8i_rZU8AKWg~w@rV23{+6zPj(*+CFHv*7^=psk@{au$<_AtMv1YZX z+4H~X|H~imz7^OySZr7?`#|l-=j-{O`^wET?tR=O&Q!Ca_Rz`dzZ^1ge+4}D8(un~ zTu@z8UtjY(P5z$f>UFETds!3imDlrmnXG1=&0g@`R_EfDX{VJ9WKMmqmd@5?`jGrH za!Ss%_Jy8Tf4XU$+%FQ#e4zC7qsg;Mx_)%8juwix0(*D@d%_OB_}d|7icO`rFj5lyi}UBj(w4QsjFnHd)3H^lNaoc;E4$Jr^5zt`n^$6smr^yl8^ zT& zkaOU#NzX)P|6h^~j?g8>Q5GPL5*Eg0FBx=Mfj+v&aP4d6x2~x8^D|<o=`~5k c6Nnt`8UHQdw9<<-(F5u5boFyt=akR{0A{LZ3jhEB delta 684 zcmdnXdzO2G^2S;|=K7K#zhDN3XE)Lq7?`R(T^vIyZoR$p&~LGW2wOmaQ%QL2>s`0L z*9Yysc_io67N?nkdf#j8IW-H6oUOk*?Oyl#@sjL`b@J-9pI+a8|I3VFx5mzW@1hyr zFu;Kd+YYO98>~0)EL$eGO!Yv)l={byjy!wCAk5DUQd7^cPcp$`q6tH?B}0*aqYuN< z&rD#ww^=0YzNtqu_*kDQXYjH4zmy@^o*ix~knx&f#T^?yj)3j?5DiVtJl#bM7Prg! z7!1Pr8!iMdFj?09_|KUo9W}x_cdw@D%7Aqrn8j%K@>QPv1B*h&Wo0kw&8=B)+1z9V z$p!9X)6XjOiR6pF=BoK#W}|{pOqhet`#Vw({w|r!)Z?$eUVp#*yS(GGTrVatJl?^x z;O#j^H;0^tkNamkcs0bIub(IXzWxr-paiJ{YqSoDF|N{+VOYcZV7cG~(S(0V8QBcE z|1}fuGEAR(^tmmg$#a3HbN|*)76Ci!$D(})Zf&di$-i)GF4!?(Q7EzHJ@=a2?yd=% z$bw*YfMAfI5i5qUmJ>I_9&-+c26Ok&*1vq{@*%CEtyftX86vKKtv6?Q@oWElX*FJk zU3Nde%CkILA}k05E2lnmxy111G~DLhLDnz~1+J z*2^(0T<(zRBYynnOwWy5ci&o*jidpj%W?YQ*mWv(eR2+&Tq#wG)7@O4VB1XdCMBPf Tw`v~=g4B7s`njxgN@xNA7n9<_ diff --git a/src/main/resources/assets/galacticraft/textures/gui/food_canner_screen.png b/src/main/resources/assets/galacticraft/textures/gui/food_canner_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..6658031c63cf58610db90c5da96fd3eed396e7a1 GIT binary patch literal 2608 zcmcImdsI_r694Wcm;?|~uz(hlfI;k55e1KH5lA2y@QFwTLzGwxcx(lN5g`O}d5fr^ zRnYQE0WEt#MI|L#gn%tr50&7e94Q6@%0uL#k`P{DztDDTyY2SuIqtcC%-or|GryVN zd|#5`yN$KbV2J?$V4;sU(+>ayst6z~fPxcM777KP@3YklKd|6ELqMr(91npe3%*w% ze`iD}|LDG`5Ww2PglVYJAyHH(2WMVtsS<_|_>tRK(BlMkunBvg0tGINv6TV9wJgJ# zefscy!N;3fOd!)eOA7G*01z{Mm<<1z{Nc_Y!ru*8lB!(V=7@ff#AgkjqBoymu$nDn z8eJnl;vnmiH>}=&mRuUP(a>i$tAUXV=nwNL|rCapFD-i+lEoT(pW>j1}BCH7x znC!2Jj*i}CO?e&6HLh?ETb*Ab63&Q^H`~!1i-A?bg`h%r(Kb|qlgCFU=ETluUfR$c zuY=;EK&}}91KE}+70}WE0c6+!l>YJWOjrhPY)pBlenadl+KkyHRnyu>g%{N%x)|KD z=Mq-#-Cd=YHg?=-Bco+al5_b_)fU0|nRop>LDQh|R5IRV*PNy=&rGX+7?7Tgtyqhz zoSIY4wNOMA+No!`_MEzeS(0h?#Wdh>H!nGPfN1-XC%9cBoP3qyP=M2FRqgfV%;!&6 zwd%3&DijK3U3;!}cIMU4Ro3X?Lx+P$Mn+D3y}fi72N5<8|5zQ+Qt0Y3LzWHl@pa#r zY9_MW$+ayZHzX3tJGMJ``jPppEVA{c?i%6rlcVKbqUl3DUbd=U1MU&Np*&tS*FVuk zIW8`V`^H5xG1}!GTT~t@63uxqi#sKn)I`1cPD_l1Z zLwe5p8|RTbuL;<3`h|}KkSg<4SdPQZpdsj^VvETf^Z*4aeR0r5;HKeoK}R|uh$qRA zWAwbT-VRg4$OE;|$W^1#V~>nEpSt4cpu}&;!r#pvGreprozJ_`fX^V05HSnvxlMyy=;_Y^BT!4tjpR7zmAtB#Pr96JLzlU;<9i!n?QQ zCftcpB&%uC;&!;Ptj ze{`A~Z9Ms2c~EuuLUL8xi;W=ZT6Fz*w;_%x^Bny8+0dqcIeQaW8VH( zgoc&1{i6elXpL82?q);rboks*`_=8WJuaG}7Ohsh@fh=&A39(>r%)6o*D>HGuiHpl zlkm=R4Ns!ZTz6Te@e&J2biJ%{iC#PVO+tRP;fUN>oYB_t#E4nmNl6%_mqY_%um8M1 zZpAS4iXJhnK?QO#*K&w zjwp80_}5q#7!|1~!oF-R z3G>$NRzZFGgLu<{R;SW*fa=R1Tof1PztxWaV0b^#bCT@p=>ZrhV5j`>NumNwB2(W$7k`x5Emj8zMOI8x_UG^uP zrMlx6zzzp?_S)5N%1CIYFH-7Fk$|H$6frw|xgR#*$6sFWmhoYXC-^Jz%V7TqH~X(q zl%-nWkT>RC%zr#;4gxEIjtf9NHHLs5!dp@_l&IG>*4bY&n&BTc;N!K8dBua9^e@bF B0?hyb literal 0 HcmV?d00001 From ac3acde01e65b0970fcccb7a855ce8c6112f538d Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Mon, 15 Jul 2024 09:32:11 +1000 Subject: [PATCH 09/23] started rudimentary work on structures sort of started working on asteroid dimension structures --- .../mod/content/item/CannedFoodItem.java | 1 - .../world/gen/base/MapGenAbandonedBase.java | 20 +++++++++++++++++++ .../gen/custom/AsteroidChunkGenerator.java | 8 ++++++-- 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 src/main/java/dev/galacticraft/mod/world/gen/base/MapGenAbandonedBase.java diff --git a/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java b/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java index 4f063201e..db275328d 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java +++ b/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java @@ -245,7 +245,6 @@ public static void add(ItemStack cannedFood, ItemStack stack) { for (int i = 0; i < listTag.size(); i++) { if (listTag.getCompound(i).get("id").getAsString().equals(compoundTag3.get("id").getAsString())) { - System.out.println(i); iter = i; } } diff --git a/src/main/java/dev/galacticraft/mod/world/gen/base/MapGenAbandonedBase.java b/src/main/java/dev/galacticraft/mod/world/gen/base/MapGenAbandonedBase.java new file mode 100644 index 000000000..a040db865 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/world/gen/base/MapGenAbandonedBase.java @@ -0,0 +1,20 @@ +package dev.galacticraft.mod.world.gen.base; + +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.block.Blocks; + +import java.util.Random; + +public class MapGenAbandonedBase { + public static void generateStructure(ServerLevel world, Random rand, BlockPos pos) { + // Example: Simple 3x3x3 cube of stone + for (int x = 0; x < 3; x++) { + for (int y = 0; y < 3; y++) { + for (int z = 0; z < 3; z++) { + world.setBlock(pos.offset(x, y, z), Blocks.STONE.defaultBlockState(), 0); + } + } + } + } +} diff --git a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java index 46b37f12a..895d37711 100644 --- a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java +++ b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java @@ -29,6 +29,8 @@ import dev.galacticraft.api.perlin.generator.Gradient; import dev.galacticraft.api.vector.BlockVec3; import dev.galacticraft.mod.content.GCBlocks; +import dev.galacticraft.mod.world.gen.base.MapGenAbandonedBase; +import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.nbt.CompoundTag; @@ -129,6 +131,7 @@ public class AsteroidChunkGenerator extends ChunkGenerator { private static HashSet chunksDone = new HashSet(); private int largeAsteroidsLastChunkX; private int largeAsteroidsLastChunkZ; + private final MapGenAbandonedBase dungeonGenerator = new MapGenAbandonedBase(); public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( @@ -559,7 +562,7 @@ public void applyCarvers(WorldGenRegion region, long seed, RandomState randomSta } else if (!(chunkAccess.getBlockState(new BlockPos(px - 4, y, pz)).isAir())) { count = 7; } -//LIGHTEMP world.setLightFor(EnumSkyBlock.BLOCK, new BlockPos(px - (count > 1 ? 1 : 0), y, pz), count); + //world.setLightFor(EnumSkyBlock.BLOCK, new BlockPos(px - (count > 1 ? 1 : 0), y, pz), count); } } } @@ -654,7 +657,7 @@ public void applyCarvers(WorldGenRegion region, long seed, RandomState randomSta } } - //this.dungeonGenerator.generate(this.world, this.rand, new ChunkPos(chunkX, chunkZ)); + //this.dungeonGenerator.generateStructure(chunkAccess, this.rand, new ChunkPos(chunkX, chunkZ)); } @Override @@ -813,6 +816,7 @@ private void addToNBT(CompoundTag nbt, AsteroidData coords) this.setData(dataFile, datafile); } + private void writeToNBT(CompoundTag nbt) { ListTag coordList = new ListTag(); From 1db30d33a37cdf656ff65eaa79d1c6013db8cb94 Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Mon, 19 Aug 2024 19:39:38 +1000 Subject: [PATCH 10/23] fixed licenscing + more removed TODO: comment in food_canner json because it was causing issues. make sure in future to change the recipe for the food canner block ad the advancement requirements added licencing --- .../recipes/misc/food_canner.json | 1 - .../world/gen/base/MapGenAbandonedBase.java | 22 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/generated/data/galacticraft/advancements/recipes/misc/food_canner.json b/src/main/generated/data/galacticraft/advancements/recipes/misc/food_canner.json index 7ab970298..918b29a18 100644 --- a/src/main/generated/data/galacticraft/advancements/recipes/misc/food_canner.json +++ b/src/main/generated/data/galacticraft/advancements/recipes/misc/food_canner.json @@ -1,5 +1,4 @@ { - //TODO come back to this and change recipe requirements "parent": "minecraft:recipes/root", "criteria": { "has_oxygen_concentrator": { diff --git a/src/main/java/dev/galacticraft/mod/world/gen/base/MapGenAbandonedBase.java b/src/main/java/dev/galacticraft/mod/world/gen/base/MapGenAbandonedBase.java index a040db865..ecb0bb9a5 100644 --- a/src/main/java/dev/galacticraft/mod/world/gen/base/MapGenAbandonedBase.java +++ b/src/main/java/dev/galacticraft/mod/world/gen/base/MapGenAbandonedBase.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.world.gen.base; import net.minecraft.core.BlockPos; From 76b6233e9d92ca100d338bf4cb567ff14b879c31 Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Wed, 21 Aug 2024 14:01:50 +1000 Subject: [PATCH 11/23] no summary??? fixed json issue added only eat canned food in space sealer code half implemented. uploading github because need backup because rewriting sealer AGAIN... --- .../generated/data/c/tags/items/foods.json | 2 +- .../mod/accessor/ServerLevelAccessor.java | 5 +- .../gui/screen/ingame/OxygenSealerScreen.java | 2 + .../machine/OxygenSealerBlockEntity.java | 164 +++++++++--------- .../mod/events/GCEventHandlers.java | 33 ++++ .../dev/galacticraft/mod/machine/Region.java | 42 +++++ .../mod/machine/SealerManager.java | 150 ++++++++++++++++ .../mod/mixin/ServerLevelMixin.java | 25 ++- 8 files changed, 327 insertions(+), 96 deletions(-) create mode 100644 src/main/java/dev/galacticraft/mod/machine/Region.java create mode 100644 src/main/java/dev/galacticraft/mod/machine/SealerManager.java diff --git a/src/main/generated/data/c/tags/items/foods.json b/src/main/generated/data/c/tags/items/foods.json index 369b2897e..ca81c0dba 100644 --- a/src/main/generated/data/c/tags/items/foods.json +++ b/src/main/generated/data/c/tags/items/foods.json @@ -1,7 +1,7 @@ { "replace": false, "values": [ - "galacticraft:moon_berry_bush", + "galacticraft:moon_berries", "galacticraft:cheese_curd", "galacticraft:cheese_slice", "galacticraft:burger_bun", diff --git a/src/main/java/dev/galacticraft/mod/accessor/ServerLevelAccessor.java b/src/main/java/dev/galacticraft/mod/accessor/ServerLevelAccessor.java index 91d11fa03..6a6100a0c 100644 --- a/src/main/java/dev/galacticraft/mod/accessor/ServerLevelAccessor.java +++ b/src/main/java/dev/galacticraft/mod/accessor/ServerLevelAccessor.java @@ -23,9 +23,10 @@ package dev.galacticraft.mod.accessor; import dev.galacticraft.mod.content.block.entity.machine.OxygenSealerBlockEntity; +import net.minecraft.server.level.ServerLevel; public interface ServerLevelAccessor { - void addSealer(OxygenSealerBlockEntity sealer); + void addSealer(OxygenSealerBlockEntity sealer, ServerLevel world); - void removeSealer(OxygenSealerBlockEntity sealer); + void removeSealer(OxygenSealerBlockEntity sealer, ServerLevel world); } diff --git a/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/OxygenSealerScreen.java b/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/OxygenSealerScreen.java index 588dfbcbc..e10b464b9 100644 --- a/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/OxygenSealerScreen.java +++ b/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/OxygenSealerScreen.java @@ -46,6 +46,8 @@ protected void renderForeground(GuiGraphics graphics, int mouseX, int mouseY, fl super.renderForeground(graphics, mouseX, mouseY, delta); MachineStatus status = this.menu.state.getStatus(); + int sealingPower = this.menu.machine.getSealingPower(); graphics.drawString(this.font, Component.translatable(Translations.Ui.MACHINE_STATUS).append(status != null ? status.getText() : Component.empty()), this.leftPos + 50, this.topPos + 30, ChatFormatting.DARK_GRAY.getColor(), false); + graphics.drawString(this.font, Component.literal("SEALING POWER: ").append(String.valueOf(sealingPower)), this.leftPos + 50, this.topPos + 50, ChatFormatting.DARK_GRAY.getColor(), false); } } diff --git a/src/main/java/dev/galacticraft/mod/content/block/entity/machine/OxygenSealerBlockEntity.java b/src/main/java/dev/galacticraft/mod/content/block/entity/machine/OxygenSealerBlockEntity.java index b33f524cd..523e751c3 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/entity/machine/OxygenSealerBlockEntity.java +++ b/src/main/java/dev/galacticraft/mod/content/block/entity/machine/OxygenSealerBlockEntity.java @@ -33,12 +33,14 @@ import dev.galacticraft.mod.accessor.ServerLevelAccessor; import dev.galacticraft.mod.content.GCMachineTypes; import dev.galacticraft.mod.machine.GCMachineStatuses; +import dev.galacticraft.mod.machine.Region; +import dev.galacticraft.mod.machine.SealerManager; import dev.galacticraft.mod.util.FluidUtil; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.util.Tuple; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; @@ -51,7 +53,6 @@ import org.jetbrains.annotations.Nullable; import java.util.HashSet; -import java.util.LinkedList; import java.util.Queue; import java.util.Set; @@ -71,9 +72,15 @@ public class OxygenSealerBlockEntity extends MachineBlockEntity { private boolean oxygenWorld = false; private boolean sealed = false; private boolean oxygenUnloaded = true; + private final Region region; + private int remainingCapacity; + + public static final int SEALING_POWER = 1024; public OxygenSealerBlockEntity(BlockPos pos, BlockState state) { super(GCMachineTypes.OXYGEN_SEALER, pos, state); + this.region = Region.EMPTY; + this.remainingCapacity = SEALING_POWER; } @Override @@ -81,7 +88,7 @@ public void setLevel(Level world) { super.setLevel(world); this.sealCheckTime = SEAL_CHECK_TIME; this.oxygenWorld = CelestialBody.getByDimension(world).map(body -> body.atmosphere().breathable()).orElse(true); - if (!world.isClientSide) ((ServerLevelAccessor) world).addSealer(this); + if (!world.isClientSide) ((ServerLevelAccessor) world).addSealer(this, (ServerLevel) world); } @Override @@ -97,87 +104,21 @@ protected void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @ @Override protected @NotNull MachineStatus tick(@NotNull ServerLevel level, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull ProfilerFiller profiler) { assert level != null; - // if (this.disabled != (this.disabled = false)) { - // ((ServerLevelAccessor) level).addSealer(this); - // } - if (this.energyStorage().canExtract(Galacticraft.CONFIG.oxygenCompressorEnergyConsumptionRate())) { if (!this.fluidStorage().getSlot(OXYGEN_TANK).isEmpty()) { if (this.sealCheckTime > 0) this.sealCheckTime--; - if (this.updateQueued && this.sealCheckTime == 0) { - profiler.push("check_seal"); - this.updateQueued = false; - this.sealCheckTime = SEAL_CHECK_TIME; - BlockPos pos1 = pos.relative(Direction.UP); - if (this.oxygenWorld || (this.breathablePositions.isEmpty() && level.isBreathable(pos1))) { - profiler.pop(); - return GCMachineStatuses.ALREADY_SEALED; - } - for (BlockPos pos2 : this.breathablePositions) { - level.setBreathable(pos2, false); - } - this.breathablePositions.clear(); - this.watching.clear(); - Queue> queue = new LinkedList<>(); - Set> checked = new HashSet<>(); - Set added = new HashSet<>(); - BlockState state1; - Tuple pair; - BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); - queue.add(new Tuple<>(pos1, Direction.UP)); - checked.add(new Tuple<>(pos1, Direction.UP)); - while (!queue.isEmpty()) { - pair = queue.poll(); - pos1 = pair.getA(); - state1 = level.getBlockState(pos1); - if (state1.isAir() || (!Block.isFaceFull(state1.getCollisionShape(level, pos1), pair.getB().getOpposite()))) { - this.breathablePositions.add(pos1); - if (this.breathablePositions.size() > 1024) { - this.breathablePositions.clear(); - this.watching.clear(); - this.updateQueued = true; - this.sealCheckTime = SEAL_CHECK_TIME * 5; - this.sealed = false; - profiler.pop(); - return GCMachineStatuses.AREA_TOO_LARGE; - } - added.add(pos1); - final BlockPos finalPos = pos1; - queue.removeIf(blockPosDirectionPair -> blockPosDirectionPair.getA().equals(finalPos)); - for (Direction direction : Constant.Misc.DIRECTIONS) { - final Tuple e = new Tuple<>(mutable.set(pos1).move(direction).immutable(), direction); - if (!added.contains(e.getA()) && checked.add(e)) { - if (!Block.isFaceFull(state1.getCollisionShape(level, pos1), e.getB())) { - queue.add(e); - } - } - } - } else { - this.watching.add(pos1); - } - } - this.sealed = true; // if escaped queue then set sealed - for (BlockPos pos2 : this.breathablePositions) { - level.setBreathable(pos2, true); - } - profiler.pop(); + for (BlockPos sealedBlockPos : region.getPositions()) { + spawnParticlesAtCenter(level, sealedBlockPos, ParticleTypes.FLAME); } - - if (!this.sealed) { - return GCMachineStatuses.AREA_TOO_LARGE; + if (sealed) + { + return GCMachineStatuses.SEALED; } - - profiler.push("extract"); - this.energyStorage().extract(Galacticraft.CONFIG.oxygenCompressorEnergyConsumptionRate()); - this.fluidStorage().getSlot(OXYGEN_TANK).extract(Gases.OXYGEN, breathablePositions.size() * 2L); - profiler.pop(); - return GCMachineStatuses.SEALED; + return GCMachineStatuses.AREA_TOO_LARGE; } else { - this.tryClearSeal(level); return GCMachineStatuses.NOT_ENOUGH_OXYGEN; } } else { - this.tryClearSeal(level); return MachineStatuses.NOT_ENOUGH_ENERGY; } } @@ -198,14 +139,13 @@ private void tryClearSeal(@NotNull ServerLevel world) { @Override protected void tickDisabled(@NotNull ServerLevel world, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull ProfilerFiller profiler) { - this.tryClearSeal(world); super.tickDisabled(world, pos, state, profiler); } @Override public void setRemoved() { if (!this.level.isClientSide) { - ((ServerLevelAccessor) this.level).removeSealer(this); + ((ServerLevelAccessor) this.level).removeSealer(this, (ServerLevel) this.level); } if (!this.oxygenUnloaded) { this.oxygenUnloaded = true; @@ -232,9 +172,73 @@ public AbstractContainerMenu createMenu(int syncId, Inventory inv, Player player return null; } - public void enqueueUpdate(BlockPos pos, VoxelShape voxelShape2) { - if ((this.watching.contains(pos) && !Block.isShapeFullBlock(voxelShape2)) || (this.breathablePositions.contains(pos) && !voxelShape2.isEmpty())) { + public void enqueueUpdate(BlockPos pos, VoxelShape voxelShape) { + if ((this.watching.contains(pos) && !Block.isShapeFullBlock(voxelShape)) || (this.breathablePositions.contains(pos) && !voxelShape.isEmpty())) { this.updateQueued = true; } } + + + + public void checkAndUpdateSealing(BlockPos changedPos, ServerLevel world) + { + if (Block.isShapeFullBlock(world.getBlockState(changedPos).getCollisionShape(world, changedPos))) { + System.out.println("solid block"); + SealerManager.recalculateSealedRegion(this, world); + }else{ + System.out.println("unsolid block"); + } + //recalculate region + } + + private void sealRegion() { + System.out.println("SEALING REGION"); + sealed = true; + } + + private void unsealRegion() { + System.out.println("UNSEALING REGION"); + sealed = false; + } + + private boolean canSealRegion() { + //if region still has capacity + return remainingCapacity > 0; + } + + private void requestAdditionalSealingPower() { + // Request sealing power from adjacent sealers or update sealing power + // Implement logic to communicate with neighboring sealers + } + + public static void spawnParticlesAtCenter(ServerLevel level, BlockPos pos, SimpleParticleType type) { + double centerX = pos.getX() + 0.5; + double centerY = pos.getY() + 0.5; + double centerZ = pos.getZ() + 0.5; + + // Spawn the particle at the center + level.sendParticles(type, centerX, centerY, centerZ, 1, 0, 0, 0, 0); + + } + + public void buildRegion(Queue visitedQueue, Queue regionQueue) { + this.region.setPositions(new HashSet<>(visitedQueue)); + this.remainingCapacity = SEALING_POWER - this.region.getRegionSize(); + if (regionQueue.isEmpty()) + { + this.sealRegion(); + } + } + + public int getSealingPower() { + return SEALING_POWER - this.region.getRegionSize(); + } + + public Region getRegion() { + return this.region; + } + + public void updateRegion(Set blocks) { + this.region.setPositions(blocks); + } } \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java b/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java index e02025ee2..dc0357c7f 100644 --- a/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java +++ b/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java @@ -27,12 +27,16 @@ import dev.galacticraft.api.universe.celestialbody.landable.teleporter.CelestialTeleporter; import dev.galacticraft.impl.rocket.RocketDataImpl; import dev.galacticraft.mod.content.block.special.CryogenicChamberBlock; +import dev.galacticraft.mod.content.item.CannedFoodItem; import dev.galacticraft.mod.content.item.GCItems; +import dev.galacticraft.mod.machine.SealerManager; import dev.galacticraft.mod.misc.footprint.FootprintManager; import dev.galacticraft.mod.network.packets.FootprintRemovedPacket; import dev.galacticraft.mod.util.Translations; import net.fabricmc.fabric.api.entity.event.v1.EntitySleepEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents; +import net.fabricmc.fabric.api.event.player.UseItemCallback; import net.fabricmc.fabric.api.networking.v1.PlayerLookup; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.core.BlockPos; @@ -42,7 +46,10 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -50,8 +57,11 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BedBlock; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.dimension.DimensionType; import org.jetbrains.annotations.Nullable; +import java.awt.*; + public class GCEventHandlers { public static void init() { EntitySleepEvents.ALLOW_BED.register(GCEventHandlers::allowCryogenicSleep); @@ -61,6 +71,27 @@ public static void init() { EntitySleepEvents.STOP_SLEEPING.register(GCEventHandlers::onWakeFromCryoSleep); GiveCommandEvents.MODIFY.register(GCEventHandlers::modifyOnGive); ServerTickEvents.END_WORLD_TICK.register(GCEventHandlers::onWorldTick); + ServerWorldEvents.LOAD.register(SealerManager::calculateQueuedRegions); + UseItemCallback.EVENT.register(GCEventHandlers::onPlayerUseItem); + } + + private static InteractionResultHolder onPlayerUseItem(Player player, Level world, InteractionHand hand) { + boolean oxygenWorld = CelestialBody.getByDimension(world).map(body -> body.atmosphere().breathable()).orElse(true); + if (!oxygenWorld) + { + ItemStack itemStack = player.getItemInHand(hand); + + if (itemStack.getItem() instanceof CannedFoodItem) + { + return InteractionResultHolder.pass(itemStack); + } else { + player.displayClientMessage(Component.literal("You cannot eat this here!").withColor(Color.RED.getRGB()), true); + player.playNotifySound(SoundEvents.GENERIC_EAT, player.getSoundSource(), 1.0F, 1.0F); + + return InteractionResultHolder.fail(itemStack); + } + } + return InteractionResultHolder.pass(player.getItemInHand(hand)); } public static InteractionResult allowCryogenicSleep(LivingEntity entity, BlockPos sleepingPos, BlockState state, boolean vanillaResult) { @@ -139,5 +170,7 @@ public static void onWorldTick(ServerLevel world) { footprintManager.footprintBlockChanges.clear(); } + SealerManager.checkSealerQueue(world); + SealerManager.processBlockChanges(world); } } \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/machine/Region.java b/src/main/java/dev/galacticraft/mod/machine/Region.java new file mode 100644 index 000000000..ca396f854 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/machine/Region.java @@ -0,0 +1,42 @@ +package dev.galacticraft.mod.machine; + +import net.minecraft.core.BlockPos; + +import java.util.HashSet; +import java.util.Set; + +public class Region { + public static final Region EMPTY = new Region(new HashSet<>()); + private Set blockRegionArea; + + public Region(Set originalRegionArea) + { + blockRegionArea = originalRegionArea; + } + + public boolean contains(BlockPos pos) + { + return blockRegionArea.contains(pos); + } + + public int getRegionSize() + { + return blockRegionArea.size(); + } + + public Set getPositions() { + return blockRegionArea; + } + + public void setPositions(Set region) { + this.blockRegionArea = region; + } + + public void remove(BlockPos changedPos) { + this.blockRegionArea.remove(changedPos); + } + + public void add(BlockPos changedPos) { + this.blockRegionArea.add(changedPos); + } +} diff --git a/src/main/java/dev/galacticraft/mod/machine/SealerManager.java b/src/main/java/dev/galacticraft/mod/machine/SealerManager.java new file mode 100644 index 000000000..6c96afc6f --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/machine/SealerManager.java @@ -0,0 +1,150 @@ +package dev.galacticraft.mod.machine; +import dev.galacticraft.mod.content.block.entity.machine.OxygenSealerBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.dimension.DimensionType; + +import java.util.*; + +import static dev.galacticraft.mod.content.block.entity.machine.OxygenSealerBlockEntity.spawnParticlesAtCenter; + +public class SealerManager { + //instance of sealer manager + public static final SealerManager INSTANCE = new SealerManager(); + + private SealerManager() { + } + + private static HashMap> WALLS = new HashMap<>(); + + private static Set sealerTracker = new HashSet<>(); + private final List changedBlocks = new ArrayList<>(); + private List changedBlocksDimensions = new ArrayList<>(); + private Queue queuedSealers = new LinkedList<>(); + + public static void checkSealerQueue(ServerLevel world) { + OxygenSealerBlockEntity[] sealers = INSTANCE.queuedSealers.toArray(new OxygenSealerBlockEntity[0]); + for (int i = 0; i < sealers.length; i++) { + OxygenSealerBlockEntity sealer = sealers[i]; + if (sealer != null && Objects.requireNonNull(sealer.getLevel()).dimension().equals(world.dimension())) { + calculateRegion(sealer, world); + INSTANCE.queuedSealers.remove(sealer); + } + } + } + + public static void recalculateSealedRegion(OxygenSealerBlockEntity sealer, ServerLevel world) { + System.out.println("Recalculating area"); + Set blocks = sealer.getRegion().getPositions(); + Set toRemove = new HashSet<>(); + blocks.forEach(pos -> { + if (Block.isShapeFullBlock(world.getBlockState(pos).getCollisionShape(world, pos))) { + toRemove.add(pos); + } + }); + toRemove.forEach(blocks::remove); + sealer.updateRegion(blocks); + } + + public void onBlockChange(BlockPos pos, BlockState newState, DimensionType dimension) { + //add all changed blocks to a list for rechecking + INSTANCE.changedBlocksDimensions.add(dimension); + INSTANCE.changedBlocks.add(pos); + } + + public static void processBlockChanges(ServerLevel world) { + BlockPos[] changedBlocks = INSTANCE.changedBlocks.toArray(BlockPos[]::new); + DimensionType[] changedBlocksDimensions = INSTANCE.changedBlocksDimensions.toArray(DimensionType[]::new); + for (int i = 0; i < changedBlocks.length; i++) { + BlockPos block = changedBlocks[i]; + if (block != null && changedBlocksDimensions[i].equals(world.dimensionType())) { + OxygenSealerBlockEntity sealer = findSealerManagingRegion(block); + if (sealer != null) + { + sealer.checkAndUpdateSealing(block, world); + INSTANCE.changedBlocks.remove(block); + INSTANCE.changedBlocksDimensions.remove(changedBlocksDimensions[i]); + } + } + } + } + + private static OxygenSealerBlockEntity findSealerManagingRegion(BlockPos pos) + { + for (OxygenSealerBlockEntity sealer : sealerTracker) { + if (sealer.getRegion().contains(pos)) { + return sealer; + } + } + return null; + } + + public void addSealer(OxygenSealerBlockEntity sealer, ServerLevel world) + { + System.out.println("Adding sealer at " + sealer.getBlockPos()); + + INSTANCE.queuedSealers.add(sealer); + } + + public static void calculateQueuedRegions(MinecraftServer minecraftServer, ServerLevel world) { + checkSealerQueue(world); + } + + + private static void calculateRegion(OxygenSealerBlockEntity sealer, ServerLevel world) { + System.out.println("Calculating sealer region"); + Queue regionQueue = new LinkedList<>(); + Queue visitedQueue = new LinkedList<>(); + if (!Block.isShapeFullBlock(world.getBlockState(sealer.getBlockPos().above(1)).getCollisionShape(world, sealer.getBlockPos().above(1)))) { + spawnParticlesAtCenter(world, sealer.getBlockPos().above(1), ParticleTypes.END_ROD); + regionQueue.add(sealer.getBlockPos().above(1)); + } + + while (!regionQueue.isEmpty() && visitedQueue.size() < OxygenSealerBlockEntity.SEALING_POWER) { + BlockPos currentPos = regionQueue.poll(); + + for (BlockPos neighbour : neighbours(currentPos)) + { + if (!visitedQueue.contains(neighbour) && !regionQueue.contains(neighbour)) + { + if (!Block.isShapeFullBlock(world.getBlockState(neighbour).getCollisionShape(world, neighbour))) + { + spawnParticlesAtCenter(world, neighbour, ParticleTypes.END_ROD); + regionQueue.add(neighbour); + } + } + } + visitedQueue.add(currentPos); + } + sealer.buildRegion(visitedQueue, regionQueue); + sealerTracker.add(sealer); + } + + private static void spawnParticle(ServerLevel world, SimpleParticleType particle, BlockPos pos) { + world.addParticle(particle, pos.getX(), pos.getY(), pos.getZ(), 0, 0, 0); + } + + private static BlockPos[] neighbours(BlockPos currentPos) { + return new BlockPos[]{currentPos.offset(Direction.UP.getNormal()),currentPos.offset(Direction.DOWN.getNormal()),currentPos.offset(Direction.NORTH.getNormal()),currentPos.offset(Direction.EAST.getNormal()),currentPos.offset(Direction.SOUTH.getNormal()),currentPos.offset(Direction.WEST.getNormal())}; + } + + public void markVisited(Queue region, Queue visited, BlockPos pos) + { + region.remove(pos); + visited.add(pos); + } + + public void removeSealer(OxygenSealerBlockEntity sealer, ServerLevel world) + { + System.out.println("Removing sealer at " + sealer.getBlockPos()); + sealerTracker.remove(sealer); + } +} diff --git a/src/main/java/dev/galacticraft/mod/mixin/ServerLevelMixin.java b/src/main/java/dev/galacticraft/mod/mixin/ServerLevelMixin.java index f01d609c4..8906d255b 100644 --- a/src/main/java/dev/galacticraft/mod/mixin/ServerLevelMixin.java +++ b/src/main/java/dev/galacticraft/mod/mixin/ServerLevelMixin.java @@ -26,10 +26,12 @@ import dev.galacticraft.mod.accessor.LevelAccessor; import dev.galacticraft.mod.accessor.ServerLevelAccessor; import dev.galacticraft.mod.content.block.entity.machine.OxygenSealerBlockEntity; +import dev.galacticraft.mod.machine.SealerManager; import dev.galacticraft.mod.misc.footprint.FootprintManager; import dev.galacticraft.mod.misc.footprint.ServerFootprintManager; import dev.galacticraft.mod.world.dimension.GCDimensions; import dev.galacticraft.mod.world.gen.spawner.EvolvedPillagerSpawner; +import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.RegistryAccess; @@ -64,7 +66,6 @@ @Mixin(ServerLevel.class) public abstract class ServerLevelMixin extends Level implements LevelAccessor, ServerLevelAccessor { @Shadow @Final @Mutable private List customSpawners; - private final @Unique Set sealers = new HashSet<>(); private final @Unique FootprintManager footprintManager = new ServerFootprintManager(); protected ServerLevelMixin(WritableLevelData levelData, ResourceKey dimension, RegistryAccess registryAccess, Holder dimensionTypeRegistration, Supplier profiler, boolean isClientSide, boolean isDebug, long biomeZoomSeed, int maxChainedNeighborUpdates) { @@ -80,25 +81,23 @@ private void setSpawnersGC(MinecraftServer server, Executor workerExecutor, Leve @Inject(method = "sendBlockUpdated", at = @At(value = "INVOKE", target = "Ljava/util/Set;iterator()Ljava/util/Iterator;", remap = false)) private void updateSealerListeners_gc(BlockPos pos, BlockState oldState, BlockState newState, int flags, CallbackInfo ci) { - List queueRemove = new LinkedList<>(); - for (OxygenSealerBlockEntity sealer : this.sealers) { - if (sealer.isRemoved()) { - queueRemove.add(sealer); - assert false : "this shouldn't happen! Oxygen sealer was removed but nothing called #markRemoved"; - } - sealer.enqueueUpdate(pos, newState.getCollisionShape(((Level)(Object) this), pos)); + //make sure old state and new state aren't both solid blocks + //if they are both solid blocks then nothing would have changed + if (oldState.isSolid() && newState.isSolid()) { + //nothing will have changed + return; } - this.sealers.removeAll(queueRemove); + SealerManager.INSTANCE.onBlockChange(pos, newState, this.dimensionType()); } @Override - public void addSealer(OxygenSealerBlockEntity sealer) { - this.sealers.add(sealer); + public void addSealer(OxygenSealerBlockEntity sealer, ServerLevel world) { + SealerManager.INSTANCE.addSealer(sealer, world); } @Override - public void removeSealer(OxygenSealerBlockEntity sealer) { - this.sealers.remove(sealer); + public void removeSealer(OxygenSealerBlockEntity sealer, ServerLevel world) { + SealerManager.INSTANCE.removeSealer(sealer, world); } @Inject(method = "tickChunk", at = @At("HEAD")) From 0115cd94b2376f29b7602d1eae6c1f0538159ea8 Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Wed, 28 Aug 2024 09:16:50 +1000 Subject: [PATCH 12/23] working more on sealers --- .../gui/screen/ingame/OxygenSealerScreen.java | 9 +- .../galacticraft/mod/content/GCBlocks.java | 2 +- .../entity/AirlockControllerBlockEntity.java | 12 +- .../machine/OxygenSealerBlockEntity.java | 127 ++------ .../block/machine/OxygenSealerBlock.java | 45 +++ .../mod/events/GCEventHandlers.java | 3 - .../galacticraft/mod/machine/BlockCheck.java | 9 + .../galacticraft/mod/machine/FloodSearch.java | 149 +++++++++ .../dev/galacticraft/mod/machine/Region.java | 40 ++- .../mod/machine/SealerGroupings.java | 147 +++++++++ .../mod/machine/SealerManager.java | 306 ++++++++++++------ .../galacticraft/mod/machine/SolidCheck.java | 26 ++ .../mod/mixin/ServerLevelMixin.java | 15 +- 13 files changed, 659 insertions(+), 231 deletions(-) create mode 100644 src/main/java/dev/galacticraft/mod/content/block/machine/OxygenSealerBlock.java create mode 100644 src/main/java/dev/galacticraft/mod/machine/BlockCheck.java create mode 100644 src/main/java/dev/galacticraft/mod/machine/FloodSearch.java create mode 100644 src/main/java/dev/galacticraft/mod/machine/SealerGroupings.java create mode 100644 src/main/java/dev/galacticraft/mod/machine/SolidCheck.java diff --git a/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/OxygenSealerScreen.java b/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/OxygenSealerScreen.java index e10b464b9..a924a00ee 100644 --- a/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/OxygenSealerScreen.java +++ b/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/OxygenSealerScreen.java @@ -27,6 +27,7 @@ import dev.galacticraft.machinelib.client.api.screen.MachineScreen; import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.content.block.entity.machine.OxygenSealerBlockEntity; +import dev.galacticraft.mod.machine.GCMachineStatuses; import dev.galacticraft.mod.util.Translations; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -46,8 +47,12 @@ protected void renderForeground(GuiGraphics graphics, int mouseX, int mouseY, fl super.renderForeground(graphics, mouseX, mouseY, delta); MachineStatus status = this.menu.state.getStatus(); - int sealingPower = this.menu.machine.getSealingPower(); graphics.drawString(this.font, Component.translatable(Translations.Ui.MACHINE_STATUS).append(status != null ? status.getText() : Component.empty()), this.leftPos + 50, this.topPos + 30, ChatFormatting.DARK_GRAY.getColor(), false); - graphics.drawString(this.font, Component.literal("SEALING POWER: ").append(String.valueOf(sealingPower)), this.leftPos + 50, this.topPos + 50, ChatFormatting.DARK_GRAY.getColor(), false); + if (!status.equals(GCMachineStatuses.BLOCKED)) { + int insideArea = this.menu.machine.getInsideArea(); + int outsideArea = this.menu.machine.getOutsideArea(); + graphics.drawString(this.font, Component.literal("INSIDE AREA: ").append(String.valueOf(insideArea)), this.leftPos + 50, this.topPos + 50, ChatFormatting.DARK_GRAY.getColor(), false); + graphics.drawString(this.font, Component.literal("OUTSIDE AREA: ").append(String.valueOf(outsideArea)), this.leftPos + 50, this.topPos + 70, ChatFormatting.DARK_GRAY.getColor(), false); + } } } diff --git a/src/main/java/dev/galacticraft/mod/content/GCBlocks.java b/src/main/java/dev/galacticraft/mod/content/GCBlocks.java index 286828e3b..49477189f 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCBlocks.java +++ b/src/main/java/dev/galacticraft/mod/content/GCBlocks.java @@ -285,7 +285,7 @@ public class GCBlocks { public static final Block ELECTRIC_ARC_FURNACE = BLOCKS.register(Constant.Block.ELECTRIC_ARC_FURNACE, new MachineBlock<>(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).strength(3.0F, 5.0F).sound(SoundType.METAL), Constant.id(Constant.Block.ELECTRIC_ARC_FURNACE))); public static final Block REFINERY = BLOCKS.register(Constant.Block.REFINERY, new RefineryBlock(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).strength(3.0F, 5.0F).sound(SoundType.METAL))); public static final Block OXYGEN_COLLECTOR = BLOCKS.register(Constant.Block.OXYGEN_COLLECTOR, new OxygenCollectorBlock(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).strength(3.0F, 5.0F).sound(SoundType.METAL))); - public static final Block OXYGEN_SEALER = BLOCKS.register(Constant.Block.OXYGEN_SEALER, new MachineBlock<>(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).strength(3.0F, 5.0F).sound(SoundType.METAL), Constant.id(Constant.Block.OXYGEN_SEALER))); + public static final Block OXYGEN_SEALER = BLOCKS.register(Constant.Block.OXYGEN_SEALER, new OxygenSealerBlock(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).strength(3.0F, 5.0F).sound(SoundType.METAL))); public static final Block OXYGEN_BUBBLE_DISTRIBUTOR = BLOCKS.register(Constant.Block.OXYGEN_BUBBLE_DISTRIBUTOR, new MachineBlock<>(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).strength(3.0F, 5.0F).sound(SoundType.METAL), Constant.id(Constant.Block.OXYGEN_BUBBLE_DISTRIBUTOR))); public static final Block OXYGEN_DECOMPRESSOR = BLOCKS.register(Constant.Block.OXYGEN_DECOMPRESSOR, new MachineBlock<>(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).strength(3.0F, 5.0F).sound(SoundType.METAL), Constant.id(Constant.Block.OXYGEN_DECOMPRESSOR))); public static final Block OXYGEN_COMPRESSOR = BLOCKS.register(Constant.Block.OXYGEN_COMPRESSOR, new MachineBlock<>(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).strength(3.0F, 5.0F).sound(SoundType.METAL), Constant.id(Constant.Block.OXYGEN_COMPRESSOR))); diff --git a/src/main/java/dev/galacticraft/mod/content/block/entity/AirlockControllerBlockEntity.java b/src/main/java/dev/galacticraft/mod/content/block/entity/AirlockControllerBlockEntity.java index 4f3b8ff83..eb3a19dfc 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/entity/AirlockControllerBlockEntity.java +++ b/src/main/java/dev/galacticraft/mod/content/block/entity/AirlockControllerBlockEntity.java @@ -270,7 +270,7 @@ public void unsealAirLock() { if (this.protocol.minY == this.protocol.maxY && this.protocol.minX != this.protocol.maxX && this.protocol.minZ != this.protocol.maxZ) { - // First test if there is sealed air to either side + // First test if there is getSealed air to either side for (x = this.protocol.minX + 1; x <= this.protocol.maxX - 1; x++) { for (z = this.protocol.minZ + 1; z <= this.protocol.maxZ - 1; z++) @@ -299,7 +299,7 @@ public void unsealAirLock() if (sealedSide) break; } - // Now replace the airlock blocks with either air, or sealed air + // Now replace the airlock blocks with either air, or getSealed air for (x = this.protocol.minX + 1; x <= this.protocol.maxX - 1; x++) { for (z = this.protocol.minZ + 1; z <= this.protocol.maxZ - 1; z++) @@ -319,7 +319,7 @@ public void unsealAirLock() { if (this.lastProtocol.minX != this.lastProtocol.maxX) { - // First test if there is sealed air to either side + // First test if there is getSealed air to either side for (x = this.lastProtocol.minX + 1; x <= this.lastProtocol.maxX - 1; x++) { for (y = this.lastProtocol.minY + 1; y <= this.lastProtocol.maxY - 1; y++) @@ -348,7 +348,7 @@ public void unsealAirLock() if (sealedSide) break; } - // Now replace the airlock blocks with either air, or sealed air + // Now replace the airlock blocks with either air, or getSealed air for (x = this.lastProtocol.minX + 1; x <= this.lastProtocol.maxX - 1; x++) { for (y = this.lastProtocol.minY + 1; y <= this.lastProtocol.maxY - 1; y++) @@ -365,7 +365,7 @@ public void unsealAirLock() } } else if (this.lastProtocol.minZ != this.lastProtocol.maxZ) { - // First test if there is sealed air to either side + // First test if there is getSealed air to either side for (z = this.lastProtocol.minZ + 1; z <= this.lastProtocol.maxZ - 1; z++) { for (y = this.lastProtocol.minY + 1; y <= this.lastProtocol.maxY - 1; y++) @@ -394,7 +394,7 @@ public void unsealAirLock() if (sealedSide) break; } - // Now replace the airlock blocks with either air, or sealed air + // Now replace the airlock blocks with either air, or getSealed air for (z = this.lastProtocol.minZ + 1; z <= this.lastProtocol.maxZ - 1; z++) { for (y = this.lastProtocol.minY + 1; y <= this.lastProtocol.maxY - 1; y++) diff --git a/src/main/java/dev/galacticraft/mod/content/block/entity/machine/OxygenSealerBlockEntity.java b/src/main/java/dev/galacticraft/mod/content/block/entity/machine/OxygenSealerBlockEntity.java index 523e751c3..172d1297d 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/entity/machine/OxygenSealerBlockEntity.java +++ b/src/main/java/dev/galacticraft/mod/content/block/entity/machine/OxygenSealerBlockEntity.java @@ -28,12 +28,10 @@ import dev.galacticraft.machinelib.api.machine.MachineStatus; import dev.galacticraft.machinelib.api.machine.MachineStatuses; import dev.galacticraft.machinelib.api.menu.MachineMenu; -import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.Galacticraft; import dev.galacticraft.mod.accessor.ServerLevelAccessor; import dev.galacticraft.mod.content.GCMachineTypes; import dev.galacticraft.mod.machine.GCMachineStatuses; -import dev.galacticraft.mod.machine.Region; import dev.galacticraft.mod.machine.SealerManager; import dev.galacticraft.mod.util.FluidUtil; import net.minecraft.core.BlockPos; @@ -46,14 +44,10 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.shapes.VoxelShape; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.HashSet; -import java.util.Queue; import java.util.Set; public class OxygenSealerBlockEntity extends MachineBlockEntity { @@ -64,23 +58,13 @@ public class OxygenSealerBlockEntity extends MachineBlockEntity { public static final long MAX_OXYGEN = FluidUtil.bucketsToDroplets(50); public static final int SEAL_CHECK_TIME = 20; - private final Set breathablePositions = new HashSet<>(); - private final Set watching = new HashSet<>(); private int sealCheckTime; - private boolean updateQueued = true; - private boolean disabled = false; private boolean oxygenWorld = false; - private boolean sealed = false; - private boolean oxygenUnloaded = true; - private final Region region; - private int remainingCapacity; + private boolean outputBlocked; - public static final int SEALING_POWER = 1024; public OxygenSealerBlockEntity(BlockPos pos, BlockState state) { super(GCMachineTypes.OXYGEN_SEALER, pos, state); - this.region = Region.EMPTY; - this.remainingCapacity = SEALING_POWER; } @Override @@ -88,13 +72,13 @@ public void setLevel(Level world) { super.setLevel(world); this.sealCheckTime = SEAL_CHECK_TIME; this.oxygenWorld = CelestialBody.getByDimension(world).map(body -> body.atmosphere().breathable()).orElse(true); + this.outputBlocked = false; if (!world.isClientSide) ((ServerLevelAccessor) world).addSealer(this, (ServerLevel) world); } @Override protected void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull ProfilerFiller profiler) { super.tickConstant(world, pos, state, profiler); - this.oxygenUnloaded = false; profiler.push("extract_resources"); this.chargeFromStack(CHARGE_SLOT); this.takeFluidFromStack(OXYGEN_INPUT_SLOT, OXYGEN_TANK, Gases.OXYGEN); @@ -107,14 +91,23 @@ protected void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @ if (this.energyStorage().canExtract(Galacticraft.CONFIG.oxygenCompressorEnergyConsumptionRate())) { if (!this.fluidStorage().getSlot(OXYGEN_TANK).isEmpty()) { if (this.sealCheckTime > 0) this.sealCheckTime--; - for (BlockPos sealedBlockPos : region.getPositions()) { - spawnParticlesAtCenter(level, sealedBlockPos, ParticleTypes.FLAME); - } - if (sealed) + if (this.sealCheckTime == 0) { - return GCMachineStatuses.SEALED; + this.sealCheckTime = 20; + if (this.outputBlocked) + { + return GCMachineStatuses.BLOCKED; + } + RenderOxygenSealedArea(SealerManager.INSTANCE.getInsideSealerGroupings(pos.above(), level.dimensionType()).getCalculatedArea(), level, ParticleTypes.FLAME); + RenderOxygenSealedArea(SealerManager.INSTANCE.getInsideSealerGroupings(pos.above(), level.dimensionType()).getUncalculatedArea(), level, ParticleTypes.DRAGON_BREATH); + //checks if the block above the sealer is sealed or not + if (SealerManager.INSTANCE.getInsideSealerGroupings(pos.above(), level.dimensionType()).getBreathable()) + { + return GCMachineStatuses.SEALED; + } + return GCMachineStatuses.AREA_TOO_LARGE; } - return GCMachineStatuses.AREA_TOO_LARGE; + return this.getState().getStatus(); } else { return GCMachineStatuses.NOT_ENOUGH_OXYGEN; } @@ -123,18 +116,11 @@ protected void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @ } } - private void tryClearSeal(@NotNull ServerLevel world) { - if (this.sealed) { - for (BlockPos pos1 : this.breathablePositions) { - world.setBreathable(pos1, false); - } - this.breathablePositions.clear(); - this.watching.clear(); - - this.sealed = false; + private void RenderOxygenSealedArea(Set calculatedArea, @NotNull ServerLevel level, SimpleParticleType type) { + for (BlockPos pos : calculatedArea) + { + spawnParticlesAtCenter(level, pos, type); } - this.updateQueued = true; - this.sealCheckTime = 0; } @Override @@ -147,15 +133,6 @@ public void setRemoved() { if (!this.level.isClientSide) { ((ServerLevelAccessor) this.level).removeSealer(this, (ServerLevel) this.level); } - if (!this.oxygenUnloaded) { - this.oxygenUnloaded = true; - for (BlockPos pos : this.breathablePositions) { - this.level.setBreathable(pos, false); - } - } - this.breathablePositions.clear(); - this.watching.clear(); - super.setRemoved(); } @@ -172,45 +149,6 @@ public AbstractContainerMenu createMenu(int syncId, Inventory inv, Player player return null; } - public void enqueueUpdate(BlockPos pos, VoxelShape voxelShape) { - if ((this.watching.contains(pos) && !Block.isShapeFullBlock(voxelShape)) || (this.breathablePositions.contains(pos) && !voxelShape.isEmpty())) { - this.updateQueued = true; - } - } - - - - public void checkAndUpdateSealing(BlockPos changedPos, ServerLevel world) - { - if (Block.isShapeFullBlock(world.getBlockState(changedPos).getCollisionShape(world, changedPos))) { - System.out.println("solid block"); - SealerManager.recalculateSealedRegion(this, world); - }else{ - System.out.println("unsolid block"); - } - //recalculate region - } - - private void sealRegion() { - System.out.println("SEALING REGION"); - sealed = true; - } - - private void unsealRegion() { - System.out.println("UNSEALING REGION"); - sealed = false; - } - - private boolean canSealRegion() { - //if region still has capacity - return remainingCapacity > 0; - } - - private void requestAdditionalSealingPower() { - // Request sealing power from adjacent sealers or update sealing power - // Implement logic to communicate with neighboring sealers - } - public static void spawnParticlesAtCenter(ServerLevel level, BlockPos pos, SimpleParticleType type) { double centerX = pos.getX() + 0.5; double centerY = pos.getY() + 0.5; @@ -221,24 +159,23 @@ public static void spawnParticlesAtCenter(ServerLevel level, BlockPos pos, Simpl } - public void buildRegion(Queue visitedQueue, Queue regionQueue) { - this.region.setPositions(new HashSet<>(visitedQueue)); - this.remainingCapacity = SEALING_POWER - this.region.getRegionSize(); - if (regionQueue.isEmpty()) - { - this.sealRegion(); - } + public void setBlocked(boolean b) { + this.outputBlocked = b; + } + + public boolean isBlocked() { + return outputBlocked; } public int getSealingPower() { - return SEALING_POWER - this.region.getRegionSize(); + return 1024; } - public Region getRegion() { - return this.region; + public int getInsideArea() { + return SealerManager.INSTANCE.getInsideSealerGroupings(this.getBlockPos().above(), this.level.dimensionType()).getTotalInsideBlocks(); } - public void updateRegion(Set blocks) { - this.region.setPositions(blocks); + public int getOutsideArea() { + return SealerManager.INSTANCE.getInsideSealerGroupings(this.getBlockPos().above(), this.level.dimensionType()).getTotalOutsideBlocks(); } } \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/content/block/machine/OxygenSealerBlock.java b/src/main/java/dev/galacticraft/mod/content/block/machine/OxygenSealerBlock.java new file mode 100644 index 000000000..694335333 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/content/block/machine/OxygenSealerBlock.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package dev.galacticraft.mod.content.block.machine; + +import dev.galacticraft.machinelib.api.block.MachineBlock; +import dev.galacticraft.mod.Constant; +import dev.galacticraft.mod.content.block.entity.machine.OxygenCollectorBlockEntity; +import dev.galacticraft.mod.content.block.entity.machine.OxygenSealerBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.DustParticleOptions; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import org.joml.Vector3f; + +public class OxygenSealerBlock extends MachineBlock { + public OxygenSealerBlock(Properties settings) { + super(settings, Constant.id(Constant.Block.OXYGEN_SEALER)); + } + + @Override + public void animateTick(BlockState state, Level world, BlockPos pos, RandomSource random) { + + } +} \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java b/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java index dc0357c7f..0b73c744f 100644 --- a/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java +++ b/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java @@ -71,7 +71,6 @@ public static void init() { EntitySleepEvents.STOP_SLEEPING.register(GCEventHandlers::onWakeFromCryoSleep); GiveCommandEvents.MODIFY.register(GCEventHandlers::modifyOnGive); ServerTickEvents.END_WORLD_TICK.register(GCEventHandlers::onWorldTick); - ServerWorldEvents.LOAD.register(SealerManager::calculateQueuedRegions); UseItemCallback.EVENT.register(GCEventHandlers::onPlayerUseItem); } @@ -170,7 +169,5 @@ public static void onWorldTick(ServerLevel world) { footprintManager.footprintBlockChanges.clear(); } - SealerManager.checkSealerQueue(world); - SealerManager.processBlockChanges(world); } } \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/machine/BlockCheck.java b/src/main/java/dev/galacticraft/mod/machine/BlockCheck.java new file mode 100644 index 000000000..c6bf93187 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/machine/BlockCheck.java @@ -0,0 +1,9 @@ +package dev.galacticraft.mod.machine; + +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; + +interface BlockCheck { + boolean checkSolid(BlockPos block, ServerLevel world); + SealerGroupings checkCalculated(BlockPos block, ServerLevel world); +} diff --git a/src/main/java/dev/galacticraft/mod/machine/FloodSearch.java b/src/main/java/dev/galacticraft/mod/machine/FloodSearch.java new file mode 100644 index 000000000..1856f7f4d --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/machine/FloodSearch.java @@ -0,0 +1,149 @@ +package dev.galacticraft.mod.machine; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import org.jetbrains.annotations.Nullable; + +import java.util.HashSet; +import java.util.LinkedList; +import java.util.Queue; + +public class FloodSearch { + + @Nullable + public static Region Flood(BlockPos startPosition, ServerLevel world, BlockCheck checker, SealerGroupings initialSealerGroup) + { + Queue outsideBlocks = new LinkedList<>(); + Queue insideBlocks = new LinkedList<>(); + Queue otherSealersInsideBlocks = new LinkedList<>(); + //checks if start position is solid + if (!checker.checkSolid(startPosition, world)) + { + //start position is not solid + //checks if start position has any sealer group attached + SealerGroupings startingPositionSealerGroup = checker.checkCalculated(startPosition, world); + if (startingPositionSealerGroup != null) + { + //there is a sealer group attached to the block + //make sure the current sealer group for the area does not contain the starting positions sealer group + if (!initialSealerGroup.sealers.containsAll(startingPositionSealerGroup.sealers)) + { + //the initial starting sealers do not contain the starting positions sealers + //add them to the current floods sealer group + initialSealerGroup.add(startingPositionSealerGroup.sealers); + //the floods outside blocks is appended to by the leftover outside blocks of the other sealer group + outsideBlocks.addAll(startingPositionSealerGroup.getUncalculatedArea()); + otherSealersInsideBlocks.addAll(startingPositionSealerGroup.getCalculatedArea()); + } + } else { + //there is no sealer group attached to the block + //add the current start position to the inside blocks + insideBlocks.add(startPosition); + //iterate over all 6 directions + for (Direction direction : Direction.values()) { + //check if relative direction block has a sealer group attached to it + SealerGroupings relativeSealerGroupings = checker.checkCalculated(startPosition.relative(direction), world); + if (relativeSealerGroupings != null) + { + //relative block has a sealer group attached to it + //make sure the current sealer group for the area does not contain the relative positions sealer group + if (!initialSealerGroup.sealers.containsAll(relativeSealerGroupings.sealers)) + { + //the initial starting sealers do not contain the starting positions sealers + //add them to the current floods sealer group + initialSealerGroup.add(relativeSealerGroupings.sealers); + //the floods outside blocks is appended to by the leftover outside blocks of the other sealer group + outsideBlocks.addAll(relativeSealerGroupings.getUncalculatedArea()); + otherSealersInsideBlocks.addAll(relativeSealerGroupings.getCalculatedArea()); + } + } else { + //relative block does not have a sealer group attached to it + //check if relative block is solid or not + if (checker.checkSolid(startPosition.relative(direction), world)) + { + //block in relative direction is solid so do nothing + }else { + //block in relative direction is not solid so check if its been calculated already + if (!insideBlocks.contains(startPosition.relative(direction)) && !outsideBlocks.contains(startPosition.relative(direction)) && !otherSealersInsideBlocks.contains(startPosition.relative(direction))) { + outsideBlocks.add(startPosition.relative(direction)); + } + } + } + } + } + } else + { + //start position blocked + return null; + } + + //make sure that the max sealing power isnt being exceeded already + if (insideBlocks.size() + outsideBlocks.size() + otherSealersInsideBlocks.size() > initialSealerGroup.sealingPower) + { + insideBlocks.remove(); + for (Direction direction : Direction.values()) + { + if (otherSealersInsideBlocks.contains(startPosition.relative(direction))) + { + outsideBlocks.add(startPosition.relative(direction)); + otherSealersInsideBlocks.remove(startPosition.relative(direction)); + } + } + } + + //while the outside blocks queue is not empty and the inside blocks queue + the outside blocks queue is smaller than the sealing power of the sealer manager + while (!outsideBlocks.isEmpty() && insideBlocks.size() + outsideBlocks.size() + otherSealersInsideBlocks.size() < initialSealerGroup.sealingPower) + { + //poll the first most position from the outside block queue + BlockPos position = outsideBlocks.poll(); + //add the current position to the inside blocks + insideBlocks.add(position); + //iterate over all 6 directions + for (Direction direction : Direction.values()) { + //check if relative direction block has a sealer group attached to it + SealerGroupings relativeSealerGroupings = checker.checkCalculated(position.relative(direction), world); + if (relativeSealerGroupings != null) + { + //relative block has a sealer group attached to it + //make sure the current sealer group for the area does not contain the relative positions sealer group + if (!initialSealerGroup.sealers.containsAll(relativeSealerGroupings.sealers)) + { + //the initial starting sealers do not contain the starting positions sealers + //add them to the current floods sealer group + initialSealerGroup.add(relativeSealerGroupings.sealers); + //the floods outside blocks is appended to by the leftover outside blocks of the other sealer group + outsideBlocks.addAll(relativeSealerGroupings.getUncalculatedArea()); + otherSealersInsideBlocks.addAll(relativeSealerGroupings.getCalculatedArea()); + } + } else { + //relative block does not have a sealer group attached to it + //check if relative block is solid or not + if (checker.checkSolid(position.relative(direction), world)) + { + //block in relative direction is solid so do nothing + }else { + //block in relative direction is not solid so check if its been calculated already + if (!insideBlocks.contains(position.relative(direction)) && !outsideBlocks.contains(position.relative(direction)) && !otherSealersInsideBlocks.contains(position.relative(direction))) { + outsideBlocks.add(position.relative(direction)); + } + } + } + } + } + //sets total blocks for reference + initialSealerGroup.setTotalSealedBlocks(insideBlocks.size() + otherSealersInsideBlocks.size()); + initialSealerGroup.setTotalOutsideBlocks(outsideBlocks.size()); + + //sets sealer groups calculated blocks and uncalculated blocks + initialSealerGroup.setCalculatedArea(new HashSet<>(insideBlocks)); + initialSealerGroup.addCalculatedArea(new HashSet<>(otherSealersInsideBlocks)); + initialSealerGroup.setUncalculatedArea(new HashSet<>(outsideBlocks)); + + //sets sealed based of if outside blocks is empty or not + initialSealerGroup.setSealed(outsideBlocks.isEmpty()); + + //returns + return new Region(initialSealerGroup.getCalculatedArea(), outsideBlocks, outsideBlocks.isEmpty(), initialSealerGroup); + } +} diff --git a/src/main/java/dev/galacticraft/mod/machine/Region.java b/src/main/java/dev/galacticraft/mod/machine/Region.java index ca396f854..487a28b92 100644 --- a/src/main/java/dev/galacticraft/mod/machine/Region.java +++ b/src/main/java/dev/galacticraft/mod/machine/Region.java @@ -3,40 +3,36 @@ import net.minecraft.core.BlockPos; import java.util.HashSet; +import java.util.Queue; import java.util.Set; public class Region { - public static final Region EMPTY = new Region(new HashSet<>()); - private Set blockRegionArea; - public Region(Set originalRegionArea) - { - blockRegionArea = originalRegionArea; - } - - public boolean contains(BlockPos pos) - { - return blockRegionArea.contains(pos); - } + boolean sealed; + Set insideBlocks; + Set outsideBlocks; + SealerGroupings sealers; - public int getRegionSize() - { - return blockRegionArea.size(); + public Region(Set insideBlocks, Queue outsideBlocks, boolean sealed, SealerGroupings sealers) { + this.insideBlocks = insideBlocks; + this.outsideBlocks = new HashSet<>(outsideBlocks); + this.sealed = sealed; + this.sealers = sealers; } - public Set getPositions() { - return blockRegionArea; + public Set getInsideBlocks() { + return this.insideBlocks; } - public void setPositions(Set region) { - this.blockRegionArea = region; + public Set getOutsideBlocks() { + return this.outsideBlocks; } - public void remove(BlockPos changedPos) { - this.blockRegionArea.remove(changedPos); + public boolean isSealed() { + return sealed; } - public void add(BlockPos changedPos) { - this.blockRegionArea.add(changedPos); + public SealerGroupings getSealerGroups() { + return this.sealers; } } diff --git a/src/main/java/dev/galacticraft/mod/machine/SealerGroupings.java b/src/main/java/dev/galacticraft/mod/machine/SealerGroupings.java new file mode 100644 index 000000000..bdf97b0a6 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/machine/SealerGroupings.java @@ -0,0 +1,147 @@ +package dev.galacticraft.mod.machine; + +import dev.galacticraft.mod.content.block.entity.machine.OxygenSealerBlockEntity; +import net.minecraft.core.BlockPos; + +import java.util.HashSet; +import java.util.Set; + +public class SealerGroupings { + Set sealers; + int sealingPower; + int totalSealedBlocks; + int totalOutsideBlocks; + + Set calculatedArea; + Set uncalculatedArea; + + boolean sealed; + + public SealerGroupings() + { + sealers = new HashSet<>(); + calculatedArea = new HashSet<>(); + uncalculatedArea = new HashSet<>(); + sealingPower = 0; + totalSealedBlocks = 0; + totalOutsideBlocks = 0; + sealed = false; + } + + public void add(OxygenSealerBlockEntity sealer) { + sealers.add(sealer); + sealingPower += sealer.getSealingPower(); + } + + public void add(Set newSealers) { + for (OxygenSealerBlockEntity sealer : newSealers) + { + sealers.add(sealer); + sealingPower += sealer.getSealingPower(); + } + } + + public void remove(OxygenSealerBlockEntity sealer) { + sealers.remove(sealer); + sealingPower -= sealer.getSealingPower(); + } + + public void setTotalSealedBlocks(int totalSealedBlocks) { + this.totalSealedBlocks = totalSealedBlocks; + } + + public void setTotalOutsideBlocks(int totalOutsideBlocks) { + this.totalOutsideBlocks = totalOutsideBlocks; + } + + public int getTotalInsideBlocks() { + return totalSealedBlocks; + } + + public int getTotalOutsideBlocks() { + return totalOutsideBlocks; + } + + public void changeTotalSealedBlocks(int i) { + this.totalSealedBlocks += i; + } + + public void changeTotalOutsideBlocks(int i) { + this.totalOutsideBlocks += i; + } + + public void setCalculatedArea(Set calculatedArea) { + this.calculatedArea = calculatedArea; + } + + public void addCalculatedArea(Set calculatedArea) { + this.calculatedArea.addAll(calculatedArea); + } + + public void addCalculatedArea(BlockPos calculatedArea) { + this.calculatedArea.add(calculatedArea); + } + + public void removeCalculatedArea(Set calculatedArea) { + this.calculatedArea.removeAll(calculatedArea); + } + + public void removeCalculatedArea(BlockPos calculatedArea) { + this.calculatedArea.remove(calculatedArea); + } + + + public void setUncalculatedArea(Set uncalculatedArea) { + this.uncalculatedArea = uncalculatedArea; + } + + public void addUncalculatedArea(Set uncalculatedArea) { + this.uncalculatedArea.addAll(uncalculatedArea); + } + + public void removeUncalculatedArea(Set uncalculatedArea) { + this.uncalculatedArea.removeAll(uncalculatedArea); + } + + public void removeUncalculatedArea(BlockPos uncalculatedArea) { + this.uncalculatedArea.remove(uncalculatedArea); + } + + public Set getCalculatedArea() { + return this.calculatedArea; + } + + public Set getUncalculatedArea() { + return this.uncalculatedArea; + } + + public void set(SealerGroupings sealerGroup) { + this.sealers = sealerGroup.sealers; + this.sealingPower = sealerGroup.sealingPower; + this.totalSealedBlocks = sealerGroup.totalSealedBlocks; + this.totalOutsideBlocks = sealerGroup.totalOutsideBlocks; + this.calculatedArea = sealerGroup.calculatedArea; + this.uncalculatedArea = sealerGroup.uncalculatedArea; + this.sealed = sealerGroup.sealed; + } + + public void setSealed(boolean sealed) { + this.sealed = sealed; + } + + public boolean getSealed() { + return this.sealed; + } + + public Set getSealers() { + return this.sealers; + } + + public boolean getBreathable() { + if (this.totalOutsideBlocks == 0 && this.totalSealedBlocks <= this.sealingPower) + { + return true; + } + return false; + } +} diff --git a/src/main/java/dev/galacticraft/mod/machine/SealerManager.java b/src/main/java/dev/galacticraft/mod/machine/SealerManager.java index 6c96afc6f..08a5938c6 100644 --- a/src/main/java/dev/galacticraft/mod/machine/SealerManager.java +++ b/src/main/java/dev/galacticraft/mod/machine/SealerManager.java @@ -2,149 +2,255 @@ import dev.galacticraft.mod.content.block.entity.machine.OxygenSealerBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.core.particles.SimpleParticleType; -import net.minecraft.resources.ResourceKey; -import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.dimension.DimensionType; import java.util.*; -import static dev.galacticraft.mod.content.block.entity.machine.OxygenSealerBlockEntity.spawnParticlesAtCenter; - public class SealerManager { - //instance of sealer manager public static final SealerManager INSTANCE = new SealerManager(); - private SealerManager() { - } + private static HashMap> insideBlocks = new HashMap<>(); + private static HashMap> outsideBlocks = new HashMap<>(); - private static HashMap> WALLS = new HashMap<>(); + private SealerManager() {} - private static Set sealerTracker = new HashSet<>(); - private final List changedBlocks = new ArrayList<>(); - private List changedBlocksDimensions = new ArrayList<>(); - private Queue queuedSealers = new LinkedList<>(); + static String RESET = "\u001B[0m"; + static String RED = "\u001B[31m"; + static String GREEN = "\u001B[32m"; + static String YELLOW = "\u001B[33m"; - public static void checkSealerQueue(ServerLevel world) { - OxygenSealerBlockEntity[] sealers = INSTANCE.queuedSealers.toArray(new OxygenSealerBlockEntity[0]); - for (int i = 0; i < sealers.length; i++) { - OxygenSealerBlockEntity sealer = sealers[i]; - if (sealer != null && Objects.requireNonNull(sealer.getLevel()).dimension().equals(world.dimension())) { - calculateRegion(sealer, world); - INSTANCE.queuedSealers.remove(sealer); - } - } - } - public static void recalculateSealedRegion(OxygenSealerBlockEntity sealer, ServerLevel world) { - System.out.println("Recalculating area"); - Set blocks = sealer.getRegion().getPositions(); - Set toRemove = new HashSet<>(); - blocks.forEach(pos -> { - if (Block.isShapeFullBlock(world.getBlockState(pos).getCollisionShape(world, pos))) { - toRemove.add(pos); - } - }); - toRemove.forEach(blocks::remove); - sealer.updateRegion(blocks); - } + public void onBlockChange(BlockPos pos, BlockState newState, ServerLevel world) { + //creates a new solid check + BlockCheck solidCheck = new SolidCheck(); - public void onBlockChange(BlockPos pos, BlockState newState, DimensionType dimension) { - //add all changed blocks to a list for rechecking - INSTANCE.changedBlocksDimensions.add(dimension); - INSTANCE.changedBlocks.add(pos); - } + //gets the dimension type of the world + DimensionType dimensionType = world.dimensionType(); - public static void processBlockChanges(ServerLevel world) { - BlockPos[] changedBlocks = INSTANCE.changedBlocks.toArray(BlockPos[]::new); - DimensionType[] changedBlocksDimensions = INSTANCE.changedBlocksDimensions.toArray(DimensionType[]::new); - for (int i = 0; i < changedBlocks.length; i++) { - BlockPos block = changedBlocks[i]; - if (block != null && changedBlocksDimensions[i].equals(world.dimensionType())) { - OxygenSealerBlockEntity sealer = findSealerManagingRegion(block); - if (sealer != null) - { - sealer.checkAndUpdateSealing(block, world); - INSTANCE.changedBlocks.remove(block); - INSTANCE.changedBlocksDimensions.remove(changedBlocksDimensions[i]); + //gets the inside blocks from the dimension + Map localInsideBlocks = insideBlocks.get(dimensionType); + //gets the outside blocks from the dimension + Map localOutsideBlocks = outsideBlocks.get(dimensionType); + //checks if local inside blocks is null + if (localInsideBlocks != null) { + //checks for if the block is in a calculated area + if (localInsideBlocks.containsKey(pos)) { + //checks if the new state of the changed block is solid + if (!solidCheck.checkSolid(pos, world)) { + //because block did not become air blocking block leave as is + System.out.println( YELLOW + "Block changed from non solid to non solid"); + return; + } else { + //check all sealers in the positions sealer group + for (OxygenSealerBlockEntity sealerBlockEntity : insideBlocks.get(dimensionType).get(pos).sealers) + { + //if sealer block is below placed block then remove sealer block from sealer group + if (sealerBlockEntity.getBlockPos().equals(pos.below())) + { + System.out.println( RED + "Block placed on sealer. Removing sealer from sealer group"); + insideBlocks.get(dimensionType).get(pos).sealers.remove(sealerBlockEntity); + sealerBlockEntity.setBlocked(true); + //fixme: Recheck getSealed area smaller than sealers max sealing power + } else { + System.out.println("2"); + } + } + //block placed is solid therefore should be removed from inside blocks + //change amount of total sealed blocks by 1 + insideBlocks.get(dimensionType).get(pos).changeTotalSealedBlocks(-1); + insideBlocks.get(dimensionType).get(pos).removeCalculatedArea(pos); + //remove block from inside blocks + removeBlockFrom(pos, world, insideBlocks); + return; + //fixme: Check if block has blocked an unreachable room + } + } else if (positionAdjacent(pos, localInsideBlocks)) + { + //block is adjacent to a local inside block but is not a part of inside blocks making it a wall block that was broken if its not solid + if (!solidCheck.checkSolid(pos, world)) { + //block was broken + System.out.println(YELLOW + "Block broken adjacent to inside block at position: " + pos); + //do a flood search out from the broken block to check for empty gaps + Region region = FloodSearch.Flood(pos, world, solidCheck, new SealerGroupings()); + if (region == null) { + System.out.println(RED + "SEALER ERROR CHECK CODE!!!!"); + } else { + //gets the sealer grouping + SealerGroupings sealerGroupings = region.getSealerGroups(); + addBlocksTo(sealerGroupings.calculatedArea, sealerGroupings, world, insideBlocks); + addBlocksTo(sealerGroupings.uncalculatedArea, sealerGroupings, world, outsideBlocks); + //for each sealer block entity get sealed area above and set its groupings + for (OxygenSealerBlockEntity sealerBlockEntity : sealerGroupings.sealers) + { + getInsideSealerGroupings(sealerBlockEntity.getBlockPos().above(), world.dimensionType()).set(sealerGroupings); + } + System.out.println(GREEN + "Replaced sealer grouping"); + } + } else { + //this should only occur when a block is placed adjacent to a wall position + System.out.println(GREEN + "Block placed adjacent to outside block at " + pos); + for (Direction direction : Direction.values()) + { + BlockPos relativePos = pos.relative(direction); + if (localOutsideBlocks.containsKey(relativePos)) { + addBlockTo(relativePos, getOutsideSealerGroupings(relativePos, dimensionType), world, insideBlocks); + outsideBlocks.get(dimensionType).get(relativePos).changeTotalOutsideBlocks(-1); + outsideBlocks.get(dimensionType).get(relativePos).changeTotalSealedBlocks(1); + outsideBlocks.get(dimensionType).get(relativePos).removeUncalculatedArea(relativePos); + outsideBlocks.get(dimensionType).get(relativePos).addCalculatedArea(relativePos); + removeBlockFrom(relativePos, world, outsideBlocks); + //remove block from inside blocks + } else { + System.out.println("4"); + } + } } + } else { + System.out.println("3"); } + } else { + System.out.println("1"); } } - private static OxygenSealerBlockEntity findSealerManagingRegion(BlockPos pos) - { - for (OxygenSealerBlockEntity sealer : sealerTracker) { - if (sealer.getRegion().contains(pos)) { - return sealer; + private boolean positionAdjacent(BlockPos pos, Map array) { + for (Direction direction : Direction.values()) + { + if (array.containsKey(pos.relative(direction))) { + return true; } } - return null; + return false; } - public void addSealer(OxygenSealerBlockEntity sealer, ServerLevel world) - { - System.out.println("Adding sealer at " + sealer.getBlockPos()); - - INSTANCE.queuedSealers.add(sealer); + private boolean arrayContains(BlockPos pos, ServerLevel world, HashMap> array) { + if (array.containsKey(world.dimensionType())) + { + return array.get(world.dimensionType()).containsKey(pos); + } + return false; } - public static void calculateQueuedRegions(MinecraftServer minecraftServer, ServerLevel world) { - checkSealerQueue(world); + + public static void addSealer(OxygenSealerBlockEntity sealer, ServerLevel world) { + //gets the dimension type of the world + DimensionType dimensionType = world.dimensionType(); + //gets the block pos above the sealer + BlockPos aboveSealer = sealer.getBlockPos().above(); + //print to system that sealer is placed + System.out.println(GREEN + "Sealer placed at " + RESET + sealer.getBlockPos() + GREEN + " in dimension " + RESET + dimensionType); + //creates a new sealer group for flooding + SealerGroupings sealerGroupings = new SealerGroupings(); + sealerGroupings.add(sealer); + //performs a flood search + Region region = FloodSearch.Flood(aboveSealer, world, new SolidCheck(), sealerGroupings); + //makes sure region is not null + if (region == null) + { + //region is null therefore the flood search was canceled due to starting position being blocked + System.out.println(RED + "Sealer is blocked" + RESET); + //set the sealer state to blocked + sealer.setBlocked(true); + } else + { + //region returned not null therefore the flood search returned with an area + //gets the sealer group from the region + SealerGroupings sealers = region.getSealerGroups(); + //prints to system to say the amount of inside blocks sealed + System.out.println(YELLOW + "inside blocks " + RESET + sealers.totalSealedBlocks); + //prints to system to say the amount of outside blocks sealed + System.out.println(YELLOW + "outside blocks " + RESET + sealers.totalOutsideBlocks); + //adds the outside and inside blocks to the sealer manager hashmaps + addBlocksTo(region.getInsideBlocks(), sealers, world, insideBlocks); + addBlocksTo(region.getOutsideBlocks(), sealers, world, outsideBlocks); + //if the region is sealed then print sealable else not sealable + if (region.isSealed()) + { + System.out.println(GREEN + "Room calculated as sealable" + RESET); + } else { + System.out.println(RED + "Room calculated as unsealable" + RESET); + } + } } + private static void addBlocksTo(Set blocks, SealerGroupings sealerGroup, ServerLevel world, HashMap> array) { + if (!array.containsKey(world.dimensionType())) { + array.put(world.dimensionType(), new HashMap<>()); + } + for (BlockPos pos : blocks) { + array.get(world.dimensionType()).put(pos, sealerGroup); + } + } - private static void calculateRegion(OxygenSealerBlockEntity sealer, ServerLevel world) { - System.out.println("Calculating sealer region"); - Queue regionQueue = new LinkedList<>(); - Queue visitedQueue = new LinkedList<>(); - if (!Block.isShapeFullBlock(world.getBlockState(sealer.getBlockPos().above(1)).getCollisionShape(world, sealer.getBlockPos().above(1)))) { - spawnParticlesAtCenter(world, sealer.getBlockPos().above(1), ParticleTypes.END_ROD); - regionQueue.add(sealer.getBlockPos().above(1)); + private void addBlockTo(BlockPos pos, SealerGroupings sealerGroup, ServerLevel world, HashMap> array) { + if (array.containsKey(world.dimensionType())) { + //dimension created + array.get(world.dimensionType()).put(pos, sealerGroup); + } else { + //dimension hasn't been created + array.put(world.dimensionType(), new HashMap<>()); + array.get(world.dimensionType()).put(pos, sealerGroup); } + } - while (!regionQueue.isEmpty() && visitedQueue.size() < OxygenSealerBlockEntity.SEALING_POWER) { - BlockPos currentPos = regionQueue.poll(); + private void removeBlockFrom(BlockPos pos, ServerLevel world, HashMap> array) { + //dimension check to make sure it exists already + if (array.containsKey(world.dimensionType())) { + //dimension exists so remove entry + array.get(world.dimensionType()).remove(pos); + } + } - for (BlockPos neighbour : neighbours(currentPos)) - { - if (!visitedQueue.contains(neighbour) && !regionQueue.contains(neighbour)) - { - if (!Block.isShapeFullBlock(world.getBlockState(neighbour).getCollisionShape(world, neighbour))) - { - spawnParticlesAtCenter(world, neighbour, ParticleTypes.END_ROD); - regionQueue.add(neighbour); - } - } + private void removeBlocksFrom(Set blocks, ServerLevel world, HashMap> array) { + if (array.containsKey(world.dimensionType())) { + //dimension exists so remove entrys + for (BlockPos pos : blocks) { + //dimension check to make sure it exists already + array.get(world.dimensionType()).remove(pos); } - visitedQueue.add(currentPos); } - sealer.buildRegion(visitedQueue, regionQueue); - sealerTracker.add(sealer); } - private static void spawnParticle(ServerLevel world, SimpleParticleType particle, BlockPos pos) { - world.addParticle(particle, pos.getX(), pos.getY(), pos.getZ(), 0, 0, 0); + private SealerGroupings getSealersFrom(BlockPos pos, ServerLevel world, HashMap> array) { + if (array.containsKey(world.dimensionType())) { + return array.get(world.dimensionType()).get(pos); + } + return null; } - private static BlockPos[] neighbours(BlockPos currentPos) { - return new BlockPos[]{currentPos.offset(Direction.UP.getNormal()),currentPos.offset(Direction.DOWN.getNormal()),currentPos.offset(Direction.NORTH.getNormal()),currentPos.offset(Direction.EAST.getNormal()),currentPos.offset(Direction.SOUTH.getNormal()),currentPos.offset(Direction.WEST.getNormal())}; + public void removeSealer(OxygenSealerBlockEntity sealer, ServerLevel world) { + DimensionType dimensionType = world.dimensionType(); + System.out.println(RED + "Sealer removed at " + sealer.getBlockPos() + " in dimension " + dimensionType); } - public void markVisited(Queue region, Queue visited, BlockPos pos) + public SealerGroupings getInsideSealerGroupings(BlockPos pos, DimensionType dimensionType) { - region.remove(pos); - visited.add(pos); + if (insideBlocks.containsKey(dimensionType)) + { + if (insideBlocks.get(dimensionType).containsKey(pos)) + { + return insideBlocks.get(dimensionType).get(pos); + } + } + return null; } - public void removeSealer(OxygenSealerBlockEntity sealer, ServerLevel world) + public SealerGroupings getOutsideSealerGroupings(BlockPos pos, DimensionType dimensionType) { - System.out.println("Removing sealer at " + sealer.getBlockPos()); - sealerTracker.remove(sealer); + if (outsideBlocks.containsKey(dimensionType)) + { + if (outsideBlocks.get(dimensionType).containsKey(pos)) + { + return outsideBlocks.get(dimensionType).get(pos); + } + } + return null; } + + + + } diff --git a/src/main/java/dev/galacticraft/mod/machine/SolidCheck.java b/src/main/java/dev/galacticraft/mod/machine/SolidCheck.java new file mode 100644 index 000000000..a4ee39305 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/machine/SolidCheck.java @@ -0,0 +1,26 @@ +package dev.galacticraft.mod.machine; + +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.block.Block; + +public class SolidCheck implements BlockCheck { + @Override + public boolean checkSolid(BlockPos block, ServerLevel world) { + if (Block.isShapeFullBlock(world.getBlockState(block).getShape(world, block))) { + return true; + } + return false; + } + + @Override + public SealerGroupings checkCalculated(BlockPos block, ServerLevel world) { + if (SealerManager.INSTANCE.getInsideSealerGroupings(block, world.dimensionType()) != null) + { + return SealerManager.INSTANCE.getInsideSealerGroupings(block, world.dimensionType()); + } else if (SealerManager.INSTANCE.getOutsideSealerGroupings(block, world.dimensionType()) != null) { + return SealerManager.INSTANCE.getOutsideSealerGroupings(block, world.dimensionType()); + } + return null; + } +} diff --git a/src/main/java/dev/galacticraft/mod/mixin/ServerLevelMixin.java b/src/main/java/dev/galacticraft/mod/mixin/ServerLevelMixin.java index 8906d255b..15cebc623 100644 --- a/src/main/java/dev/galacticraft/mod/mixin/ServerLevelMixin.java +++ b/src/main/java/dev/galacticraft/mod/mixin/ServerLevelMixin.java @@ -29,6 +29,7 @@ import dev.galacticraft.mod.machine.SealerManager; import dev.galacticraft.mod.misc.footprint.FootprintManager; import dev.galacticraft.mod.misc.footprint.ServerFootprintManager; +import dev.galacticraft.mod.util.Translations; import dev.galacticraft.mod.world.dimension.GCDimensions; import dev.galacticraft.mod.world.gen.spawner.EvolvedPillagerSpawner; import net.minecraft.client.Minecraft; @@ -39,6 +40,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.progress.ChunkProgressListener; +import net.minecraft.tags.BlockTags; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.RandomSequences; import net.minecraft.world.level.CustomSpawner; @@ -56,6 +58,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import javax.naming.Context; import java.util.HashSet; import java.util.LinkedList; import java.util.List; @@ -66,6 +69,9 @@ @Mixin(ServerLevel.class) public abstract class ServerLevelMixin extends Level implements LevelAccessor, ServerLevelAccessor { @Shadow @Final @Mutable private List customSpawners; + + @Shadow public abstract ServerLevel getLevel(); + private final @Unique FootprintManager footprintManager = new ServerFootprintManager(); protected ServerLevelMixin(WritableLevelData levelData, ResourceKey dimension, RegistryAccess registryAccess, Holder dimensionTypeRegistration, Supplier profiler, boolean isClientSide, boolean isDebug, long biomeZoomSeed, int maxChainedNeighborUpdates) { @@ -80,14 +86,19 @@ private void setSpawnersGC(MinecraftServer server, Executor workerExecutor, Leve } @Inject(method = "sendBlockUpdated", at = @At(value = "INVOKE", target = "Ljava/util/Set;iterator()Ljava/util/Iterator;", remap = false)) - private void updateSealerListeners_gc(BlockPos pos, BlockState oldState, BlockState newState, int flags, CallbackInfo ci) { + private void onBlockChanges(BlockPos pos, BlockState oldState, BlockState newState, int flags, CallbackInfo ci) { + System.out.println("old: " + oldState.getBlock().toString() + "new: " + newState.getBlock().toString()); //make sure old state and new state aren't both solid blocks //if they are both solid blocks then nothing would have changed if (oldState.isSolid() && newState.isSolid()) { //nothing will have changed return; } - SealerManager.INSTANCE.onBlockChange(pos, newState, this.dimensionType()); + if (newState.is(BlockTags.LEAVES)) + { + //oxygen collector code update? + } + SealerManager.INSTANCE.onBlockChange(pos, newState, this.getLevel()); } @Override From b116b82200e568b9fcc2de64a77d3d56cbfb04ff Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Thu, 29 Aug 2024 15:00:15 +1000 Subject: [PATCH 13/23] Fixed data generation and ran data generation --- .../assets/galacticraft/lang/en_us.json | 23 +-- .../models/block/vapor_spout.json | 2 +- .../models/item/air_lock_seal.json | 3 - .../galacticraft/celestial_body/asteroid.json | 19 +-- .../celestial_body/asteroids.json | 42 ------ .../data/galacticraft/dimension/asteroid.json | 8 +- .../galacticraft/dimension_type/asteroid.json | 4 +- .../blocks/lunaslate_copper_ore.json | 2 +- .../loot_tables/blocks/mars_copper_ore.json | 52 +------ .../loot_tables/blocks/mars_iron_ore.json | 43 +----- .../loot_tables/blocks/mars_tin_ore.json | 43 +----- .../biome/has_structure/moon_boss.json | 6 - .../asteroid/AsteroidChunkGenerator | 0 .../worldgen/noise_settings/asteroid.json | 133 ------------------ .../java/dev/galacticraft/mod/Constant.java | 2 + .../mod/content/GCCelestialBodies.java | 23 +-- .../mod/content/GCChunkGenerator.java | 7 +- .../mod/data/GCBlockLootTableProvider.java | 5 + .../mod/data/GCDataGenerator.java | 4 +- .../mod/data/GCTranslationProvider.java | 4 + .../mod/data/model/GCModelProvider.java | 5 +- .../mod/world/biome/AsteroidBiomes.java | 2 +- .../mod/world/dimension/GCDimensionTypes.java | 4 +- .../mod/world/dimension/GCLevelStems.java | 9 +- .../world/gen/GCNoiseGeneratorSettings.java | 40 +----- .../surfacebuilder/AsteroidSurfaceRules.java | 54 ------- .../blockstates/air_lock_seal.json | 0 .../galacticraft/models/item/canned_food.json | 2 +- .../galacticraft/models/item/empty_can.json | 2 +- ...or_spout_block_top.png => vapor_spout.png} | Bin 30 files changed, 103 insertions(+), 440 deletions(-) delete mode 100644 src/main/generated/assets/galacticraft/models/item/air_lock_seal.json delete mode 100644 src/main/generated/data/galacticraft/celestial_body/asteroids.json delete mode 100644 src/main/generated/data/galacticraft/tags/worldgen/biome/has_structure/moon_boss.json delete mode 100644 src/main/generated/data/galacticraft/worldgen/custom_terrain/asteroid/AsteroidChunkGenerator delete mode 100644 src/main/generated/data/galacticraft/worldgen/noise_settings/asteroid.json delete mode 100644 src/main/java/dev/galacticraft/mod/world/gen/surfacebuilder/AsteroidSurfaceRules.java rename src/main/{generated => resources}/assets/galacticraft/blockstates/air_lock_seal.json (100%) rename src/main/{generated => resources}/assets/galacticraft/models/item/canned_food.json (76%) rename src/main/{generated => resources}/assets/galacticraft/models/item/empty_can.json (76%) rename src/main/resources/assets/galacticraft/textures/block/{vapor_spout_block_top.png => vapor_spout.png} (100%) diff --git a/src/main/generated/assets/galacticraft/lang/en_us.json b/src/main/generated/assets/galacticraft/lang/en_us.json index 2ccb5b38c..63225edae 100644 --- a/src/main/generated/assets/galacticraft/lang/en_us.json +++ b/src/main/generated/assets/galacticraft/lang/en_us.json @@ -1,4 +1,5 @@ { + "biome.galacticraft.asteroid_field": "Asteroid Field", "biome.galacticraft.basaltic_mare": "Basaltic Mare", "biome.galacticraft.comet_tundra": "Comet Tundra", "biome.galacticraft.lunar_highlands": "Lunar Highlands", @@ -18,9 +19,6 @@ "block.galacticraft.aluminum_decoration_stairs": "Aluminum Decoration Stairs", "block.galacticraft.aluminum_decoration_wall": "Aluminum Decoration Wall", "block.galacticraft.aluminum_ore": "Aluminum Ore", - "block.galacticraft.mars_iron_ore": "Mars Iron Ore", - "block.galacticraft.mars_copper_ore": "Mars Copper Ore", - "block.galacticraft.mars_tin_ore": "Mars Tin Ore", "block.galacticraft.aluminum_wire": "Aluminum Wire", "block.galacticraft.asteroid_rock": "Asteroid Rock", "block.galacticraft.asteroid_rock_block_1": "Asteroid Rock", @@ -119,6 +117,7 @@ "block.galacticraft.energy_storage_module.description": "Energy Storage Module is used to store large amounts of energy for later use.", "block.galacticraft.fallen_meteor": "Fallen Meteor", "block.galacticraft.fluid_pipe_walkway": "Fluid Pipe Walkway", + "block.galacticraft.food_canner": "Food Canner", "block.galacticraft.fuel": "Fuel", "block.galacticraft.fuel_loader": "Fuel Loader", "block.galacticraft.fueling_pad": "Fueling Pad", @@ -154,12 +153,15 @@ "block.galacticraft.mars_cobblestone_slab": "Mars Cobblestone Slab", "block.galacticraft.mars_cobblestone_stairs": "Mars Cobblestone Stairs", "block.galacticraft.mars_cobblestone_wall": "Mars Cobblestone Wall", + "block.galacticraft.mars_copper_ore": "Mars Copper Ore", + "block.galacticraft.mars_iron_ore": "Mars Iron Ore", "block.galacticraft.mars_stone": "Mars Stone", "block.galacticraft.mars_stone_slab": "Mars Stone Slab", "block.galacticraft.mars_stone_stairs": "Mars Stone Stairs", "block.galacticraft.mars_stone_wall": "Mars Stone Wall", "block.galacticraft.mars_sub_surface_rock": "Mars Sub-Surface Rock", "block.galacticraft.mars_surface_rock": "Mars Surface Rock", + "block.galacticraft.mars_tin_ore": "Mars Tin Ore", "block.galacticraft.meteoric_iron_block": "Block of Meteoric Iron", "block.galacticraft.meteoric_iron_decoration": "Meteoric Iron Decoration", "block.galacticraft.meteoric_iron_decoration_slab": "Meteoric Iron Decoration Slab", @@ -193,7 +195,6 @@ "block.galacticraft.oxygen_collector": "Oxygen Collector", "block.galacticraft.oxygen_collector.description": "Oxygen Collector will store oxygen collected from leaves in the surrounding area.", "block.galacticraft.oxygen_compressor": "Oxygen Compressor", - "block.galacticraft.food_canner": "Food Canner", "block.galacticraft.oxygen_decompressor": "Oxygen Decompressor", "block.galacticraft.oxygen_sealer": "Oxygen Sealer", "block.galacticraft.oxygen_storage_module": "Oxygen Storage Module", @@ -277,9 +278,9 @@ "config.galacticraft.energy.machines.electric_furnace_energy_consumption_rate": "Electric Furnace Energy Consumption Rate/t", "config.galacticraft.energy.machines.energy_storage_module_storage_size": "Energy Storage Module Energy Storage Size", "config.galacticraft.energy.machines.energy_storage_size": "Default Machine Energy Storage Size", + "config.galacticraft.energy.machines.food_canner_energy_consumption_rate": "Food Canner Energy Consumption Rate/t", "config.galacticraft.energy.machines.oxygen_collector_energy_consumption_rate": "Oxygen Collector Energy Consumption Rate/t", "config.galacticraft.energy.machines.oxygen_compressor_energy_consumption_rate": "Oxygen Compressor Energy Consumption Rate/t", - "config.galacticraft.energy.machines.food_canner_energy_consumption_rate": "Food Canner Energy Consumption Rate/t", "config.galacticraft.energy.machines.oxygen_decompressor_energy_consumption_rate": "Oxygen Decompressor Energy Consumption Rate/t", "config.galacticraft.energy.machines.refinery_energy_consumption_rate": "Refinery Energy Consumption Rate/t", "config.galacticraft.energy.machines.solar_panel_energy_production_rate": "Solar Panel Energy Production Rate/t", @@ -352,7 +353,9 @@ "item.galacticraft.blue_parachute": "Blue Parachute", "item.galacticraft.blue_solar_wafer": "Blue Solar Wafer", "item.galacticraft.brown_parachute": "Brown Parachute", + "item.galacticraft.buggy": "Buggy", "item.galacticraft.burger_bun": "Burger Bun", + "item.galacticraft.canned_food": "Canned Food", "item.galacticraft.canvas": "Canvas", "item.galacticraft.carbon_fragments": "Carbon Fragments", "item.galacticraft.cargo_rocket_schematic": "Cargo Rocket Schematic", @@ -383,6 +386,7 @@ "item.galacticraft.desh_shovel": "Desh Shovel", "item.galacticraft.desh_stick": "Desh Stick", "item.galacticraft.desh_sword": "Desh Sword", + "item.galacticraft.empty_can": "Empty Can", "item.galacticraft.fluid_manipulator": "Fluid Manipulator", "item.galacticraft.frequency_module": "Frequency Module", "item.galacticraft.fuel_bucket": "Fuel Bucket", @@ -460,7 +464,6 @@ "item.galacticraft.tier_2_rocket_schematic": "Tier 2 Rocket Schematic", "item.galacticraft.tier_3_rocket_schematic": "Tier 3 Rocket Schematic", "item.galacticraft.tin_canister": "Tin Canister", - "item.galacticraft.empty_food_can": "Empty Food Can", "item.galacticraft.tin_ingot": "Tin Ingot", "item.galacticraft.tin_nugget": "Tin Nugget", "item.galacticraft.titanium_axe": "Titanium Axe", @@ -482,7 +485,7 @@ "itemGroup.galacticraft.machines": "Galacticraft Machines", "key.galacticraft.open_celestial_screen": "Open Celestial Map", "key.galacticraft.rocket.inventory": "Open Rocket Inventory", - "planet.galacticraft.asteroid": "Asteroids", + "planet.galacticraft.asteroid": "Asteroid", "planet.galacticraft.asteroid.description": "", "planet.galacticraft.earth": "Earth", "planet.galacticraft.earth.description": "The Overworld", @@ -614,10 +617,7 @@ "ui.galacticraft.status.already_sealed": "Already Sealed", "ui.galacticraft.status.area_too_large": "Area Too Large", "ui.galacticraft.status.blocked": "Blocked", - "ui.galacticraft.status.missing_empty_can": "Missing Empty Can", "ui.galacticraft.status.canning": "Canning", - "ui.galacticraft.status.no_food": "No Food", - "ui.galacticraft.status.transferring_can": "Transferring Can", "ui.galacticraft.status.collecting": "Collecting", "ui.galacticraft.status.compressing": "Compressing", "ui.galacticraft.status.cooling_down": "Cooling Down", @@ -628,9 +628,11 @@ "ui.galacticraft.status.fuel_tank_full": "Fuel Tank Full", "ui.galacticraft.status.generating": "Generating", "ui.galacticraft.status.loading": "Loading", + "ui.galacticraft.status.missing_empty_can": "Missing Empty Can", "ui.galacticraft.status.missing_oil": "Missing Oil", "ui.galacticraft.status.missing_oxygen_tank": "Missing Oxygen Tank", "ui.galacticraft.status.night": "Night", + "ui.galacticraft.status.no_food": "No Food", "ui.galacticraft.status.no_fuel": "No Fuel", "ui.galacticraft.status.no_rocket": "No rocket", "ui.galacticraft.status.not_enough_fuel": "Not enough fuel", @@ -640,6 +642,7 @@ "ui.galacticraft.status.rain": "Rain", "ui.galacticraft.status.rocket_is_full": "Rocket is full", "ui.galacticraft.status.sealed": "Sealed", + "ui.galacticraft.status.transferring_can": "Transferring Can", "ui.galacticraft.status.warming_up": "Warming up", "ui.galacticraft.travelling_to": "Travelling to: ", "ui.galacticraft.upgrade": "Upgrade", diff --git a/src/main/generated/assets/galacticraft/models/block/vapor_spout.json b/src/main/generated/assets/galacticraft/models/block/vapor_spout.json index 2ee192ca0..db6739d21 100644 --- a/src/main/generated/assets/galacticraft/models/block/vapor_spout.json +++ b/src/main/generated/assets/galacticraft/models/block/vapor_spout.json @@ -2,6 +2,6 @@ "parent": "minecraft:block/cube_top", "textures": { "side": "galacticraft:block/soft_venus_rock", - "top": "galacticraft:block/vapor_spout_block_top" + "top": "galacticraft:block/vapor_spout" } } \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/air_lock_seal.json b/src/main/generated/assets/galacticraft/models/item/air_lock_seal.json deleted file mode 100644 index 0a40e6e2c..000000000 --- a/src/main/generated/assets/galacticraft/models/item/air_lock_seal.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "galacticraft:block/air_lock_seal" -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/celestial_body/asteroid.json b/src/main/generated/data/galacticraft/celestial_body/asteroid.json index 614064d34..bd2119f9f 100644 --- a/src/main/generated/data/galacticraft/celestial_body/asteroid.json +++ b/src/main/generated/data/galacticraft/celestial_body/asteroid.json @@ -5,13 +5,15 @@ "access_weight": 2, "atmosphere": { "composition": {}, - "pressure": 0, - "temperature": -1.5 + "pressure": 0.0, + "temperature": -2.0 }, "celestial_handler": "galacticraft:default", "day_length": 99999999, - "day_temperature": -1.5, - "description": "planet.galacticraft.asteroid.description", + "day_temperature": -2, + "description": { + "translate": "planet.galacticraft.asteroid.description" + }, "display": { "type": "galacticraft:icon", "config": { @@ -23,17 +25,18 @@ "width": 16 } }, - "galaxy": "galacticraft:milky_way", "gravity": 0.1, - "name": "planet.galacticraft.asteroid", - "night_temperature": -1.5, + "name": { + "translate": "planet.galacticraft.asteroid" + }, + "night_temperature": -2, "position": { "type": "galacticraft:orbital", "config": { "distance": 0.75, "orbit_time": 0.6152793169021606, "phase_shift": 2.0, - "planet": true + "planet": false } }, "ring": { diff --git a/src/main/generated/data/galacticraft/celestial_body/asteroids.json b/src/main/generated/data/galacticraft/celestial_body/asteroids.json deleted file mode 100644 index 79402cfd6..000000000 --- a/src/main/generated/data/galacticraft/celestial_body/asteroids.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "type": "galacticraft:decorative_planet", - "config": { - "parent": "galacticraft:sol", - "atmosphere": { - "composition": {}, - "pressure": 3.0E-15, - "temperature": 23.0 - }, - "description": { - "translate": "planet.galacticraft.asteroids.description" - }, - "display": { - "type": "galacticraft:spinning_icon", - "config": { - "height": 16, - "scale": 1.0, - "texture": "galacticraft:textures/gui/celestialbodies/asteroid.png", - "u": 0, - "v": 0, - "width": 16 - } - }, - "gravity": 0.166, - "name": { - "translate": "planet.galacticraft.asteroids" - }, - "position": { - "type": "galacticraft:orbital", - "config": { - "distance": 1.375, - "orbit_time": 45.0, - "phase_shift": 0.0, - "planet": true - } - }, - "ring": { - "type": "galacticraft:asteroid", - "config": {} - } - } -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/dimension/asteroid.json b/src/main/generated/data/galacticraft/dimension/asteroid.json index 39778a08e..12d6f6fdb 100644 --- a/src/main/generated/data/galacticraft/dimension/asteroid.json +++ b/src/main/generated/data/galacticraft/dimension/asteroid.json @@ -3,10 +3,10 @@ "generator": { "type": "galacticraft:asteroid_chunk_generator", "biomeSource": { - "type": "minecraft:fixed", - "biome": "galacticraft:asteroid_field" + "type": "minecraft:multi_noise", + "preset": "galacticraft:asteroid" }, - "par2": 1000, - "dimensionKey": "galacticraft:asteroid" + "dimensionKey": "galacticraft:asteroid", + "par2": 1000 } } \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/dimension_type/asteroid.json b/src/main/generated/data/galacticraft/dimension_type/asteroid.json index c7c23e877..608a264ae 100644 --- a/src/main/generated/data/galacticraft/dimension_type/asteroid.json +++ b/src/main/generated/data/galacticraft/dimension_type/asteroid.json @@ -1,11 +1,11 @@ { - "ambient_light": 0.1, + "ambient_light": 0.0, "bed_works": false, "coordinate_scale": 1.0, "effects": "galacticraft:asteroid", "has_ceiling": false, "has_raids": false, - "has_skylight": true, + "has_skylight": false, "height": 384, "infiniburn": "#galacticraft:infiniburn_asteroid", "logical_height": 384, diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/lunaslate_copper_ore.json b/src/main/generated/data/galacticraft/loot_tables/blocks/lunaslate_copper_ore.json index 0d022cc63..077224bed 100644 --- a/src/main/generated/data/galacticraft/loot_tables/blocks/lunaslate_copper_ore.json +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/lunaslate_copper_ore.json @@ -24,7 +24,7 @@ } } ], - "name": "galacticraft:lunaslate_copper_ore" + "name": "galacticraft:moon_copper_ore" }, { "type": "minecraft:item", diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/mars_copper_ore.json b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_copper_ore.json index c997c10b0..08bbf1b94 100644 --- a/src/main/generated/data/galacticraft/loot_tables/blocks/mars_copper_ore.json +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_copper_ore.json @@ -3,53 +3,15 @@ "pools": [ { "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], "entries": [ { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ], - "name": "galacticraft:mars_copper_ore" - }, - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "count": { - "type": "minecraft:uniform", - "max": 5.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - }, - { - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops", - "function": "minecraft:apply_bonus" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "minecraft:raw_copper" - } - ] + "type": "minecraft:item", + "name": "galacticraft:mars_copper_ore" } ], "rolls": 1.0 diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/mars_iron_ore.json b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_iron_ore.json index 38762f0e2..25c32e31e 100644 --- a/src/main/generated/data/galacticraft/loot_tables/blocks/mars_iron_ore.json +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_iron_ore.json @@ -3,44 +3,15 @@ "pools": [ { "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], "entries": [ { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ], - "name": "minecraft:iron_ore" - }, - { - "type": "minecraft:item", - "functions": [ - { - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops", - "function": "minecraft:apply_bonus" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "minecraft:raw_iron" - } - ] + "type": "minecraft:item", + "name": "galacticraft:mars_iron_ore" } ], "rolls": 1.0 diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/mars_tin_ore.json b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_tin_ore.json index fd7ed36c1..0bb862c4c 100644 --- a/src/main/generated/data/galacticraft/loot_tables/blocks/mars_tin_ore.json +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_tin_ore.json @@ -3,44 +3,15 @@ "pools": [ { "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], "entries": [ { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ], - "name": "galacticraft:mars_tin_ore" - }, - { - "type": "minecraft:item", - "functions": [ - { - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops", - "function": "minecraft:apply_bonus" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "galacticraft:raw_tin" - } - ] + "type": "minecraft:item", + "name": "galacticraft:mars_tin_ore" } ], "rolls": 1.0 diff --git a/src/main/generated/data/galacticraft/tags/worldgen/biome/has_structure/moon_boss.json b/src/main/generated/data/galacticraft/tags/worldgen/biome/has_structure/moon_boss.json deleted file mode 100644 index e663077d8..000000000 --- a/src/main/generated/data/galacticraft/tags/worldgen/biome/has_structure/moon_boss.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "#galacticraft:moon" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/worldgen/custom_terrain/asteroid/AsteroidChunkGenerator b/src/main/generated/data/galacticraft/worldgen/custom_terrain/asteroid/AsteroidChunkGenerator deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/generated/data/galacticraft/worldgen/noise_settings/asteroid.json b/src/main/generated/data/galacticraft/worldgen/noise_settings/asteroid.json deleted file mode 100644 index b3eb28f45..000000000 --- a/src/main/generated/data/galacticraft/worldgen/noise_settings/asteroid.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "aquifers_enabled": false, - "default_block": { - "Name": "galacticraft:hard_venus_rock" - }, - "default_fluid": { - "Name": "minecraft:air" - }, - "disable_mob_generation": false, - "legacy_random_source": false, - "noise": { - "height": 256, - "min_y": -32, - "size_horizontal": 1, - "size_vertical": 2 - }, - "noise_router": { - "barrier": 0.0, - "continents": 0.0, - "depth": 0.0, - "erosion": 0.0, - "final_density": { - "type": "minecraft:blend_density", - "argument": "galacticraft:asteroid/final_density" - }, - "fluid_level_floodedness": 0.0, - "fluid_level_spread": 0.0, - "initial_density_without_jaggedness": { - "type": "minecraft:noise", - "noise": "minecraft:spaghetti_3d_1", - "xz_scale": 1.0, - "y_scale": 1.0 - }, - "lava": 0.0, - "ridges": 0.0, - "temperature": 0.0, - "vegetation": 0.0, - "vein_gap": 0.0, - "vein_ridged": 0.0, - "vein_toggle": 0.0 - }, - "ore_veins_enabled": true, - "sea_level": -32, - "spawn_target": [ - { - "continentalness": [ - -0.11, - 1.0 - ], - "depth": 0.0, - "erosion": [ - -1.0, - 1.0 - ], - "humidity": [ - -1.0, - 1.0 - ], - "offset": 0.0, - "temperature": [ - -1.0, - 1.0 - ], - "weirdness": [ - -1.0, - -0.16 - ] - }, - { - "continentalness": [ - -0.11, - 1.0 - ], - "depth": 0.0, - "erosion": [ - -1.0, - 1.0 - ], - "humidity": [ - -1.0, - 1.0 - ], - "offset": 0.0, - "temperature": [ - -1.0, - 1.0 - ], - "weirdness": [ - 0.16, - 1.0 - ] - } - ], - "surface_rule": { - "type": "minecraft:sequence", - "sequence": [ - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:biome", - "biome_is": [ - "galacticraft:asteroid_field" - ] - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "galacticraft:hard_venus_rock" - } - } - }, - { - "type": "minecraft:condition", - "if_true": { - "type": "minecraft:vertical_gradient", - "false_at_and_above": { - "above_bottom": 5 - }, - "random_name": "minecraft:bedrock_floor", - "true_at_and_below": { - "above_bottom": 0 - } - }, - "then_run": { - "type": "minecraft:block", - "result_state": { - "Name": "minecraft:bedrock" - } - } - } - ] - } -} \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/Constant.java b/src/main/java/dev/galacticraft/mod/Constant.java index 0176b62e1..98317af42 100644 --- a/src/main/java/dev/galacticraft/mod/Constant.java +++ b/src/main/java/dev/galacticraft/mod/Constant.java @@ -27,6 +27,8 @@ import net.minecraft.ChatFormatting; import net.minecraft.core.Direction; import net.minecraft.core.Registry; +import net.minecraft.data.models.model.ModelTemplate; +import net.minecraft.data.models.model.TextureSlot; import net.minecraft.network.chat.Style; import net.minecraft.network.chat.TextColor; import net.minecraft.resources.ResourceKey; diff --git a/src/main/java/dev/galacticraft/mod/content/GCCelestialBodies.java b/src/main/java/dev/galacticraft/mod/content/GCCelestialBodies.java index ce3e7c43e..3613e91ed 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCCelestialBodies.java +++ b/src/main/java/dev/galacticraft/mod/content/GCCelestialBodies.java @@ -73,7 +73,7 @@ public class GCCelestialBodies { public static final ResourceKey> MERCURY = key("mercury"); public static final ResourceKey> VENUS = key("venus"); public static final ResourceKey> MARS = key("mars"); - public static final ResourceKey> ASTEROIDS = key("asteroids"); + public static final ResourceKey> ASTEROID = key("asteroid"); public static final ResourceKey> JUPITER = key("jupiter"); public static final ResourceKey> SATURN = key("saturn"); public static final ResourceKey> URANUS = key("uranus"); @@ -218,18 +218,25 @@ public static void bootstrapRegistries(BootstapContext> cont null ))); - context.register(ASTEROIDS, DecorativePlanet.INSTANCE.configure(new DecorativePlanetConfig( + context.register(ASTEROID, PlanetType.INSTANCE.configure(new PlanetConfig( Component.translatable(Translations.CelestialBody.ASTEROID), Component.translatable(Translations.CelestialBody.ASTEROID_DESC), sol, - OrbitalCelestialPositionType.INSTANCE.configure(new OrbitalCelestialPositionConfig(45.0F, 1.375F, 0.0F, true)), - SpinningIconCelestialDisplayType.INSTANCE.configure(new IconCelestialDisplayConfig(Constant.id("textures/gui/celestialbodies/asteroid.png"), 0, 0, 16, 16)), - AsteroidCelestialRingDisplayType.INSTANCE.configure(new DefaultCelestialRingDisplayConfig()), + OrbitalCelestialPositionType.INSTANCE.configure(new OrbitalCelestialPositionConfig(0.61527929901423877327491785323111F, 0.75F, 2.0F, false)), + IconCelestialDisplayType.INSTANCE.configure(new IconCelestialDisplayConfig(Constant.id("textures/gui/celestialbodies/asteroid.png"), 0, 0, 16, 16)), + DefaultCelestialRingDisplayType.INSTANCE.configure(new DefaultCelestialRingDisplayConfig()), + GCDimensions.ASTEROID, + teleporters.getOrThrow(GCTeleporterTypes.LANDER_CELESTIAL_TELEPORTER), new GasComposition.Builder() - .temperature(23.0) - .pressure(3.0E-15F) + .temperature(-2.0) + .pressure(0) .build(), - 0.166F, + 0.1f, + GCCelestialHandlers.DEFAULT, + 2, + -2, + -2, + 99999999L, // 30 times longer than earth null ))); diff --git a/src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java b/src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java index 9d9755e9d..21caff80a 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java +++ b/src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java @@ -27,15 +27,18 @@ import dev.galacticraft.mod.world.gen.custom.AsteroidChunkGenerator; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.storage.DimensionDataStorage; public class GCChunkGenerator { public static final GCChunkGeneratorRegistry CHUNK_GENERATOR = new GCChunkGeneratorRegistry(); - public static final Codec ASTEROIDS = CHUNK_GENERATOR.register("asteroid_chunk_generator", AsteroidChunkGenerator.CODEC); + public static final Codec ASTEROID = CHUNK_GENERATOR.register("asteroid_chunk_generator", AsteroidChunkGenerator.CODEC); public static Codec register(String id, Codec codec) { return Registry.register(BuiltInRegistries.CHUNK_GENERATOR, Constant.id(id), codec); diff --git a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java index e51cac8d5..2c471b22c 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java @@ -205,6 +205,11 @@ public void generate() { this.dropSelf(GCBlocks.LEAD_BLOCK); this.dropSelf(GCBlocks.LUNAR_SAPPHIRE_BLOCK); + //TODO: maybe make it drop ores instead of self + this.dropSelf(GCBlocks.MARS_COPPER_ORE); + this.dropSelf(GCBlocks.MARS_TIN_ORE); + this.dropSelf(GCBlocks.MARS_IRON_ORE); + this.add(GCBlocks.FALLEN_METEOR, block -> BlockLootSubProvider.createSilkTouchDispatchTable(block, this.applyExplosionDecay(block, LootItem.lootTableItem(GCItems.RAW_METEORIC_IRON) .apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0f, 2.0f)))))); diff --git a/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java b/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java index dbe6bf9c3..e16468d2e 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java +++ b/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java @@ -27,9 +27,7 @@ import dev.galacticraft.api.registry.RocketRegistries; import dev.galacticraft.impl.universe.galaxy.GalaxyImpl; import dev.galacticraft.mod.Constant; -import dev.galacticraft.mod.content.GCCelestialBodies; -import dev.galacticraft.mod.content.GCRocketParts; -import dev.galacticraft.mod.content.GCTeleporterTypes; +import dev.galacticraft.mod.content.*; import dev.galacticraft.mod.content.entity.damage.GCDamageTypes; import dev.galacticraft.mod.data.content.BootstrapDataProvider; import dev.galacticraft.mod.data.model.GCModelProvider; diff --git a/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java b/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java index 17304fa99..6313647c7 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java @@ -293,6 +293,10 @@ protected void generateTranslations(HolderLookup.@NotNull Provider registries) { this.add(MachineStatus.ALREADY_SEALED, "Already Sealed"); this.add(MachineStatus.AREA_TOO_LARGE, "Area Too Large"); + this.add(MachineStatus.MISSING_EMPTY_CAN, "Missing Empty Can"); + this.add(MachineStatus.NO_FOOD, "No Food"); + this.add(MachineStatus.TRANSFERRING_CAN, "Transferring Can"); + this.add(MachineStatus.CANNING, "Canning"); this.add(MachineStatus.BLOCKED, "Blocked"); this.add(MachineStatus.COLLECTING, "Collecting"); this.add(MachineStatus.COMPRESSING, "Compressing"); diff --git a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java index c28e77e83..818fe7bb0 100644 --- a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java @@ -164,6 +164,10 @@ public void generateBlockStateModels(BlockModelGenerators generator) { generator.createTrivialCube(GCBlocks.DEEPSLATE_ALUMINUM_ORE); generator.createTrivialCube(GCBlocks.DESH_ORE); + generator.createTrivialCube(GCBlocks.MARS_COPPER_ORE); + generator.createTrivialCube(GCBlocks.MARS_IRON_ORE); + generator.createTrivialCube(GCBlocks.MARS_TIN_ORE); + generator.createTrivialCube(GCBlocks.ILMENITE_ORE); @@ -240,7 +244,6 @@ public void generateBlockStateModels(BlockModelGenerators generator) { generator.createTrivialCube(GCBlocks.AIR_LOCK_FRAME); this.createAirLockController(generator); - generator.createNonTemplateModelBlock(GCBlocks.AIR_LOCK_SEAL); var para = MultiPartGenerator.multiPart(GCBlocks.PARACHEST); GCBlocks.PARACHEST.getStateDefinition().getPossibleStates().forEach(state -> { diff --git a/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java b/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java index e3c5d26c7..4ada93060 100644 --- a/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java +++ b/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java @@ -65,7 +65,7 @@ public static Biome asteroid( specialEffects.waterColor(0) .waterFogColor(0) .fogColor(0) - .skyColor(new Color(0, 0, 0).getRGB()) + .skyColor(0) .ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS) .backgroundMusic(Musics.createGameMusic(GCSounds.MUSIC_MOON)); diff --git a/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensionTypes.java b/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensionTypes.java index d5b5c6c1e..bd121ad93 100644 --- a/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensionTypes.java +++ b/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensionTypes.java @@ -76,7 +76,7 @@ public static void bootstrapRegistries(BootstapContext context) { )); context.register(ASTEROID, new DimensionType( OptionalLong.empty(), // fixedTime - true, // hasSkyLight + false, // hasSkyLight false, // hasCeiling false, // ultraWarm false, // natural @@ -88,7 +88,7 @@ public static void bootstrapRegistries(BootstapContext context) { 384, // logicalHeight GCTags.INFINIBURN_ASTEROID, // infiniburn Constant.id("asteroid"), // effectsLocation // fixme - 0.1F, // ambientLight + 0.0F, // ambientLight new DimensionType.MonsterSettings(false, false, UniformInt.of(0, 7), 0) )); } diff --git a/src/main/java/dev/galacticraft/mod/world/dimension/GCLevelStems.java b/src/main/java/dev/galacticraft/mod/world/dimension/GCLevelStems.java index 36bdce0da..d84c80e2e 100644 --- a/src/main/java/dev/galacticraft/mod/world/dimension/GCLevelStems.java +++ b/src/main/java/dev/galacticraft/mod/world/dimension/GCLevelStems.java @@ -23,15 +23,16 @@ package dev.galacticraft.mod.world.dimension; import dev.galacticraft.mod.Constant; +import dev.galacticraft.mod.world.biome.GCBiomes; import dev.galacticraft.mod.world.biome.source.GCMultiNoiseBiomeSourceParameterLists; import dev.galacticraft.mod.world.gen.GCNoiseGeneratorSettings; +import dev.galacticraft.mod.world.gen.custom.AsteroidChunkGenerator; import net.minecraft.core.HolderGetter; import net.minecraft.core.registries.Registries; import net.minecraft.data.worldgen.BootstapContext; import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.MultiNoiseBiomeSource; -import net.minecraft.world.level.biome.MultiNoiseBiomeSourceParameterList; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.biome.*; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; @@ -53,7 +54,7 @@ public static void bootstrapRegistries(@NotNull BootstapContext conte // the returned reference may be null // context.register(MOON, new LevelStem(typeLookup.getOrThrow(GCDimensionTypes.MOON), new NoiseBasedChunkGenerator(MultiNoiseBiomeSource.createFromPreset(biomeNoiseLookup.getOrThrow(GCMultiNoiseBiomeSourceParameterLists.MOON)), noiseLookup.getOrThrow(GCNoiseGeneratorSettings.MOON)))); context.register(VENUS, new LevelStem(typeLookup.getOrThrow(GCDimensionTypes.VENUS), new NoiseBasedChunkGenerator(MultiNoiseBiomeSource.createFromPreset(biomeNoiseLookup.getOrThrow(GCMultiNoiseBiomeSourceParameterLists.VENUS)), noiseLookup.getOrThrow(GCNoiseGeneratorSettings.VENUS)))); - context.register(ASTEROID, new LevelStem(typeLookup.getOrThrow(GCDimensionTypes.ASTEROID), new NoiseBasedChunkGenerator(MultiNoiseBiomeSource.createFromPreset(biomeNoiseLookup.getOrThrow(GCMultiNoiseBiomeSourceParameterLists.ASTEROID)), noiseLookup.getOrThrow(GCNoiseGeneratorSettings.ASTEROID)))); + context.register(ASTEROID, new LevelStem(typeLookup.getOrThrow(GCDimensionTypes.ASTEROID), new AsteroidChunkGenerator(MultiNoiseBiomeSource.createFromPreset(biomeNoiseLookup.getOrThrow(GCMultiNoiseBiomeSourceParameterLists.ASTEROID)), ResourceKey.create(Registries.DIMENSION, new ResourceLocation("galacticraft", "asteroid")), 1000))); } @Contract(value = "_ -> new", pure = true) diff --git a/src/main/java/dev/galacticraft/mod/world/gen/GCNoiseGeneratorSettings.java b/src/main/java/dev/galacticraft/mod/world/gen/GCNoiseGeneratorSettings.java index 3642742ff..161ff6fb6 100644 --- a/src/main/java/dev/galacticraft/mod/world/gen/GCNoiseGeneratorSettings.java +++ b/src/main/java/dev/galacticraft/mod/world/gen/GCNoiseGeneratorSettings.java @@ -22,17 +22,20 @@ package dev.galacticraft.mod.world.gen; +import com.mojang.serialization.Codec; import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.content.GCBlocks; +import dev.galacticraft.mod.world.gen.custom.AsteroidChunkGenerator; import dev.galacticraft.mod.world.gen.surfacebuilder.MoonSurfaceRules; import dev.galacticraft.mod.world.gen.surfacebuilder.VenusSurfaceRules; -import dev.galacticraft.mod.world.gen.surfacebuilder.AsteroidSurfaceRules; import net.minecraft.core.HolderGetter; import net.minecraft.core.registries.Registries; import net.minecraft.data.worldgen.BootstapContext; import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.OverworldBiomeBuilder; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.*; import net.minecraft.world.level.levelgen.synth.NormalNoise; import org.jetbrains.annotations.Contract; @@ -44,7 +47,6 @@ public class GCNoiseGeneratorSettings { public static final ResourceKey MOON = key("moon"); public static final ResourceKey VENUS = key("venus"); - public static final ResourceKey ASTEROID = key("asteroid"); public static void bootstrapRegistries(BootstapContext context) { HolderGetter densityLookup = context.lookup(Registries.DENSITY_FUNCTION); @@ -77,20 +79,6 @@ public static void bootstrapRegistries(BootstapContext c true, false )); - - context.register(ASTEROID, new NoiseGeneratorSettings( - NoiseSettings.create(-32, 256, 1, 2), - GCBlocks.HARD_VENUS_ROCK.defaultBlockState(), - Blocks.AIR.defaultBlockState(), - GCNoiseGeneratorSettings.asteroid(densityLookup, noiseLookup), - AsteroidSurfaceRules.ASTEROID, - new OverworldBiomeBuilder().spawnTarget(), - -32, - false, - false, - true, - false - )); } public static NoiseRouter moon(HolderGetter densityLookup, HolderGetter noiseLookup) { @@ -195,26 +183,6 @@ public static NoiseRouter venus(HolderGetter densityLookup, Hol ); } - public static NoiseRouter asteroid(HolderGetter densityLookup, HolderGetter noiseLookup) { - return new NoiseRouter( - DensityFunctions.zero(), // barrierNoise - DensityFunctions.zero(), // fluidLevelFloodednessNoise - DensityFunctions.zero(), // fluidLevelSpreadNoise - DensityFunctions.zero(), // lavaNoise - DensityFunctions.zero(), // temperature - DensityFunctions.zero(), // vegetation - DensityFunctions.zero(), // continents - DensityFunctions.zero(), // erosion - DensityFunctions.zero(), // depth - DensityFunctions.zero(), // ridges - DensityFunctions.noise(noiseLookup.getOrThrow(Noises.SPAGHETTI_3D_1)), // initialDensityWithoutJaggedness - DensityFunctions.blendDensity(GCDensityFunctions.getFunction(densityLookup, GCDensityFunctions.Asteroid.FINAL_DENSITY)), // finalDensity - DensityFunctions.zero(), // veinToggle - DensityFunctions.zero(), // veinRidged - DensityFunctions.zero() // veinGap - ); - } - @Contract(value = "_ -> new", pure = true) private static @NotNull ResourceKey key(String id) { return Constant.key(Registries.NOISE_SETTINGS, id); diff --git a/src/main/java/dev/galacticraft/mod/world/gen/surfacebuilder/AsteroidSurfaceRules.java b/src/main/java/dev/galacticraft/mod/world/gen/surfacebuilder/AsteroidSurfaceRules.java deleted file mode 100644 index 32740f57c..000000000 --- a/src/main/java/dev/galacticraft/mod/world/gen/surfacebuilder/AsteroidSurfaceRules.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2019-2024 Team Galacticraft - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package dev.galacticraft.mod.world.gen.surfacebuilder; - -import dev.galacticraft.mod.content.GCBlocks; -import dev.galacticraft.mod.world.biome.GCBiomes; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.levelgen.SurfaceRules; -import net.minecraft.world.level.levelgen.VerticalAnchor; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -public class AsteroidSurfaceRules { - private static final SurfaceRules.RuleSource BEDROCK = block(Blocks.BEDROCK); - public static final SurfaceRules.RuleSource HARD_ROCK = block(GCBlocks.HARD_VENUS_ROCK); - - public static final SurfaceRules.RuleSource ASTEROID = createDefaultRule(); - - public static @NotNull SurfaceRules.RuleSource createDefaultRule() { - return SurfaceRules.sequence( - SurfaceRules.ifTrue( - SurfaceRules.isBiome(GCBiomes.Asteroid.ASTEROID_FIELD), - HARD_ROCK - ), - SurfaceRules.ifTrue(SurfaceRules.verticalGradient("bedrock_floor", VerticalAnchor.bottom(), VerticalAnchor.aboveBottom(5)), BEDROCK) - ); - } - - @Contract("_ -> new") - private static @NotNull SurfaceRules.RuleSource block(@NotNull Block block) { - return SurfaceRules.state(block.defaultBlockState()); - } -} diff --git a/src/main/generated/assets/galacticraft/blockstates/air_lock_seal.json b/src/main/resources/assets/galacticraft/blockstates/air_lock_seal.json similarity index 100% rename from src/main/generated/assets/galacticraft/blockstates/air_lock_seal.json rename to src/main/resources/assets/galacticraft/blockstates/air_lock_seal.json diff --git a/src/main/generated/assets/galacticraft/models/item/canned_food.json b/src/main/resources/assets/galacticraft/models/item/canned_food.json similarity index 76% rename from src/main/generated/assets/galacticraft/models/item/canned_food.json rename to src/main/resources/assets/galacticraft/models/item/canned_food.json index a2fc16bd0..64226486b 100644 --- a/src/main/generated/assets/galacticraft/models/item/canned_food.json +++ b/src/main/resources/assets/galacticraft/models/item/canned_food.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:item/generated", + "parent": "minecraft:item/layered", "textures": { "layer0": "galacticraft:item/canned_food_template", "layer1": "galacticraft:item/canned_food_label" diff --git a/src/main/generated/assets/galacticraft/models/item/empty_can.json b/src/main/resources/assets/galacticraft/models/item/empty_can.json similarity index 76% rename from src/main/generated/assets/galacticraft/models/item/empty_can.json rename to src/main/resources/assets/galacticraft/models/item/empty_can.json index a2fc16bd0..64226486b 100644 --- a/src/main/generated/assets/galacticraft/models/item/empty_can.json +++ b/src/main/resources/assets/galacticraft/models/item/empty_can.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:item/generated", + "parent": "minecraft:item/layered", "textures": { "layer0": "galacticraft:item/canned_food_template", "layer1": "galacticraft:item/canned_food_label" diff --git a/src/main/resources/assets/galacticraft/textures/block/vapor_spout_block_top.png b/src/main/resources/assets/galacticraft/textures/block/vapor_spout.png similarity index 100% rename from src/main/resources/assets/galacticraft/textures/block/vapor_spout_block_top.png rename to src/main/resources/assets/galacticraft/textures/block/vapor_spout.png From 580ffb63648d97a9bf38ea147faa97a8abdcd966 Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Thu, 29 Aug 2024 22:56:30 +1000 Subject: [PATCH 14/23] minor tweaks - added asteroid ores + dense ice - fixed some data generation issues - made asteroid dimension pitch black - fixed air lock seal for the second time - fixed canned food textures --- .../blockstates/asteroid_aluminum_ore.json | 7 +++ .../blockstates/asteroid_iron_ore.json | 7 +++ .../blockstates/asteroid_silicon_ore.json | 7 +++ .../galacticraft/blockstates/dense_ice.json | 7 +++ .../assets/galacticraft/lang/en_us.json | 5 ++ .../models/block/asteroid_aluminum_ore.json | 6 +++ .../models/block/asteroid_iron_ore.json | 6 +++ .../models/block/asteroid_silicon_ore.json | 6 +++ .../galacticraft/models/block/dense_ice.json | 6 +++ .../generated/data/c/tags/blocks/ores.json | 3 ++ .../blocks/asteroid_aluminum_ore.json | 49 +++++++++++++++++++ .../loot_tables/blocks/asteroid_iron_ore.json | 49 +++++++++++++++++++ .../blocks/asteroid_silicon_ore.json | 49 +++++++++++++++++++ .../loot_tables/blocks/dense_ice.json | 20 ++++++++ .../worldgen/biome/asteroid_field.json | 2 +- .../tags/blocks/mineable/pickaxe.json | 4 ++ .../tags/blocks/needs_stone_tool.json | 3 ++ .../java/dev/galacticraft/mod/Constant.java | 4 ++ .../dimension/AsteroidDimensionEffects.java | 2 +- .../render/dimension/AsteroidSkyRenderer.java | 4 +- .../galacticraft/mod/content/GCBlocks.java | 5 ++ .../mod/content/item/GCCreativeModeTabs.java | 3 +- .../mod/content/item/GCItems.java | 6 +++ .../mod/data/GCBlockLootTableProvider.java | 6 +++ .../mod/data/GCTranslationProvider.java | 1 + .../mod/data/model/GCModelProvider.java | 5 ++ .../mod/data/tag/GCBlockTagProvider.java | 5 ++ .../galacticraft/mod/util/Translations.java | 1 + .../mod/world/biome/AsteroidBiomes.java | 2 +- .../mod/world/dimension/GCDimensionTypes.java | 1 + .../gen/custom/AsteroidChunkGenerator.java | 12 ++--- .../blockstates/air_lock_seal.json | 8 +-- .../models/block/air_lock_seal.json | 1 + .../models/item/air_lock_seal.json | 3 ++ .../galacticraft/models/item/canned_food.json | 2 +- .../galacticraft/models/item/empty_can.json | 2 +- 36 files changed, 289 insertions(+), 20 deletions(-) create mode 100644 src/main/generated/assets/galacticraft/blockstates/asteroid_aluminum_ore.json create mode 100644 src/main/generated/assets/galacticraft/blockstates/asteroid_iron_ore.json create mode 100644 src/main/generated/assets/galacticraft/blockstates/asteroid_silicon_ore.json create mode 100644 src/main/generated/assets/galacticraft/blockstates/dense_ice.json create mode 100644 src/main/generated/assets/galacticraft/models/block/asteroid_aluminum_ore.json create mode 100644 src/main/generated/assets/galacticraft/models/block/asteroid_iron_ore.json create mode 100644 src/main/generated/assets/galacticraft/models/block/asteroid_silicon_ore.json create mode 100644 src/main/generated/assets/galacticraft/models/block/dense_ice.json create mode 100644 src/main/generated/data/galacticraft/loot_tables/blocks/asteroid_aluminum_ore.json create mode 100644 src/main/generated/data/galacticraft/loot_tables/blocks/asteroid_iron_ore.json create mode 100644 src/main/generated/data/galacticraft/loot_tables/blocks/asteroid_silicon_ore.json create mode 100644 src/main/generated/data/galacticraft/loot_tables/blocks/dense_ice.json create mode 100644 src/main/resources/assets/galacticraft/models/item/air_lock_seal.json diff --git a/src/main/generated/assets/galacticraft/blockstates/asteroid_aluminum_ore.json b/src/main/generated/assets/galacticraft/blockstates/asteroid_aluminum_ore.json new file mode 100644 index 000000000..21c818c7d --- /dev/null +++ b/src/main/generated/assets/galacticraft/blockstates/asteroid_aluminum_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "galacticraft:block/asteroid_aluminum_ore" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/blockstates/asteroid_iron_ore.json b/src/main/generated/assets/galacticraft/blockstates/asteroid_iron_ore.json new file mode 100644 index 000000000..d13396345 --- /dev/null +++ b/src/main/generated/assets/galacticraft/blockstates/asteroid_iron_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "galacticraft:block/asteroid_iron_ore" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/blockstates/asteroid_silicon_ore.json b/src/main/generated/assets/galacticraft/blockstates/asteroid_silicon_ore.json new file mode 100644 index 000000000..e64d21c76 --- /dev/null +++ b/src/main/generated/assets/galacticraft/blockstates/asteroid_silicon_ore.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "galacticraft:block/asteroid_silicon_ore" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/blockstates/dense_ice.json b/src/main/generated/assets/galacticraft/blockstates/dense_ice.json new file mode 100644 index 000000000..184107d4c --- /dev/null +++ b/src/main/generated/assets/galacticraft/blockstates/dense_ice.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "galacticraft:block/dense_ice" + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/lang/en_us.json b/src/main/generated/assets/galacticraft/lang/en_us.json index 63225edae..a8b780b7d 100644 --- a/src/main/generated/assets/galacticraft/lang/en_us.json +++ b/src/main/generated/assets/galacticraft/lang/en_us.json @@ -20,9 +20,12 @@ "block.galacticraft.aluminum_decoration_wall": "Aluminum Decoration Wall", "block.galacticraft.aluminum_ore": "Aluminum Ore", "block.galacticraft.aluminum_wire": "Aluminum Wire", + "block.galacticraft.asteroid_aluminum_ore": "Asteroid Aluminum Ore", + "block.galacticraft.asteroid_iron_ore": "Asteroid Iron Ore", "block.galacticraft.asteroid_rock": "Asteroid Rock", "block.galacticraft.asteroid_rock_block_1": "Asteroid Rock", "block.galacticraft.asteroid_rock_block_2": "Asteroid Rock", + "block.galacticraft.asteroid_silicon_ore": "Asteroid Silicon Ore", "block.galacticraft.basic_solar_panel": "Basic Solar Panel", "block.galacticraft.basic_solar_panel.description": "Basic Solar Panels collect energy from the sun, and store it for further use. Collects most energy at mid-day (non-adjustable).", "block.galacticraft.black_candle_moon_cheese_block": "Block of Cheese with Black Candle", @@ -70,6 +73,7 @@ "block.galacticraft.deepslate_aluminum_ore": "Deepslate Aluminum Ore", "block.galacticraft.deepslate_silicon_ore": "Deepslate Silicon Ore", "block.galacticraft.deepslate_tin_ore": "Deepslate Tin Ore", + "block.galacticraft.dense_ice": "Dense Ice", "block.galacticraft.desh_block": "Block of Desh", "block.galacticraft.desh_ore": "Desh Ore", "block.galacticraft.detailed_aluminum_decoration": "Detailed Aluminum Decoration", @@ -481,6 +485,7 @@ "item.galacticraft.white_parachute": "Parachute", "item.galacticraft.yellow_parachute": "Yellow Parachute", "itemGroup.galacticraft.blocks": "Galacticraft Blocks", + "itemGroup.galacticraft.canned_food": "Canned Food", "itemGroup.galacticraft.items": "Galacticraft Items", "itemGroup.galacticraft.machines": "Galacticraft Machines", "key.galacticraft.open_celestial_screen": "Open Celestial Map", diff --git a/src/main/generated/assets/galacticraft/models/block/asteroid_aluminum_ore.json b/src/main/generated/assets/galacticraft/models/block/asteroid_aluminum_ore.json new file mode 100644 index 000000000..60727c1e4 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/asteroid_aluminum_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "galacticraft:block/asteroid_aluminum_ore" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/asteroid_iron_ore.json b/src/main/generated/assets/galacticraft/models/block/asteroid_iron_ore.json new file mode 100644 index 000000000..1ba99904b --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/asteroid_iron_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "galacticraft:block/asteroid_iron_ore" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/asteroid_silicon_ore.json b/src/main/generated/assets/galacticraft/models/block/asteroid_silicon_ore.json new file mode 100644 index 000000000..7168e8486 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/asteroid_silicon_ore.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "galacticraft:block/asteroid_silicon_ore" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/dense_ice.json b/src/main/generated/assets/galacticraft/models/block/dense_ice.json new file mode 100644 index 000000000..699b88a5f --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/dense_ice.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "galacticraft:block/dense_ice" + } +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/blocks/ores.json b/src/main/generated/data/c/tags/blocks/ores.json index 650c958c6..966577899 100644 --- a/src/main/generated/data/c/tags/blocks/ores.json +++ b/src/main/generated/data/c/tags/blocks/ores.json @@ -9,6 +9,9 @@ "galacticraft:deepslate_tin_ore", "galacticraft:moon_tin_ore", "galacticraft:lunaslate_tin_ore", + "galacticraft:asteroid_aluminum_ore", + "galacticraft:asteroid_iron_ore", + "galacticraft:asteroid_silicon_ore", "galacticraft:aluminum_ore", "galacticraft:deepslate_aluminum_ore", "galacticraft:desh_ore", diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/asteroid_aluminum_ore.json b/src/main/generated/data/galacticraft/loot_tables/blocks/asteroid_aluminum_ore.json new file mode 100644 index 000000000..ccd32ffb6 --- /dev/null +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/asteroid_aluminum_ore.json @@ -0,0 +1,49 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:air" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "galacticraft:raw_aluminum" + } + ] + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/asteroid_iron_ore.json b/src/main/generated/data/galacticraft/loot_tables/blocks/asteroid_iron_ore.json new file mode 100644 index 000000000..1b85b769a --- /dev/null +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/asteroid_iron_ore.json @@ -0,0 +1,49 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:air" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:raw_iron" + } + ] + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/asteroid_silicon_ore.json b/src/main/generated/data/galacticraft/loot_tables/blocks/asteroid_silicon_ore.json new file mode 100644 index 000000000..b87844929 --- /dev/null +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/asteroid_silicon_ore.json @@ -0,0 +1,49 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "minecraft:air" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "galacticraft:raw_silicon" + } + ] + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/dense_ice.json b/src/main/generated/data/galacticraft/loot_tables/blocks/dense_ice.json new file mode 100644 index 000000000..38fe9914a --- /dev/null +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/dense_ice.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:air" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json b/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json index ce8c1488f..e3d05e3e6 100644 --- a/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json +++ b/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json @@ -20,7 +20,7 @@ "water_fog_color": 0 }, "features": [], - "has_precipitation": true, + "has_precipitation": false, "spawn_costs": {}, "spawners": { "ambient": [], diff --git a/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json index 313842005..7fd7884c2 100644 --- a/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -10,6 +10,9 @@ "galacticraft:deepslate_tin_ore", "galacticraft:moon_tin_ore", "galacticraft:lunaslate_tin_ore", + "galacticraft:asteroid_aluminum_ore", + "galacticraft:asteroid_iron_ore", + "galacticraft:asteroid_silicon_ore", "galacticraft:aluminum_ore", "galacticraft:deepslate_aluminum_ore", "galacticraft:desh_ore", @@ -72,6 +75,7 @@ "galacticraft:asteroid_rock", "galacticraft:asteroid_rock_block_1", "galacticraft:asteroid_rock_block_2", + "galacticraft:dense_ice", "galacticraft:tin_decoration", "galacticraft:copper_decoration", "galacticraft:bronze_decoration", diff --git a/src/main/generated/data/minecraft/tags/blocks/needs_stone_tool.json b/src/main/generated/data/minecraft/tags/blocks/needs_stone_tool.json index 9c585df58..9a03f4e1c 100644 --- a/src/main/generated/data/minecraft/tags/blocks/needs_stone_tool.json +++ b/src/main/generated/data/minecraft/tags/blocks/needs_stone_tool.json @@ -11,6 +11,9 @@ "galacticraft:deepslate_tin_ore", "galacticraft:moon_tin_ore", "galacticraft:lunaslate_tin_ore", + "galacticraft:asteroid_aluminum_ore", + "galacticraft:asteroid_iron_ore", + "galacticraft:asteroid_silicon_ore", "galacticraft:aluminum_ore", "galacticraft:deepslate_aluminum_ore", "galacticraft:galena_ore" diff --git a/src/main/java/dev/galacticraft/mod/Constant.java b/src/main/java/dev/galacticraft/mod/Constant.java index 98317af42..7232225d3 100644 --- a/src/main/java/dev/galacticraft/mod/Constant.java +++ b/src/main/java/dev/galacticraft/mod/Constant.java @@ -111,6 +111,7 @@ interface Block { String ASTEROID_ROCK = "asteroid_rock"; String ASTEROID_ROCK_1 = "asteroid_rock_block_1"; String ASTEROID_ROCK_2 = "asteroid_rock_block_2"; + String DENSE_ICE = "dense_ice"; String SOFT_VENUS_ROCK = "soft_venus_rock"; String HARD_VENUS_ROCK = "hard_venus_rock"; @@ -133,6 +134,9 @@ interface Block { String DEEPSLATE_TIN_ORE = "deepslate_tin_ore"; String MOON_TIN_ORE = "moon_tin_ore"; String LUNASLATE_TIN_ORE = "lunaslate_tin_ore"; + String ASTEROID_ALUMINUM_ORE = "asteroid_aluminum_ore"; + String ASTEROID_IRON_ORE = "asteroid_iron_ore"; + String ASTEROID_SILICON_ORE = "asteroid_silicon_ore"; String ALUMINUM_ORE = "aluminum_ore"; String DEEPSLATE_ALUMINUM_ORE = "deepslate_aluminum_ore"; String GALENA_ORE = "galena_ore"; diff --git a/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidDimensionEffects.java b/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidDimensionEffects.java index bc29be7d7..b2cc65bda 100644 --- a/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidDimensionEffects.java +++ b/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidDimensionEffects.java @@ -58,7 +58,7 @@ public class AsteroidDimensionEffects extends DimensionSpecialEffects { public static final AsteroidDimensionEffects INSTANCE = new AsteroidDimensionEffects(); private AsteroidDimensionEffects() { - super(Float.NaN, false, SkyType.NORMAL, true, true); + super(Float.NaN, false, SkyType.NORMAL, false, false); } @Override diff --git a/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidSkyRenderer.java b/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidSkyRenderer.java index 9755148fe..6ca4ec6c6 100644 --- a/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidSkyRenderer.java +++ b/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidSkyRenderer.java @@ -73,7 +73,7 @@ public void render(WorldRenderContext context) { Matrix4f matrix = matrices.last().pose(); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - float size = 20.0F; + float size = 6.0F; RenderSystem.setShader(GameRenderer::getPositionTexShader); RenderSystem.setShaderTexture(0, SUN_TEXTURE); buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); @@ -90,7 +90,7 @@ public void render(WorldRenderContext context) { matrices.pushPose(); matrix = matrices.last().pose(); - size = 10.0F; + size = 1.0F; assert Minecraft.getInstance().player != null; float earthRotation = (float) (context.world().getSharedSpawnPos().getZ() - Minecraft.getInstance().player.getZ()) * 0.01F; matrices.scale(0.6F, 0.6F, 0.6F); diff --git a/src/main/java/dev/galacticraft/mod/content/GCBlocks.java b/src/main/java/dev/galacticraft/mod/content/GCBlocks.java index 49477189f..7411c8e15 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCBlocks.java +++ b/src/main/java/dev/galacticraft/mod/content/GCBlocks.java @@ -165,6 +165,7 @@ public class GCBlocks { public static final Block ASTEROID_ROCK = BLOCKS.register(Constant.Block.ASTEROID_ROCK, new Block(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BROWN).instrument(NoteBlockInstrument.BASEDRUM).destroyTime(3.0F))); public static final Block ASTEROID_ROCK_1 = BLOCKS.register(Constant.Block.ASTEROID_ROCK_1, new Block(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BROWN).instrument(NoteBlockInstrument.BASEDRUM).destroyTime(3.0F))); // todo naming public static final Block ASTEROID_ROCK_2 = BLOCKS.register(Constant.Block.ASTEROID_ROCK_2, new Block(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BROWN).instrument(NoteBlockInstrument.BASEDRUM).destroyTime(3.0F))); + public static final Block DENSE_ICE = BLOCKS.register(Constant.Block.DENSE_ICE, new Block(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_BLUE).instrument(NoteBlockInstrument.BASS).destroyTime(1.0F))); // VENUS NATURAL public static final Block SOFT_VENUS_ROCK = BLOCKS.register(Constant.Block.SOFT_VENUS_ROCK, new Block(BlockBehaviour.Properties.of().mapColor(MapColor.STONE).instrument(NoteBlockInstrument.BASEDRUM).strength(1.5F, 6.0F))); @@ -215,6 +216,10 @@ public class GCBlocks { public static final Block MOON_TIN_ORE = BLOCKS.register(Constant.Block.MOON_TIN_ORE, new DropExperienceBlock(ConstantInt.of(0), oreSettings(3.0F, 5.0F, false))); public static final Block LUNASLATE_TIN_ORE = BLOCKS.register(Constant.Block.LUNASLATE_TIN_ORE, new DropExperienceBlock(ConstantInt.of(0), oreSettings(5.0F, 5.0F, true))); + public static final Block ASTEROID_ALUMINUM_ORE = BLOCKS.register(Constant.Block.ASTEROID_ALUMINUM_ORE, new DropExperienceBlock(ConstantInt.of(0), oreSettings(3.0F, 3.0F, false))); + public static final Block ASTEROID_IRON_ORE = BLOCKS.register(Constant.Block.ASTEROID_IRON_ORE, new DropExperienceBlock(ConstantInt.of(0), oreSettings(3.0F, 3.0F, false))); + public static final Block ASTEROID_SILICON_ORE = BLOCKS.register(Constant.Block.ASTEROID_SILICON_ORE, new DropExperienceBlock(ConstantInt.of(0), oreSettings(3.0F, 3.0F, false))); + public static final Block ALUMINUM_ORE = BLOCKS.register(Constant.Block.ALUMINUM_ORE, new DropExperienceBlock(ConstantInt.of(0), oreSettings(3.0F, 3.0F, false))); public static final Block DEEPSLATE_ALUMINUM_ORE = BLOCKS.register(Constant.Block.DEEPSLATE_ALUMINUM_ORE, new DropExperienceBlock(ConstantInt.of(0), oreSettings(3.5F, 3.0F, true))); diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java index 9cef2f868..e4c3bc306 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java @@ -410,11 +410,10 @@ public class GCCreativeModeTabs { // MACHINES }).build(); - //Todo: fix up my bad programming to be translatable public static final CreativeModeTab CANNED_FOOD_GROUP = FabricItemGroup .builder() .icon(() -> new ItemStack(CANNED_FOOD)) - .title(Component.literal("Galacticraft Cans")) + .title(Component.translatable(Translations.ItemGroup.CANNED_FOOD)) .displayItems((parameters, output) -> { output.accept(EMPTY_CANNED_FOOD); }).build(); diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java index 19c574b8e..24bbc4af0 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java @@ -124,6 +124,7 @@ public class GCItems { public static final Item ASTEROID_ROCK = new BlockItem(GCBlocks.ASTEROID_ROCK, new Item.Properties()); public static final Item ASTEROID_ROCK_1 = new BlockItem(GCBlocks.ASTEROID_ROCK_1, new Item.Properties()); public static final Item ASTEROID_ROCK_2 = new BlockItem(GCBlocks.ASTEROID_ROCK_2, new Item.Properties()); + public static final Item DENSE_ICE = new BlockItem(GCBlocks.DENSE_ICE, new Item.Properties()); // VENUS NATURAL public static final Item SOFT_VENUS_ROCK = new BlockItem(GCBlocks.SOFT_VENUS_ROCK, new Item.Properties()); @@ -172,6 +173,11 @@ public class GCItems { public static final Item MOON_TIN_ORE = new BlockItem(GCBlocks.MOON_TIN_ORE, new Item.Properties()); public static final Item LUNASLATE_TIN_ORE = new BlockItem(GCBlocks.LUNASLATE_TIN_ORE, new Item.Properties()); + public static final Item ASTEROID_ALUMINUM_ORE = new BlockItem(GCBlocks.ASTEROID_ALUMINUM_ORE, new Item.Properties()); + public static final Item ASTEROID_TIN_ORE = new BlockItem(GCBlocks.ASTEROID_IRON_ORE, new Item.Properties()); + public static final Item ASTEROID_SILICON_ORE = new BlockItem(GCBlocks.ASTEROID_SILICON_ORE, new Item.Properties()); + + public static final Item ALUMINUM_ORE = new BlockItem(GCBlocks.ALUMINUM_ORE, new Item.Properties()); public static final Item MARS_TIN_ORE = new BlockItem(GCBlocks.MARS_TIN_ORE, new Item.Properties()); public static final Item MARS_IRON_ORE = new BlockItem(GCBlocks.MARS_IRON_ORE, new Item.Properties()); diff --git a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java index 2c471b22c..651f638e8 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java @@ -30,6 +30,7 @@ import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider; import net.minecraft.advancements.critereon.StatePropertiesPredicate; import net.minecraft.data.loot.BlockLootSubProvider; +import net.minecraft.world.item.Items; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; @@ -131,6 +132,7 @@ public void generate() { this.dropSelf(GCBlocks.ASTEROID_ROCK); this.dropSelf(GCBlocks.ASTEROID_ROCK_1); this.dropSelf(GCBlocks.ASTEROID_ROCK_2); + this.dropSelf(GCBlocks.DENSE_ICE); this.dropSelf(GCBlocks.SOFT_VENUS_ROCK); this.dropSelf(GCBlocks.HARD_VENUS_ROCK); @@ -170,6 +172,10 @@ public void generate() { this.add(GCBlocks.MOON_TIN_ORE, this.createOreDrop(GCBlocks.MOON_TIN_ORE, GCItems.RAW_TIN)); this.add(GCBlocks.LUNASLATE_TIN_ORE, this.createOreDrop(GCBlocks.LUNASLATE_TIN_ORE, GCItems.RAW_TIN)); + this.add(GCBlocks.ASTEROID_ALUMINUM_ORE, this.createOreDrop(GCBlocks.ASTEROID_ALUMINUM_ORE, GCItems.RAW_ALUMINUM)); + this.add(GCBlocks.ASTEROID_IRON_ORE, this.createOreDrop(GCBlocks.ASTEROID_IRON_ORE, Items.RAW_IRON)); + this.add(GCBlocks.ASTEROID_SILICON_ORE, this.createOreDrop(GCBlocks.ASTEROID_SILICON_ORE, GCItems.RAW_SILICON)); + this.add(GCBlocks.ALUMINUM_ORE, this.createOreDrop(GCBlocks.ALUMINUM_ORE, GCItems.RAW_ALUMINUM)); this.add(GCBlocks.DEEPSLATE_ALUMINUM_ORE, this.createOreDrop(GCBlocks.ALUMINUM_ORE, GCItems.RAW_ALUMINUM)); diff --git a/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java b/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java index 6313647c7..84b1892c4 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java @@ -51,6 +51,7 @@ protected void generateTranslations(HolderLookup.@NotNull Provider registries) { this.add(ItemGroup.BLOCKS, "Galacticraft Blocks"); this.add(ItemGroup.ITEMS, "Galacticraft Items"); this.add(ItemGroup.MACHINES, "Galacticraft Machines"); + this.add(ItemGroup.CANNED_FOOD, "Canned Food"); this.block(GCBlocks.ASTEROID_ROCK_1, "Asteroid Rock"); this.block(GCBlocks.ASTEROID_ROCK_2, "Asteroid Rock"); diff --git a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java index 818fe7bb0..8cf44452f 100644 --- a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java @@ -105,6 +105,7 @@ public void generateBlockStateModels(BlockModelGenerators generator) { generator.createTrivialCube(GCBlocks.ASTEROID_ROCK); generator.createTrivialCube(GCBlocks.ASTEROID_ROCK_1); generator.createTrivialCube(GCBlocks.ASTEROID_ROCK_2); + generator.createTrivialCube(GCBlocks.DENSE_ICE); // VENUS NATURAL generator.createTrivialCube(GCBlocks.SOFT_VENUS_ROCK); @@ -160,6 +161,10 @@ public void generateBlockStateModels(BlockModelGenerators generator) { generator.createTrivialCube(GCBlocks.MOON_TIN_ORE); generator.createTrivialCube(GCBlocks.LUNASLATE_TIN_ORE); + generator.createTrivialCube(GCBlocks.ASTEROID_ALUMINUM_ORE); + generator.createTrivialCube(GCBlocks.ASTEROID_IRON_ORE); + generator.createTrivialCube(GCBlocks.ASTEROID_SILICON_ORE); + generator.createTrivialCube(GCBlocks.ALUMINUM_ORE); generator.createTrivialCube(GCBlocks.DEEPSLATE_ALUMINUM_ORE); diff --git a/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java b/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java index e642b120f..2d0797af2 100644 --- a/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java @@ -155,6 +155,7 @@ protected void addTags(HolderLookup.Provider provider) { GCBlocks.SILICON_ORE, GCBlocks.DEEPSLATE_SILICON_ORE, GCBlocks.MOON_COPPER_ORE, GCBlocks.LUNASLATE_COPPER_ORE, GCBlocks.TIN_ORE, GCBlocks.DEEPSLATE_TIN_ORE, GCBlocks.MOON_TIN_ORE, GCBlocks.LUNASLATE_TIN_ORE, + GCBlocks.ASTEROID_ALUMINUM_ORE, GCBlocks.ASTEROID_IRON_ORE, GCBlocks.ASTEROID_SILICON_ORE, GCBlocks.ALUMINUM_ORE, GCBlocks.DEEPSLATE_ALUMINUM_ORE, GCBlocks.DESH_ORE, GCBlocks.ILMENITE_ORE, @@ -210,6 +211,7 @@ protected void addTags(HolderLookup.Provider provider) { GCBlocks.ASTEROID_ROCK, GCBlocks.ASTEROID_ROCK_1, GCBlocks.ASTEROID_ROCK_2, + GCBlocks.DENSE_ICE, GCBlocks.TIN_DECORATION.block(), GCBlocks.COPPER_DECORATION.block(), @@ -259,6 +261,9 @@ protected void addTags(HolderLookup.Provider provider) { GCBlocks.DEEPSLATE_TIN_ORE, GCBlocks.MOON_TIN_ORE, GCBlocks.LUNASLATE_TIN_ORE, + GCBlocks.ASTEROID_ALUMINUM_ORE, + GCBlocks.ASTEROID_IRON_ORE, + GCBlocks.ASTEROID_SILICON_ORE, GCBlocks.ALUMINUM_ORE, GCBlocks.DEEPSLATE_ALUMINUM_ORE, GCBlocks.GALENA_ORE diff --git a/src/main/java/dev/galacticraft/mod/util/Translations.java b/src/main/java/dev/galacticraft/mod/util/Translations.java index b42fb73a8..0ddfc8ea0 100644 --- a/src/main/java/dev/galacticraft/mod/util/Translations.java +++ b/src/main/java/dev/galacticraft/mod/util/Translations.java @@ -27,6 +27,7 @@ interface ItemGroup { String ITEMS = "itemGroup.galacticraft.items"; String BLOCKS = "itemGroup.galacticraft.blocks"; String MACHINES = "itemGroup.galacticraft.machines"; + String CANNED_FOOD = "itemGroup.galacticraft.canned_food"; } interface RecipeCategory { diff --git a/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java b/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java index 4ada93060..6005e1211 100644 --- a/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java +++ b/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java @@ -75,7 +75,7 @@ public static Biome asteroid( return new Biome.BiomeBuilder() .mobSpawnSettings(spawnBuilder.build()) - .hasPrecipitation(true) + .hasPrecipitation(false) .temperature(-2F) // temp is hot to prevent snow .downfall(0.5F) .specialEffects(specialEffects.build()) diff --git a/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensionTypes.java b/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensionTypes.java index bd121ad93..2ee331a04 100644 --- a/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensionTypes.java +++ b/src/main/java/dev/galacticraft/mod/world/dimension/GCDimensionTypes.java @@ -22,6 +22,7 @@ package dev.galacticraft.mod.world.dimension; +import com.google.common.base.Optional; import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.tag.GCTags; import net.minecraft.core.registries.Registries; diff --git a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java index 895d37711..6b94e0446 100644 --- a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java +++ b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java @@ -170,19 +170,18 @@ public AsteroidChunkGenerator(BiomeSource biomeSource, ResourceKey dimens this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ASTEROID_ROCK_1, 7, .3)); this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ASTEROID_ROCK, 11, .25)); - //TODO: FIX ORE TYPES ASTEROID DOESNT HAVE ORES //!ConfigManagerAst.disableAluminumGen if (true) - this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ALUMINUM_ORE, 5, .2)); + this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ASTEROID_ALUMINUM_ORE, 5, .2)); //!ConfigManagerAsteroids.disableIlmeniteGen if (true) this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ILMENITE_ORE, 4, .15)); //!ConfigManagerAsteroids.disableIronGen if (true) - this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.MARS_IRON_ORE, 3, .2)); + this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ASTEROID_IRON_ORE, 3, .2)); //ConfigManagerCore.enableSiliconOreGen if (true) - this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.SILICON_ORE,2, .15)); + this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ASTEROID_SILICON_ORE,2, .15)); //Solid Meteoric Iron - has no config to disable this.coreHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.METEORIC_IRON_BLOCK, 2, .13)); //Diamond ore - has no config to disable @@ -192,7 +191,7 @@ public AsteroidChunkGenerator(BiomeSource biomeSource, ResourceKey dimens this.shellHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ASTEROID_ROCK, 1, .15)); this.shellHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ASTEROID_ROCK_1, 3, .15)); this.shellHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.ASTEROID_ROCK_2, 1, .15)); - this.shellHandler.addBlock(new SpecialAsteroidBlock(Blocks.PACKED_ICE, 1, .15)); //TODO: REPLACE WITH DENSE ICE + this.shellHandler.addBlock(new SpecialAsteroidBlock(GCBlocks.DENSE_ICE, 1, .15)); } private ChunkAccess generateChunkData(Blender blender, RandomState randomState, StructureManager structureManager, ChunkAccess chunkAccess) { @@ -264,8 +263,7 @@ private void generateAsteroid(Random rand, int asteroidX, int asteroidY, int ast if (rand.nextInt(AsteroidChunkGenerator.HOLLOW_CHANCE) == 0 && size >= AsteroidChunkGenerator.MIN_RADIUS_FOR_HOLLOW) { isHollow = true; - //TODO: set to dense ice - shell = new SpecialAsteroidBlock(Blocks.PACKED_ICE, 1, .15); + shell = new SpecialAsteroidBlock(GCBlocks.DENSE_ICE, 1, .15); } //Add to the list of asteroids for external use diff --git a/src/main/resources/assets/galacticraft/blockstates/air_lock_seal.json b/src/main/resources/assets/galacticraft/blockstates/air_lock_seal.json index c83bb5b7b..9b6690ba3 100644 --- a/src/main/resources/assets/galacticraft/blockstates/air_lock_seal.json +++ b/src/main/resources/assets/galacticraft/blockstates/air_lock_seal.json @@ -1,10 +1,10 @@ { "variants": { "facing=north": { "model": "galacticraft:block/air_lock_seal", "y": 90, "uvlock": true }, - "facing=east": { "model": "galacticraft:block/air_lock_seal", "uvlock": true }, + "facing=east": { "model": "galacticraft:block/air_lock_seal", "uvlock": true }, "facing=south": { "model": "galacticraft:block/air_lock_seal", "y": 90, "uvlock": true }, - "facing=west": { "model": "galacticraft:block/air_lock_seal", "uvlock": true }, - "facing=up": { "model": "galacticraft:block/air_lock_seal", "x": 90, "uvlock": true }, - "facing=down": { "model": "galacticraft:block/air_lock_seal", "x": 90, "uvlock": true } + "facing=west": { "model": "galacticraft:block/air_lock_seal", "uvlock": true }, + "facing=up": { "model": "galacticraft:block/air_lock_seal", "x": 90, "uvlock": true }, + "facing=down": { "model": "galacticraft:block/air_lock_seal", "x": 90, "uvlock": true } } } \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/block/air_lock_seal.json b/src/main/resources/assets/galacticraft/models/block/air_lock_seal.json index 81fcd308e..4b7491646 100644 --- a/src/main/resources/assets/galacticraft/models/block/air_lock_seal.json +++ b/src/main/resources/assets/galacticraft/models/block/air_lock_seal.json @@ -1,4 +1,5 @@ { + "parent": "block/block", "textures": { "particle": "galacticraft:block/tin_decoration", "top": "galacticraft:block/tin_decoration", diff --git a/src/main/resources/assets/galacticraft/models/item/air_lock_seal.json b/src/main/resources/assets/galacticraft/models/item/air_lock_seal.json new file mode 100644 index 000000000..0a40e6e2c --- /dev/null +++ b/src/main/resources/assets/galacticraft/models/item/air_lock_seal.json @@ -0,0 +1,3 @@ +{ + "parent": "galacticraft:block/air_lock_seal" +} \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/item/canned_food.json b/src/main/resources/assets/galacticraft/models/item/canned_food.json index 64226486b..a2fc16bd0 100644 --- a/src/main/resources/assets/galacticraft/models/item/canned_food.json +++ b/src/main/resources/assets/galacticraft/models/item/canned_food.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:item/layered", + "parent": "minecraft:item/generated", "textures": { "layer0": "galacticraft:item/canned_food_template", "layer1": "galacticraft:item/canned_food_label" diff --git a/src/main/resources/assets/galacticraft/models/item/empty_can.json b/src/main/resources/assets/galacticraft/models/item/empty_can.json index 64226486b..a2fc16bd0 100644 --- a/src/main/resources/assets/galacticraft/models/item/empty_can.json +++ b/src/main/resources/assets/galacticraft/models/item/empty_can.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:item/layered", + "parent": "minecraft:item/generated", "textures": { "layer0": "galacticraft:item/canned_food_template", "layer1": "galacticraft:item/canned_food_label" From e4c20f3dcedbfb82b89015d63d9fe9d0682368ec Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Fri, 30 Aug 2024 00:09:10 +1000 Subject: [PATCH 15/23] Translation fixes - Fixed translations for canned food - Fixed ores aswell because asteroid ores where broken --- .../assets/galacticraft/lang/en_us.json | 4 +- .../models/item/asteroid_aluminum_ore.json | 3 ++ .../models/item/asteroid_iron_ore.json | 3 ++ .../models/item/asteroid_silicon_ore.json | 3 ++ .../galacticraft/models/item/dense_ice.json | 3 ++ .../generated/data/c/tags/items/ores.json | 3 ++ .../loot_tables/blocks/dense_ice.json | 2 +- .../loot_tables/blocks/mars_copper_ore.json | 43 ++++++++++++++++--- .../loot_tables/blocks/mars_iron_ore.json | 43 ++++++++++++++++--- .../loot_tables/blocks/mars_tin_ore.json | 43 ++++++++++++++++--- .../mod/content/item/CannedFoodItem.java | 7 +-- .../mod/content/item/GCCreativeModeTabs.java | 6 +++ .../mod/content/item/GCItems.java | 7 ++- .../mod/data/GCBlockLootTableProvider.java | 9 ++-- .../mod/data/GCTranslationProvider.java | 5 +++ .../mod/data/tag/GCItemTagProvider.java | 2 +- .../galacticraft/mod/util/Translations.java | 7 +++ 17 files changed, 160 insertions(+), 33 deletions(-) create mode 100644 src/main/generated/assets/galacticraft/models/item/asteroid_aluminum_ore.json create mode 100644 src/main/generated/assets/galacticraft/models/item/asteroid_iron_ore.json create mode 100644 src/main/generated/assets/galacticraft/models/item/asteroid_silicon_ore.json create mode 100644 src/main/generated/assets/galacticraft/models/item/dense_ice.json diff --git a/src/main/generated/assets/galacticraft/lang/en_us.json b/src/main/generated/assets/galacticraft/lang/en_us.json index a8b780b7d..c4bf9edbd 100644 --- a/src/main/generated/assets/galacticraft/lang/en_us.json +++ b/src/main/generated/assets/galacticraft/lang/en_us.json @@ -359,7 +359,7 @@ "item.galacticraft.brown_parachute": "Brown Parachute", "item.galacticraft.buggy": "Buggy", "item.galacticraft.burger_bun": "Burger Bun", - "item.galacticraft.canned_food": "Canned Food", + "item.galacticraft.canned_food": "Canned ", "item.galacticraft.canvas": "Canvas", "item.galacticraft.carbon_fragments": "Carbon Fragments", "item.galacticraft.cargo_rocket_schematic": "Cargo Rocket Schematic", @@ -391,6 +391,7 @@ "item.galacticraft.desh_stick": "Desh Stick", "item.galacticraft.desh_sword": "Desh Sword", "item.galacticraft.empty_can": "Empty Can", + "item.galacticraft.empty_canned_food": "Empty Canned Food", "item.galacticraft.fluid_manipulator": "Fluid Manipulator", "item.galacticraft.frequency_module": "Frequency Module", "item.galacticraft.fuel_bucket": "Fuel Bucket", @@ -482,6 +483,7 @@ "item.galacticraft.titanium_shovel": "Titanium Shovel", "item.galacticraft.titanium_sword": "Titanium Sword", "item.galacticraft.titanium_upgrade_smithing_template": "Smithing Template", + "item.galacticraft.total_nutrition": "Total Nutrition: ", "item.galacticraft.white_parachute": "Parachute", "item.galacticraft.yellow_parachute": "Yellow Parachute", "itemGroup.galacticraft.blocks": "Galacticraft Blocks", diff --git a/src/main/generated/assets/galacticraft/models/item/asteroid_aluminum_ore.json b/src/main/generated/assets/galacticraft/models/item/asteroid_aluminum_ore.json new file mode 100644 index 000000000..4a2f82dd6 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/asteroid_aluminum_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "galacticraft:block/asteroid_aluminum_ore" +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/asteroid_iron_ore.json b/src/main/generated/assets/galacticraft/models/item/asteroid_iron_ore.json new file mode 100644 index 000000000..7307597b2 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/asteroid_iron_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "galacticraft:block/asteroid_iron_ore" +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/asteroid_silicon_ore.json b/src/main/generated/assets/galacticraft/models/item/asteroid_silicon_ore.json new file mode 100644 index 000000000..e7b981947 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/asteroid_silicon_ore.json @@ -0,0 +1,3 @@ +{ + "parent": "galacticraft:block/asteroid_silicon_ore" +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/dense_ice.json b/src/main/generated/assets/galacticraft/models/item/dense_ice.json new file mode 100644 index 000000000..a6de3557d --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/dense_ice.json @@ -0,0 +1,3 @@ +{ + "parent": "galacticraft:block/dense_ice" +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/items/ores.json b/src/main/generated/data/c/tags/items/ores.json index 650c958c6..20170bb9b 100644 --- a/src/main/generated/data/c/tags/items/ores.json +++ b/src/main/generated/data/c/tags/items/ores.json @@ -11,6 +11,9 @@ "galacticraft:lunaslate_tin_ore", "galacticraft:aluminum_ore", "galacticraft:deepslate_aluminum_ore", + "galacticraft:asteroid_aluminum_ore", + "galacticraft:asteroid_iron_ore", + "galacticraft:asteroid_silicon_ore", "galacticraft:desh_ore", "galacticraft:ilmenite_ore", "galacticraft:galena_ore" diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/dense_ice.json b/src/main/generated/data/galacticraft/loot_tables/blocks/dense_ice.json index 38fe9914a..9d74c64cf 100644 --- a/src/main/generated/data/galacticraft/loot_tables/blocks/dense_ice.json +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/dense_ice.json @@ -11,7 +11,7 @@ "entries": [ { "type": "minecraft:item", - "name": "minecraft:air" + "name": "galacticraft:dense_ice" } ], "rolls": 1.0 diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/mars_copper_ore.json b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_copper_ore.json index 08bbf1b94..b3afbe4ec 100644 --- a/src/main/generated/data/galacticraft/loot_tables/blocks/mars_copper_ore.json +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_copper_ore.json @@ -3,15 +3,44 @@ "pools": [ { "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], "entries": [ { - "type": "minecraft:item", - "name": "galacticraft:mars_copper_ore" + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "galacticraft:mars_copper_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:raw_copper" + } + ] } ], "rolls": 1.0 diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/mars_iron_ore.json b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_iron_ore.json index 25c32e31e..7429ac44f 100644 --- a/src/main/generated/data/galacticraft/loot_tables/blocks/mars_iron_ore.json +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_iron_ore.json @@ -3,15 +3,44 @@ "pools": [ { "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], "entries": [ { - "type": "minecraft:item", - "name": "galacticraft:mars_iron_ore" + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "galacticraft:mars_iron_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "minecraft:raw_iron" + } + ] } ], "rolls": 1.0 diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/mars_tin_ore.json b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_tin_ore.json index 0bb862c4c..fd7ed36c1 100644 --- a/src/main/generated/data/galacticraft/loot_tables/blocks/mars_tin_ore.json +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/mars_tin_ore.json @@ -3,15 +3,44 @@ "pools": [ { "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], "entries": [ { - "type": "minecraft:item", - "name": "galacticraft:mars_tin_ore" + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "enchantments": [ + { + "enchantment": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + ], + "name": "galacticraft:mars_tin_ore" + }, + { + "type": "minecraft:item", + "functions": [ + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "galacticraft:raw_tin" + } + ] } ], "rolls": 1.0 diff --git a/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java b/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java index db275328d..8a86c05d4 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java +++ b/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java @@ -24,6 +24,7 @@ import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.content.CannedFoodTooltip; +import dev.galacticraft.mod.util.Translations; import net.fabricmc.fabric.api.item.v1.FabricItemStack; import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; import net.minecraft.ChatFormatting; @@ -134,13 +135,13 @@ public static void registerCan(ItemStack cannedFoodType) public @NotNull Component getName(ItemStack stack) { if (getContents(stack).findAny().isEmpty()) { - return Component.literal("Empty Food Can"); + return Component.translatable(Translations.Items.EMPTY_CANNED_FOOD); }else { String result = getContents(stack) .map(CannedFoodItem::getItemDisplayName) .collect(new TopNCollector<>(3)); - return Component.literal("Canned " + result); + return Component.translatable(Translations.Items.CANNED_FOOD).append(Component.literal(result)); } } @@ -177,7 +178,7 @@ public int getColor(int layer) { @Override public void appendHoverText(ItemStack stack, @Nullable Level world, List tooltip, TooltipFlag context) { if (getContents(stack).findAny().isPresent()) { - tooltip.add(Component.literal("Total Nutrition: " + getTotalNutrition(stack)).withColor(ChatFormatting.DARK_GRAY.getColor())); + tooltip.add(Component.translatable(Translations.Items.TOTAL_NUTRITION).append(Component.literal(String.valueOf(getTotalNutrition(stack)))).withColor(ChatFormatting.DARK_GRAY.getColor())); } } diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java index e4c3bc306..13b9ca235 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java @@ -320,6 +320,7 @@ public class GCCreativeModeTabs { output.accept(ASTEROID_ROCK); output.accept(ASTEROID_ROCK_1); output.accept(ASTEROID_ROCK_2); + output.accept(DENSE_ICE); // VENUS NATURAL output.accept(SOFT_VENUS_ROCK); @@ -379,6 +380,11 @@ public class GCCreativeModeTabs { output.accept(MOON_TIN_ORE); output.accept(LUNASLATE_TIN_ORE); + output.accept(ASTEROID_ALUMINUM_ORE); + output.accept(ASTEROID_IRON_ORE); + output.accept(ASTEROID_SILICON_ORE); + + output.accept(ALUMINUM_ORE); output.accept(DEEPSLATE_ALUMINUM_ORE); diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java index 24bbc4af0..2fb22dcb9 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java @@ -174,7 +174,7 @@ public class GCItems { public static final Item LUNASLATE_TIN_ORE = new BlockItem(GCBlocks.LUNASLATE_TIN_ORE, new Item.Properties()); public static final Item ASTEROID_ALUMINUM_ORE = new BlockItem(GCBlocks.ASTEROID_ALUMINUM_ORE, new Item.Properties()); - public static final Item ASTEROID_TIN_ORE = new BlockItem(GCBlocks.ASTEROID_IRON_ORE, new Item.Properties()); + public static final Item ASTEROID_IRON_ORE = new BlockItem(GCBlocks.ASTEROID_IRON_ORE, new Item.Properties()); public static final Item ASTEROID_SILICON_ORE = new BlockItem(GCBlocks.ASTEROID_SILICON_ORE, new Item.Properties()); @@ -500,6 +500,7 @@ public static void register() { Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.ASTEROID_ROCK), ASTEROID_ROCK); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.ASTEROID_ROCK_1), ASTEROID_ROCK_1); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.ASTEROID_ROCK_2), ASTEROID_ROCK_2); + Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.DENSE_ICE), DENSE_ICE); // VENUS NATURAL Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.SOFT_VENUS_ROCK), SOFT_VENUS_ROCK); @@ -535,6 +536,10 @@ public static void register() { Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.STRONG_VACUUM_GLASS), STRONG_VACUUM_GLASS); // ORES + Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.ASTEROID_ALUMINUM_ORE), ASTEROID_ALUMINUM_ORE); + Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.ASTEROID_IRON_ORE), ASTEROID_IRON_ORE); + Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.ASTEROID_SILICON_ORE), ASTEROID_SILICON_ORE); + Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.SILICON_ORE), SILICON_ORE); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.DEEPSLATE_SILICON_ORE), DEEPSLATE_SILICON_ORE); diff --git a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java index 651f638e8..4d39d11d3 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java @@ -176,6 +176,10 @@ public void generate() { this.add(GCBlocks.ASTEROID_IRON_ORE, this.createOreDrop(GCBlocks.ASTEROID_IRON_ORE, Items.RAW_IRON)); this.add(GCBlocks.ASTEROID_SILICON_ORE, this.createOreDrop(GCBlocks.ASTEROID_SILICON_ORE, GCItems.RAW_SILICON)); + this.add(GCBlocks.MARS_COPPER_ORE, this.createOreDrop(GCBlocks.MARS_COPPER_ORE, Items.RAW_COPPER)); + this.add(GCBlocks.MARS_TIN_ORE, this.createOreDrop(GCBlocks.MARS_TIN_ORE, GCItems.RAW_TIN)); + this.add(GCBlocks.MARS_IRON_ORE, this.createOreDrop(GCBlocks.MARS_IRON_ORE, Items.RAW_IRON)); + this.add(GCBlocks.ALUMINUM_ORE, this.createOreDrop(GCBlocks.ALUMINUM_ORE, GCItems.RAW_ALUMINUM)); this.add(GCBlocks.DEEPSLATE_ALUMINUM_ORE, this.createOreDrop(GCBlocks.ALUMINUM_ORE, GCItems.RAW_ALUMINUM)); @@ -211,11 +215,6 @@ public void generate() { this.dropSelf(GCBlocks.LEAD_BLOCK); this.dropSelf(GCBlocks.LUNAR_SAPPHIRE_BLOCK); - //TODO: maybe make it drop ores instead of self - this.dropSelf(GCBlocks.MARS_COPPER_ORE); - this.dropSelf(GCBlocks.MARS_TIN_ORE); - this.dropSelf(GCBlocks.MARS_IRON_ORE); - this.add(GCBlocks.FALLEN_METEOR, block -> BlockLootSubProvider.createSilkTouchDispatchTable(block, this.applyExplosionDecay(block, LootItem.lootTableItem(GCItems.RAW_METEORIC_IRON) .apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0f, 2.0f)))))); diff --git a/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java b/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java index 84b1892c4..59d712b60 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/GCTranslationProvider.java @@ -108,6 +108,11 @@ protected void generateTranslations(HolderLookup.@NotNull Provider registries) { this.item(GCItems.THERMAL_PADDING_HELMET, "Thermal Padding Helm"); this.item(GCItems.TITANTIUM_UPGRADE_SMITHING_TEMPLATE, "Smithing Template"); this.item(GCItems.PARACHUTE.get(DyeColor.WHITE), "Parachute"); + this.item(GCItems.CANNED_FOOD, "Canned "); + + this.add("item.galacticraft.empty_canned_food", "Empty Canned Food"); + this.add("item.galacticraft.total_nutrition", "Total Nutrition: "); + // Block Descriptions this.blockDesc(GCBlocks.ADVANCED_SOLAR_PANEL, "Advanced Solar Panels collect energy from the sun, and store it for further use. Adjusts position to face the sun, to collect more electricity."); diff --git a/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java b/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java index 0f9e86788..09aa183c2 100644 --- a/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java @@ -111,7 +111,7 @@ protected void addTags(HolderLookup.Provider provider) { GCItems.SILICON_ORE, GCItems.DEEPSLATE_SILICON_ORE, GCItems.MOON_COPPER_ORE, GCItems.LUNASLATE_COPPER_ORE, GCItems.TIN_ORE, GCItems.DEEPSLATE_TIN_ORE, GCItems.MOON_TIN_ORE, GCItems.LUNASLATE_TIN_ORE, - GCItems.ALUMINUM_ORE, GCItems.DEEPSLATE_ALUMINUM_ORE, + GCItems.ALUMINUM_ORE, GCItems.DEEPSLATE_ALUMINUM_ORE, GCItems.ASTEROID_ALUMINUM_ORE, GCItems.ASTEROID_IRON_ORE, GCItems.ASTEROID_SILICON_ORE, GCItems.DESH_ORE, GCItems.ILMENITE_ORE, GCItems.GALENA_ORE diff --git a/src/main/java/dev/galacticraft/mod/util/Translations.java b/src/main/java/dev/galacticraft/mod/util/Translations.java index 0ddfc8ea0..b63fb76cf 100644 --- a/src/main/java/dev/galacticraft/mod/util/Translations.java +++ b/src/main/java/dev/galacticraft/mod/util/Translations.java @@ -23,6 +23,7 @@ package dev.galacticraft.mod.util; public interface Translations { + interface ItemGroup { String ITEMS = "itemGroup.galacticraft.items"; String BLOCKS = "itemGroup.galacticraft.blocks"; @@ -118,6 +119,12 @@ interface Keybindings { String OPEN_CELESTIAL_SCREEN = "key.galacticraft.open_celestial_screen"; } + interface Items { + String EMPTY_CANNED_FOOD = "item.galacticraft.empty_canned_food"; + String CANNED_FOOD = "item.galacticraft.canned_food"; + String TOTAL_NUTRITION = "item.galacticraft.total_nutrition"; + } + interface CelestialBody { String SOL_DESC = "star.galacticraft.sol.description"; String SOL = "star.galacticraft.sol"; From 838e1cb5430379a8c36aadda09f51ec1611fd8dd Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Fri, 30 Aug 2024 14:39:36 +1000 Subject: [PATCH 16/23] Made launch pads dynamic Launch pads are now dynamic and are created using one method in the RocketParts class --- .../blockstates/iron_rocket_launch_pad.json | 40 +++++++++++++ .../netherite_rocket_launch_pad.json | 40 +++++++++++++ .../blockstates/rocket_launch_pad.json | 40 ------------- .../blockstates/testrocket_launch_pad.json | 40 +++++++++++++ .../assets/galacticraft/lang/en_us.json | 4 +- .../models/block/fueling_pad_center.json | 9 +++ .../block/iron_rocket_launch_pad_center.json | 9 +++ .../block/iron_rocket_launch_pad_corner.json | 9 +++ .../block/iron_rocket_launch_pad_side.json | 9 +++ .../netherite_rocket_launch_pad_center.json | 9 +++ .../netherite_rocket_launch_pad_corner.json | 9 +++ .../netherite_rocket_launch_pad_side.json | 9 +++ .../block/rocket_launch_pad_corner.json | 9 --- .../models/block/rocket_launch_pad_side.json | 9 --- .../block/testrocket_launch_pad_center.json | 9 +++ .../block/testrocket_launch_pad_corner.json | 9 +++ .../block/testrocket_launch_pad_side.json | 9 +++ .../models/item/iron_rocket_launch_pad.json | 3 + .../item/netherite_rocket_launch_pad.json | 3 + .../models/item/rocket_launch_pad.json | 3 - .../models/item/testrocket_launch_pad.json | 3 + ...h_pad.json => iron_rocket_launch_pad.json} | 4 +- .../netherite_rocket_launch_pad.json | 34 +++++++++++ .../blocks/iron_rocket_launch_pad.json | 53 ++++++++++++++++++ .../blocks/netherite_rocket_launch_pad.json | 53 ++++++++++++++++++ ...ch_pad.json => testrocket_launch_pad.json} | 8 +-- ...h_pad.json => iron_rocket_launch_pad.json} | 2 +- .../recipes/netherite_rocket_launch_pad.json | 20 +++++++ .../tags/blocks/mineable/pickaxe.json | 4 +- .../java/dev/galacticraft/mod/Constant.java | 1 - .../dev/galacticraft/mod/Galacticraft.java | 2 + .../mod/content/GCBlockEntityTypes.java | 22 +++++++- .../galacticraft/mod/content/GCBlocks.java | 11 +++- .../entity/machine/FuelLoaderBlockEntity.java | 2 +- .../block/special/launchpad/FuelPadBlock.java | 3 +- .../special/launchpad/LaunchPadBlock.java | 19 ++++++- .../launchpad/LaunchPadBlockEntity.java | 13 +++-- .../content/entity/orbital/RocketEntity.java | 19 ++++++- .../mod/content/item/GCCreativeModeTabs.java | 8 ++- .../mod/content/item/GCItems.java | 13 ++++- .../mod/content/item/RocketItem.java | 6 +- .../mod/data/GCBlockLootTableProvider.java | 5 +- .../mod/data/model/GCModelProvider.java | 8 ++- .../mod/data/model/GCModelTemplates.java | 1 + .../data/recipes/GCMiscRecipeProvider.java | 10 +++- .../mod/data/tag/GCBlockTagProvider.java | 3 +- .../mod/rockets/RocketEngineItem.java | 4 ++ .../mod/rockets/RocketFinItem.java | 4 ++ .../mod/rockets/RocketNoseConeItem.java | 4 ++ .../galacticraft/mod/rockets/RocketParts.java | 30 ++++++++++ .../mod/rockets/RocketPlatingItem.java | 4 ++ .../block/rocket_launch_pad_center.json | 15 +++-- .../textures/block/advanced_solar_panel.png | Bin 4829 -> 3107 bytes .../textures/block/air_lock_controller.png | Bin 3549 -> 3127 bytes .../textures/block/air_lock_frame.png | Bin 1120 -> 439 bytes .../textures/block/aluminum_block.png | Bin 289 -> 264 bytes .../textures/block/aluminum_decoration.png | Bin 1932 -> 746 bytes .../textures/block/aluminum_ore.png | Bin 382 -> 591 bytes .../textures/block/aluminum_wire.png | Bin 259 -> 275 bytes .../textures/block/asteroid_aluminum_ore.png | Bin 7386 -> 3273 bytes .../textures/block/asteroid_iron_ore.png | Bin 7386 -> 3266 bytes .../textures/block/asteroid_rock_block_0.png | Bin 0 -> 3068 bytes .../textures/block/asteroid_rock_block_1.png | Bin 6362 -> 3103 bytes .../textures/block/asteroid_rock_block_2.png | Bin 6362 -> 3116 bytes .../textures/block/basic_solar_panel.png | Bin 4837 -> 3138 bytes .../textures/block/bronze_decoration.png | Bin 2043 -> 720 bytes .../textures/block/cavernous_vine.png | Bin 0 -> 346 bytes .../textures/block/cavernous_vine_tip.png | Bin 0 -> 211 bytes .../textures/block/cheese_block.png | Bin 0 -> 420 bytes .../textures/block/cheese_bottom.png | Bin 0 -> 221 bytes .../textures/block/cheese_inner.png | Bin 0 -> 260 bytes .../textures/block/cheese_side.png | Bin 0 -> 228 bytes .../textures/block/cheese_top.png | Bin 0 -> 265 bytes .../block/chiseled_moon_rock_brick.png | Bin 562 -> 360 bytes .../textures/block/circuit_fabricator.png | Bin 666 -> 510 bytes .../textures/block/circuit_fabricator_off.png | Bin 642 -> 491 bytes .../textures/block/circuit_fabricator_on.png | Bin 666 -> 510 bytes .../textures/block/coal_generator.png | Bin 770 -> 473 bytes .../textures/block/cobbled_lunaslate.png | Bin 702 -> 484 bytes .../textures/block/cobbled_moon_rock.png | Bin 2107 -> 743 bytes .../textures/block/compressor.png | Bin 632 -> 395 bytes .../textures/block/copper_decoration.png | Bin 348 -> 333 bytes .../block/cracked_moon_basalt_brick.png | Bin 1899 -> 889 bytes .../textures/block/crude_oil_still.png.mcmeta | 42 +++++++++++++- .../textures/block/dark_decoration.png | Bin 3080 -> 2952 bytes .../textures/block/deepslate_aluminum_ore.png | Bin 589 -> 677 bytes .../textures/block/deepslate_silicon_ore.png | Bin 669 -> 646 bytes .../textures/block/deepslate_tin_ore.png | Bin 656 -> 673 bytes .../textures/block/desh_block.png | Bin 3080 -> 3035 bytes .../galacticraft/textures/block/desh_ore.png | Bin 3277 -> 3220 bytes .../detailed_aluminum_decoration_side.png | Bin 2334 -> 921 bytes .../detailed_aluminum_decoration_top.png | Bin 2225 -> 796 bytes .../block/detailed_bronze_decoration_side.png | Bin 2411 -> 902 bytes .../block/detailed_bronze_decoration_top.png | Bin 2309 -> 771 bytes .../block/detailed_copper_decoration_side.png | Bin 469 -> 466 bytes .../block/detailed_copper_decoration_top.png | Bin 2278 -> 776 bytes .../block/detailed_dark_decoration_side.png | Bin 422 -> 3087 bytes .../block/detailed_dark_decoration_top.png | Bin 427 -> 3007 bytes .../block/detailed_iron_decoration_side.png | Bin 1999 -> 800 bytes .../block/detailed_iron_decoration_top.png | Bin 1903 -> 728 bytes ...detailed_meteoric_iron_decoration_side.png | Bin 2185 -> 919 bytes .../detailed_meteoric_iron_decoration_top.png | Bin 2074 -> 798 bytes .../block/detailed_steel_decoration_side.png | Bin 1974 -> 847 bytes .../block/detailed_steel_decoration_top.png | Bin 1877 -> 729 bytes .../block/detailed_tin_decoration_side.png | Bin 398 -> 528 bytes .../block/detailed_tin_decoration_top.png | Bin 408 -> 415 bytes .../detailed_titanium_decoration_side.png | Bin 2004 -> 911 bytes .../detailed_titanium_decoration_top.png | Bin 1894 -> 796 bytes .../textures/block/electric_arc_furnace.png | Bin 758 -> 477 bytes .../textures/block/electric_compressor.png | Bin 624 -> 377 bytes .../block/electric_compressor_off.png | Bin 602 -> 353 bytes .../textures/block/electric_compressor_on.png | Bin 624 -> 377 bytes .../textures/block/electric_furnace.png | Bin 786 -> 492 bytes .../block/energy_storage_module_0.png | Bin 640 -> 348 bytes .../block/energy_storage_module_1.png | Bin 669 -> 374 bytes .../block/energy_storage_module_2.png | Bin 692 -> 387 bytes .../block/energy_storage_module_3.png | Bin 708 -> 389 bytes .../block/energy_storage_module_4.png | Bin 730 -> 390 bytes .../block/energy_storage_module_5.png | Bin 749 -> 395 bytes .../block/energy_storage_module_6.png | Bin 762 -> 395 bytes .../block/energy_storage_module_7.png | Bin 780 -> 398 bytes .../block/energy_storage_module_8.png | Bin 797 -> 400 bytes .../textures/block/fallen_meteor.png | Bin 3394 -> 2973 bytes .../textures/block/fuel_flowing.png | Bin 6673 -> 7155 bytes .../textures/block/fuel_loader_controls.png | Bin 449 -> 427 bytes .../textures/block/fuel_still.png | Bin 4848 -> 4531 bytes .../textures/block/fuel_still.png.mcmeta | 42 +++++++++++++- .../textures/block/galena_ore.png | Bin 18266 -> 3273 bytes .../textures/block/glass_fluid_pipe/black.png | Bin 153 -> 159 bytes .../textures/block/glass_fluid_pipe/blue.png | Bin 175 -> 159 bytes .../textures/block/glass_fluid_pipe/brown.png | Bin 175 -> 159 bytes .../textures/block/glass_fluid_pipe/cyan.png | Bin 175 -> 149 bytes .../textures/block/glass_fluid_pipe/gray.png | Bin 162 -> 159 bytes .../textures/block/glass_fluid_pipe/green.png | Bin 174 -> 149 bytes .../block/glass_fluid_pipe/light_blue.png | Bin 175 -> 149 bytes .../block/glass_fluid_pipe/light_gray.png | Bin 170 -> 149 bytes .../textures/block/glass_fluid_pipe/lime.png | Bin 175 -> 149 bytes .../block/glass_fluid_pipe/magenta.png | Bin 175 -> 149 bytes .../block/glass_fluid_pipe/orange.png | Bin 174 -> 149 bytes .../textures/block/glass_fluid_pipe/pink.png | Bin 174 -> 149 bytes .../block/glass_fluid_pipe/purple.png | Bin 175 -> 149 bytes .../textures/block/glass_fluid_pipe/red.png | Bin 171 -> 149 bytes .../textures/block/glass_fluid_pipe/white.png | Bin 163 -> 149 bytes .../block/glass_fluid_pipe/yellow.png | Bin 173 -> 159 bytes .../textures/block/glowstone_torch.png | Bin 3161 -> 2806 bytes .../galacticraft/textures/block/grating.png | Bin 0 -> 243 bytes .../textures/block/hard_venus_rock.png | Bin 3362 -> 3063 bytes .../textures/block/ilmenite_ore.png | Bin 7386 -> 3260 bytes .../textures/block/iron_decoration.png | Bin 1758 -> 678 bytes .../textures/block/iron_rocket_launch_pad.png | Bin 0 -> 2915 bytes ....png => iron_rocket_launch_pad_corner.png} | Bin ...de.png => iron_rocket_launch_pad_side.png} | Bin .../textures/block/landing_pad.png | Bin 303 -> 283 bytes .../textures/block/lead_block.png | Bin 3371 -> 3000 bytes .../textures/block/lunar_sapphire_block.png | Bin 2750 -> 793 bytes .../galacticraft/textures/block/lunaslate.png | Bin 278 -> 427 bytes .../textures/block/lunaslate_copper_ore.png | Bin 748 -> 659 bytes .../textures/block/lunaslate_tin_ore.png | Bin 684 -> 595 bytes .../galacticraft/textures/block/machine.png | Bin 674 -> 348 bytes .../textures/block/machine_fluid_input.png | Bin 850 -> 779 bytes .../textures/block/machine_fluid_output.png | Bin 854 -> 777 bytes .../textures/block/machine_item_input.png | Bin 1914 -> 825 bytes .../textures/block/machine_item_output.png | Bin 1878 -> 815 bytes .../textures/block/machine_oxygen_input.png | Bin 344 -> 424 bytes .../textures/block/machine_oxygen_output.png | Bin 342 -> 420 bytes .../textures/block/machine_painter.png | Bin 797 -> 487 bytes .../textures/block/machine_power_input.png | Bin 347 -> 429 bytes .../textures/block/machine_power_output.png | Bin 336 -> 423 bytes .../textures/block/machine_side.png | Bin 785 -> 437 bytes .../textures/block/mars_cobblestone.png | Bin 3331 -> 3102 bytes .../textures/block/mars_copper_ore.png | Bin 536 -> 698 bytes .../textures/block/mars_iron_ore.png | Bin 535 -> 658 bytes .../textures/block/mars_stone.png | Bin 3116 -> 3063 bytes .../textures/block/mars_sub_surface_rock.png | Bin 3144 -> 3067 bytes .../textures/block/mars_surface_rock.png | Bin 3186 -> 3051 bytes .../textures/block/mars_tin_ore.png | Bin 549 -> 640 bytes .../textures/block/meteoric_iron_block.png | Bin 7472 -> 3110 bytes .../block/meteoric_iron_decoration.png | Bin 1853 -> 738 bytes .../textures/block/moon_basalt.png | Bin 1837 -> 771 bytes .../textures/block/moon_basalt_brick.png | Bin 1898 -> 761 bytes .../textures/block/moon_berry_bush_0.png | Bin 277 -> 316 bytes .../textures/block/moon_berry_bush_1.png | Bin 357 -> 569 bytes .../textures/block/moon_berry_bush_2.png | Bin 388 -> 606 bytes .../textures/block/moon_berry_bush_3.png | Bin 379 -> 601 bytes .../textures/block/moon_cheese_leaves.png | Bin 3466 -> 3146 bytes .../textures/block/moon_cheese_log_side.png | Bin 3218 -> 2938 bytes .../textures/block/moon_cheese_log_top.png | Bin 3326 -> 3016 bytes .../textures/block/moon_cheese_ore.png | Bin 665 -> 629 bytes .../textures/block/moon_copper_ore.png | Bin 670 -> 617 bytes .../galacticraft/textures/block/moon_dirt.png | Bin 1757 -> 759 bytes .../galacticraft/textures/block/moon_rock.png | Bin 1902 -> 729 bytes .../textures/block/moon_rock_brick.png | Bin 1847 -> 725 bytes .../textures/block/moon_surface_rock.png | Bin 1725 -> 731 bytes .../textures/block/moon_tin_ore.png | Bin 705 -> 629 bytes .../textures/block/moon_turf_block_side.png | Bin 0 -> 380 bytes .../textures/block/moon_turf_block_top.png | Bin 0 -> 311 bytes .../textures/block/moon_turf_path_side.png | Bin 0 -> 2994 bytes .../textures/block/moon_turf_path_top.png | Bin 0 -> 319 bytes .../block/netherite_rocket_launch_pad.png | Bin 0 -> 2915 bytes .../netherite_rocket_launch_pad_corner.png | Bin 0 -> 363 bytes .../netherite_rocket_launch_pad_side.png | Bin 0 -> 345 bytes .../galacticraft/textures/block/oxygen.png | Bin 766 -> 763 bytes .../block/oxygen_bubble_distributor.png | Bin 2141 -> 455 bytes .../textures/block/oxygen_collector.png | Bin 983 -> 873 bytes .../block/oxygen_collector.png.mcmeta | 2 +- .../textures/block/oxygen_compressor.png | Bin 1071 -> 891 bytes .../textures/block/oxygen_compressor_back.png | Bin 1070 -> 853 bytes .../textures/block/oxygen_decompressor.png | Bin 1139 -> 903 bytes .../textures/block/oxygen_sealer_top.png | Bin 542 -> 422 bytes .../block/oxygen_storage_module_0.png | Bin 1010 -> 760 bytes .../block/oxygen_storage_module_1.png | Bin 1037 -> 774 bytes .../block/oxygen_storage_module_2.png | Bin 1034 -> 778 bytes .../block/oxygen_storage_module_3.png | Bin 1040 -> 779 bytes .../block/oxygen_storage_module_4.png | Bin 1043 -> 773 bytes .../block/oxygen_storage_module_5.png | Bin 1043 -> 776 bytes .../block/oxygen_storage_module_6.png | Bin 1050 -> 777 bytes .../block/oxygen_storage_module_7.png | Bin 1044 -> 776 bytes .../block/oxygen_storage_module_8.png | Bin 1041 -> 774 bytes .../block/poisonous_cavernous_vine.png | Bin 0 -> 3319 bytes .../block/poisonous_cavernous_vine.png.mcmeta | 6 ++ .../galacticraft/textures/block/pumice.png | Bin 3404 -> 3048 bytes .../textures/block/refinery_back.png | Bin 420 -> 415 bytes .../textures/block/refinery_front.png | Bin 412 -> 473 bytes .../textures/block/sapphire_ore.png | Bin 15543 -> 632 bytes .../textures/block/scorched_venus_rock.png | Bin 18230 -> 3080 bytes .../textures/block/sealable_aluminum_wire.png | Bin 3953 -> 3047 bytes .../textures/block/silicon_block.png | Bin 1624 -> 391 bytes .../textures/block/silicon_ore.png | Bin 416 -> 506 bytes .../textures/block/soft_venus_rock.png | Bin 3363 -> 3062 bytes .../galacticraft/textures/block/solar_ore.png | Bin 0 -> 3241 bytes .../textures/block/solar_panel.png | Bin 4444 -> 3016 bytes .../textures/block/steel_decoration.png | Bin 1715 -> 690 bytes .../galacticraft/textures/block/tin_block.png | Bin 290 -> 271 bytes .../textures/block/tin_decoration.png | Bin 367 -> 353 bytes .../textures/block/tin_ladder.png | Bin 1579 -> 698 bytes .../galacticraft/textures/block/tin_ore.png | Bin 381 -> 557 bytes .../textures/block/titanium_block.png | Bin 3392 -> 2920 bytes .../textures/block/titanium_decoration.png | Bin 1741 -> 746 bytes .../block/transport_tube_inner_side.png | Bin 0 -> 246 bytes .../textures/block/transport_tube_side.png | Bin 0 -> 246 bytes .../textures/block/transport_tube_top.png | Bin 0 -> 207 bytes .../textures/block/unlit_lantern.png | Bin 313 -> 356 bytes .../textures/block/unlit_torch.png | Bin 2890 -> 2802 bytes .../textures/block/vacuum_glass.png | Bin 0 -> 220 bytes .../textures/block/vacuum_glass_pane_top.png | Bin 0 -> 172 bytes .../textures/block/vapor_spout_block_top.png | Bin 0 -> 3094 bytes .../textures/block/venus_aluminum_ore.png | Bin 18320 -> 3288 bytes .../textures/block/venus_copper_ore.png | Bin 18295 -> 3292 bytes .../block/venus_dungeon_brick_block_1.png | Bin 3217 -> 3129 bytes .../block/venus_dungeon_brick_block_2.png | Bin 3204 -> 3097 bytes .../textures/block/venus_tin_ore.png | Bin 18300 -> 3276 bytes .../textures/block/volcanic_rock.png | Bin 3448 -> 1175 bytes .../textures/block/volcanic_rock.png.mcmeta | 11 ++++ .../galacticraft/textures/block/walkway.png | Bin 606 -> 435 bytes 254 files changed, 665 insertions(+), 107 deletions(-) create mode 100644 src/main/generated/assets/galacticraft/blockstates/iron_rocket_launch_pad.json create mode 100644 src/main/generated/assets/galacticraft/blockstates/netherite_rocket_launch_pad.json delete mode 100644 src/main/generated/assets/galacticraft/blockstates/rocket_launch_pad.json create mode 100644 src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json create mode 100644 src/main/generated/assets/galacticraft/models/block/fueling_pad_center.json create mode 100644 src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_center.json create mode 100644 src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_corner.json create mode 100644 src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_side.json create mode 100644 src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_center.json create mode 100644 src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_corner.json create mode 100644 src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_side.json delete mode 100644 src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_corner.json delete mode 100644 src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_side.json create mode 100644 src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json create mode 100644 src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json create mode 100644 src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json create mode 100644 src/main/generated/assets/galacticraft/models/item/iron_rocket_launch_pad.json create mode 100644 src/main/generated/assets/galacticraft/models/item/netherite_rocket_launch_pad.json delete mode 100644 src/main/generated/assets/galacticraft/models/item/rocket_launch_pad.json create mode 100644 src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json rename src/main/generated/data/galacticraft/advancements/recipes/transportation/{rocket_launch_pad.json => iron_rocket_launch_pad.json} (84%) create mode 100644 src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json create mode 100644 src/main/generated/data/galacticraft/loot_tables/blocks/iron_rocket_launch_pad.json create mode 100644 src/main/generated/data/galacticraft/loot_tables/blocks/netherite_rocket_launch_pad.json rename src/main/generated/data/galacticraft/loot_tables/blocks/{rocket_launch_pad.json => testrocket_launch_pad.json} (80%) rename src/main/generated/data/galacticraft/recipes/{rocket_launch_pad.json => iron_rocket_launch_pad.json} (84%) create mode 100644 src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json create mode 100644 src/main/java/dev/galacticraft/mod/rockets/RocketEngineItem.java create mode 100644 src/main/java/dev/galacticraft/mod/rockets/RocketFinItem.java create mode 100644 src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java create mode 100644 src/main/java/dev/galacticraft/mod/rockets/RocketParts.java create mode 100644 src/main/java/dev/galacticraft/mod/rockets/RocketPlatingItem.java create mode 100644 src/main/resources/assets/galacticraft/textures/block/asteroid_rock_block_0.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/cavernous_vine.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/cavernous_vine_tip.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/cheese_block.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/cheese_bottom.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/cheese_inner.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/cheese_side.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/cheese_top.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/grating.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/iron_rocket_launch_pad.png rename src/main/resources/assets/galacticraft/textures/block/{rocket_launch_pad_corner.png => iron_rocket_launch_pad_corner.png} (100%) rename src/main/resources/assets/galacticraft/textures/block/{rocket_launch_pad_side.png => iron_rocket_launch_pad_side.png} (100%) create mode 100644 src/main/resources/assets/galacticraft/textures/block/moon_turf_block_side.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/moon_turf_block_top.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/moon_turf_path_side.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/moon_turf_path_top.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/netherite_rocket_launch_pad.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/netherite_rocket_launch_pad_corner.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/netherite_rocket_launch_pad_side.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/poisonous_cavernous_vine.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/poisonous_cavernous_vine.png.mcmeta create mode 100644 src/main/resources/assets/galacticraft/textures/block/solar_ore.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/transport_tube_inner_side.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/transport_tube_side.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/transport_tube_top.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/vacuum_glass.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/vacuum_glass_pane_top.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/vapor_spout_block_top.png create mode 100644 src/main/resources/assets/galacticraft/textures/block/volcanic_rock.png.mcmeta diff --git a/src/main/generated/assets/galacticraft/blockstates/iron_rocket_launch_pad.json b/src/main/generated/assets/galacticraft/blockstates/iron_rocket_launch_pad.json new file mode 100644 index 000000000..e27df1f2f --- /dev/null +++ b/src/main/generated/assets/galacticraft/blockstates/iron_rocket_launch_pad.json @@ -0,0 +1,40 @@ +{ + "variants": { + "part=center": { + "model": "galacticraft:block/iron_rocket_launch_pad_center" + }, + "part=east": { + "model": "galacticraft:block/iron_rocket_launch_pad_side", + "y": 90 + }, + "part=none": { + "model": "galacticraft:block/iron_rocket_launch_pad_center" + }, + "part=north": { + "model": "galacticraft:block/iron_rocket_launch_pad_side" + }, + "part=north_east": { + "model": "galacticraft:block/iron_rocket_launch_pad_corner", + "y": 90 + }, + "part=north_west": { + "model": "galacticraft:block/iron_rocket_launch_pad_corner" + }, + "part=south": { + "model": "galacticraft:block/iron_rocket_launch_pad_side", + "y": 180 + }, + "part=south_east": { + "model": "galacticraft:block/iron_rocket_launch_pad_corner", + "y": 180 + }, + "part=south_west": { + "model": "galacticraft:block/iron_rocket_launch_pad_corner", + "y": 270 + }, + "part=west": { + "model": "galacticraft:block/iron_rocket_launch_pad_side", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/blockstates/netherite_rocket_launch_pad.json b/src/main/generated/assets/galacticraft/blockstates/netherite_rocket_launch_pad.json new file mode 100644 index 000000000..65a02c2ab --- /dev/null +++ b/src/main/generated/assets/galacticraft/blockstates/netherite_rocket_launch_pad.json @@ -0,0 +1,40 @@ +{ + "variants": { + "part=center": { + "model": "galacticraft:block/netherite_rocket_launch_pad_center" + }, + "part=east": { + "model": "galacticraft:block/netherite_rocket_launch_pad_side", + "y": 90 + }, + "part=none": { + "model": "galacticraft:block/netherite_rocket_launch_pad_center" + }, + "part=north": { + "model": "galacticraft:block/netherite_rocket_launch_pad_side" + }, + "part=north_east": { + "model": "galacticraft:block/netherite_rocket_launch_pad_corner", + "y": 90 + }, + "part=north_west": { + "model": "galacticraft:block/netherite_rocket_launch_pad_corner" + }, + "part=south": { + "model": "galacticraft:block/netherite_rocket_launch_pad_side", + "y": 180 + }, + "part=south_east": { + "model": "galacticraft:block/netherite_rocket_launch_pad_corner", + "y": 180 + }, + "part=south_west": { + "model": "galacticraft:block/netherite_rocket_launch_pad_corner", + "y": 270 + }, + "part=west": { + "model": "galacticraft:block/netherite_rocket_launch_pad_side", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/blockstates/rocket_launch_pad.json b/src/main/generated/assets/galacticraft/blockstates/rocket_launch_pad.json deleted file mode 100644 index bad529938..000000000 --- a/src/main/generated/assets/galacticraft/blockstates/rocket_launch_pad.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "variants": { - "part=center": { - "model": "galacticraft:block/rocket_launch_pad_center" - }, - "part=east": { - "model": "galacticraft:block/rocket_launch_pad_side", - "y": 90 - }, - "part=none": { - "model": "galacticraft:block/rocket_launch_pad_center" - }, - "part=north": { - "model": "galacticraft:block/rocket_launch_pad_side" - }, - "part=north_east": { - "model": "galacticraft:block/rocket_launch_pad_corner", - "y": 90 - }, - "part=north_west": { - "model": "galacticraft:block/rocket_launch_pad_corner" - }, - "part=south": { - "model": "galacticraft:block/rocket_launch_pad_side", - "y": 180 - }, - "part=south_east": { - "model": "galacticraft:block/rocket_launch_pad_corner", - "y": 180 - }, - "part=south_west": { - "model": "galacticraft:block/rocket_launch_pad_corner", - "y": 270 - }, - "part=west": { - "model": "galacticraft:block/rocket_launch_pad_side", - "y": 270 - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json b/src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json new file mode 100644 index 000000000..2ecdfb701 --- /dev/null +++ b/src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json @@ -0,0 +1,40 @@ +{ + "variants": { + "part=center": { + "model": "galacticraft:block/testrocket_launch_pad_center" + }, + "part=east": { + "model": "galacticraft:block/testrocket_launch_pad_side", + "y": 90 + }, + "part=none": { + "model": "galacticraft:block/testrocket_launch_pad_center" + }, + "part=north": { + "model": "galacticraft:block/testrocket_launch_pad_side" + }, + "part=north_east": { + "model": "galacticraft:block/testrocket_launch_pad_corner", + "y": 90 + }, + "part=north_west": { + "model": "galacticraft:block/testrocket_launch_pad_corner" + }, + "part=south": { + "model": "galacticraft:block/testrocket_launch_pad_side", + "y": 180 + }, + "part=south_east": { + "model": "galacticraft:block/testrocket_launch_pad_corner", + "y": 180 + }, + "part=south_west": { + "model": "galacticraft:block/testrocket_launch_pad_corner", + "y": 270 + }, + "part=west": { + "model": "galacticraft:block/testrocket_launch_pad_side", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/lang/en_us.json b/src/main/generated/assets/galacticraft/lang/en_us.json index c4bf9edbd..2cc8696fa 100644 --- a/src/main/generated/assets/galacticraft/lang/en_us.json +++ b/src/main/generated/assets/galacticraft/lang/en_us.json @@ -139,6 +139,7 @@ "block.galacticraft.iron_decoration_slab": "Iron Decoration Slab", "block.galacticraft.iron_decoration_stairs": "Iron Decoration Stairs", "block.galacticraft.iron_decoration_wall": "Iron Decoration Wall", + "block.galacticraft.iron_rocket_launch_pad": "Iron Rocket Launch Pad", "block.galacticraft.lead_block": "Block of Lead", "block.galacticraft.light_blue_candle_moon_cheese_block": "Block of Cheese with Light Blue Candle", "block.galacticraft.light_gray_candle_moon_cheese_block": "Block of Cheese with Light Gray Candle", @@ -193,6 +194,7 @@ "block.galacticraft.moon_surface_rock": "Moon Surface Rock", "block.galacticraft.moon_tin_ore": "Moon Tin Ore", "block.galacticraft.moon_turf": "Moon Turf", + "block.galacticraft.netherite_rocket_launch_pad": "Netherite Rocket Launch Pad", "block.galacticraft.orange_candle_moon_cheese_block": "Block of Cheese with Orange Candle", "block.galacticraft.oxygen_bubble_distributor": "Bubble Distributor", "block.galacticraft.oxygen_bubble_distributor.description": "Oxygen Bubble Distributor creates a bubble of air around itself. Requires oxygen and electricity.", @@ -211,7 +213,6 @@ "block.galacticraft.red_candle_moon_cheese_block": "Block of Cheese with Red Candle", "block.galacticraft.refinery": "Refinery", "block.galacticraft.refinery.description": "Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles.", - "block.galacticraft.rocket_launch_pad": "Rocket Launch Pad", "block.galacticraft.rocket_workbench": "Rocket Workbench", "block.galacticraft.scorched_venus_rock": "Scorched Rock", "block.galacticraft.sealable_aluminum_wire": "Sealable Aluminum Wire", @@ -226,6 +227,7 @@ "block.galacticraft.steel_decoration_stairs": "Steel Decoration Stairs", "block.galacticraft.steel_decoration_wall": "Steel Decoration Wall", "block.galacticraft.sulfuric_acid": "Sulfuric Acid", + "block.galacticraft.testrocket_launch_pad": "Testrocket Launch Pad", "block.galacticraft.tin_decoration": "Tin Decoration", "block.galacticraft.tin_decoration_slab": "Tin Decoration Slab", "block.galacticraft.tin_decoration_stairs": "Tin Decoration Stairs", diff --git a/src/main/generated/assets/galacticraft/models/block/fueling_pad_center.json b/src/main/generated/assets/galacticraft/models/block/fueling_pad_center.json new file mode 100644 index 000000000..0343fa6df --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/fueling_pad_center.json @@ -0,0 +1,9 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_center", + "textures": { + "bottom": "galacticraft:block/fueling_pad", + "particle": "galacticraft:block/fueling_pad", + "side": "galacticraft:block/fueling_pad", + "top": "galacticraft:block/fueling_pad" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_center.json b/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_center.json new file mode 100644 index 000000000..6c6eb4e39 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_center.json @@ -0,0 +1,9 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_center", + "textures": { + "bottom": "galacticraft:block/iron_rocket_launch_pad", + "particle": "galacticraft:block/iron_rocket_launch_pad", + "side": "galacticraft:block/iron_rocket_launch_pad", + "top": "galacticraft:block/iron_rocket_launch_pad" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_corner.json b/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_corner.json new file mode 100644 index 000000000..c121629c6 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_corner.json @@ -0,0 +1,9 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_part", + "textures": { + "bottom": "galacticraft:block/iron_rocket_launch_pad", + "particle": "galacticraft:block/iron_rocket_launch_pad_corner", + "side": "galacticraft:block/iron_rocket_launch_pad", + "top": "galacticraft:block/iron_rocket_launch_pad_corner" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_side.json b/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_side.json new file mode 100644 index 000000000..d7b5d1f92 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_side.json @@ -0,0 +1,9 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_part", + "textures": { + "bottom": "galacticraft:block/iron_rocket_launch_pad", + "particle": "galacticraft:block/iron_rocket_launch_pad_side", + "side": "galacticraft:block/iron_rocket_launch_pad", + "top": "galacticraft:block/iron_rocket_launch_pad_side" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_center.json b/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_center.json new file mode 100644 index 000000000..517b698f4 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_center.json @@ -0,0 +1,9 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_center", + "textures": { + "bottom": "galacticraft:block/netherite_rocket_launch_pad", + "particle": "galacticraft:block/netherite_rocket_launch_pad", + "side": "galacticraft:block/netherite_rocket_launch_pad", + "top": "galacticraft:block/netherite_rocket_launch_pad" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_corner.json b/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_corner.json new file mode 100644 index 000000000..9743db4c2 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_corner.json @@ -0,0 +1,9 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_part", + "textures": { + "bottom": "galacticraft:block/netherite_rocket_launch_pad", + "particle": "galacticraft:block/netherite_rocket_launch_pad_corner", + "side": "galacticraft:block/netherite_rocket_launch_pad", + "top": "galacticraft:block/netherite_rocket_launch_pad_corner" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_side.json b/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_side.json new file mode 100644 index 000000000..ebaf45cec --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_side.json @@ -0,0 +1,9 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_part", + "textures": { + "bottom": "galacticraft:block/netherite_rocket_launch_pad", + "particle": "galacticraft:block/netherite_rocket_launch_pad_side", + "side": "galacticraft:block/netherite_rocket_launch_pad", + "top": "galacticraft:block/netherite_rocket_launch_pad_side" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_corner.json b/src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_corner.json deleted file mode 100644 index ecc33eb90..000000000 --- a/src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_corner.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_part", - "textures": { - "bottom": "galacticraft:block/rocket_launch_pad", - "particle": "galacticraft:block/rocket_launch_pad_corner", - "side": "galacticraft:block/rocket_launch_pad", - "top": "galacticraft:block/rocket_launch_pad_corner" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_side.json b/src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_side.json deleted file mode 100644 index cc2945ec8..000000000 --- a/src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_side.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_part", - "textures": { - "bottom": "galacticraft:block/rocket_launch_pad", - "particle": "galacticraft:block/rocket_launch_pad_side", - "side": "galacticraft:block/rocket_launch_pad", - "top": "galacticraft:block/rocket_launch_pad_side" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json new file mode 100644 index 000000000..beea922ff --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json @@ -0,0 +1,9 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_center", + "textures": { + "bottom": "galacticraft:block/testrocket_launch_pad", + "particle": "galacticraft:block/testrocket_launch_pad", + "side": "galacticraft:block/testrocket_launch_pad", + "top": "galacticraft:block/testrocket_launch_pad" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json new file mode 100644 index 000000000..79a3ed9f5 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json @@ -0,0 +1,9 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_part", + "textures": { + "bottom": "galacticraft:block/testrocket_launch_pad", + "particle": "galacticraft:block/testrocket_launch_pad_corner", + "side": "galacticraft:block/testrocket_launch_pad", + "top": "galacticraft:block/testrocket_launch_pad_corner" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json new file mode 100644 index 000000000..89c2b441a --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json @@ -0,0 +1,9 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_part", + "textures": { + "bottom": "galacticraft:block/testrocket_launch_pad", + "particle": "galacticraft:block/testrocket_launch_pad_side", + "side": "galacticraft:block/testrocket_launch_pad", + "top": "galacticraft:block/testrocket_launch_pad_side" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/iron_rocket_launch_pad.json b/src/main/generated/assets/galacticraft/models/item/iron_rocket_launch_pad.json new file mode 100644 index 000000000..40e7641ec --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/iron_rocket_launch_pad.json @@ -0,0 +1,3 @@ +{ + "parent": "galacticraft:block/iron_rocket_launch_pad_center" +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/netherite_rocket_launch_pad.json b/src/main/generated/assets/galacticraft/models/item/netherite_rocket_launch_pad.json new file mode 100644 index 000000000..b57ed5cc4 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/netherite_rocket_launch_pad.json @@ -0,0 +1,3 @@ +{ + "parent": "galacticraft:block/netherite_rocket_launch_pad_center" +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/rocket_launch_pad.json b/src/main/generated/assets/galacticraft/models/item/rocket_launch_pad.json deleted file mode 100644 index 8ce9b7268..000000000 --- a/src/main/generated/assets/galacticraft/models/item/rocket_launch_pad.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_center" -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json b/src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json new file mode 100644 index 000000000..0c40fbc55 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json @@ -0,0 +1,3 @@ +{ + "parent": "galacticraft:block/testrocket_launch_pad_center" +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/advancements/recipes/transportation/rocket_launch_pad.json b/src/main/generated/data/galacticraft/advancements/recipes/transportation/iron_rocket_launch_pad.json similarity index 84% rename from src/main/generated/data/galacticraft/advancements/recipes/transportation/rocket_launch_pad.json rename to src/main/generated/data/galacticraft/advancements/recipes/transportation/iron_rocket_launch_pad.json index b5b906130..3bb25deb6 100644 --- a/src/main/generated/data/galacticraft/advancements/recipes/transportation/rocket_launch_pad.json +++ b/src/main/generated/data/galacticraft/advancements/recipes/transportation/iron_rocket_launch_pad.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "galacticraft:rocket_launch_pad" + "recipe": "galacticraft:iron_rocket_launch_pad" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "galacticraft:rocket_launch_pad" + "galacticraft:iron_rocket_launch_pad" ] } } \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json b/src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json new file mode 100644 index 000000000..feaa26fdc --- /dev/null +++ b/src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_desh_block": { + "conditions": { + "items": [ + { + "items": [ + "galacticraft:desh_block" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "galacticraft:netherite_rocket_launch_pad" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_desh_block" + ] + ], + "rewards": { + "recipes": [ + "galacticraft:netherite_rocket_launch_pad" + ] + } +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/iron_rocket_launch_pad.json b/src/main/generated/data/galacticraft/loot_tables/blocks/iron_rocket_launch_pad.json new file mode 100644 index 000000000..fe80fb08d --- /dev/null +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/iron_rocket_launch_pad.json @@ -0,0 +1,53 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "galacticraft:iron_rocket_launch_pad", + "condition": "minecraft:block_state_property", + "properties": { + "part": "none" + } + } + ], + "name": "galacticraft:iron_rocket_launch_pad" + } + ], + "rolls": 1.0 + }, + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "galacticraft:iron_rocket_launch_pad", + "condition": "minecraft:block_state_property", + "properties": { + "part": "center" + } + } + ], + "name": "galacticraft:iron_rocket_launch_pad" + } + ], + "rolls": 9.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/netherite_rocket_launch_pad.json b/src/main/generated/data/galacticraft/loot_tables/blocks/netherite_rocket_launch_pad.json new file mode 100644 index 000000000..5f2729d8c --- /dev/null +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/netherite_rocket_launch_pad.json @@ -0,0 +1,53 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "galacticraft:netherite_rocket_launch_pad", + "condition": "minecraft:block_state_property", + "properties": { + "part": "none" + } + } + ], + "name": "galacticraft:netherite_rocket_launch_pad" + } + ], + "rolls": 1.0 + }, + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "galacticraft:netherite_rocket_launch_pad", + "condition": "minecraft:block_state_property", + "properties": { + "part": "center" + } + } + ], + "name": "galacticraft:netherite_rocket_launch_pad" + } + ], + "rolls": 9.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/rocket_launch_pad.json b/src/main/generated/data/galacticraft/loot_tables/blocks/testrocket_launch_pad.json similarity index 80% rename from src/main/generated/data/galacticraft/loot_tables/blocks/rocket_launch_pad.json rename to src/main/generated/data/galacticraft/loot_tables/blocks/testrocket_launch_pad.json index 17c48fc37..7fef3be4b 100644 --- a/src/main/generated/data/galacticraft/loot_tables/blocks/rocket_launch_pad.json +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/testrocket_launch_pad.json @@ -13,14 +13,14 @@ "type": "minecraft:item", "conditions": [ { - "block": "galacticraft:rocket_launch_pad", + "block": "galacticraft:testrocket_launch_pad", "condition": "minecraft:block_state_property", "properties": { "part": "none" } } ], - "name": "galacticraft:rocket_launch_pad" + "name": "galacticraft:testrocket_launch_pad" } ], "rolls": 1.0 @@ -37,14 +37,14 @@ "type": "minecraft:item", "conditions": [ { - "block": "galacticraft:rocket_launch_pad", + "block": "galacticraft:testrocket_launch_pad", "condition": "minecraft:block_state_property", "properties": { "part": "center" } } ], - "name": "galacticraft:rocket_launch_pad" + "name": "galacticraft:testrocket_launch_pad" } ], "rolls": 9.0 diff --git a/src/main/generated/data/galacticraft/recipes/rocket_launch_pad.json b/src/main/generated/data/galacticraft/recipes/iron_rocket_launch_pad.json similarity index 84% rename from src/main/generated/data/galacticraft/recipes/rocket_launch_pad.json rename to src/main/generated/data/galacticraft/recipes/iron_rocket_launch_pad.json index 022a91914..32e4c6510 100644 --- a/src/main/generated/data/galacticraft/recipes/rocket_launch_pad.json +++ b/src/main/generated/data/galacticraft/recipes/iron_rocket_launch_pad.json @@ -15,6 +15,6 @@ ], "result": { "count": 9, - "item": "galacticraft:rocket_launch_pad" + "item": "galacticraft:iron_rocket_launch_pad" } } \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json b/src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json new file mode 100644 index 000000000..27345706e --- /dev/null +++ b/src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "galacticraft:compressed_steel" + }, + "I": { + "item": "galacticraft:desh_block" + } + }, + "pattern": [ + "CCC", + "III" + ], + "result": { + "count": 9, + "item": "galacticraft:netherite_rocket_launch_pad" + } +} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json index 7fd7884c2..1a4d6d2b4 100644 --- a/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -36,10 +36,12 @@ "galacticraft:cracked_moon_basalt_brick_stairs", "galacticraft:mars_stone_stairs", "galacticraft:mars_cobblestone_stairs", + "galacticraft:iron_rocket_launch_pad", + "galacticraft:netherite_rocket_launch_pad", + "galacticraft:testrocket_launch_pad", "galacticraft:fallen_meteor", "galacticraft:tin_ladder", "galacticraft:fueling_pad", - "galacticraft:rocket_launch_pad", "galacticraft:glowstone_lantern", "galacticraft:unlit_lantern", "galacticraft:grating", diff --git a/src/main/java/dev/galacticraft/mod/Constant.java b/src/main/java/dev/galacticraft/mod/Constant.java index 7232225d3..687ff6cbd 100644 --- a/src/main/java/dev/galacticraft/mod/Constant.java +++ b/src/main/java/dev/galacticraft/mod/Constant.java @@ -247,7 +247,6 @@ interface Block { // Pad Blocks String FUELING_PAD = "fueling_pad"; - String ROCKET_LAUNCH_PAD = "rocket_launch_pad"; String FUEL_LOADER = "fuel_loader"; String CARGO_LOADER = "cargo_loader"; String CARGO_UNLOADER = "cargo_unloader"; diff --git a/src/main/java/dev/galacticraft/mod/Galacticraft.java b/src/main/java/dev/galacticraft/mod/Galacticraft.java index 3f4a451c1..e2a71272e 100644 --- a/src/main/java/dev/galacticraft/mod/Galacticraft.java +++ b/src/main/java/dev/galacticraft/mod/Galacticraft.java @@ -37,6 +37,7 @@ import dev.galacticraft.mod.network.GCServerPacketReceivers; import dev.galacticraft.mod.particle.GCParticleTypes; import dev.galacticraft.mod.recipe.GCRecipes; +import dev.galacticraft.mod.rockets.RocketParts; import dev.galacticraft.mod.screen.GCMenuTypes; import dev.galacticraft.mod.structure.GCStructurePieceTypes; import dev.galacticraft.mod.tag.GCTags; @@ -66,6 +67,7 @@ public void onInitialize() { long startInitTime = System.currentTimeMillis(); Constant.LOGGER.info("Starting initialization."); GCChunkGenerator.register(); + RocketParts.register(); GCTags.register(); GCFluids.register(); GCBlocks.register(); diff --git a/src/main/java/dev/galacticraft/mod/content/GCBlockEntityTypes.java b/src/main/java/dev/galacticraft/mod/content/GCBlockEntityTypes.java index a61575a3a..f16befb9f 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCBlockEntityTypes.java +++ b/src/main/java/dev/galacticraft/mod/content/GCBlockEntityTypes.java @@ -30,12 +30,17 @@ import dev.galacticraft.mod.content.block.entity.networked.WireBlockEntity; import dev.galacticraft.mod.content.block.entity.networked.WireWalkwayBlockEntity; import dev.galacticraft.mod.content.block.special.ParaChestBlockEntity; +import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlock; import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlockEntity; +import dev.galacticraft.mod.rockets.RocketParts; import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.level.block.entity.BlockEntityType; +import java.util.ArrayList; +import java.util.List; + public class GCBlockEntityTypes { public static final GCRegistry> BLOCK_ENTITIES = new GCRegistry<>(BuiltInRegistries.BLOCK_ENTITY_TYPE); // POWER GENERATION @@ -72,7 +77,10 @@ public class GCBlockEntityTypes { public static final BlockEntityType OXYGEN_STORAGE_MODULE = FabricBlockEntityTypeBuilder.create(OxygenStorageModuleBlockEntity::new, GCBlocks.OXYGEN_STORAGE_MODULE).build(); // ROCKETS - public static final BlockEntityType LAUNCH_PAD = FabricBlockEntityTypeBuilder.create(LaunchPadBlockEntity::new, GCBlocks.ROCKET_LAUNCH_PAD).build(); + public static List> LAUNCH_PADS = new ArrayList<>(); + + + public static final BlockEntityType FUEL_LOADER = FabricBlockEntityTypeBuilder.create(FuelLoaderBlockEntity::new, GCBlocks.FUEL_LOADER).build(); public static final BlockEntityType PARACHEST = FabricBlockEntityTypeBuilder.create(ParaChestBlockEntity::new, GCBlocks.PARACHEST).build(); @@ -86,6 +94,17 @@ public class GCBlockEntityTypes { public static final BlockEntityType ROCKET_WORKBENCH = FabricBlockEntityTypeBuilder.create(RocketWorkbenchBlockEntity::new, GCBlocks.ROCKET_WORKBENCH).build(); public static void register() { + //ROCKET PARTS + for (LaunchPadBlock launchPadBlock : RocketParts.LAUNCH_PADS) + { + var ref = new Object() { + BlockEntityType launchPadBlockEntityBlockEntityType = null; + }; + ref.launchPadBlockEntityBlockEntityType = FabricBlockEntityTypeBuilder.create((pos, state) -> new LaunchPadBlockEntity(pos, state, launchPadBlock.getThrust(), ref.launchPadBlockEntityBlockEntityType), launchPadBlock).build(); + LAUNCH_PADS.add(ref.launchPadBlockEntityBlockEntityType); + Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(launchPadBlock.getType()), ref.launchPadBlockEntityBlockEntityType); + } + Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.COAL_GENERATOR), COAL_GENERATOR); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.BASIC_SOLAR_PANEL), BASIC_SOLAR_PANEL); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.ADVANCED_SOLAR_PANEL), ADVANCED_SOLAR_PANEL); @@ -115,7 +134,6 @@ public static void register() { Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.FUEL_LOADER), FUEL_LOADER); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.PARACHEST), PARACHEST); - Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.ROCKET_LAUNCH_PAD), LAUNCH_PAD); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.SOLAR_PANEL_PART), SOLAR_PANEL_PART); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.CRYOGENIC_CHAMBER_PART), CRYOGENIC_CHAMBER_PART); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.CRYOGENIC_CHAMBER), CRYOGENIC_CHAMBER); diff --git a/src/main/java/dev/galacticraft/mod/content/GCBlocks.java b/src/main/java/dev/galacticraft/mod/content/GCBlocks.java index 7411c8e15..19dc797e8 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCBlocks.java +++ b/src/main/java/dev/galacticraft/mod/content/GCBlocks.java @@ -43,6 +43,7 @@ import dev.galacticraft.mod.content.block.special.walkway.FluidPipeWalkway; import dev.galacticraft.mod.content.block.special.walkway.WalkwayBlock; import dev.galacticraft.mod.content.block.special.walkway.WireWalkway; +import dev.galacticraft.mod.rockets.RocketParts; import dev.galacticraft.mod.util.MultiBlockUtil; import net.fabricmc.fabric.api.registry.FlammableBlockRegistry; import net.fabricmc.fabric.api.registry.FlattenableBlockRegistry; @@ -59,6 +60,8 @@ import net.minecraft.world.level.material.MapColor; import net.minecraft.world.level.material.PushReaction; +import java.util.ArrayList; +import java.util.List; import java.util.function.ToIntFunction; @SuppressWarnings("unused") @@ -188,7 +191,6 @@ public class GCBlocks { public static final Block HEAVY_SEALABLE_ALUMINUM_WIRE = BLOCKS.register(Constant.Block.HEAVY_SEALABLE_ALUMINUM_WIRE, new HeavySealableAluminumWireBlock(BlockBehaviour.Properties.ofFullCopy(TIN_DECORATION.block()))); public static final Block GLASS_FLUID_PIPE = BLOCKS.register(Constant.Block.GLASS_FLUID_PIPE, new GlassFluidPipeBlock(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.HAT).sound(SoundType.GLASS))); public static final Block FUELING_PAD = BLOCKS.register(Constant.Block.FUELING_PAD, new FuelPadBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_GRAY).instrument(NoteBlockInstrument.BASEDRUM).strength(1.5F, 10.0F))); - public static final Block ROCKET_LAUNCH_PAD = BLOCKS.register(Constant.Block.ROCKET_LAUNCH_PAD, new LaunchPadBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_GRAY).instrument(NoteBlockInstrument.BASEDRUM).strength(1.5F, 10.0F))); public static final Block ROCKET_WORKBENCH = BLOCKS.register(Constant.Block.ROCKET_WORKBENCH, new RocketWorkbench(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_GRAY).instrument(NoteBlockInstrument.BASEDRUM).strength(1.5F, 6.0F))); public static final Block PARACHEST = BLOCKS.registerWithItem(Constant.Block.PARACHEST, new ParaChestBlock(BlockBehaviour.Properties.of())); @@ -302,6 +304,9 @@ public class GCBlocks { public static final AirlockBlock AIR_LOCK_CONTROLLER = BLOCKS.register(Constant.Block.AIR_LOCK_CONTROLLER, new AirlockBlock(true, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BLOCK))); public static final Block AIR_LOCK_SEAL = BLOCKS.register(Constant.Block.AIR_LOCK_SEAL, new AirlockSealBlock(BlockBehaviour.Properties.ofFullCopy(AIR_LOCK_FRAME))); + //dynamic rockets + public static List LAUNCH_PADS = new ArrayList<>(); + public static Block register(String id, Block block) { return Registry.register(BuiltInRegistries.BLOCK, Constant.id(id), block); } @@ -312,6 +317,10 @@ public static void register() { FlammableBlockRegistry.getDefaultInstance().add(CAVERNOUS_VINES, 15, 60); FlammableBlockRegistry.getDefaultInstance().add(CAVERNOUS_VINES_PLANT, 15, 60); FlattenableBlockRegistry.register(MOON_DIRT, MOON_DIRT_PATH.defaultBlockState()); + for (LaunchPadBlock launchPadBlock : RocketParts.LAUNCH_PADS) + { + LAUNCH_PADS.add(BLOCKS.register(launchPadBlock.getType(), launchPadBlock)); + } } private static BlockBehaviour.Properties oreSettings(float hardness, float resistance, boolean deepslate) { diff --git a/src/main/java/dev/galacticraft/mod/content/block/entity/machine/FuelLoaderBlockEntity.java b/src/main/java/dev/galacticraft/mod/content/block/entity/machine/FuelLoaderBlockEntity.java index cd0c20416..180fafa52 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/entity/machine/FuelLoaderBlockEntity.java +++ b/src/main/java/dev/galacticraft/mod/content/block/entity/machine/FuelLoaderBlockEntity.java @@ -91,7 +91,7 @@ public BlockPos getConnectionPos() { public void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull ProfilerFiller profiler) { if (this.check != null) { BlockPos launchPad = this.worldPosition.relative(this.check); - if (this.level.getBlockState(launchPad).getBlock() == GCBlocks.ROCKET_LAUNCH_PAD) { + if (GCBlocks.LAUNCH_PADS.contains(this.level.getBlockState(launchPad).getBlock())) { launchPad = launchPad.offset(AbstractLaunchPad.partToCenterPos(level.getBlockState(launchPad).getValue(AbstractLaunchPad.PART))); if (this.level.getBlockState(launchPad).getBlock() instanceof AbstractLaunchPad && this.level.getBlockState(launchPad).getValue(AbstractLaunchPad.PART) == AbstractLaunchPad.Part.CENTER diff --git a/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/FuelPadBlock.java b/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/FuelPadBlock.java index 64a807288..5d8cdaf19 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/FuelPadBlock.java +++ b/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/FuelPadBlock.java @@ -23,6 +23,7 @@ package dev.galacticraft.mod.content.block.special.launchpad; import com.mojang.serialization.MapCodec; +import dev.galacticraft.mod.content.GCBlockEntityTypes; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; @@ -41,6 +42,6 @@ protected MapCodec codec() { @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new LaunchPadBlockEntity(pos, state, LaunchPadBlockEntity.Type.FUEL); + return new LaunchPadBlockEntity(pos, state, LaunchPadBlockEntity.Type.FUEL, 0, null); } } diff --git a/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlock.java b/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlock.java index db74d2a52..9123296af 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlock.java +++ b/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlock.java @@ -23,17 +23,26 @@ package dev.galacticraft.mod.content.block.special.launchpad; import com.mojang.serialization.MapCodec; +import dev.galacticraft.mod.content.GCBlockEntityTypes; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; public class LaunchPadBlock extends AbstractLaunchPad { - public static final MapCodec CODEC = simpleCodec(LaunchPadBlock::new); + public static final MapCodec CODEC = simpleCodec(properties1 -> new LaunchPadBlock(properties1, "", 0)); + public String type; + public Integer thrust; - public LaunchPadBlock(Properties properties) { + public LaunchPadBlock(Properties properties, String type, Integer thrust) { super(properties); + this.type = type; + this.thrust = thrust; } + public String getType() + { + return type + "rocket_launch_pad"; + } @Override protected MapCodec codec() { return CODEC; @@ -41,6 +50,10 @@ protected MapCodec codec() { @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new LaunchPadBlockEntity(pos, state, LaunchPadBlockEntity.Type.ROCKET); + return new LaunchPadBlockEntity(pos, state, LaunchPadBlockEntity.Type.ROCKET, 0, GCBlockEntityTypes.LAUNCH_PADS.get(0)); + } + + public Integer getThrust() { + return this.thrust; } } diff --git a/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlockEntity.java b/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlockEntity.java index ff7eef7c7..98e0ce0f1 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlockEntity.java +++ b/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlockEntity.java @@ -26,13 +26,13 @@ import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.api.block.entity.FuelDock; import dev.galacticraft.mod.api.entity.Dockable; -import dev.galacticraft.mod.content.GCBlockEntityTypes; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.ByIdMap; import net.minecraft.util.StringRepresentable; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; @@ -42,18 +42,21 @@ public class LaunchPadBlockEntity extends BlockEntity implements FuelDock { public static final String ENTITY_UUID = "entity_uuid"; public static final String TYPE = "type"; + private final int thrustLimit; private UUID entityUUID = null; private @Nullable Dockable docked; private Type type; - public LaunchPadBlockEntity(BlockPos pos, BlockState state, Type type) { - super(GCBlockEntityTypes.LAUNCH_PAD, pos, state); + public LaunchPadBlockEntity(BlockPos pos, BlockState state, Type type, int thrustLimit, BlockEntityType blockEntityType) { + super(blockEntityType, pos, state); this.type = type; + this.thrustLimit = thrustLimit; } - public LaunchPadBlockEntity(BlockPos pos, BlockState state) { - super(GCBlockEntityTypes.LAUNCH_PAD, pos, state); + public LaunchPadBlockEntity(BlockPos pos, BlockState state, int thrustLimit, BlockEntityType blockEntityType) { + super(blockEntityType, pos, state); + this.thrustLimit = 0; } public void setDockedEntity(@Nullable Dockable dockable) { diff --git a/src/main/java/dev/galacticraft/mod/content/entity/orbital/RocketEntity.java b/src/main/java/dev/galacticraft/mod/content/entity/orbital/RocketEntity.java index 9321b9742..22d2e4bfe 100644 --- a/src/main/java/dev/galacticraft/mod/content/entity/orbital/RocketEntity.java +++ b/src/main/java/dev/galacticraft/mod/content/entity/orbital/RocketEntity.java @@ -39,6 +39,7 @@ import dev.galacticraft.mod.content.GCFluids; import dev.galacticraft.mod.content.advancements.GCTriggers; import dev.galacticraft.mod.content.block.special.launchpad.AbstractLaunchPad; +import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlock; import dev.galacticraft.mod.content.entity.ControllableEntity; import dev.galacticraft.mod.content.entity.data.GCEntityDataSerializers; import dev.galacticraft.mod.content.item.GCItems; @@ -114,6 +115,7 @@ public class RocketEntity extends AdvancedVehicle implements Rocket, IgnoreShift private final boolean debugMode = false && FabricLoader.getInstance().isDevelopmentEnvironment(); private FuelDock linkedPad = null; + private LaunchPadBlock launchPadType = null; private final SingleFluidStorage tank = SingleFluidStorage.withFixedCapacity(FluidUtil.bucketsToDroplets(100), () -> { this.entityData.set(FUEL, getTank().getAmount()); }); @@ -194,6 +196,10 @@ public void setLaunchStage(LaunchStage launchStage) { return linkedPad.getDockPos(); } + public @NotNull LaunchPadBlock getLaunchPadType() { + return launchPadType; + } + @Override public void remove(RemovalReason reason) { super.remove(reason); @@ -255,6 +261,10 @@ public void setPad(FuelDock pad) { this.linkedPad = pad; } + public void setLaunchPadType(LaunchPadBlock pad) { + this.launchPadType = pad; + } + @Override public FuelDock getLandingPad() { return this.linkedPad; @@ -473,12 +483,15 @@ public void tick() { if (passenger instanceof ServerPlayer player) { GCServerPlayer gcPlayer = GCServerPlayer.get(player); gcPlayer.setRocketData(this); - gcPlayer.setLaunchpadStack(new ItemStack(GCBlocks.ROCKET_LAUNCH_PAD, 9)); + + + gcPlayer.setLaunchpadStack(new ItemStack(this.launchPadType, 9)); } this.linkedPad.setDockedEntity(null); + this.linkedPad.setDockedEntity(this); for (int x = -1; x <= 1; x++) { for (int z = -1; z <= 1; z++) { - if (level().getBlockState(getLinkedPad().offset(x, 0, z)).getBlock() == GCBlocks.ROCKET_LAUNCH_PAD + if (GCBlocks.LAUNCH_PADS.contains(level().getBlockState(getLinkedPad().offset(x, 0, z)).getBlock()) && level().getBlockState(getLinkedPad().offset(x, 0, z)).getValue(AbstractLaunchPad.PART) != AbstractLaunchPad.Part.NONE) { level().setBlock(getLinkedPad().offset(x, 0, z), Blocks.AIR.defaultBlockState(), Block.UPDATE_NONE); } @@ -711,6 +724,8 @@ protected void readAdditionalSaveData(CompoundTag tag) { BlockEntity be = this.level().getBlockEntity(new BlockPos(tag.getInt("lX"), tag.getInt("lY"), tag.getInt("lZ"))); if (be instanceof FuelDock pad) this.linkedPad = pad; + if (this.level().getBlockState(new BlockPos(tag.getInt("lX"), tag.getInt("lY"), tag.getInt("lZ"))).getBlock() instanceof LaunchPadBlock pad) + this.launchPadType = pad; } @Override diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java index 13b9ca235..40e27fcc9 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java @@ -39,6 +39,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.DyeColor; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import static dev.galacticraft.mod.content.GCBlocks.FOOD_CANNER; @@ -343,7 +344,12 @@ public class GCCreativeModeTabs { output.accept(HEAVY_SEALABLE_ALUMINUM_WIRE); output.accept(GLASS_FLUID_PIPE); output.accept(FUELING_PAD); - output.accept(ROCKET_LAUNCH_PAD); + + + for (Item launchPad : GCItems.LAUNCH_PADS) + { + output.accept(launchPad); + } for (DyeColor color : DyeColor.values()) { ItemStack stack = new ItemStack(GCBlocks.PARACHEST); diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java index 2fb22dcb9..10d17b1ba 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java @@ -27,6 +27,8 @@ import dev.galacticraft.mod.content.GCFluids; import dev.galacticraft.mod.content.GCRegistry; import dev.galacticraft.mod.content.GCRocketParts; +import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlock; +import dev.galacticraft.mod.rockets.RocketParts; import dev.galacticraft.mod.util.TextureUtils; import dev.galacticraft.mod.util.Translations; import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin; @@ -147,7 +149,6 @@ public class GCItems { public static final Item HEAVY_SEALABLE_ALUMINUM_WIRE = new BlockItem(GCBlocks.HEAVY_SEALABLE_ALUMINUM_WIRE, new Item.Properties()); public static final Item GLASS_FLUID_PIPE = new BlockItem(GCBlocks.GLASS_FLUID_PIPE, new Item.Properties()); public static final Item FUELING_PAD = ITEMS.register(Constant.Block.FUELING_PAD, new BlockItem(GCBlocks.FUELING_PAD, new Item.Properties())); - public static final Item ROCKET_LAUNCH_PAD = ITEMS.register(Constant.Block.ROCKET_LAUNCH_PAD, new BlockItem(GCBlocks.ROCKET_LAUNCH_PAD, new Item.Properties())); // LIGHT PANELS public static final Item SQUARE_LIGHT_PANEL = new BlockItem(GCBlocks.SQUARE_LIGHT_PANEL, new Item.Properties()); @@ -435,12 +436,20 @@ public class GCItems { public static final CannedFoodItem CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(new FoodProperties.Builder().nutrition(0).saturationMod(0).build()).stacksTo(1)); public static final CannedFoodItem EMPTY_CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(null).stacksTo(64)); - + //rocket parts + public static List LAUNCH_PADS = new ArrayList<>(); + public static void register() { // === START BLOCKS === Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Item.EMPTY_CANNED_FOOD), EMPTY_CANNED_FOOD); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Item.CANNED_FOOD), CANNED_FOOD); + //ROCKET PARTS + for (LaunchPadBlock launchPadBlock : RocketParts.LAUNCH_PADS) + { + LAUNCH_PADS.add(ITEMS.register(launchPadBlock.getType(), new BlockItem(launchPadBlock, new Item.Properties()))); + } + // MOON NATURAL Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.MOON_TURF), MOON_TURF); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.MOON_DIRT), MOON_DIRT); diff --git a/src/main/java/dev/galacticraft/mod/content/item/RocketItem.java b/src/main/java/dev/galacticraft/mod/content/item/RocketItem.java index 451918b23..5e54fd62f 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/RocketItem.java +++ b/src/main/java/dev/galacticraft/mod/content/item/RocketItem.java @@ -30,6 +30,7 @@ import dev.galacticraft.mod.content.GCBlocks; import dev.galacticraft.mod.content.GCEntityTypes; import dev.galacticraft.mod.content.block.special.launchpad.AbstractLaunchPad; +import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlock; import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlockEntity; import dev.galacticraft.mod.content.entity.orbital.RocketEntity; import dev.galacticraft.mod.util.Translations; @@ -63,10 +64,10 @@ public RocketItem(Properties properties) { @Override public InteractionResult useOn(UseOnContext context) { - if (!context.getLevel().isClientSide && context.getLevel().getBlockState(context.getClickedPos()).getBlock() == GCBlocks.ROCKET_LAUNCH_PAD + if (!context.getLevel().isClientSide && GCBlocks.LAUNCH_PADS.contains(context.getLevel().getBlockState(context.getClickedPos()).getBlock()) && context.getLevel().getBlockState(context.getClickedPos()).getValue(AbstractLaunchPad.PART) != AbstractLaunchPad.Part.NONE) { BlockPos pos = new BlockPos(context.getClickedPos()).offset(AbstractLaunchPad.partToCenterPos(context.getLevel().getBlockState(context.getClickedPos()).getValue(AbstractLaunchPad.PART))); - assert context.getLevel().getBlockState(pos).getBlock() == GCBlocks.ROCKET_LAUNCH_PAD; + assert GCBlocks.LAUNCH_PADS.contains(context.getLevel().getBlockState(pos).getBlock()); LaunchPadBlockEntity pad = (LaunchPadBlockEntity) context.getLevel().getBlockEntity(pos); if (pad.hasDockedEntity()) return InteractionResult.FAIL; @@ -76,6 +77,7 @@ public InteractionResult useOn(UseOnContext context) { RocketData data = RocketData.fromNbt(tag); rocket.setData(data); rocket.setPad(pad); + rocket.setLaunchPadType((LaunchPadBlock) context.getLevel().getBlockState(context.getClickedPos()).getBlock()); rocket.setOldPosAndRot(); rocket.absMoveTo(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D); if (tag.contains("creative")) { diff --git a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java index 4d39d11d3..8ef54011d 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java @@ -238,7 +238,10 @@ public void generate() { this.add(GCBlocks.BOSS_SPAWNER, noDrop()); this.add(GCBlocks.FUELING_PAD, this::createLaunchPadTable); - this.add(GCBlocks.ROCKET_LAUNCH_PAD, this::createLaunchPadTable); + for (Block launch_pad : GCBlocks.LAUNCH_PADS) + { + this.add(launch_pad, this::createLaunchPadTable); + } this.dropSelf(GCBlocks.AIR_LOCK_CONTROLLER); this.dropSelf(GCBlocks.AIR_LOCK_FRAME); this.dropSelf(GCBlocks.CRYOGENIC_CHAMBER); diff --git a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java index 8cf44452f..90fa9aa1d 100644 --- a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java @@ -133,7 +133,10 @@ public void generateBlockStateModels(BlockModelGenerators generator) { generator.createTrivialCube(GCBlocks.SEALABLE_ALUMINUM_WIRE); generator.createTrivialCube(GCBlocks.HEAVY_SEALABLE_ALUMINUM_WIRE); createLaunchPadBlock(GCBlocks.FUELING_PAD, generator); - createLaunchPadBlock(GCBlocks.ROCKET_LAUNCH_PAD, generator); + for (Block launch_pad : GCBlocks.LAUNCH_PADS) + { + createLaunchPadBlock(launch_pad, generator); + } generator.createNonTemplateModelBlock(GCBlocks.ROCKET_WORKBENCH); generator.createNonTemplateModelBlock(GCBlocks.FALLEN_METEOR); @@ -540,7 +543,8 @@ private void createCandleCheeseBlock(BlockModelGenerators generators, Block cand } private void createLaunchPadBlock(Block pad, BlockModelGenerators generator) { - var centerModel = ModelLocationUtils.getModelLocation(pad, "_center"); + + var centerModel = GCModelTemplates.ROCKET_LAUNCH_PAD_CENTER.createWithSuffix(pad, "_center", rocketLaunchPadPart(pad, ""), generator.modelOutput); var corner = GCModelTemplates.ROCKET_LAUNCH_PAD_PART.createWithSuffix(pad, "_corner", rocketLaunchPadPart(pad, "_corner"), generator.modelOutput); var side = GCModelTemplates.ROCKET_LAUNCH_PAD_PART.createWithSuffix(pad, "_side", rocketLaunchPadPart(pad, "_side"), generator.modelOutput); var defaultModel = Variant.variant().with(VariantProperties.MODEL, centerModel); diff --git a/src/main/java/dev/galacticraft/mod/data/model/GCModelTemplates.java b/src/main/java/dev/galacticraft/mod/data/model/GCModelTemplates.java index eabbec277..195781b30 100644 --- a/src/main/java/dev/galacticraft/mod/data/model/GCModelTemplates.java +++ b/src/main/java/dev/galacticraft/mod/data/model/GCModelTemplates.java @@ -38,6 +38,7 @@ public class GCModelTemplates { public static final ModelTemplate GLASS_FLUID_PIPE = create("template_glass_fluid_pipe", GCTextureSlot.COLOR); public static final ModelTemplate FLUID_PIPE_WALKWAY = create("template_fluid_pipe_walkway", GCTextureSlot.COLOR); public static final ModelTemplate ROCKET_LAUNCH_PAD_PART = create("rocket_launch_pad_part", TextureSlot.PARTICLE, TextureSlot.TOP, TextureSlot.BOTTOM, TextureSlot.SIDE); + public static final ModelTemplate ROCKET_LAUNCH_PAD_CENTER = create("rocket_launch_pad_center", TextureSlot.PARTICLE, TextureSlot.TOP, TextureSlot.BOTTOM, TextureSlot.SIDE); private static ModelTemplate create(String string, TextureSlot... textureSlots) { return new ModelTemplate(Optional.of(Constant.id("block/" + string)), Optional.empty(), textureSlots); diff --git a/src/main/java/dev/galacticraft/mod/data/recipes/GCMiscRecipeProvider.java b/src/main/java/dev/galacticraft/mod/data/recipes/GCMiscRecipeProvider.java index 33e47c1fa..75acf88b7 100644 --- a/src/main/java/dev/galacticraft/mod/data/recipes/GCMiscRecipeProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/recipes/GCMiscRecipeProvider.java @@ -289,7 +289,7 @@ public void buildRecipes(RecipeOutput output) { .unlockedBy(getHasName(Items.COPPER_INGOT), has(Items.COPPER_INGOT)) .save(output); - ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, GCItems.ROCKET_LAUNCH_PAD, 9) + ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, GCItems.LAUNCH_PADS.get(0), 9) .define('C', GCItems.COMPRESSED_IRON) .define('I', Items.IRON_BLOCK) .pattern("CCC") @@ -297,6 +297,14 @@ public void buildRecipes(RecipeOutput output) { .unlockedBy(getHasName(Items.IRON_BLOCK), has(Items.IRON_BLOCK)) .save(output); + ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, GCItems.LAUNCH_PADS.get(1), 9) + .define('C', GCItems.COMPRESSED_STEEL) + .define('I', GCItems.DESH_BLOCK) + .pattern("CCC") + .pattern("III") + .unlockedBy(getHasName(GCItems.DESH_BLOCK), has(GCItems.DESH_BLOCK)) + .save(output); + ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, GCItems.FUELING_PAD, 9) .define('C', GCItems.COMPRESSED_STEEL) .define('I', Items.IRON_BLOCK) diff --git a/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java b/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java index 2d0797af2..9e9da8286 100644 --- a/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java @@ -25,6 +25,7 @@ import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.content.GCBlockRegistry; import dev.galacticraft.mod.content.GCBlocks; +import dev.galacticraft.mod.rockets.RocketParts; import dev.galacticraft.mod.tag.GCTags; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider; @@ -169,11 +170,11 @@ protected void addTags(HolderLookup.Provider provider) { .add(ores) .add(slab) .add(stairs) + .add(GCBlocks.LAUNCH_PADS.toArray(new Block[0])) .add( GCBlocks.FALLEN_METEOR, GCBlocks.TIN_LADDER, GCBlocks.FUELING_PAD, - GCBlocks.ROCKET_LAUNCH_PAD, GCBlocks.GLOWSTONE_LANTERN, GCBlocks.UNLIT_LANTERN, GCBlocks.GRATING, diff --git a/src/main/java/dev/galacticraft/mod/rockets/RocketEngineItem.java b/src/main/java/dev/galacticraft/mod/rockets/RocketEngineItem.java new file mode 100644 index 000000000..51653a8d6 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/rockets/RocketEngineItem.java @@ -0,0 +1,4 @@ +package dev.galacticraft.mod.rockets; + +public class RocketEngineItem { +} diff --git a/src/main/java/dev/galacticraft/mod/rockets/RocketFinItem.java b/src/main/java/dev/galacticraft/mod/rockets/RocketFinItem.java new file mode 100644 index 000000000..17cd4db57 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/rockets/RocketFinItem.java @@ -0,0 +1,4 @@ +package dev.galacticraft.mod.rockets; + +public class RocketFinItem { +} diff --git a/src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java b/src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java new file mode 100644 index 000000000..0e88a5a24 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java @@ -0,0 +1,4 @@ +package dev.galacticraft.mod.rockets; + +public class RocketNoseConeItem { +} diff --git a/src/main/java/dev/galacticraft/mod/rockets/RocketParts.java b/src/main/java/dev/galacticraft/mod/rockets/RocketParts.java new file mode 100644 index 000000000..19fe17063 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/rockets/RocketParts.java @@ -0,0 +1,30 @@ +package dev.galacticraft.mod.rockets; + +import dev.galacticraft.api.rocket.part.RocketEngine; +import dev.galacticraft.api.rocket.part.RocketFin; +import dev.galacticraft.api.rocket.part.type.RocketFinType; +import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; +import net.minecraft.world.level.material.MapColor; + +import java.util.ArrayList; +import java.util.List; + +public class RocketParts { + //LAUNCH PADS + public static List LAUNCH_PADS = new ArrayList<>(); + public static List NOSE_CONES = new ArrayList<>(); + public static List ROCKET_FINS = new ArrayList<>(); + public static List ROCKET_ENGINES = new ArrayList<>(); + public static List ROCKET_PLATINGS = new ArrayList<>(); + + public static void register() + { + //iron launch pad + LAUNCH_PADS.add(new LaunchPadBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_GRAY).instrument(NoteBlockInstrument.BASEDRUM).strength(1.5F, 10.0F), "iron_", 500)); + //netherite launch pad... use as an example for more launch pads + LAUNCH_PADS.add(new LaunchPadBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_GRAY).instrument(NoteBlockInstrument.BASEDRUM).strength(1.5F, 10.0F), "netherite_", 1000)); + } +} diff --git a/src/main/java/dev/galacticraft/mod/rockets/RocketPlatingItem.java b/src/main/java/dev/galacticraft/mod/rockets/RocketPlatingItem.java new file mode 100644 index 000000000..4af648941 --- /dev/null +++ b/src/main/java/dev/galacticraft/mod/rockets/RocketPlatingItem.java @@ -0,0 +1,4 @@ +package dev.galacticraft.mod.rockets; + +public class RocketPlatingItem { +} diff --git a/src/main/resources/assets/galacticraft/models/block/rocket_launch_pad_center.json b/src/main/resources/assets/galacticraft/models/block/rocket_launch_pad_center.json index 8c6ad40a0..87ed94501 100644 --- a/src/main/resources/assets/galacticraft/models/block/rocket_launch_pad_center.json +++ b/src/main/resources/assets/galacticraft/models/block/rocket_launch_pad_center.json @@ -2,20 +2,19 @@ "credit": "Made with Blockbench", "parent": "block/thin_block", "textures": { - "particle": "galacticraft:block/rocket_launch_pad", - "all": "galacticraft:block/rocket_launch_pad" + "particle": "#top" }, "elements": [ { "from": [0, 0, 0], "to": [16, 3, 16], "faces": { - "north": {"uv": [0, 0, 16, 3], "texture": "#all", "cullface": "north"}, - "east": {"uv": [0, 0, 16, 3], "texture": "#all", "cullface": "east"}, - "south": {"uv": [0, 0, 16, 3], "texture": "#all", "cullface": "south"}, - "west": {"uv": [0, 0, 16, 3], "texture": "#all", "cullface": "west"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#all"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#all", "cullface": "down"} + "north": {"uv": [0, 0, 16, 3], "texture": "#side", "cullface": "north"}, + "east": {"uv": [0, 0, 16, 3], "texture": "#side", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 3], "texture": "#side", "cullface": "south"}, + "west": {"uv": [0, 0, 16, 3], "texture": "#side", "cullface": "west"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#top"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#bottom", "cullface": "down"} } } ] diff --git a/src/main/resources/assets/galacticraft/textures/block/advanced_solar_panel.png b/src/main/resources/assets/galacticraft/textures/block/advanced_solar_panel.png index ec1f92164bb813ac5cbc5b9ce2305622c3da6fa9..61ca3967c7d610553c6c03012f53cd6ffaeafab9 100644 GIT binary patch literal 3107 zcmV+;4BYdHP)uJ@VVD_U zC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$OrQF$}6R&?d%y_c8YA7_1Q zpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X z6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv1)yUy0P^?0*fb9UASvow z`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q{wNRKos+;6rV8ldy0Owz z(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E` zvOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G41dM~{UdP z6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4Es0sQWIt5*Tu0n&*J!lk~ zf_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+AA{TB3-ERLHar49hi4Ih z5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=natP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+e zdD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVb znL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0WMyP6Wy582WNT#4$d1qu znl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8dZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iutvy=3T65Yu+7a4Yv^%sX zb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i^lS773}6Fm1Fpe-gF!>I zp{*g$u-szvGhed; zvo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*ZvFf(^Xl-N7w{EeXveC4O zv)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx)P8cQ&Qi|OhNWW;>JChY zI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_WICNY@+|jrX%s^&6b2i>5 zeqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!ql}XcFH*PieWwLj2ZSq`7 zV9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I-?$tAVKYn8-l({mqQ$Q8{ zO!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;cwT88(J6|n-WB%w`m$h~4 zpmp)YIh_3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dlbFb#!9eY1iCsp6Bajj|H zr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syTu9enWavU5N9)I?I-1m1* z_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$mU2Q)a|9JSc+Uc4zvS-T9 z63!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;;JuhGEb?H5K#o@~7t9DmU zU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX=)z6+o0o6-+`4{y+3mqQ z%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@>;2q1Vm)$Z)P1z?N$8UY zW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHsy69KwU-!MxeeuI@&cF4| zM9z%AN!=;Y)}Cz6w9 zDL&e!1;Ch9sEOo*T3y#v)q=4|&ePLxUPrT80+3}XbzKi?KF0n~RSN)=QWX0|KoQ@n zwMHbzm=$GN;hbZ~Hz}pKe|QK(X_f|B##oH85e>UV;J1q?uG182EwkwiYqw2GslZ!n z{V#>4X_-tu@O{1JXgVD7>^m11d~W;v`tlNhA6` x#n=69|BJEziQ-r;m*Jdj)CX|R4f>KK;RQP(%}M@4)|3DM002ovPDHLkV1huN3>p9c literal 4829 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 R6mtLo002ovPDHLkV1oTQ5Lo~K literal 3549 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 X<-5vQ622?n00000NkvXXu0mjfY&ftq diff --git a/src/main/resources/assets/galacticraft/textures/block/air_lock_frame.png b/src/main/resources/assets/galacticraft/textures/block/air_lock_frame.png index 8242c06e010b9ee87503c2ab7695962ea44d9d1c..aeeafa0a29f05030cb5e72cbe6fb8c1107c346df 100644 GIT binary patch delta 413 zcmV;O0b>5(2)6@}B!2;OQb$4nuFf3k0004TNklb)O6 z-am*a=Nw~ft({IM5fKsZ{XEal=d-nzbN1dl=lV~d)bxBlgE8n1(Q2(29lxM7VbDPr z?4e@_VW8m@mVaq%3J*{-8{#lC{Oh{zi-V4%?
0F_copI@H`If^3(G}IW$M6@i+ zJkQ&n-dwRFZHg9hzm*HdtW}E z@Avcl@pd(3R@cm~olQ|xO{!7LlJ&#jn^{HvyZ00XvMk1lJZ?tqxTt%OQcTnaLCV%U zU>53T&!+RRo}#L0E0@Rl^cu-PHlqg^rewQ>O;PnLORjEoLJZnqhvmrhqZ21-V3{)A z5=)2Et_llQW3LCBdowwsx6=?!dgTgGUy_Ie8)6-l>@LTbN-{m=S0eks%+g>Af;(mU zm8g8W38=_}AjU*OMwsJ(ATV4sCJ5Xzz=t`W4U<<0aZxEINc?h8erOWSGux%CmMq62 zCz&o_>`E+KEEbt!gh5^h%ZZ{G_~7{vL4^Ds2kWJf<1eXr(4cR4mWwUqfWV{PhPts# z6Q!?Gu-$Ze+Ogx83q?xCmUNfpm@sSGL0(g6A7|lf8Sg~Q84H?}wbZ|seQ84^9k>?!9yF@}^Jz9Nr0@_8;{&jGy{zKGOS84>^Ba8hr3P z(kol%hJVj9-)HC}AJ5qb_GBNP8s56fTF_Q^b6~;kuDb`0%ez`W>;G=Vr6zMrg-rVK z%wN8F@xjp0xA-gd#FL@X)=$Uo*FLjv-1{vq)lUAit)Hr<#MF!NuebL-3hsO=kAY(<1X diff --git a/src/main/resources/assets/galacticraft/textures/block/aluminum_block.png b/src/main/resources/assets/galacticraft/textures/block/aluminum_block.png index 094fb80678e850bc108c5bfd8f876996ff81d74a..7b80c9a2ae5a005746bd6241cab56c1207df8124 100644 GIT binary patch delta 223 zcmV<503iRN0*C^TF@M5IL_t(2k(H7`4#FT1MW^G!G#Y}C9;OGdabb7Hg_r8Ghv?B7 zC?zy*YT{xHl7g}QtH&_R`~kAI=>+4DlD0-LuB`z854-E-etVqr{lQJHs>={w^IX-X zVA6vf916zm@T8J!0KEYz3wFvwOHvlGPXvHC&qrcFSRvm^TUdihqh5&_=(2w0rDxbA z1b|Ub0H9P)5KF24dw`zV7#D8GB|LmAaemxjDOA{M5h1|8dCLyTYfXx5XKmBbI{wK? Zcmw%*eyjEdF}DB!002ovPDHLkV1kxNW;*}? delta 248 zcmV!d}NmldZ_ItdsnbaA6;`l)V*B*4tDei1N1 zO_oV0u*OKi%&V-N;M1Uf7Vwq62!yB*gNuNxFWVkG#{|_WU?D~41z+D2`==>9)-oYD yAyyOo;Q)6f2r_*EEAXY6z5~v50tcHkD188;b_$FgDy;(m0000a diff --git a/src/main/resources/assets/galacticraft/textures/block/aluminum_decoration.png b/src/main/resources/assets/galacticraft/textures/block/aluminum_decoration.png index d71b5888f72352b652da81970866419c265b4b3c..5333b884741a5c47822491b816bfa1833888e987 100644 GIT binary patch delta 352 zcmV-m0iXVi59$SwBNYLKX+uL$Nkc;*aB^>EX>4Tx04R~O)dY3{e>OEtTmS$8AW1|) zR49>sk-<)bKomuf$s}zhfF;2NF~)_)O;?Rwy752#0KdUcAfb!0P}4;dH8GIT4ulqV zE@l`gXzz--ym!xgGiNW)uN*7OcYx?czk+rrW5{GzC8d@7=M2M2*8<6)*l<0 z)hBv@`C=9=S3(`Ef3a%?l$BK9fMt(?vZ#QvlFHO00q<{Xz;+x!k__V|$=&^Rv6s5x z>c%%HQ>1{pp&3}HOORPzLYYX8YU~hBzEu7d1dl zP!HsKqanRZFl{Yim_1anmmAkrjFlQdec%v#+6hR!doiie$x>TlTq0000aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y?lEbJD z{Ld-&2uMO8j)O5&?G4`Xw+-0I#L0YAJu?$143g+>3A^^cf4ln!4`m82XtJ1N^msxJ znF|KyA5UBToFgB`@A=UBCHM9PqZjltCsSB&WzC=Keu5(+n1FKuN~7h?elL7^l%Pn)%`@1;6|1H?#_n znZ$Prv^y%)snL$UQbmk`8z=P4m1WGCB+gvL3rRQ{bxx9H7ZaAsO+!9m=7N4fKiTLECV6b7jHTMKHK%UCt?K* z>VVmBz~Z-QVpDo(ONIah>lFRe7p47RjfYACd@F(>0R=viC`Iy#IS~b613?9mvjpD2 z0IBkhAUTLcaAVLBd}B|dv6hwRJW>Vxs6D_XF-U_~h#Z?c6= zx45Ovw!D=J`P5Lg#+s_tT+7b8>|xhE?rFC@@1;?Llw1o1txFGGd+e!O z&%Io%Eq_*T?GLQcVvPq=$GUW}hS`)3L&F3ebw&@)z!(PttJkV z;en|aWM2zx1%DMf5-nq#$&>>AfZ&{o?8{i^&wrllK9*Pr`Q% z_J2O|fZlxt^RjW0-giA z&TC5yPkM151T>R{?=bgyeB5Vt$_V9Y(SKk4_egyspG!6F6Bd6|RCGF}jeDW!3?=6$ zN!^m=leF9$ZGDo~C8^k^_v7Z;mM8ZpO|tVOqoP7>H=^cw0`plD>lf|1ClPja~Xn&lPNz%f$jd-&z_D-68Q+iGf|QtA9TE z=?(60pu9V~`vJpu(7nN_cE{%xla+2Nf8^aApBJ25{1J~U?^w=ycv;>0f~w*}>%8`! z$=lY|<7|ghUbbp}ke& zKllN}x2MXbssuf7s7l&2iQ^tPOtgfw>>=8W*E750y?K9oeVRT1sGA4?fOkfInKSAp zdS_JI#`$~}!a@$JV~M|Udv_0@DDscbF9jfk#df>F|4|;)22(2 z$*8(ZG1G>4-9*J6x)f771K?L{#cBbyR?d0vjAD!BVL$N`k`1{p!CxlQh?L+20XXOT zme_;PFcIRhLfc0AIN}y!5r3RM_cIL58M!25jAuC2Ct)4xh*9#`%34F0q~oi0U2#bu zstKaC;tbWX>~{%3LyTRFoiW+))p)I{>fuHyYfVw)%jL`E+Oa}5vMBQY9rD#WU#)pS fK?c{12y*~GU#QU*KMOYW00000NkvXXu0mjf`eEwm diff --git a/src/main/resources/assets/galacticraft/textures/block/aluminum_ore.png b/src/main/resources/assets/galacticraft/textures/block/aluminum_ore.png index a3b367d1678d6bb854cb9779f0f8ffc9ce66c069..3c8326d636b75f3a3e9e37f11dcfbae6336f32b5 100644 GIT binary patch delta 554 zcmV+_0@eNg0?!1HFn84GrS&2-0Tsd2WMY^$YuqqxcFN+?!NUvd+}?X%zVqJu zylcH)Pbmd}bFP%qS_5z#M{6C&vFo}Na?Sw&u%(n#20$WG(0>CEhG87XVHo+`rm5$7xm@nyy+^z4T7l=q?1V8!7FMg(YVYhnefGG( z^HzH6`^hn5Y_(b$V-lk_@|#jbKWE?4G~K!XWH$d{b-P`4IluUg0?&ULeX?zvF~%6v zTD#WPFL5?q3@DQrWsI?@V}ZeN^uKig&1wh0(eMMUJAd2qbt+3KNlHwb)lN{_91D@b zxx*iXVYmiID8euV;QKxqJ0nMHO~`iJwZr}~k+JCq0+->;E@!W`4PY{vip79)E~T`( z-L5gFSS-GL@%##Z9m}6DMHEHG7_GHh{h6JPXQyMORFWi~=h<|jTI;v(-jH!-PfW8D sUSBH>KqCQdOlutkfl?|%P69Ie2R^<pF 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 Hu0mjfpSn>p literal 7386 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 G3;zW#;7>&W diff --git a/src/main/resources/assets/galacticraft/textures/block/asteroid_rock_block_0.png b/src/main/resources/assets/galacticraft/textures/block/asteroid_rock_block_0.png new file mode 100644 index 0000000000000000000000000000000000000000..dc14173fd90e8ed5702a824d608551a735c9b89e GIT binary patch literal 3068 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 KMNUMnLSTa6?E97g literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/asteroid_rock_block_1.png b/src/main/resources/assets/galacticraft/textures/block/asteroid_rock_block_1.png index 48af4f69f2357df668fccaf8677945f34468cf8b..da228c8b391e08d87ebc9c02fd3301b81ecd5c9a 100644 GIT binary patch literal 3103 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/asteroid_rock_block_2.png b/src/main/resources/assets/galacticraft/textures/block/asteroid_rock_block_2.png index f774ca345d65795c4a5acded84d249bf51593982..8c4a4b354c521dcf7689581b99380ac6df6afff5 100644 GIT binary patch literal 3116 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 literal 4837 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 LNkvXXu0mjf(rzBj diff --git a/src/main/resources/assets/galacticraft/textures/block/bronze_decoration.png b/src/main/resources/assets/galacticraft/textures/block/bronze_decoration.png index 93d79fc08fff49f6caf878f33f82187bbc0ef9bf..8317c3408e16071f94371e7eb702ce92d98c405f 100644 GIT binary patch delta 326 zcmV-M0lEJB56}gWBNYLKX+uL$Nkc;*aB^>EX>4Tx04R~OLIrjKe>OEtTmS$821!Ig zR49>sQAApcY)w2x!qY>UtmYxl86gH%@(IKjKTZG+ zeGnf2(plhd2VHDzeU-tp(M1v#ve8NBYy<`dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Yua_cw@ z{O2j=2n4_dJPyUB>fK3Js;X%GH*K=rJ$767~Srb-F}V_SBZt*bbpY)O^|CFe%?6d-OiT3 zSR~0t`~2wRzxS%Ww{^Pg0^AVRq1G1WTm}OVcuD58fH&gbqaNp*@T$$Wkh9emd*CgU zh)HZGN7YcKPK_$cLIpNDZX8iE7na$k5;<`ZD!he)+U-Q#|-@LsS3m*~T^t62iyO;+KG~6iTi(vqS`o_&q2cPftm?vNb z2>R(}#R0QD))I%O2e)JrKrqguT>PR~2WmW7;;^@eF(iP%1`?LFsjm7OYOGpQ&5atUWSVQfg%+E()N%*cx^&ll z4?TA6sek7SwTcpM0T&^$1+O3v{> zZeV5;BPu+@NI$TtWV4|F2wfxgoi6Mi$o(2O17H7y8~+A5Gobq)kYm&2hT9v|>QKTm z5nE9>d};;J*QI9G%!eB7L#fs;$jYiI0GO4mj(?oTAJEyQ>$Bpt%#qkbN5yE)Bg#gn zC8?w0S`0xZX?WT&8L#$nw%cT zmbABp-fGFKZagGT+8leJ3hkctW+BN!tE0N&KG}Ab=BEMoQrFr@M|rs)1XP%2=8x#8 zlz$MHt23ok`>Gd?;JLp#h-MWQULdAfVMF?ZlP+gnYn*ehsR%PQ(~&gjI(MxOIm|CV zWwx!XlOS~+?u06_TQ%W_>&(psX;onKCxg-px7^}ULVsB_vsu!r9@(~VqKOn;THmG( z(mtbk?mQCYoSG2VyX`ZtUx!{z=5;z3zkdVem-gAVVy$Y6U(Y*^d%^qa*SDql&c8c4 z5OK|iWdgkD;F}d_HpUgYxb~O^$y>idhU(ra@@rO^Ct7{axOaq0eKRYOsdc%wxELWK zD|#OexkBrciO3qW0%v~$Iq^N77z(vuWF(i(%p+?X7cIW1)!J4NmZRitwAH(9e19Tq z%QJ4~JE?e@b2VM+_N1fD?Vtsys%2X}l=s-Or`q~65kE#G!Py@|@wcUHvKjaWi8L(> z4vXAyValE1$Fv zxL$+qE03uheftd=&6P!w10*QRVSnbYH0-^mjTm?43hoPu=UClUxG{Z!^=sA|dCr`P z?m{-)<>^IP-nz<6Yc${J#{Oht-P(qqDLZXnPL;K&nZ8 zIp=75pK7A6_b-dv)iRfZeQWVI?otDwD66l!Apomo{`vib|D!%w7f#Rf*|vW)(Pvlj|e4?O^GH}NhZE3 z*AjK7Ba5;c-eJAj ntv5S9=*}hwz&2wfIs5z<&qmQ-#N%#Z00000NkvXXu0mjfawj6y diff --git a/src/main/resources/assets/galacticraft/textures/block/cavernous_vine.png b/src/main/resources/assets/galacticraft/textures/block/cavernous_vine.png new file mode 100644 index 0000000000000000000000000000000000000000..28cc3f20c9491dcc06b77008fdfccd42b5257443 GIT binary patch literal 346 zcmV-g0j2(lP)Px$6iGxuR5*=wk}-~iFbqY1V3Y=lObRO6IRbsoPR|i&x1z|f5)Bga7Q|jBfE!5i zV?Tcf;20eF(2)-v0RVrq7#!6fNBl4QK6K}S-h4<>Ca8SqC~iC2-lG0qYCeWI335WjAXXNC#)t&TdVb+A3K0HA1e*eEDfhTFsVdp>md#x|>Z~5~55)$WX zQbd3n`q#|kT=(!nwp+^W8TJMS3wCqqoj=>QNbc}S19hX-9}dqwwWjH=fm%+}`~6OH zeupzCww+PqDX@^8Z4oBEfL()`Ic<#qi%PZxtFjaWLvx_XU%@(&nLvjzc)I$ztaD0e F0syb^PAvcc literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/cheese_block.png b/src/main/resources/assets/galacticraft/textures/block/cheese_block.png new file mode 100644 index 0000000000000000000000000000000000000000..91e6cf49563a7350043d1fabb114f151499c4ea4 GIT binary patch literal 420 zcmV;V0bBlwP)Px$UP(kjR5*=&lfO^GKpe$CP?OvHBh7`hV}pZ(Mkgkt-Hii-1Am-<0Hcc#CnpFD z3>Ze6+M(K+PB_pz?yB&eF899o`u)E5+WC4J?A)k_2qb3JWueasGw)P&wyWXpSfdD} z^{C2nma{bgcaQe~bk(CO%PAIf>asut644)7qyXQa8=}x53LTAg&2g5qHPi6~y!6kg zB9QoT0)QVUn%G)l^Zte(C&;Vo(|UL*{Jb6rsw~HidPha8vK#=6nzWb;^cO!^Hl6Fw%2yVCK}!$Jzrpa}>yEvQ3HSAz z5A5aNQ_ap0^Zxu8bq@q7rT^ z7PP+6sSrzcU-tH_&x(hhbB}gc#~VePx#zDYzuR5*?8k1-B{U<`#nen=$I1_#2RFgdY%1xF9zCA^r|aOVK%#-RBZ7Q{hI z3dS4ornax|^%Z8!fB@ie+4oYUxMVvJujd^AUpH9J&ez9l5CKS$(q|`-axmx@6#%OY zdY}VBDRJqC7tR1g>Xz(EI$!;b+WH&uw+^Mm*9`zp7dl_j`rAkpnnbbW*j`pA ziJDH0Ed~R|)x^CvoGY8J`l`y2Ysz;8et#@J)O4t}3b>phgvo)7xY&RZEy8Lm;uVsdN bp4TwS&vSN84==6;x|G4w)z4*}Q$iB})rDF! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/cheese_top.png b/src/main/resources/assets/galacticraft/textures/block/cheese_top.png new file mode 100644 index 0000000000000000000000000000000000000000..14459b5e15df1890c81dc8db77f27086ef47cd8f GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|4tu&dhFJ72 zon$R^NI{@&{~9ws_Jm8fBaSBDsJLY!cR0lCn-AZC2uWQb4#rOff27-v|G$y?&|ie% z{qLvD3cFtUht90euH; z_?63{l!Y6_Pq@CH_tPk@Khx6FC%Ql7dj;dZ&dDO#F4;z$+msZ}b03N27yPO%+97jI zp>wg;YF9fsGBoGIYsN!}S!u9MR%pZdQy_O?RR4V|wE-52$LFj>8|UbU(?@dnU4 N44$rjF6*2UngGI?YcT)- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/chiseled_moon_rock_brick.png b/src/main/resources/assets/galacticraft/textures/block/chiseled_moon_rock_brick.png index e8e2a97511b78bcc2289487ef7e3ab96f0d6d8da..e8208b467d6378b04be03aab94115bcea5a146a2 100644 GIT binary patch delta 333 zcmV-T0kZzG1n2^gB!2;OQb$4nuFf3k0003ZNklQzl2b|mVvGQS4_Pvyl#=8$ z%}X167{-B7$q9fDkuZHa^f50DD)S-MW#$9OqL0U{tF~-vz<)F^x+<{sJe-cfyDZ8- zfM)ft@8TGnc=Nb#`QiFGvO0MUYBqu(|@qacW-85MDdV2i5pyjl- zgzNPaz#DLR|3&~nxx+X}PK0PJ$%1z_*f{*`<{@bo-R@9|lp@6X-kY9Mgf}r1KwFCJ fZfwT5q1?wWoAbSFk7=hD00000NkvXXu0mjf_=lWB delta 537 zcmV+!0_Oeb006Lfe02gnP zU&TfM000SaNLh0L01m7G01m7H+^AxM0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0004$NklAI3 ziYkq)#P)c`-iPb;`-aQqY;ga3U!6`TnvkWNXzR62*>~09(Cl_fsX|JTi==Ie{jN^a z4Lv{;;PEw|KW#z>}al*tGY zHBEuICGcZJ;D6A!_?!dR`G_JP!zM|CRUm~TB4kZ%xp;M*&oEd;8<#2~B$GI##}ZV{ ze$klKG{*bhGL8L4W#%L#F$NP&O*oyp;ZS4gbnJYd|QkGEWLaEFcCBDBs!$Abjcz==-!tu}oO)yuAW1m*D-^=XL zS!-8GqzS)E2Y>It1Do@kXqJY62lQ`eHQU>>YJd8T93mOOATS=s&qa)}VdyM@C&VSj zloG6n_3cRJJ`hk~91R%J1jb;FR9U25Co3fy#SH{f`i@(VQYAA=R)IYLUpMf}ynnDg b)5#Ch^AeS#Myz7+00000NkvXXu0mjfA!q9e diff --git a/src/main/resources/assets/galacticraft/textures/block/circuit_fabricator.png b/src/main/resources/assets/galacticraft/textures/block/circuit_fabricator.png index b65f3ec29de894e3f7658e5f5fa64e6c03a1c9f7..48072df68a436671c8b54057ca8eff1dee0db404 100644 GIT binary patch delta 472 zcmV;}0Vn>N1^xq&FnPr07=1Gx%Y!{a(1f6{=_ZRtELs+&LI|ly zpv(n&n%*Mf0&oG2fJDoW8nUQVC|%JY)QDsp&B8XeOeQSsPG?cx#_xTf{QXCHK46T~ zlmY-?jRl~!@{%!LODUxgi-a*goBc)u##m3%lu9XU>5=%S(|@_&YOe#3Qdwi`3;?n$ zV~lI9ib6Q&!iQFS{mqNFYn#MN{jOxs?*LeScXq01m+!uM7&6qs?1{t)=vD?G9=T=L z?F=^o9PN+o^g3beiu1LF+jWAPF3`4 zRsXDZ2xhCxXMek>mH^gzy&e!T#?I&8095DZ>Bq->&hLG>yI9Sm+fj5`;p_6r`^l`+ zF~)=pG^N!>;9|T8v9B!HK$-5L5TPWkHGq7)=Ql+kg(YtP*scrKP@xB{|9I16@)Q3@ zzu%Wq5<=oIc&$FaK06p(oE{Gk1{Y0!dOYNu*VB&~yHVAQB+p*n$o=%4b5WiTibAy8 zEq`Y>!iO&kQI=&QrSt+20Me_oMdJ#aNQ784by=345EAanIahlLA^!lh>g7Q|rA)K{ O0000%+2GQnSXC)kLI$zJ!zkIPlXUC z?GEQ04MkB1A!wigKxWEKxhd&zL9ga>Ue*IpD5Zw3B^ZHd0E(Ir4Aa4IBsil0M?a6~ zyzkBD=bNo=lKz)u&Zlb!hbnSVRSo@J@lCmIL@BOxh$t~*QZ;lFG>C`cs2(j2@<4?( zVF6CW8eP{++kaH98Os+8hXb-Ym!0ri-ps*_HDysnlElUOy*{o4NFDuQYskytPHWIk z2}sGBzz8aFC8n{Uh?cEoL9(O>!w7KxC6g}btP`=xKecWsTE`Z}yRk?h^ynipueQRB5FD&sTzDEYXM*6JL zowcft`%(VM)=d&zWxq0I+6eY3GKC@{W=zrM$gfL_!o<1nPc>E4SFP{`q zKY#Qd^=`xaGV-QaNB#QQHX^s@oyc2#!T@Y~&v%9bG z?cwhF+O*@)!rHC>{PXab`}<{@_5D%5XFF~bMVcm`{ERe$z)7daHjlzTK4&LbHiId* P00000NkvXXu0mjf0D2)e diff --git a/src/main/resources/assets/galacticraft/textures/block/circuit_fabricator_off.png b/src/main/resources/assets/galacticraft/textures/block/circuit_fabricator_off.png index bb3a31483cc7c67f4a69c7229ae2bc0a0d93abee..b17fd1b5de0e77a8aad8a513caaad4c9e02fddfa 100644 GIT binary patch delta 453 zcmV;$0XqJI1?vNlFnTcK{*Tio_lrQHz~^l#yHI> z007Q90LJJ*8RHFAN=doM7~`|qZ?s^o3qqb#rBp)$vhekK8-JbdIsm1#v#!YipePE) zxG`D?>AjB*o$mUVk6+ieNTB9h#XdX(u)Oqcs%f9^eSQ@)G{M}3!UgDd0U#auW#8|9 z+5&KLICj&AglQ;RDNVPFbn>@tJ2@PmX6Nb1rz8LJ_&Cq$Ll4e6H`OUX``k@+@@v(2 z*1H6=)$RK|)PG9=YlFc6NEl;R^Pd3fEBo&34WIKD-=8m5^WECO(r*Z9K+#I zDMbiLdzUHS`-|mp(Eghtshl+RVtPhHioeaS+Z=qr0;z5MeD?fD^Gs*EQ2N>8i1Q)yQ(d ztuB=oio?Rv(SMS)Xb~!x#KZilk0$}Hj(#u&D%f#DXANww49S zks=Hu!1*^#Qqx&CLN>5Pd@W|zV@)LnO9_w+08*JcnxTbCsF;dOBAWy#0Glx9EG`8y zhUl}w5byvTr>gYUIV&`o`^vgAs;%)gzNgH7%=KksvVUwHX5~If9|6e+S%~=)Q=E~NQ4pBwx4gTpY{hhDh;JM*$h`=3=QN5v-!*J+xmN1 zu<`WCZzxJ)|NWay(?I|An@xn_R$`}pu-)9j(3kxK)LWlEqfR5Ouip}T7m+vzG8sFJ znC}MN1^xq&FnPr07=1Gx%Y!{a(1f6{=_ZRtELs+&LI|ly zpv(n&n%*Mf0&oG2fJDoW8nUQVC|%JY)QDsp&B8XeOeQSsPG?cx#_xTf{QXCHK46T~ zlmY-?jRl~!@{%!LODUxgi-a*goBc)u##m3%lu9XU>5=%S(|@_&YOe#3Qdwi`3;?n$ zV~lI9ib6Q&!iQFS{mqNFYn#MN{jOxs?*LeScXq01m+!uM7&6qs?1{t)=vD?G9=T=L z?F=^o9PN+o^g3beiu1LF+jWAPF3`4 zRsXDZ2xhCxXMek>mH^gzy&e!T#?I&8095DZ>Bq->&hLG>yI9Sm+fj5`;p_6r`^l`+ zF~)=pG^N!>;9|T8v9B!HK$-5L5TPWkHGq7)=Ql+kg(YtP*scrKP@xB{|9I16@)Q3@ zzu%Wq5<=oIc&$FaK06p(oE{Gk1{Y0!dOYNu*VB&~yHVAQB+p*n$o=%4b5WiTibAy8 zEq`Y>!iO&kQI=&QrSt+20Me_oMdJ#aNQ784by=345EAanIahlLA^!lh>g7Q|rA)K{ O0000%+2GQnSXC)kLI$zJ!zkIPlXUC z?GEQ04MkB1A!wigKxWEKxhd&zL9ga>Ue*IpD5Zw3B^ZHd0E(Ir4Aa4IBsil0M?a6~ zyzkBD=bNo=lKz)u&Zlb!hbnSVRSo@J@lCmIL@BOxh$t~*QZ;lFG>C`cs2(j2@<4?( zVF6CW8eP{++kaH98Os+8hXb-Ym!0ri-ps*_HDysnlElUOy*{o4NFDuQYskytPHWIk z2}sGBzz8aFC8n{Uh?cEoL9(O>!w7KxC6g}btP`=xKecWsTE`Z}yRk?h^ynipueQRB5FD&sTzDEYXM*6JL zowcft`%(VM)=d&zWxq0I+6eY3GKC@{W=zrM$gfL_!o<1nPc>E4SFP{`q zKY#Qd^=`xaGV-QaNB#QQHX^s@oyc2#!T@Y~&v%9bG z?cwhF+O*@)!rHC>{PXab`}<{@_5D%5XFF~bMVcm`{ERe$z)7daHjlzTK4&LbHiId* P00000NkvXXu0mjf0D2)e diff --git a/src/main/resources/assets/galacticraft/textures/block/coal_generator.png b/src/main/resources/assets/galacticraft/textures/block/coal_generator.png index 82cfa7cbccc9066e9198aa97ef4c10102513ce09..9bcf68be95f4ca11a8cd1ca078e17025101781ce 100644 GIT binary patch delta 435 zcmV;k0Zjga2H69UFncgR63*)Xf2W)ffexShA^P(Wci+=JJ>B=D zrNLlJYg4P&003~M17K~zRBI!Yh_Y-NX>BHxF#?pOJWOw~gQ&Ry@fNk#%hp-|OM}5ynr3V3Yn+c9VjLR@!{*vN2bZe?^JG%hhNH;PF)egFUhb4f%&R5(vnQA=nOQ52o` z=9|f+jlon%f^AKj&`6geidqy@?55B{6+{s?y72>QMHB=#rGE%rxDXdE+_({}pbK#q znrKSuMzL*d4Q)a{rcImX-^_GoJktTu19Q3We$GAj4haSPic6_hs-|gfl*)!-z+qXI zVHh|7rPRB}-QsSs9)?MJ!XaP4M=47P5d|I%Kj$-l+qxqmLTF>VX&O4Abai=^tJmtt z6*h{X1j^;o_j4qP$8kK~-CYMNm2x`uDLFO$a_srx z(?jv(w>P81pooTpD4@i2$PNxl&?5-ErO+^D5))T%UymF*^ZwamL{J9{uq=f_$l&iLBH={Pk(f+uo($4 z9DH5Z=NGd3yq+K5XDCi-cTc6h-Z_63qj{bizS!rKWrrjQf^cKtR3eeIrVz4T+_IKN z5pZpw@6!EImgN$ONycPivG}_WA0hI}gQqty^n(UkgID9$U;7u^O^b+h1bmTjm$suV;1 zG*m0R;@YWIp$!oX1j4~~oH?DICjq~|S+6OrZd=JN*MBJF^Q|6_?Hii<2mBK~RXNtn QG5`Po07*qoM6N<$g4!@mO#lD@ diff --git a/src/main/resources/assets/galacticraft/textures/block/cobbled_lunaslate.png b/src/main/resources/assets/galacticraft/textures/block/cobbled_lunaslate.png index b4c155f58605036dac44a62a65b2bc6c786658cd..5fed08c54d73cad0c9a203881f3f2621c684a5e0 100644 GIT binary patch delta 469 zcmV;`0V@8!1>^&e8Gi-<001BJ|6u?C00DDSM?wIu&K&6g00Ev!L_t(Ijct=bYui8& zg}=he0&RkX!FEsrrlnx&TTA~z5BdL>6hmnd*uu5JtcXV-?V&v=GnPvCBzE^{-hA`+ z-ShLeKLF*bq`5YnPZu(u(n`n25AP|80)Us@3*LJ~#O?w(fPYpx+fZ?gJw;IvLZJR# z(@KZl)g>ahCcFYrAC4r+41gGWfQdN9o>qo4bqe5;WJcywwwo;>1al%H_8ntSlFaPK z=hMaZ+}AIkty*(!5D@^H@H(-p;_~r<_0t-FYG2`0nBV0lZlxnH?(yE+WfhFY=hJ0? z2uwi5*i){C34c`kY64BU=yGF7fPvI1D*Sg^TF7lTTVwF!=Pxp!;{ANWqm_=#r^MJB zeRELlD?|kE{lu#G-dfUZ{12uZi*(kRPc4z^V6mJ}04fhRwy71G(7)~7tgfHdCWK+k zU#iat_^M+(*dC8e7e{O^G>_mTGZItqI;3S!`SkB*Eq`1X$PJK8U9BtwIZbx3+(@JMKDIXt00000 LNkvXXu0mjfrU&RS delta 689 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/copper_decoration.png b/src/main/resources/assets/galacticraft/textures/block/copper_decoration.png index c4b26f4eec5399d65531b6663fa8a367fa68482b..044ed9ba819f544a2021661780ee3cd777b6f54c 100644 GIT binary patch delta 306 zcmV-20nPs00?h)DB!2;OQb$4nuFf3k00038NklHN}I&+J`e*NSpo;1H~{GHJ^+MK)TNyxQBG2)@|2Sb%djOf z>i8%(H>qKaBnP6LmhC|5pkuScT6=-GrNOh~)51Z^^);hI@0?OkwlsfQn^J8d)33+F zHEp-wZ5P%>W-C=#9!=W;FmCj2^gqY5up`f*Ezz2}0WX7#Vb?^1ivR!s07*qoM6N<$ Ef~;GSa{vGU delta 321 zcmV-H0lxmt0^906Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0002KNklCC2W|H?qTDx(*61$;aEFcNz)8YMkn#X-^(0n^?FgqR^oc|p66J`-^*NYY?8ayll zl`@RvIHaylppRjq8CF6Jc4{0#7I;fOA>xUPBIpkAGuSP;MQFl|CNi_YgAh|ye}j;| zG(xEX>4Tx04R~OVgz*oe_o&=oB#j;ut`Kg zR5*=glRIzQFcgJ986xhxX{C{M2g^`4mKG%;l#^( z&V3$c$K!EYuh#&a-rgxnMYQ9w)?$oF_YeXAT|1I{=eclsAX#hEJ%Uef?`V}FwFJOB zk9C&C>S>ioyZx4~e;vP&0g6)L#wlf%T4J;z4d`9W@A)4^sqoGNuzFh2 zUwf?ks4V*Os%qGjOQer0dJasz&q%~DlL){K( z@^ejCXA`+@PY3cj$c+<4sgeqB*(_Qu(?I7~qYb%M8AbV=aB^>EX>4U6ba`-PAZ2)IW&i+q+O1aGk?bf8 z{U?eI0Z9l!IG9J(&0xb{VH>)Q+tYKa)=V1;^g`!I9#jAQ)675mKm=j#~EYYs!b%_30*RqeOBiLj!I9qJCn~tnW zMj+e3K{1e^L4~4ohO99B+p+HC(D-k(EIAej`Z`}Q5 z28Rn(5~sddg8@s!EL3yOURYzc#MaE-aOGWWv@+68)q<^GfImgN$aX~qhnAkD1XW_t+ zlkw!8XYalEUUNxEoUnKi2@)j*3NCQ)K|%;Iq==EUBsuyhF~k^CQlH70#7VW2N~E;m zMw{Ds^P6m8i(AS{pX@ScpCyMJb1GP7-f&{SG*`+!>MoiOi+ z9aY$KYN_>xUPHp5=ca6Zf!YJlnL-+?jh8bF41Z4lw7iA^9EPe-=dwn>9Hw2172|R@RCO)G`-BgXHfR4W>jd4r$f;+A1l8t;!{mVxYb{RGP{?0yZYV5)X5NC+lA$Wo<=uihyhdjBET?<86R7g-QpcUl=hR&@N9W4L1;v?4 z2!Cc<&cu}!Yx^)?@HW@H;4=Zz>XOqtsm#}mOm@mJz^ic2i`li<->`P8p}WC6WU1aF zvNtkJJ+J-i2=+yuw^}q;eHxfWeC80YxOypI4kx&>0LrrQO~Tx(2_MSrX$I|WBiS>v zTN`wOkqAG5hsBQ-PpLMnFGSO1 z=lD$Px15z*p|JF`mMK0Nc_$(Dg96I118^kz(2Yoz;Fc3vgf+``fDiv}UND3E$6#j$!y^HitZ566y z7*rX&#jb?nz)myxO7qan@#*<|?tR|_FijKVI0CS)D_z$C@P5C!UawUL5D`KMs3M98 z0L!va5*FP#$LsaNIY%*L3;^dM^nH)DmJkB#f4UN5L`29r18})qh%o|G51@=O%=3)3 z7OgeTIp%rBdyg>&V+YI<8sAXCB&yK+@VC%YaZr?eMBQZv_)>TU>k#nwZ zMHMl|_(9*%ADJlrGz`Oj-1Cuva=vZb7Z)c#wpky&6M@g400000NkvXXu0mjfABW+5 diff --git a/src/main/resources/assets/galacticraft/textures/block/crude_oil_still.png.mcmeta b/src/main/resources/assets/galacticraft/textures/block/crude_oil_still.png.mcmeta index f6730e30a..4fadce8af 100644 --- a/src/main/resources/assets/galacticraft/textures/block/crude_oil_still.png.mcmeta +++ b/src/main/resources/assets/galacticraft/textures/block/crude_oil_still.png.mcmeta @@ -1,5 +1,45 @@ { "animation": { - "frametime": 4 + "frametime": 4, + "frames": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 18, + 17, + 16, + 15, + 14, + 13, + 12, + 11, + 10, + 9, + 8, + 7, + 6, + 5, + 4, + 3, + 2, + 1 + ] } } \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/textures/block/dark_decoration.png b/src/main/resources/assets/galacticraft/textures/block/dark_decoration.png index ea1edbf2ee144bcd37a9c49822c8045c70df3cd1..4b21e3dd282bee9a892bc1ed34c52ac2cace56a0 100644 GIT binary patch delta 2923 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 RAQ%7u002ovPDHLkV1l(Sye|L% diff --git a/src/main/resources/assets/galacticraft/textures/block/deepslate_aluminum_ore.png b/src/main/resources/assets/galacticraft/textures/block/deepslate_aluminum_ore.png index 8a3ca9bfbb7c461e6c3bb8bea2df47e183771ccb..10f092b58eefff562dd51a621e56a69c73321cfd 100644 GIT binary patch delta 640 zcmV-`0)PF@1f>O#Fn$LSn{PNYgaicBYJcDsds`ldk)V(x~sZ6(w?O?w*;;4h_fr z_JL)64T2Lwx?#rH{A|I@WnH&cuV&WQ7j!+XX&UFeTz^?gq*%QwIOmi`r;Pljvl>b! zlV84n!s%B(yxQOAgmi7&5#s35`P>h?_V(k;R;%Uv?P}dtln9xeyaE7HHUXeFx~kIo z*#ZDqTPui%1(Zg^x}Fw7VC>mBKU+wo*z3}J+p*Cc0H|0c(=@`!E`&gvRF#^hVQsD0 z%eLpqDS0EGy_hj`*|m2YfBWm4^Du6UXEjPjbM_4T$|2*DUrRf^mgd!_h| abN&w}(ocKs>W)_c0000pG z;z>k7R5(vnl07U#VHAd2m5^H+O>YgFv>`zghNcPAHDD8)MS=(^1_lu#MOa8km`r{a zgVAOY1Bn=H41$C%m8xD%<>DgZ=ea%AaE5cw&-h@@^D?ryT56wY`IjKl3NX9fhw z1&y7b9;a?E34ct}bUK}QV$c8z+S*z)t&yB1tXf{(V7zrGYXc)wt?fNPF;bK$l!(e2TAB}FUVksx;mOkNkp&?99E;u5T_Oy{}bt-qDeUl9pF(B?s@Q=}qO qkh_477$FULY`LO%EWZ%1>-rBVmMfsj%@=zB00006MZu^(fHt>FfslZ6MP}W2qA7UY-y@Xai$@eE*rP7yFT1ny$_R_J7?~_ z=bRzcYE=l)ZnxoYNT~pzRGP*kUP-A8g8@LwG|gu7ywz%7Tz_<;C<%fPafHOWuJ_RZ zpzDKDDvfh4rDBXK<$K;arD*_QjJmFeI1HtH+@#X!jA5`=tG)Ah=h=(r6S;9ZJk~mE z98KFjdytBa}W`M2+0+g3rf z)#A#7)>(s)Sbs`Is?{n0IF3^;m$9kiI5Lxw_WflVh^JzR|C}we|4m>&bw20^{{aVKl9d!*?T{Bl49U1&*90264#na;>0LV_TTCKjec2@}T%ToYg-<}WrrfHfQ vwniF(-<)5VMJrKtd~BK~!0+@;QwZ?~iw!fM;)kYI00000NkvXXu0mjfY0@p9 delta 632 zcmV-;0*C#E1)T+uFn<69XF*Lt006O%3;baP00009a7bBm000id000id0mpBsWB>pH zGD$>1R5(vfQbB7PQ4n@rs$o}c7FQ)MYPFQqri9dxK+4)2EYd>@rSz(Y;H~FCCD23u zP0po<<{&K;LJLicml$Z#8uwv$eJZY9+$3iEtuK`hGR~X%-haGrzFDqXtr~_wDfRrb zUT*}yyqso7RzgyiLkRdtByx84dvEV`yFYE7HZ04Y!8{yyB?!VC4KE0O1iY%MvMdoo zj@}=2JA?F{C~;y>C{<$SkO+|lgkON@uDc9nd3OT|1zfBL=QZ&yZg#? zgqY-8Tf3i3Dt|qVE+s_t1(KJfD0<|#AAk8+XFXu``Zu4)1}c?GjgF~ze&Co$#IIGtA-l4^vA%Nf?$hz%2VHk( zUENG}TYnI+V?476p}0z=!rnrP83cuNtP3lpZ)KaU6MrVF7b*2o5vdv2wQ{*EN0SIp z3WvkM0gWST%H{I~{EbFq_)I2#VJ*-Z0nh*?fN%kx0YaewUn~|d>;C>5q7AnnJZ;D>D@ zkHNfn2ytA40fhzd$imLAZeXzg#Xu6?-832uhrQ=7UJmGlkR~3)+;0yK`#QzP0&W-p z-^h4uQ95+@Fu%=2L;wWlQ`JqaW13?P8OQ|>xm`-k<{~n^nfLi840_GhF#ZB|qDSn0 Sq(rp<0000n8#uU^bS@gN27#Y?XuRV*l;S_r5VELGd2q%ccyQ&|%>of#5mMp-o%w*C+_^N513d2ZIdH{g2 zBl*OFza*yhn}6og!rMe5QC<5kgm7J#Qm#!+jROG27$GD%0Km%18X=^#uUIOPPG|r? z2tf!veEOu29>8_CTyt<`W3%*GilLNq-gz|lTwbb$Lcz9cjI}>3zCU^<+i#l7uNFf8 zPZUMEt}9AUh#&~Mn=7k+(*poCo6TOGzA<>=tl#v))_?EH*KZi(D2gPCG}JKq06>U9 z*JH}q*aQG@-pS=s2iYBF_-=kdTC7e^PAE!mXy~--HiZa;2t1E98oNKY@w)5m#o_=^ zSt`Zj+Q`V|OeU>Ky!55>heccU-Oc(E0N8d-_JRpH zB}qgL{qw&G~oP@43xVsI29C=5nLnH22~)`J(X9tB$v1wjT~g|QtR zv;`5Sh$6y7|A8I6co4j(OhhK42hl^ShgFuO&ZcB@Z1I!4(tqdheV-rS_xbg{qSG%5}PQ%cMCcZ_|we1bt?&0-3ANGhRvE6Qi2+?G@T-NpM z~C%Py`BT^?S&W4SI(X}zWV$Xcf`!hIcn*;F1w-#`1nER zx4ZG^>8fEEv47JA5eg;^W1Jj9?8kwKjl5lZ_vNdN5(I&&svtUS2#IR-^z?KIJD1B* z>e-X~q>nDevN%6izjP5Qg2^Tha8MC8v7Ny8e*M66^Ty@Q@(K#(?(R;v+e6P}(x9l- zYO)rF6w=VT?3va~&3{+oeTwS{T5R&XrW*IeO zSr(Wql}ap5j`7|8X__Yem}X&ndq^jRf^qN8trJs6Uazgo!J?t5z?*ZMOr(+HHfOJm zr84Yo_+%$~PB> zd^{-CxQT}$!F)cSkbe^)K=<*#B2x&;5LA9Ona~}_`3HGQI>MMpY5V{H002ovPDHLk FV1n0qFVO%1 diff --git a/src/main/resources/assets/galacticraft/textures/block/desh_block.png b/src/main/resources/assets/galacticraft/textures/block/desh_block.png index ea1edbf2ee144bcd37a9c49822c8045c70df3cd1..905b2214f655fbc3e81eb558ee302e7dd1753eeb 100644 GIT binary patch delta 3007 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 RAQ%7u002ovPDHLkV1k-syn+A# diff --git a/src/main/resources/assets/galacticraft/textures/block/desh_ore.png b/src/main/resources/assets/galacticraft/textures/block/desh_ore.png index c927ced2b0f6048cb7126042984b4d87ede683fa..6a4df85326fa6ef8bacbe5bf44bec010cf10ccc8 100644 GIT binary patch delta 3193 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 delta 3274 zcmV;*3^ntV8O<4xBYyx1a7bBm000XU000XU0RWnu7ytkYPiaF#P*7-ZbZ>KLZ*U+< zLqi~Na&Km7Y-Iodc-oy)XH-+^7Crag^g>IBfRsybQWXdwQbLP>6pAqfylh#{fb z6;Z(vMMVS~$e@S=j*ftg6;Uh>2n?1;Gf_2w45>mM5#WQz#Kz&|EGkvK~TfD`~gdX7S-06<0ofSs5oQvjd@0AR~w zV&ec%EdXFAe}CrF0DztNnR@{MTa+Oc0iclpAQNSXL;z?z0IbheibVieFaQ*0OT;+< z*ew7sNmph_0I;_Jz|Ig0vH%DS05DOAg((08djMd_BO`bKgqZ*oM)FrY@hh$n=PCdI zc$u<1xgb(Nf#>=Hemu`nm{hXd4HK1GJ!M?;PcD?0HBc-5#WRK z{dmp}uFlRjj{U%*%WZ25jX{P*?X zzTzZ-GJjoxM+Erb!p!tcr5w+a34~(Y=8s4Gw+sLL9n&JjNn*KJDiq^U5^;`1nvC-@ zr6P$!k}1U{(*I=Q-z@tBKHoI}uxdU5dyy@uU1J0GOD7Ombim^G008p4Z^6_k2m^p< zgW=D2|L;HjN1!DDfM!XOaR2~bL?kX$%CkSm2!8+oM4*8xut6L2!5A#S1{}c!+`$X{ zU^aw8B*el(5JC!MfE;pQDXfA*D2C0j9V%ci)Ic3Hz)@(1lW-0$!d18qJ#Y{DVF;eV zD7=9Q1VP9M6Ja6Rhyh}XSR;-I7nz0lA;Cxl5{o1t$%qtDB1@4qNHJ21R3KGI9r8VL z0)IJ&Tt>Q)JIDYsg8YWOM=_LvvQa(M47EeKs5csfMxqPQWOOl_j~1Yt&~mgIJ&ZP? z=g_NY5897DL&q?{=okkx#B4Aw#=}CfI4lX1W6QB3tPHEh8n9NZ1G|a!W6!a71QLNo zzzH@4cS0ax9zjT0Oju6XNT?tjBs3A)34b>U1B6k+CnA%mOSC4s5&6UzVlpv@SV$}* z))J2sFA#f(L&P^E5{W}HC%KRUNwK6<(h|}}(r!{C=`5+6G)NjFlgZj-YqAG9lq?`C z$c5yc>d>VnA`E_*3F2Qp##d8RZb=H01_mm@+|Cqnc9PsG(F5HGhv< zLam{;Qm;{ms1r1GnmNsb7D-E`t)i9F8fX`2_i3-_bh;7Ul^#x)&{xvS=|||7=mYe3 z3=M`AgU5(xC>fg=2N-7=cNnjjOr{yriy6mMFgG#lnCF=fnQv8CDz++o6_Lscl}eQ+ zl^ZHARH>?_s@|##Rr6KLRFA1%Q-6J~MpZLYTc&xiMv2Yk#VimzG$o zNUKq+N9(;duI;CtroBbGS^I$wLB~obTqj3okIn_1=Tq5J-KPqt7EL`m^{y_eYo!~Z zyF_=tZl~^;p1xjyo=k72-g&*}`W$^P{Z##J`lt0r3|I!U3?v5I49*xl#WitnJRL8` z+woCDUBf^_rD2s}m*Iqwxqs0-qt!-@Mh}c>#$4kh<88)m#-k<%CLtzEP3leVno>=< zrYWX7Ogl`+&CJcB&DNPUn>{htGUuD;o7bD)w_sX$S}eAxwzy?UvgBH(S?;#HZiQMo zS*2K2T3xe7t(~nU*1N5{rxB;QPLocnp4Ml>u<^FZwyC!nu;thW+kdXMZMJ=3XJQv; zx5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C^>JO{deZfso3oq3?Wo(Y z?l$ge?uXo;%ru`Vo_|?0bI`-cL*P;6(LW2Hl`w1HtbR{JPl0E(=OZs;FOgTR*RZ#x zcdGYc?-xGyK60PqKI1$$-ZI`u$xr8UFki1L{Ox>G0o)(&RAZ;=|I=wN2l97;cLaHH6leTB-XXa*h z%dBOEvi`+xi?=Txl?TadvyiL>SuF~-LZ;|cS}4~l2Y<3>Wmjgu&56o6maCpC&F##y z%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47EtUS1iwkmDaPpj=$ zm#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kwJ{5_It`yrBmlc25 zDBO7E8-Isy%D(e4|2y!JHg)!SRV_x(P} zzS~s+RZZ1q)n)rh`?L2yu8FGY_?G)^U9C=SaewW{1JVQi2O|!)*SXZy9nw8iQjgXv z>qid9AHM#b?{_T?HVsvcoW|lKa720J>GuiW_Z|&8+IEb4tl4MXfXY$XCot2$^elGdkVB4a$ zdw=I+&fjVeZ|}Mgbm7uP|BL54ygSZZ^0;*JvfJeoSGZT2uR33C>U8Qn{*%*B$Ge=n zny$HAYq{=vy|sI0_vss+H_qMky?OB#|JK!>IX&II^LlUh#rO5!7TtbwC;iULyV-Xq z?ybB}ykGP{?LpZ?-G|jbTmIbG@7#ZCz<+n3^U>T#_XdT7&;F71j}JoykC~6lh7E@6 zo;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|zrTyx_>lv@x z#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ-_(?=T zRCwBSlh0}tK@f+(>e-o1Xf`+mmYih8WyJ?r15U_Q0=fCBK0@Ll^8jK{vv^xHj5-YL z^k%v|bfJ* z%$~oeT~xa=B@=QHe!YAPK)I^v`=0fBO}VOr5V)T$vDVV}J=R*fc?H1eP=A!4i!(-_ zu5cn0BY3Dka2zvl{0^e)x@4VmY&@8L5bW(W53kQSFffYPTU9nd0UQ8FcQ-ia=(>)w zEJN9%m<=$f^6cwJ0DjLa?q|y&P(@Yg76JEoRpXpvyY}9%z~-S?3((_c|ea52Mq|Fn1rQ(pDP3YtDY{!=Ol9uKU@N z@pzn?Ya){OAn&H4gKEIpTh(?^VZU5sfbF3CdGUs$yBl(m5FAH7GDCog&g~G8H?Ph@ zCQmA(T-BIN@X?q1KqnVdQU3F7AA|Gw#fL%3Bk6WfM1;Qs0LR|)a5KVTDF6Tf07*qo IM6N<$fEX>4Tx04R~Oqy=^Xe>OEtTmS$8&q+i< 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_bronze_decoration_side.png b/src/main/resources/assets/galacticraft/textures/block/detailed_bronze_decoration_side.png index 50b2050f91249c96fbdd3129b268e51cc912a0f1..21662b0f4ecc1e33bae89cd818c41d8e06587cf0 100644 GIT binary patch delta 494 zcmVK~yM_Wl>FU(?Ae?w%6;g z+Nq4)O3)}Y5(iWcMM%H}ae<$}-{61n(>PS^rK%7D8Y<;Oc8wD|8}EAEaM*N7$!MjS zc{}@N=Z*2@(;GarITHYSKHW~W5df!y^kS5q4pIeu{V@Z;`{z#pELQydI)CrS z!A-Fw`svSExy{rFxeM03B>*l)+3+9&z?ui$0VI*9@Rv`M^XnXd_3`8=a_ypS7Avua zF`hR7(mki=(Z#BrmdrMdwp%kUdmjB=)C9oraDV!z+9kdzmH>Qe0brt2AWu1)UC$R=W<`!>x1^y5I$ z187>AhEC1ft4XPw5VatmS~YL=k9AunIsi;a-DKm=Mz>5zpAuEkwDLcFuO{WY$YVlU zua6HH7vquvcsopO%d{=iqePuGj5Ks7bJliuE-|yJApkDNn{^gT4j`+zCRSWr=io2gMJ*Op`*A?9`E04BME?KhdpW;YA=|SdOl@ZZqcp3&*sMG k4==W_nfN!ZPsuLw7h0ps_`AmorvLx|07*qoM6N<$f=^TMR{#J2 delta 2012 zcmV<22P61~2kR1$BYy?7dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1btlH@29 z{O1&V1fIbi2Vo-i27CNXj7*uHnT=Sft3)BpBQsw@oA%G&-TZ}%ZHh)+h(395acR=T z8HH%?tL^8iBdhcKyl8)u`TBzK6g*{B2HkIE*PreE^~6A5UVo5#>mb)O{G2%CUC)+Z zB09(h`@G`)>Al9@+ge>#4;cJf)SAMa!=T{-lw@}ExC1^8l7MSg^hBzGE+L9>%K|6=%(iep~SmUV@#oP|TkbnZ~NgR2IfjJPVa0Edak+Uct zV1S(CiXd4@{vdie5(IV%A z4>|O3hd;s*k96b$`4la#_!3GispQI4s#aHh4K>zObE5_+nWoJ(-$IKmwcMe#E?v9p zzK0%r>VNrSZL|7u{|DA+v&NID(Jox9p*Dmu&>Vt>&$z)E7-JfBvl^F z4bE(0WQAh{=>|8IY&PUUp*CXI>EiBY?vHsh!1{N*@t-hf26g`fb8MQt@%DwaI-Iaf z##R;%OsydMy41`u^ASz#!>QIU*vcwJ5HJflDu1cNAK2MX?X#e<%$ArVj)I9fk1QK6 zElC{($8wJM{=CP($18I@!-s?M<+fr<+Nz|ueq?PbN8hodr=BsK&$deq$}Vlsk`lkK zA_O-}&{J(^r7J5at^WeyW_7n!f$$m}c^@`e z5Wka+IWqp8UF?#pp;9qL@5LQ^aSqvbO@FL=;w(tmwPJLrw1I2zg3;d$Ywz@1WDfUP6BOLu)3VGlSbDXqRxXqYY~+@g3IhsNyuT!*uq;1L9t` zj-9e@(OwQT3vDT1~1u7a-_t z-_7=83t6kjcJv;u`DMI+7_P*EU1XAH8{d|?cN*rgW8UbVW~c9lYR~My(RG)oi2Py* zTs#E*%%VU$wLQ+^&iI|%@pT95lD5)Hmpfs;+VONxGwt)W?!{3*lJDuTXMZL3EA!m2 zc(*CT)~`%^XU=b*83&<2rzx9z3w^P(w<809ze3vKw}1oDrDif^8$yl2eg)Y3T~{8t z^|9b&{55<`{><7pyVK|1Y@R2N$0^`$v4xl6aUX}ArQ$^DyIH_R!fv4pBb<*f z&5^DpW}ITb6k7l z&UF(Kk>JJwjVes#u#uH&9a%CvcFN)FqOvC|vGe6UKY!1qgPrbb*#VG91pt6+vtmhe zLL!xGGnPu#sVxOz^zOw&Dhz^QdVfQH^Yj4#-{pf~*lSislb8Wmua|=`3ePXGfN3h1 z9eZ*m0MN5l^~UkF;n?i`(f8er2K~pGnMyTHv_$TAPzc16(vLkgq1Gd|>aeU3l;^azr+!9KYJZC1k0)Jqc1}zB& zy)vE0A`8L@z+S%EMiU|`FqQ*P&(83tw87`>-BOXmEqXT zcR58%X?WbSOvB?AjknLc0Dp??8QlfPW@poc41E0d3xH!Y0Nd@FWg3+FAQ&#)u}b?} zZK6Kw)VXDT`f>Jhvsw5F!l>7*0QhopKHtHyS+7~?uT=qDB*L-T%3V%1-{nCVQK?n+ uMt|bbBrYB7bQh0Ucr9Gf7w6`l{{tAk_^(dWQOp1U002ovPDHLkU;%=-j_bhy diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_bronze_decoration_top.png b/src/main/resources/assets/galacticraft/textures/block/detailed_bronze_decoration_top.png index e08062162fa5da1d2a8a34e294d5a735b3819a76..97a9c8e677f087a2676886620a6de274b3d352f0 100644 GIT binary patch delta 362 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 i`N`}x7vsAAANd906Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0003uNklU~>S9M#Es>SNiDO zq^3zMP77?-hJQrhKOgr|H;0rXo~Drnc%@zWK{QJzl+iw{h%IhX#BL;jB3lsg8ca_g zv2wzSo5PnukL`Y2{sXL(;g&jyh?vVz3xfmr*mS%WW%NzFRud^h3IjIeE=_B7%iMAw zWjMj+fWxjles8Y9+;X3%#|LGKY)N1Notrc!{cDKr{WRUJG8UkVL~kZH`Es+)RNr3* l^ts=X62<`{Hs^yz{STB6aq#^(EBF8a002ovPDHLkV1k?6xJ&>5 diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_copper_decoration_top.png b/src/main/resources/assets/galacticraft/textures/block/detailed_copper_decoration_top.png index 96ebb4d7902bfdaf105f59bc607ce05969d0348a..e77b676e788587fff34ebb344f9b0a01cf9c0b2c 100644 GIT binary patch delta 382 zcmV-^0fGMJ5r_tmBNYLKX+uL$Nkc;*aB^>EX>4Tx04R~Ot_5}he>OEtTmS$8K1oDD zR49>sQB6z3KoEV>O*bC|(o%#VV!_ah$6merKm3XQ2LFN=iHD++5<-%?X1kM8@Gv3S zwA4AheapOg^XBU1`3d7{3;_sSX+QfC0FrnS${8+~q6$Eo6^$VQAe6KGx1e@V+T<00 zyX%ok5-(ogJ_J8Je`n%3{{C=eT)4V1bUVLc?fv2CIg`N>fUK+mcybDW+D`Jb{O;wc zMHKj&sB4JAupb4W_|ZxmIh9sJXIO9u)Y6_>05#yrDU-EQ_6||t50*B0)#sS+njSF8 z{qa2VrR*A%HcFe&cNw3MJp(|n#(K51r@wz~l{V|u($0F6T++!$;7X;<`3{;$G=>ya zb|3%%&Cy+)V2k~e(y%n23;>VfEt%xF8FzIdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y;lJuw! z{Ld-o2uNZ*4r|1_!5n`Q3scp#%-1hsOmvyXAVg+L!i>NFH_cyo*pf5O#}sl17LUs= zb3rHB$20a@$H= z?28E!T<{@;7*@=cDA7e9LyR%S97~eql20MUlu}M5a~6c8&mqU0a?Yh-&*Dt+1*;2Y zlv24$b=B8UV@);J(jcGans1@SmRfG5bC>SA@1e(@dhTV=fRxN|!;diHNF$Fjp|vT~ zO+UkoGk?uI%VBM^`qusr)@ZZF7gK9qJgi|f#%1U-K`YPr#Tgi5M_@cI1|Vo&oY_Rq z@nUXqW-}uyJi|%9xankzp#TcqAoi0EcMs-%&6@$%f8vdQ!<<>v{Rhmk8S=v02iE$^ zgzaKXqi|trWiBF|C#3xxOspsY>mP*4ygIUiWqXAis}2hv+SN@Xn)kK z+GAu%tDEDpz&aDRvoyV)urg{vOPUaRYIai)7BFTbbF*^3eM=h$wF9ayF>3DyIw)Vo zb~m;fk&A9&!VCB89v2N0Mv5>$@+D&WEv5b{lpTWhM+`5h=@sg(Hhrap)aUP19G->) z8%_7zMpJZ~>j$u`L-vt7R5VruDSu4Ewg_q_`sNA+xT9-EkZQl>f)gfE4so^ba$``P zcj=*kD~2io`iP<5s%Y=Hy+aBe`M$BFhT5$Jl8Z%A^9dNeC7L%Jo7r`&P|hgiSKs>d zF>$AU=fu2&%ATyS!G;j^*fzwhiO_dkX!D5;>b>8^=@BT$9>Ct~KV`)arGEuh6uGhF zlb?!~xu+Z*y(ipO%b~jEv6CLEcDb1@E3w@!z2SFE2R#8UYau#i29^J$QBC6JXBPij z;omL|4_T>{4DuDn?E0N&#*NUKN3S=WXNesk%(rXLM|{8D1D;~-=)adc=F$fCk(_qt zDSu5|472$M&bPQ$ff`X%0FfdT0(hLUICcSlKIVp-0004|Nkle5Jxjzu6ddo8 z{Rjz0&`xbc5Dsj#@T2h#v^o$$4#7gf!rEWpzwjRj5)dt{6hxatK@o&&tOP9-6;HCb z*$n}Ur%TjFScYLT^WNL-Io#d=;ByH8z}0Ohlnj8<7CDifS{M6C$DM~dqI_d#XnI#)4_4d4basgmr zxx)lR6f13Wqdn5)MiFzn2d2j3YwUtI{g5^e(bzO+~`oS z%ezOH&|GM2tt|rx;{GH_RAvE$f&myA);)*Y8}1dRj$>W QzyJUM07*qoM6N<$f~FOne*gdg diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_dark_decoration_side.png b/src/main/resources/assets/galacticraft/textures/block/detailed_dark_decoration_side.png index 3690b66ef24bcd81be1af9cea3632686a0e8ded3..406825cdff43d66d347243f0217220a5964d8996 100644 GIT binary patch literal 3087 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 delta 407 zcmV;I0cie@7^VY|8Gix*005AYXf^-<00DDSM?wIu&K&6g000DMK}|sb0I`n?{9y$E z000SaNLh0L01m?d01m?e$8V@)0003yNkl7wx z9LMpuuG_Xv)08BMG-7EX;-L;V)=Hgsc)zQvGRD9atj0pQwf4HMJkNh#FKO}C_q%IF zG?)iM8;g*t*Yoip`jO~S#TXL2&-2teoPDe#B7kXC{qUx%M2oW8+B8i`MZjqgU>OXurBg{V^nh@kI#qS`|+Q;g$CC2aCL3|=5t5XU&tW*vV`L4{OXX#9=w z@~4}o;hMACjRuj2lnLn);olCVrfpk3pCXF>0rcwG>kwc=QR@Hz002ovPDHLkV1li~ ByzKx0 diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_dark_decoration_top.png b/src/main/resources/assets/galacticraft/textures/block/detailed_dark_decoration_top.png index 10411fe1de23875db5d4319a0ec91b180392bece..4f79ca29dc7814243ebeca43bf4df570ccbc340b 100644 GIT binary patch literal 3007 zcmV;w3qbUVP)uJ@VVD_U zC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$OrQF$}6R&?d%y_c8YA7_1Q zpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X z6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv1)yUy0P^?0*fb9UASvow z`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q{wNRKos+;6rV8ldy0Owz z(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E` zvOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G41dM~{UdP z6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4Es0sQWIt5*Tu0n&*J!lk~ zf_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+AA{TB3-ERLHar49hi4Ih z5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=natP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+e zdD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVb znL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0WMyP6Wy582WNT#4$d1qu znl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8dZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iutvy=3T65Yu+7a4Yv^%sX zb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i^lS773}6Fm1Fpe-gF!>I zp{*g$u-szvGhed; zvo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*ZvFf(^Xl-N7w{EeXveC4O zv)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx)P8cQ&Qi|OhNWW;>JChY zI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_WICNY@+|jrX%s^&6b2i>5 zeqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!ql}XcFH*PieWwLj2ZSq`7 zV9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I-?$tAVKYn8-l({mqQ$Q8{ zO!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;cwT88(J6|n-WB%w`m$h~4 zpmp)YIh_3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dlbFb#!9eY1iCsp6Bajj|H zr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syTu9enWavU5N9)I?I-1m1* z_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$mU2Q)a|9JSc+Uc4zvS-T9 z63!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;;JuhGEb?H5K#o@~7t9DmU zU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX=)z6+o0o6-+`4{y+3mqQ z%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@>;2q1Vm)$Z)P1z?N$8UY zW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHsy69KwU-!MxeeuI@&cF4| zM9z%AIogsxfCXV;2$9EX57(3Xr8)Xz&bTEqy0!%Q6B83cRx-f*YvlO##hAlCk}W{U(f1-C5!*}}|3e?UM`bNVu~nqTuY zU&DBXMNvcyFR#yw%>EmI)#L6d`kki-wWMJB{sTDluHY73*PH+V002ovPDHLkV1hEe B(cl08 delta 412 zcmV;N0b~BZ7pnu18Gix*005AYXf^-<00DDSM?wIu&K&6g000DMK}|sb0I`n?{9y$E z000SaNLh0L01m?d01m?e$8V@)0003%Nkli9%(`2`~A*lv&CXDpU?R*KA+E*%SB7k{Cd46AX901P!!g-*y^Q1pY0LF5P#Tiw~xo8)uW3d#u0@_ErJJ&Y`@?8DT_lz*6^UX*=)odgHYe^_mX%> z&R8jJ1Y8B-1Z5v^faD*F1FJ653^4L1mR`K&fwYPXl8QKuh07mTWkX3Ex5|LjOl~U` zUu(Wl3ZU>sNg0W*%rKa=Qgb?;G95*J0PRGg@koNc?-hSCknpXgZ_j`L0000EX>4Tx04R~Oodk9Pe>OEtTmS$8R!Kxb zR49>UQoD}AFc2Kj%EBou+{8#!h#V9L|1W+b6<0U}rGO?BAfd<`As1IHXL2xAyqTRx zoKabp_zz|VptT+z69_<26m?w}MIocQt`l{;-2!+#9^QNBT-&ykRxg*!r_bB4>pBw2 z*=#0CZ}GA$llfw?e`uNpz^E)sV~kLhQuq5EfH4L@+qM9lb7}u)zb62Bo?oxmPvK`v zA^2wNUELmfWAp}`7#)J?;2-aEv-unaB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y=j`S!D z{Ld-&2-wCLjzf4zdxJgx8WKoP9`p4|8#E09V;8Q%jH&9w%%jDh zh|r4t{KEOyS_!Sy{dCEBO@rSLwTCd%jT&y6B^ukjHqk%Uv5XeA1)FRJXN%2t)0QCu z0@(%*ih%?TDirNAWX0&PqG*qpk;Ysg!HAhG0lD6wp-`kkfsis*B65asVSy1hj(8b@ zMlPVH2()>^ijBLF=;9Jx|lh&}Dl(@6bS&6E&m2X8zQJlp!r2eG6K z@sRnVd!(RBMfzYutR3 z7Fuj+v43{3dTalIH8@zq!Bn@C#hT8FbVtJl^g6?xGi3}NDC5!@P(fqo%m#1{J9C{g z8&Pisqk`nlO#zz>c%{%)KyI+OJDK~MH>0`!6L0tpbEZ@GKQM=;(uKDN)=IC0c`&x$ z!k$x0trv6+k3rXs79#9pYmXl7WnwMJZ@krk~K#^ahV_P%eEqx3m96c+!f5oi20e48z@(<=wKlUGioQx>=f3S<}^Jy zxqo_~wFD1w&5Sc6yEd(EVB7@Gb&4W}IWm-P8X}mwigPi{nY!%L;ydX(JrJE4t+ImV z>2;fT2>n&>c@dC1YrDwG@{e;l&=+aqLmB2Kno~S{OB?gW=**Uh3;9xQ4fB8=%NH_g zj)smtPkqY=z}rl3*`N(s&(*bK1;h?i#=TnZfjXr zWnJwId^iG`35XNY#@7eu_Mns{C!B~N$F&;D^S*}%sr-B&hNJCe`#Rdk>sa7=++E<~ zr9I#A`uH5byuGJn_IIr-W>pAW$`02$^>*CzXun%Lk@sL>UiLQq_bQry0UZQ-7Q=tw zd66L%0(hLUICcSlKIVp-0004?Nkl$DzpL^v6utVzTnIrZ4#h4~1$C^G6e*$XUGq3&dEvc>7{Avc^&`|5dZ)HBDPyzGl&Qg z1rd$MV`I#2x8p*VWi5HT-2#BtI?J*!42z-=01yO$G3I)Iy+Q|dU2CnYssaEWecvz3 zvX6-S{XU8!J}0FlqPniTWGQ77MTf(Ii2hBd(-A(Zx!rD$ z$HViy=kxjbd=`sES(bt=R#l~xa?Y{5l#*QmfDnSWj6P3I(^zYbF#r(9v9;D(8^nD8U4lVR@w#066EQlyzMr;;$RpC+2zHm1oXovmv59&z*BxYeW=(K8NL7 zu#+yn2`oPvjhu5$)BI@&za$6(BI+Ze)|y+(-B3yiA=D4jH0=gQa262pe!sJUTCG|?#+Wca3<2PBxqRP%h+!DcW;3>nh{NHK uYg%h#43~W0FN&fliXL0+X1HDdH|Jk=fcn{RWb60<0000EX>4Tx04R~Oc?5O=e>OEtTmS$84oO5o zR49>sQ8A9gFbv}z1mSFC$mDEU^ML&S3;jgUAs(6zLR1(YZcw1O4emHegei&i*X?%0 zJ5&`w2%&8q1YjITX2#zrr2xn|Z`(!ynECN|)LQ+;x~>3*VQ6J3rDa*j8fIo@o5ai^ z1Xb<(-k4H~pKu7Cf6u2q1>mcUG}Ky|`K9`8eT*^2NJLfu5D{u{nzj&Xt+svNcV;$n z-}h?(N$TUqBK$|al2(2K5 zAR<=}FI7_2Qc9bHBgXhK=-ki_`zNK-^!brQ?%PQJ{^KM7EIH?tQafp$=j(+zX8>f` gEz9Dz+5@i4FXET4IRcYx{r~^~07*qoM6N<$f@Q6iJpcdz delta 1500 zcmV<21ta>{1@8`!BYy-ndQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y?lJqDD z{_iRF2m&H{96zh}27CO)B-;I&PS0%B#+k+<2*~q5w`u?U-OXS6K(x*{mf)lJRv#B# z#H5>GUr)Q_sRQed&-uXh3FhMqR7oo7REoRa(xspFeo1xo;eQ42c7RqGd=D(?(xb&c zGHQLrcwOiE@4bfJ+j+a>yq3YAmpVh3=|&B+R*8;dUYF=U>t2o(bp@Mj0cWc%HtQ-7 z0fB4>2h~7=4h^cx0!4Fl*icj=7NkQLNHAg{OF(Wc=qMDaQXr&)jfk8fT)DszHy-f{ z1dUulO%c=?=zo!~%lu^Uo7H={dQ_U0*=ofB$6nL)nm^WZa z5#*!HK`)qWK3!yn7q{pj0I40TJoyDu2Woh*#A$5SWPlU`>wy?NSV0s3M;H{Kq?sc* z%!&XoW7QEi?7bI1dM*ix6BaKbL87EU!37RJNC+W@6fu&vBu5`5h8SZ?8Z$YQIO*x67Aa-S zlwIcRv*eItPDSZcT;bx2lu%+x6)RO&x%w(K)L2u4rc^S`HEzC13oW+Pm1~{4>)d^p z9(wF)p?`LvdRzYiHMmg21F2yr3pLe>3`d6x7;}aPW{Ma(P{d^*poGSOnGN6^4&(-A zHllU~qbA7%n+i4=@Cu=8fZSnW_d@R1xEZbWPq^W4kTV0i{{cBPjW*mqpjO8uEC*s| z7mk`*((WrIVbDJ<_O(GjHJc<&{4$a46~5b=KYvWf`yn*}yktz9V#+Wr8y`EPTb+&{ zLL7=z!Ld$PsD;m+eUJtUO=E4-p;eAONZ+Taotq-dk(T{?tSNQiZkAB%vM~>bV1|sm zr}J_w>*8TLTDdMO+Fdu9H+S{g=ojRk(d*JT2c@jIw8pol)h*7+M5dV}C67;pjM#_g;JMna@pU9uMC8IL|>K5a&o( z!_2H*y@kfd*;3#Z*3`_uooj0h_yyPMqGo6!-R@n7kKLzVSrde5Ew92r5FDCi z?{cX@R^bp8SQ=CX0>wY+A0%i3C{zW8AAles;itdv8TEna<6Aj=HV`z{~&u zTrL-541f><0Aoy5Rk?rw^nE{>OjO~$pU>y`#^G>47SrjJ)J$zO9*@UPb&bbhRh>+?;B*v&ts<77PBoS$EbUvT;jdM;!)KWA2 zA@BD)fC9j3wTdx%?^UWmjT0#%P1A%BJ|&$_Cji!30PpuZkvX$ouK`d9;rV>#Whh8r zodGkKWoeB0WN6zq{RXhzZkf4l+w>rR4ZYCqc<=xB;Jw#2VvI4y-EJ2`C>Dza03veE zsl5Vgt@{QMsbDsnQ5r}}nrBe2UwhEg7=~dOhVgi;3N2ctuh%O-ClV23%=LOrRMRw@ z%?3bOmRh%-Er6=3MqSsXLjrI-9urnkUDx^ge*mPz>Z|{O0tx^C002ovPDHK)LSTY> CEXAY% diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_meteoric_iron_decoration_side.png b/src/main/resources/assets/galacticraft/textures/block/detailed_meteoric_iron_decoration_side.png index c99a941ca61a1b3e35de449730d69d5814de7169..bf24b663624aa58b692423f3228c1ad5897d58ec 100644 GIT binary patch delta 526 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 delta 1571 zcmV+;2Hg422DT57BYy->dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y?vMVVF z{qHJf2?8Rz96zgO2ebUaZZ%1F=iNJ1(r7_2|jvn^>NWf zOu7j6^|U#kGO+IWT@TD(FpnFkGwDpHP~6<5DPQ`2&uZvl1Aq8(fc7=`ezBw}M~fdG zb=r5l!kORRYv{e5(Iw|K4gL)3yuvIqs+cuPbR6?KM8B+SIY!hGY_bKMt+v>#qd)`% zvK<^$0|`1bs5%!Y>Z8MkqBCMaI%I(aBNnm*!GLXj#3LMqsZ$Qi=z3mo^x0X{7P1Y6=MSi5njYUSmJz4OmhH z`ABon0F%w9iOlfg799j2)nlDceu3118XhchdN->xKnj8NKnxzNAPRsZ3<^+E&ygHv zMF5zws*~u5ykZlSM|!uO5jb>_@sw++C_YS{M6rpK6n`w|SotF^D2EagJ7)GQ95`|^ zp1kwyy%#@fE(wVf7B3<}qNG5<1r9z)2qA_PF_M-fM;|4I7-LF$XL2TS($h&bQp%Vq zyUf{V$sxy_iqfaJ!o?RUp~R9ZR;sRY^;K%9v8D!1sbrdK+KEneuMGPG%;xZ6WLgT>925=4sasx9P zQLBPco#cT{1)B_bh0rxX?y#|YA@^(CjOO|$-0(NZnE~DZfE=1e7u+6DtD_T^1F^FT zM@}ti^>xe%gMO^R#^Cg0?VOeVpMt%iN&T*A9)DHrH{)9qVjnY)H^U(@y7aJiHRvyv zO58S|Rg_1Xw#zAhgsq8bF3nZ-GZz?^7H_TMLo(L`Wgf7XnQWUXVJ*^%j#Xeztz>^Z z-=d$Zvb~FS$7@!0@LLXG@07aE@v^?6%V0ipud6j{6?_T?<7X&~Jh&ZCS|U@H7Yg+n z9e?<1c3QxTOU=mIj7wJ2#ggJWJ&D`)0w*mmjc}ezFSo30f|Y(tPs<-(nFIW`b9PJF zEmdw`OzXaJe)1@9Xv@zTs_lU*=94u3mawZ~EGx)B%f}%wM<9R7(*t`h={dYLR~OzA z7Qb_BUu@Sc=2d!W#g!J^uePukxn69p*?&;Fc)1NfFl;4^oZnjWys@QknlHW~E>YaY zkY7FPvHO{)c6g`ZPW?`t4==4DF`sRdX;&z(#LAVLzCDzsdF(=)SaC;NZoJri8H#et zoJ;$#E7y?kJ?pJ1%~kaEMY4(cG92DqS{?H1`OVK+V2=dBRkZP{vwPC+MS}0G{$b3U zTMJpq#`Mjh%s0$-RaAR@)83AU1-Z|+t^8ag=IyF=2=)tWDYI-oq+JL6!4>n~Y3}dm z+dKT#OVYmOFks$aDnHFg-xbVf{=Xi%X>9U${r?oTjrM#%;b0;xEp%x@!S6xW0Q2+lkTy){aMbY3^3#Eo+ zOz&c(ue|qW(WIHonKS2PQP*{nBmfXX0001xQcl0T=LjK4DUpcQ>$SD^bUJaOX&NHp z{qcAN0IhY?G{%^&>kt64EVI@=pHG;DbAL{2{eHgzfWK*)4#OZ2@q9iPMZxzFk%*jg z^I}9SisEv)gb;p=F^9v!dmm#Q$MJr@#~Anf{bsXyy-EYc0U*zFAp|#Rnr69NE~={H(mc-* z@pijSuCu1b7yx)Y9@DgFjM;9tOfVM_SF080m^!D@H0`>s>$(L~{I4v`iccmVegU3( V^vMP}%lQBR002ovPDHLkV1mo8^fCYd diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_steel_decoration_top.png b/src/main/resources/assets/galacticraft/textures/block/detailed_steel_decoration_top.png index bda9fa6f84687b0a76465a8b237605a1907773ee..47efca31a1d658d4294684617601955662fb0939 100644 GIT binary patch delta 320 zcmV-G0l)s$4%r2eBa>nT69Ooavv&k`0e?0%Ok4l}0S`$;K~yM_eNsVc!!Qt>!Xlf< z4Opb76z7ya!~g$D1CCz%`cP8TTv-p?c()zl4HA%zea5?Fs%5h-{ZfE1V89KD|t znV8-frBuE|lB7~9;U}^%$)^A~4MVN_eYuc44MUyv!%9ydM1xdH0KP~R+TyIQ0>HKxZrt)hbY3*d~RBY7?Y?(jC@wWd( SqP8Od0000aB^>EX>4U6ba`-PAZ2)IW&i+q+O1aWk=!5* z{!bMt0Z9l!Ihe;xI!O5uwqd<^eRr9O$t{e~`;$aW{qwt-U;06a);N~nqxV)n7hS}p zhhSe{J@~`aBFGEnv z1(X#*m4S+Uxqr-e3_n?|Wve*?(CFdJmHLI)ae$si>c7gSfIvHO<2}J+&CgtbB}I_; zGzSeZ+3irVF}!Mv_5vW~W8IJX0x2Ce+^fW?ZB}Q16awpk7(7@(6aYsU6riM@BRSj@ z0bs_WPNF07icQcuQrjvcu=670LDyDMe3(3mViPGTSbxs3){nTLHI$gxF|%jkz>$;j z@Qea>*lOc6r|inw$Hw4kwLW&=2f9l4H~ zji_D0s7`XnrhrWbyh7+IAUBxUy^#AcZbozc9d7s&rQfadySLfHOn$m^Iyy=OL*c0CsO_xd@q0La>Vef5ooZMg)?Y-kfet5L{ zA%6qN*iK#_1}Vs5!ynaS^bThooy9UKvr2MUub>cLN#+{`t*lj+hD*XDO7FWzZ*^Lq z>OgQrsiSBlDPE#9d$!U;EpH>A-j-X}_(95jGjEZs9W}e}i|9`oa~FEqlp!64XY6Ks z#MwG~9?Z1|(XA7Qe%OfU%qlXK(I(U8z<+>f_E#E}9*zW?52Nbe8toJ_m&;r07Wl%a zDOS?R(JY#>R6h+z^mVwowD@hF2Vx$R9A~n;|JeEcXug2zmG{W&OG0URQ_M5egd?Bj zHe_G3+Mi5j&WzjpP^Q#&^G8-(#H?a7<9^n4ijQN?k2lB~e(0e&2rdb7x94L{2SsPr zfj4KvhX-VRU9YWT9v-n3louv>4!w9C4a*o=2f!Ae9A2LXb5G#YOLEiU>%{@H46=2y zHT~aFG=BjF@Nee8wX$H5Ar%66oUu4|0e?Q`hMNEY0Zd6mK~yNuWm2(<0#OW{3(2~L z#TGWgV&z&ah=o6~-|u#6VIc^XBB<|$a7FfVkGm90-jK{Bll>Zo0RS@t0C2nALv~BC4nSVVV z50{!kRYO`;9gN(ERMlxRRW&mJDJ5?ckrE^#-;FPqi}zGj6=bgV2Yf!C00_W#yEQZC zR#i`Y?f_M_>$;rtG}8Heb`!%;2TNqP+W}xzeZSx37@ow}{b1(0u0>>0==;7jbt$FeG$K z1?Mue-#dhBab_a&r{% b<@vt>Y9Q}9OAc8V00000NkvXXu0mjfh2PN6 diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_tin_decoration_side.png b/src/main/resources/assets/galacticraft/textures/block/detailed_tin_decoration_side.png index dc014b751112035d0aee5f237b15f2df4d48646e..fca257c00b8826d302898964e269fb710e85ecbf 100644 GIT binary patch delta 502 zcmV$sAVn@XBMgk2$>e&70ph^QN-8xsHG1SC#{~CC%}YLw^IX(p+BK+E{5WleD(A z!L9G!yan*(`{mC5UJ!)s_Nm54-ya`c_xVpu`vZ-Tj}{*QxcoT;(EHlsj=7mx(w{$h zwzIznpt8ET?oPRRQ2;OvgSy=*7eKpx3LpqVKL6qHunOSu!eY(!YOW_Oo592eAT678 zQZ%}2mJaix$bYkx@E<>a0^oT5Mfdz*cl&m|&L&mH+`ltFj+d5Qb3IZ_!=OYL;%Z7+ zIy{b#=*ENxkQasH`DuR;M-iK7^g+_H)BXT}Y}o8BEjvqx07|9UpG*RRI6OQks1g}AQ#1?F?QF+qxD_W%F@07*qoM6N<$g6YBgH2?qr delta 371 zcmV-(0gV2T1daocB!3`dNK#Dz0D2_=0Dyx40Qvs_0D$QL0Cg|`0P0`>06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0002+NklFU^1PF+*$|2*%=H+r{f;k`}Gvmkm7N_0m;pJg{BeM zBNGa`y*_6qQ8o#Vua~m}3b(TWQoc!03VYaXfqM5SXys|!1g@lwOL%J;A+}$FY;P?L zL1RL>QY2)18Eje>WQu?#-|%CvD~J$$%XdJ4LADS46=?4uLWECegrI!`6worxfYVkW zaAFTQmLvftLdv5BzY1dtWr8Jm5Nk~WJ#oOta0(dO7?qz7DkGdgX39cUe*hDdSBg@3 R9S;Bi002ovPDHLkV1kpqi>m+t diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_tin_decoration_top.png b/src/main/resources/assets/galacticraft/textures/block/detailed_tin_decoration_top.png index ad975a1b846cefb0b57c68674de68a9cac88e551..c1c700753bbdfe07c492834661094cd8bf87151a 100644 GIT binary patch delta 388 zcmV-~0ek+K1D^wsB!2;OQb$4nuFf3k00045NklE8+)YyXw=Qm?|H}r z@nW%<186p{<+8Tb`kG7>I+!)XtQqbupqx1@4x@*g4spA?z^oZrOC$$CQ&j*$>U}g6 z^dS$fE-nvAk`|nuo(m}e%wgQ~^;<(ONEOJ0kO$Fz4`9t~O;rh8GrMSjBBm5RZtRsv z2&DS9)jBGd(|rQ&`P}oXC&!fMK!E^Ih@;!<%eteFA@}@lub;NwEVLvq0YF99xaSvV zI3$S@htYED>QzI&U=AbeazvSeO!kjU+0e8y03=0I5=eGao-S@Yo3^c%%rqE0qY(5P iO8uwD+*oo0MdSxUcCU_v+QxbS000006Lfe02gnP zU&TfM000SaNLh0L01FZT01FZU(%pXi0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0002`Nkl$#;kp;=dLiUnp z^qs!b?{pVx+~&?dGv_~7<9s@R+w~%*v-x7V0uXu4kOHIeBpmSP;~sDn$bsHqXicDM zcR;Be_q!b6M-5L05YTK@1mq!dK0F8P2;lDa)3KqzIUxmb8z{>>p(c8t6!^SfQ3D_b zN)hl4*eVAYyLJYE7$_Bx1AHP_X@Zo95xr?818&K=5*?wq(l5YPf9?>#mR6zwW>Zw+ zW_1-sfE%6z6sQ8Y0gF|5{{CsU+HTe$9Im7_Mmd1W2_^Ujf?M)Ro%aNoQ-EB+an0li bay}itoSt6K_xioF00000NkvXXu0mjfwBDDs diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_titanium_decoration_side.png b/src/main/resources/assets/galacticraft/textures/block/detailed_titanium_decoration_side.png index eb48d6860610b3c642675e93d3181e6612de418c..adb5416bb7273ebd55eeb830602bff0b762da342 100644 GIT binary patch delta 518 zcmV+h0{Q*a503|sBNYLKX+uL$Nkc;*aB^>EX>4Tx04R~OsRVWbe>OEtTmS$8#Ysd# zR49>UQNL^3Kp1^a4=QX_u9Y&zJeQ7CK~d3Ek46oA;8XWXnI0455EP zunZxDE?Ht^N+zSBWRc?tCzODH2`d6YmC)fcXSaFWaQE)}-n;K!Zf|P?|Drb>1DJpE zX!fYU0IXNH_jfkef2-R>?eA==((1Qe0M}09a6T|4O{XrDRQ8XHoe5V}%u*)Jie-G;iM~-}^Oy-o#^A|5? zI1iOD%|P%@{prvEKD>Rc>%8UvvdhAe(vi|G z3({I$o@AG#8B=Gt<807*qo IM6N<$f_g&qJOBUy delta 1609 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/electric_arc_furnace.png b/src/main/resources/assets/galacticraft/textures/block/electric_arc_furnace.png index c7620013824c8c335ef0ba04bb6d6edaf069aad0..99f8316b5c5212d732fd2b515280b98671b030ae 100644 GIT binary patch delta 439 zcmV;o0Z9J#1>FOXFnljQ6oo&V1e<4-G`3r$3ZDshF4yq7J8OR-jaE$m{Xgkbf^)Pqw!WZPn|^|;pw!w|^x94Lxkc4n5QQp(A3 zQWS-2{MqXNAqaw{C2Jb^_Vqg;rL@Y!Zr2ds_m(>V8*w;G^C*tj*Y8_PS(;uOB53LZ(ll{&H^|)b1*)Bj#RAyRqI#JOW@+dSzBW` h@>Q*s()awke*j9BwTAI_i0uFX002ovPDHLkV1n2C+WG(h delta 722 zcmV;@0xkXB1NH@wFn<69XF*Lt006O%3;baP00009a7bBm000id000id0mpBsWB>pH zi%CR5R5(vflHF<(K^TU2W@rCq^V6D`nnHp~VGF_MKO#FSFUjG^_l3KIr>_uR4y*hxe!p7s-V=5CvmsaZ8WaKd5|LrBgiGogzwR{m6a^#uH#B2{E|;y zN~v2ED$6q#CkhfX5mr(`cEf0x^W1SAz%@-oJ&#QirGHe;rDIzV2$;qQNvZHOb`4=0 zuIEXm&d$!G(PTVkl}cG@84d%MWNDV!4!E86he#vNTVUEchMroL^pCQqM8x zn>Ug)g?}Na&Qx+Cf~ydG=Q&T)oKjEl97vEhqR}X3vF~|kskcx_z1hXzqpCEfErW?N zbOF`@0NjBVz;qhHtgkacP``Wg>1NdLn2tqXzjX_xR`2R(Tg=5W7&~v?d0=#7k*_ba z)1N#^J@oQL&2ykpX!oG1wYu4mTPq2uvIKwFr%Od47h2@;Mr<1BJVYM{KCV)srM)|- zzzp}=`r$oBJV<1o;AxFn<9vNkl8;2{LE5;9eCc6>6$z+17th$cYwxTFMUfNfG)n;hXqy&*_q9kO9VIh6cTR}( z>GX{rnx++!Whpa9DM(~lE}!OR27tM4n>OA6U_2fZY42-mU4ICnOPHJ4$NOhlmbeFF z%wn++K8(d4MFX(bMn05BGuMxzBeE>*5^y!=KS%%&QPh*kloAp`h^I=aUrjot)oPbX>i_@%07*qoM6N<$g3kS%Hvj+t delta 587 zcmV-R0<``40`LToFn<69XF*Lt006O%3;baP00009a7bBm000tl000tl0bXTW;{X5x z1xZ9fR5(wKQaf+cP!#sPw$qZD#(6k#>myBj@7a#l?fqp1vRf>sHT*_OA^B5*JR4Flu+s% zIHYY`?WOi`bd;z6Wk#*CzxSP7Xqp$VTnfU&y}ko7B>2l&1|_%(g}~>mX2U24!QfA{ zP*9U3fuEnB!+%i}SydHTrV9&21k*GH#$eGnLNkSQ5EqL@-}T(S<2ml=a2Wc*APD>W z2LMQ+0Mxu8ACiG1@I0=70WqSmy5TSJJZWX*AYKdK|~9%0Kxj3q7w?sR*3K Zv)`I|A9X-Qnvwtj002ovPDHLkV1fqW6O{k} diff --git a/src/main/resources/assets/galacticraft/textures/block/electric_compressor_off.png b/src/main/resources/assets/galacticraft/textures/block/electric_compressor_off.png index 7f2976b3e4dcc33a199918e223832dd60bc0f1db..7b80e7270aa6335b67196b2472d1c50d55c857b4 100644 GIT binary patch delta 314 zcmV-A0mc5>1mOaZFn<9XNklC zw74K&dRVfGln`|e_Kdx|cxPF)?TN@1WdQ)dG)@3w97GaXmCPK%B`31y^AGMYj+2nG zESOoPAeU{wf2-XN0P`@7lYRlfX0su(F%I5`l+v6~yWQu_iU0rr M07*qoM6N<$f;eE2`v3p{ delta 565 zcmV-50?Pg20@?(SFn<69XF*Lt006O%3;baP00009a7bBm000tl000tl0bXTW;{X5w z?@2^KR5(wKQvYkyKpf3ol5TYAmUc~>CPf%6Q^%$t2s+TAzxZ#9GAB;Qz6sTB4CdA( zO}f@?J=-R^_%5dd{XzV2e0cZn^Lh6^mymYTHA=?K^-Y##{eSOQoO1wGRTV`6Ku}7p zvN>*JP-slpre#X!2t`$#_aA^)5Wpa-G(4YcRadkN*`` zwQ_#;jVv|n`>QKqba~eGAcg~RGv{!Et#k-{$7$59av1i1v4w)3Bnk5D>};l5Y)k!W90Wc`^b{% zoSf$PGb(WpEtQOEoH90k{BRX@Yj@jQpZ1V<1o;AxFn<9vNkl8;2{LE5;9eCc6>6$z+17th$cYwxTFMUfNfG)n;hXqy&*_q9kO9VIh6cTR}( z>GX{rnx++!Whpa9DM(~lE}!OR27tM4n>OA6U_2fZY42-mU4ICnOPHJ4$NOhlmbeFF z%wn++K8(d4MFX(bMn05BGuMxzBeE>*5^y!=KS%%&QPh*kloAp`h^I=aUrjot)oPbX>i_@%07*qoM6N<$g3kS%Hvj+t delta 587 zcmV-R0<``40`LToFn<69XF*Lt006O%3;baP00009a7bBm000tl000tl0bXTW;{X5x z1xZ9fR5(wKQaf+cP!#sPw$qZD#(6k#>myBj@7a#l?fqp1vRf>sHT*_OA^B5*JR4Flu+s% zIHYY`?WOi`bd;z6Wk#*CzxSP7Xqp$VTnfU&y}ko7B>2l&1|_%(g}~>mX2U24!QfA{ zP*9U3fuEnB!+%i}SydHTrV9&21k*GH#$eGnLNkSQ5EqL@-}T(S<2ml=a2Wc*APD>W z2LMQ+0Mxu8ACiG1@I0=70WqSmy5TSJJZWX*AYKdK|~9%0Kxj3q7w?sR*3K Zv)`I|A9X-Qnvwtj002ovPDHLkV1fqW6O{k} diff --git a/src/main/resources/assets/galacticraft/textures/block/electric_furnace.png b/src/main/resources/assets/galacticraft/textures/block/electric_furnace.png index 746d47ec61100a40347ed2a6aa4c818166343009..714202a539eaf4c57b36e3c8930537d2cf0c1088 100644 GIT binary patch delta 467 zcmV;^0WAKK2J8cnBYyw^b5ch_0Itp)=>Px$rb$FWR5*>5lRr<}P!z>~u^bV-NCf{0 zNERX`>ewzN3v-2F=$Nm-#8+TpX5$keu^}dwPW=KcREU{?L?BWV`z5JjlPCf+*zY9{ zL2A$ReD1yHopWvHc6PR7A&M*%7El-sM*u`os5v2u8E!Bb5Pt*`Q-~t%_8(?3Oho`T zzpMf;0JQyQ8uvY2Gu2^vc?HL{Q}s~00Qk1`8EgB;Cjh`unbxb`n;7rGvPCw+bY6g8KQ90X!!X0IRVw;i zNSAI-H( zPq=yYgOdWLRZ4ymRV-Tuo$d=q=MLnOL4f1^Cpz7%xJ*?_zk_;B(rm_Q5e`lYK&Xf7 zHOcSmSl_P1iNUPbBwmt&Rx8KZg$*Qby8V#duOnUayjY8?Sg+(~uq5hYe%1g0002ov JPDHLkV1igd)pGy< delta 763 zcmVY}j7=@pE=gzm2#*XWdLJBE_wzMfq5wwT} z%Sx!q4@3M6BsNG*g^*`N8S2hN77aT zA_$8CiIspW&6}GV$<6*5ZEecGU#tcVee9uQ|4S&GZ?JZs&|BF(v|HVx} zy#{!QI6(3E`{%5r2}T=37=*-8LYzb(ip|YUrg=eA*X(_GZ3!0e`~Y#5rm6Vh$3Ib8 zqdvWVS7v36=NWc)->0c8eqiv7N42OCg!#N;rIq6QKE`-FJ^Yy<@Ckj5apEY72@fAW zpxf>8YM7ywrhmKMrfC|~>rT=%p{^U!G@+_1o;*2Zy|acv1QB6lqeniz;I}`1XLWUz z)3ZKRU4sbLH6%&ObTZ}o&UJdd%ZL-S(io)`B2bn!X`Jx!-X7(mA_^m{t4UiaNtBQz z5l!PL7bV4XhC|SvLObgKVU&+pR13l=#263HQzUUrF@KrioMTa0!oVkq69BYQSnDt% zAR=fDQ5<8P<>aJKyWJu1eL9^roLI8a5V_RGI!h25oGd*t)>^do(Ascxbi^>rFyeM$826Mr(2Xb6iVQve~KtU zDTSHO3IgME^YWO#2VhwWq_qZV5KobpQ$#dQKq{~@zD)o|MP-KTZR`QUwspUz`a`)pWG>U`E*~!Y#w7C+?x;vmS6sI96SS&8SnHg z?{3U^{wowS&9_ejnr6a#TZZi`Q?hf#bZ+?WFu+_&Y8F+%!C{QGmfPE~ccUPQVUPtp tdKRNK+`eY{?9K(Q(qx6<;HTvm{s(m-a(zTBx7Gjv002ovPDHLkV1mkgZLR6FVB!2;OQb$4nuFf3k0003NNkl=g4n~Q2NBtEvloz9q+RLldi^GHP1^tfFi$gpoRfq^PD5snaWF*g zcKg8!(=^MaZ5w9RP+;UZojwl74ghnS9}Fq%y(e-xrx0Q(rGI`n96O;3Dd)SEB-*bt zM&$wsA@qHZXPnQUAp{L~B6_VvVXd{+zIUBksvmSX8}>%k(t(Ho=wvtW-iZMjSMAWW zjrVRtb#BRMlO2GZGk_R|mmQQ{JxII%9u&-p$jQpBwN=u3xQdjPq!J9#UL;BC@^ulT zTK;#aQm1KNHae|Z06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0005vNkl#BX7>L- zVjlyUkj-|WQ&nBB>(#5K^2`~&fE>OJ;_s)C!3_grHkxLnUti0rs**Gg!yrwQvMk!SYuCN`zGvAM z%P$y)=_|mg>wj}mdM=z*r`o`2HIi_|oiOH=!SKO{{n*sfic zc^pUd@+Zf!lmk`O-B%AEK@^Nx6O3sYO;bZ<0C=9GFhxyM5vuDGv>TG93q7>$HHxAy zO3ytdG<`glnA(3;!jy1Ih(Gp#2V*-{lEhVYOtaJ@9*B{EIGzL1a7A9^7`fxxP^q5- zRMPhvC}0xeVS>%|0s{BP`{QxTiwqaxU6jWH``9#k=mq8%@V^c0AkcF_lJJE1;ELie zYPDJkg0Nn%d7d9gqpo2X3`6q*k2n&r4@Vrw{spPSsU{q~%@_ax002ovPDHLkV1lqJ B6QlqD diff --git a/src/main/resources/assets/galacticraft/textures/block/energy_storage_module_1.png b/src/main/resources/assets/galacticraft/textures/block/energy_storage_module_1.png index f5c6d7511a95beeb32bc4a35adf0c67633963180..53bbec117672cea0b545666692ea72e2f33956ac 100644 GIT binary patch delta 347 zcmV-h0i^z&1@;1vB!2;OQb$4nuFf3k0003nNklb>!47{ci>`+>22k8Tv zwLpK+vDy2PzS7?)kRd<=$@M@hHjJVj=+KUvTP#v1-jVd(e*Z?~vOEI-pznGBDYX(3 zISrXP#@Z0M)9DK{bX_lpJkOX}LxGXccKcXv3INP)e_=>r?|(g!OQ{VZ4#O}$C^v;r zg_P1+OA@W;8KZUqgb06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!00061Nkl-?-yb)#t}*Y zwSQ9ep)Y;!PxK>u99xmqmA#soowIY!%u-2gHlItj9|mzY-ALnlt~wYDYQSQ#ST2{V zwXj+VlCt`Z{YZbV0lufjafH&B%d6#BZB}P#x`yJOM<&c@I-S&%6h*G8 z>f86L7kEt)ZfXoH&Cm{qJruS8P!a?oN#e`(&Gkr|)qlaLx(dPoK*M-Et|>h|@nv~D zmWAUwO;WdlVHsJL1c5)E+%wFSGSO9O{jTB7_1!kBgVA)gEDLlQ0G4GaOi`94go7V&E-`HrO~VyQnqcInWuQy-9MC0YBZDF#HYQk}jv#Qoz20t@B#m(q z-bJ=cvA3e3p>8lcg8yM)2Z5RclDG%N8+W<f3=1SKl~0000KQ4M54MY9h_^T1C_z4lLow;?R&PL{jOH4XCjy782|un(*lUG zmXOG4$jl+^4UyaJJ~6PSX~oI&jF~kQGx97Jx3hT(fVpnZ2!Cl@6a|rsvGzWsl)8f1 zycDQ_VmxX~qUkVWlr8}8eN|PswB_>Nd#~X{NDrB)S!=DeH)W|Sbp?8y5qiX`pFl(a z^s*x>3MUK5xw;8io)v`~L7nR}I%EPM#t0zz{l60wEjt()r#sxeRrVnQNEx-cEZ(&M000006Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0006ONklNvzS4HztceRXw31%W;lr>d&NNpyFYq-nYc zeAjh?V38zoaeu$v?e1;c(sZrMwHSseE5OOJbsR_jVj;~Wc`naY{PIkh*~Hpza}=>` z6BSATDtNxTTBW<)PB(Or`ELOn$KiB3xnbUw0MAv!FhJ@3{=u}(I_qSqnu_ACOFC?; z+wGK;WLYYT;?w7Y>$_DFZmJ9{Rae*R6*{Z|pfnndqJJpdA08c-)LADOMN>c+0QAsq zw@XU5w?dw8HhE?{c9nEmK{xdziG1H{ciyvXmolKLIC<{j(ea!*>ja}}N}gv>832xB zDNIq4M1-|7o0m zJEy)QJei z15}b{5-1X4VS@Q~0|JNR!|}L};t&_%T_npGd)+j8CGcgLE>Vx-1bTsfGmWIW{1N;96el0Nvp<~f9WEzCut+!2LJ#707*qo IM6N<$g0hC7#{d8T delta 684 zcmV;d0#p5k1H=W8B!3`dNK#Dz0D2_=0Dyx40Qvs_0D$QL0Cg|`0P0`>06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0006eNkl2iU5OqX@snmu((n7*w8-IjCMObXWyRY|!n8gsG z1W@}Wt-9nPed$yC+V}P+`ei+iQG|MBU(L*&bLX6yO9j4~eI}Va8N?VLM>5wk#Zsx1 z0^03%r_<>Vdi{Qn=Lg;H+ithZ^Fu)pWLYvzqG>7&hC45p%arFSLw+bpVi*P2*HIkD zuIE^m>3MDxg@5at)n;>J7`m*;4YpFN)zS)Z7K?cp29E0rV_`HIO(guIu{bt}zFH+H zq8l12qySW~9cwm=H=B*3Dj@UU0yqr);c#$Kdz}JoOY(gWrMKH#&Cm{6M@y0=6t^r= zXDW?GJ*6}n3G4Ox-TR&8SXmNo$_y+?k>>Lm6dnMe)PL*sg23PI?o5juvW_sKEP^lq z&`_;bQ%YA?-6UBqlZ9a#S<-O@MN^_Ea2&f@f5R{hN<~-s!J~#d(>Ce9`Db5pg$Mf8 z&tmR#F8`31WHCt==rRB-%TSo2An*t+7Blp&_~)$n{p{q!3H_C(@AEHzy?}=GdS%=8 zBc+R!5`RQbrxB)xEh5XuyL}RM~Z%IG%dGrxP8- zh)GmkMbmIa5C#~zswwEwVQ{0d0E&d@m|(J6g1~NnyWekv(8oo17tu7teh>`}X@l7c z{3ioD2&5d4#GNCaxt-1>)oeC7j%&4AEX!tnL?vBO6l=9A%dv?s{?(lBIB?<*4 zDd7dQNTla4e1oST_yJ8`K#xRm64CCF!ne88f}rrmxg>7Z_Kxit`(&}WC$eQ#0st`d z1ArJi35l$R%p5{n5ZTr03nT0ML7b{8nOQ@zLY~>|Vlu4(Fn@Q$79owDb3``A&ijy3 z$_0~YEl>f)xY3qGXX8wvbOCtpo2J3O&F5F%dks&8^q7g7F~%5kUe_uq7wB>h&Ovm!v&l|`3T>6`^{`P@8Rzdqs)KzgUm=O12fWk`%MPY^HoR*D5ZHldU? z$hcz-xjn$#5oB38xiKbFim{Vac>9@v00=sM{3<}4Ldi+$X8C|6M31!pZZp-sA9j~k zuJWy*ZTsEf3uXr3eUP{sEw?`s2A~LGui1LN7Do@4Qqo^z%s06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0006!Nkl2iU5H(4`bV(3qn^EMMaSh;9gZ1&>iwe8wj5^l;2ELoM$&wocyxB`GutJMm_U~zqA*<_Wq zhLIErgaLqtTCJ8+IyvE!WHL#{re)^-C<-ZRez3tPt!Mrt)EYzVK$pOj&nz8FQo+0gF%d`p-T^c74vWM)N87ELl-~L#V<6b zgi}Jyl?FT*RZ~3A9S#S6;2XpMF=7$T(9kqo5k?_KuIVbev>IHmFM=W=1}2zHCm?XW zyj(69VHDsZyo-1cVPA=chP1(K75=?}9RyMiNIT+o5zpLa^O!m~IN&($@bHjj*{t!X oD@jtlUSl~HaU@{Rju@u#52|~sn%A;{0000007*qoM6N<$f`=qT0RR91 diff --git a/src/main/resources/assets/galacticraft/textures/block/energy_storage_module_5.png b/src/main/resources/assets/galacticraft/textures/block/energy_storage_module_5.png index 7027c25eb7291dce8b15daa8dd569274d0346b3f..15ae805a3d58805795a81855aab0a750ab87bedf 100644 GIT binary patch delta 368 zcmV-$0gwLe1&afaB!2;OQb$4nuFf3k0003+Nkla8i~p-9WHJngJ3xKlD53XzVq|*yE~uE=Ql)onxy~$ zbZrN~`$j^dTtjAdZk-V2tJNn4XxmOUS(Y-hhJr+v>GZ6clz#x2n{LMt;i4#ra_<{! zT?ipws3xUQh2;HKC5gtvOrmxHSZnLL#y)1V3u~>0BQZU6qAA|1BP_mLE&)UVI_V(xS+Pg#VzAi~xA=0XVysl*k{m zV-3=;;~K;d0BPoiD3_5NW8xgVZzScOzAF#_Vf(iqCB&kM#$riQmy260AoYm+*E(8l z+peFqdX-}(?d1ExC(I1MS|@R~`?eVT!XXmp_QW=ujcjyqAp|`&#{2>AytP7U&=+ delta 725 zcmV;`0xJEB1MLNnB!3`dNK#Dz0D2_=0Dyx40Qvs_0D$QL0Cg|`0P0`>06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0006{Nkl`$Hzh7JN>@U6*|36 zPr~2nid}=~(`kezx}l*%T!0R?V~s|``FyUZ3c&ogP#gqayWQF;J&X%%OY%Gytrv?^ z&Cr%vca|heXl_|#m)$CtcVkGMjxd|eo;*Fb94kq}O@E1jB`MPJ@dyl;1%T9SHhte) zoS&H%q5sfpf3xZ9H1ms2e@bP(uZpq=z$gHRVzC%QIyh)V(PR>h4bw>dOx=HfFa0^a z@nxNUo7w!DQ#2(EeaEqjyN_75OsSYE-@4&&X4)q6n_hjjlD%R!Kjv0muFzMsB#Tir z#*|UOaepiY6$ODuXgnTacDWxLxpy0>XDQ}2!(7tq-yVR&Y&NxR`v%fZ3<;zMgAl4= zN^95I%!>^5oXTD@**8q~0|S+CN{F%KfCrQ3`!UQ7n~;T!lj%3D}b(mM#AS!@8{Fszfty00000NkvXX Hu0mjfx`{l$ diff --git a/src/main/resources/assets/galacticraft/textures/block/energy_storage_module_6.png b/src/main/resources/assets/galacticraft/textures/block/energy_storage_module_6.png index 8a5049f2d2d635ec2b8f3fd68b108c126a29329e..c9f8a1b8a9201314e81cfd9c66282b7eb4e42125 100644 GIT binary patch delta 368 zcmV-$0gwLr1&afaB!2;OQb$4nuFf3k0003+NklE-EQ=6ADj7LH)9KlGQhxymp>B5w5?gCkO^mg3 zzU#VvU_7Y^B`C&iqEsCXJ9&}|z&W>EE^!#M*@bg1l^I13m81|65jm}@WNGgqq0e7l z@9}ttYXIG|Zr^|KaHTp*k}?3Q3LtIvPgrY+=DIR=i?XoRkoDg&TJHy9i~zh_vqe3} zXnM%_yJN?_0cjwFTGjC6BGQ|Vv1ZFZeT|_2h>maH3BV**9Z?cnmy260KtH7aT=!C& zrrlpUY2|YQ?dbQ1&qD|Rob#;9!E&1;V*qmR56Cu~4HFUR-FIDj6_H;9!?;WTR%L06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!00079Nkllq1V0(MJQmO3LYrDHOL8w=&_p8;aAT&f#R212=h^}i`aOJg?l@-eK z)P~TIWhsn;{eS(a+wHbJ*S0OsYe!KyJQ|EfN2X~gs#4-ti^XDsfS}($2*bc_x5bv& z+-vU1_?s=MWfEgBhyh}lIuMcqAULkw>vcz?k*cX6^WQ*m82XJyeZ6=mDR6Ar_dP(5 z$H%&>q~yk!8O#nGfmtt2tSf z4-R@zI4uCBTCElY{`mC7vI+f*p8d_HFVoC7I{hw{{W2pd5(uLJ8VZF%LTP8G8pnr+ zao@De)KzN!^<4UWI`?srewkhRlvi~%iUQYl3LAGhu0&~YRj6NUII$dy`AN?_%di*B z(%XFIX@7>kpk+mh<33zQ0nc+3x+sbQQvH4p-sQjM@~?8KM=9nx!<^HLpBJEEI2<^R zb4_VIp#;&LPK2((rP)h1`y@*}rr2|aeZjDA7<37{gqTwecrdD_wA*gC+wpwQAO?sL zi)e-h({M!)257mat8i)BxMoWPMM4a8FdiI&z+36r@!8op2z^|HcM)|$%u~_OkQmIb zBEDH*27!bF4wcuCpM;glJ!*4vvs^B3ZEf*9KWQy+B}pn43w)VJ9tSW_wm7cz569fD Uij%1U4FCWD07*qoM6N<$f>^0d_y7O^ diff --git a/src/main/resources/assets/galacticraft/textures/block/energy_storage_module_7.png b/src/main/resources/assets/galacticraft/textures/block/energy_storage_module_7.png index d3c9bfb8cec0677cc4546ca79789880777b4b158..d6d2ac6b3ac7e2321b78672581826672e7b16595 100644 GIT binary patch delta 371 zcmV-(0gV2P295)eB!2;OQb$4nuFf3k00035mlhv{r0t?U%K>1P{D3Fr+r9m$D!~W<5dqN6{(*B=49L2=33-t_XH~{AbjSz*GXn^|lGGip z|LyKP$hc;B9c&pT24bv06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0007RNkl6!c>7!8uMRY@h3NZjG*pAifbtjXFqAEbrnJ3XjiTW&8W^U5U*Jp67Kv9x`fP=Kl3IO}Q8XnCeaEp28#frHgsI>v zU%%9FXn)!!^_5IMOwgy)>WfU`L4rIbC0UH30k{kRmSr&Lq9E{)8Vq{iUFJhN^E8d$ z#i>UWbwaMZT?P%~@yNFAOG@i8B@o@|gwQo`Y2lns-A`fnF#3d|A5-*m3c3Wl2pMw? z@L&{GZnvFox8r)Qj&vY~Or+{6m%d)e#0Ch!C mEEWqa$3h+sz&zVxn9^T!2d~}2q5DSw0000e29N`gB!2;OQb$4nuFf3k0003>NklrH3?Y=@1;8c^%A`*v_;4o_#W(-x8TD&j0}E z+73XB4TnTV!VrS@l_E0h^#=ylwjDcpo`n!3WK;Z1r|0FQ0Dlld)9n!4*jh_uVr-oA zecz{oa#ApqK{0NmCDC}8Q9>7hbFR97xp??G1pxG~1m51Q3=&5qVOsqcIF)mr}opdPo- T)CJ2;00000NkvXXu0mjf29B=q delta 773 zcmV+g1N!`s1DyttB!3`dNK#Dz0D2_=0Dyx40Qvs_0D$QL0Cg|`0P0`>06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0007iNklx~#}WZn01(#1$au_qT(< zciL^CB{Vmin-cuZme?|oJ{Uw$L^m|35Cfos?O45DcQhI)s)C>4%+E~bVm5c4&77r~ zFIfNwf!Ao%mkZZpfNe>h=R)c6cuzC5Li)|OiQu^#Vrf1u#3gw zN=&KQ6o$j$?K=mSV=;d+GruYFYl{9vC0-M==V?iiwzqqra0&oQwOY;hz45`mX(93l zIrEDqP6_HGNxZ~U?~aQE2R^i1)f8}P+PG#* z0E!6d(7|Z10|X8Z_YM!oe&E4H@Ginm0P|EdXowBw79qY`zzhUp4sfWn1o=r=soccM z<#MT1T3ub`I1U~ud{9>u#X=#^l{m=50hlLSEL;2s-s-Vy{Vm(G00000NkvXXu0mjf DM5I_x diff --git a/src/main/resources/assets/galacticraft/textures/block/fallen_meteor.png b/src/main/resources/assets/galacticraft/textures/block/fallen_meteor.png index 6b3d7545856e8155eb3b0818fb7acbd4a8262d25..0d4b15a1a5b0797e44bcb988d0b8bd1de66b38ba 100644 GIT binary patch delta 2944 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 WY;cd$_z0o^0000RL5&#YX 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 KU7+Q3@BaY*o}Kal literal 6673 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�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 j6Z-#2zE8k|>S<0I13e zfVBmiM2RzvFH7~@PnAwPq`VPB>IjDIPrmcfC$-7ZmLZK0H| z>pFCP7%0000pG zR!KxbR5(wSl0j~RKnz7m$N(Zopo>64?vZ=+I=w+}(3~YwrR=*XkTqR&M?r)_pZQg? zj-|2w*#FxegZHQ{IO%4yoNXLOMW<=RSVNRXriP#Xqu06}D2)!78jxtYgiObG*n z5r$#k_hh-^^?!5|s2$aL8~`In?WSp{ioeZ+-37d%ZGQla1h4D5x8t#GTReScf|2cL zU(lS30k_Ee;edaBF%Mh8yP&T3b-e>%j19|;@NmPr{kOVjFdnVDwWEWKwwT2WD!cG>4Sd(hW`2Uan?jgPG_1LoJjKVqKu2NYuA*?cCN3Az9P002ovPDHLk FV1gF3w^;xH diff --git a/src/main/resources/assets/galacticraft/textures/block/fuel_still.png b/src/main/resources/assets/galacticraft/textures/block/fuel_still.png index cd4beae0ce8fee368c4a02f9375afca74a7bf299..d44c01a65523a31e6415fbf05f56d5784a41f83b 100644 GIT binary patch literal 4531 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 iJH|QWm2|kJg8l%7j69bFbWqR$0000R6-z literal 18266 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/black.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/black.png index 97ccdb59168464254de105cc11c7fd6e8d3b6250..808cfd6ad0a43034e040698443eb67832dc29d9a 100644 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|B0XIkLo9le zr%ag=bLPN-f*FiVISWk`?PLrVatkoev#*!?{paWBh)ui>Y&sq}!6ue-YF2EQoDiFE z3aD7h*U-*R<^Yew^dqO2M@k6rZfIq^nP4Kz(_O;Aa7ITbZm!sLkW&~uUHx3vIVCg! E05X>{CIA2c literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ1Wy;okch)?uNd+*D2T9JJXq0P z|9|mY%MA++RZP?ZEH2;55s34?w3=(d$93wA4_Xs7RY#PVS-JF{PfCETCNsp00i_>zopr0LLaZWdHyG diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/blue.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/blue.png index 6e1e385f34cc94f8e8c0065d8feff31be0b249f1..cbf5ef37bf7523d0dc6361456b2c2f6961d1afdb 100644 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|B0XIkLo9le zO}^dSGNZBap#d|?4W~?}8jA!caRs(HcOQvYmvzVM++LRE*XU=*X#*``@O1TaS?83{ F1OW5fF>L?< literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJGEW!Bkch*{6~Df`tk-+H>OW6L zgZJ)N|1U51{~zouC!dzMfH|Oac30@1Z|ic{c3CtuHa0%IebvnEi$GEW5F|+?7`$TG zwUjZ(vNexy$6oE~7Wac0mIhILJ=2&MKRtkj`QsEL!^%||>(A%6-37XU!PC{xWt~$( F69B=0L|Xs= diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/brown.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/brown.png index 942a3399f1dc8cac15056156cfc168a0a891ada5..eb689eefdb428f90d56c519086678edad6ca8eca 100644 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|B0XIkLo9le zeLfq;ojGuzUFVdQ&MBb@ E0GQ7)a{vGU literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJGEW!Bkch*{6~Df`tdGyV_@5`^ zKzQ_*|Cg8h{||PSlTS-rz>_<)vO@^x0WT^0?Ejg5()uU_wYp?Kr~5F9Z$kZ^^u z#GCm>5!YQAgXHV2f^w{jpB~7tG>GEsnZ}HT`9PbUVblBc$A^Xew*Xzh;OXk;vd$@? F2>|iuM7sb0 diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/cyan.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/cyan.png index 1d540589507af46ace501c7d945eb674ea8cee59..394ea4692967b2122b42e6e7fe771ec15cca7500 100644 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|{5@S9Lo9le zzpR|Ub4Fw1Ljz`(8%~){H5Lg@;tE1XoD6TW9bn`Zx-H_%Ctq*abFf9FQp(rR&Q9h4 vkHd78Bg=gyCNLQsYREB|#nOW70 zgVMTJ|1U51{~zouC!dzMfZ1T(oUYJ6In`#&u`&mM;6qZNv~m@Pp#cyW@)$^zGTgny zux*Z$Is2U4^KuUZ4WjsZrZF#mdLY9R3zK1A5d%Y&W|rx-kAhc$E@1F<^>bP0l+XkK DX2d^E diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/gray.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/gray.png index 7cc508f6587397692503b306235eef3da836a9a4..d90cecc246ba33c08757e94268084feb0165eee0 100644 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|B0XIkLo9le zzkK`{dFH@@f*FiVISWk`?PLrVatknT%eg7EJN5Lmh)ui>Y&sq}!6ue-YF2EQoDiFE z3aD7h*U-*R<^Yew^dqO2M@k6rZfIq^nP4Kz(_O;AAi7g)a>LnqoOnK#e<71*CN$V^}^a^O3`XbI-ru>8QpXqfYGdW;M!&{76ZS3j3^ HP6%JqMMJ)}&3m4a{OH+cam%*!@eAXy)|%WHKwMrpBT{ tvO&+Y!+*Ac0&7AG`IhEV=*y literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJGEW!Bkch)?uWaOPP!MT(DE~;P z?~q*H0XeaE2ie{oR5_x1;M9?(3o~rE-g{-}+1z{XrKy{Ge&5=@@V?Jkh9M05?)7g< zm@uXGyG>hGFvE*|0uAX!AqU>@+ZfLeO4!o(U!qZF0&|fA-w8%b1@}J diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/light_gray.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/light_gray.png index 049d62700ba4751a0c54b465f5324e5c273cf840..151d989319a802c887bb2b15f79df7be0a4f723a 100644 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|{5@S9Lo9le z=U5g$OJZYdJIo`Hz`d07o~FmF1TVI?63G|=OKI9EjU#I-=989ZJ6T-G@yGywo~>nr*I literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJLQfaRkch)?uWaN!puod&z<)}o z#G%->1S5XO;{rDyJuj$gSur8_N&KS5XROa0jP67ybX0Rs+W5F;tDee|@9Dep!zKXD z&Dz`lv5n!uk>i1lTO?=vow9`~?dfxW1@A&O! zhnt3t|NZCN{q^UqteMf;$d~ZQId{#YpP#}dUp!)9V`FR6Tg~6|Lh;A}AUI-hAmIvQ zi8u3&BCfkK6ZGp#Tig$3SQs3^He_Z#oXEzpq4iSBkAed&dJZZbtx21B8<@pZwrS3ivHO=K(ah=j$z)biO^ro^ uWP_e(hyQE?1=fTX#+wNyvOL`-3=E|v;-YHrr(Opd&EV{?y^%ILyTMjjyW^R|(==-kl=1f7Wu2Ujq^n8vo@ zsmLx%hrPk&E$#<1EDfUgdZsZietG~4^T#PhhC|)?jW?t@V}UMU@O1TaS?83{1OQZO BLRbI* diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/orange.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/orange.png index 3b29489801a87f61f8285d78d26e96a39fd559e2..101bc1e57a361dea01b6f9d7ac96b4292cc3d338 100644 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|{5@S9Lo9le z_XOtenbFwz(14lchEt|fjYWc!xPs6TC&Qa;2N=19Zj1Qx$=4h99Bfgkl=3ySvy(Z% u<1k(2$Z}ta2}}lu8gdL~@wK^HF)%ou5IY$v^5i4XXa-MLKbLh*2~7ZMr7PS3 literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJQcoAhkch)?uWaOPP!M6caCrwC zZ}1HZAzS4e)Ycy+#gqs#>6A_u+`jFt-QPZ~g+gl7ksjW6ab Ut^dGd0dxR^r>mdKI;Vst0LGs`h5!Hn diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/pink.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/pink.png index 235ecc521d302bba7ba125954b8cfcd0392ad186..20cd57b0b095eba78a499f95f7e4326d035a5158 100644 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|{5@S9Lo9le z|Ag!>F=S>woXEzpq4iSBkAed&dJZZbtx21B8<@pZwrS3ivHO=K(ah=j$z)biO^ro^ uWP_e(hyQE?1=fTX#+wNyvOL`-3=EZK;-R;5baw-dX7F_Nb6Mw<&;$VMXDtQ* literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJQcoAhkch)?uPo#}pdixnaQ-r; z_~UY0-(2L}&AzR;;qc=XSwW5lz7Ajfns$DunBQp_CM|S(qjcQK=b_!@3^jY-r=~jO zc%1$G=;5h1K$ZoO9l2P4KiTP7nvQ5mlNHO U&6uhe33LF1r>mdKI;Vst012Q%FaQ7m diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/purple.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/purple.png index 438946b96611cc3d66b14cfb3a02bb0c2341ac37..bda627a05be3df1ac72f4f186867bb194a844d31 100644 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|{5@S9Lo9le z*KEJPWkzG;Ljz`(8%~){H5Lg@;tE1XoD6TW9bn`Zx-H_%Ctq*abFf9FQp(rR&Q9h4 ukHd78Bg=gyCNLQsYREB|#n zhyJJY{`=3j`|HnJSu>-xkuRb0MCqDG6SGYuUp!)9V`FQZ^jNRwh2oI|Kybw1K*ANq z5^v@kMO=4f1a`U=x40k7ur!F`>zT&9_~`*G%pa#18Ll?v&i?jaq6p{$22WQ%mvv4F FO#u0aME(E( diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/red.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/red.png index 637406964350cad8ea935fb9b503fdc36007dba2..cd30ed4f96623747f555ce524479e823202cb42b 100644 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|{5@S9Lo9le z=Va#WnbFwz(14lchEt|fjYWc!xPs6TC&Qa;2N=19Zj1Qx$=4h99Bfgkl=3ySvy(Z% t<1k(2$Z}ta2}}lu8gdL~@wK^H0d2h~W;dlGycK9PgQu&X%Q~loCID8MD#ZW* literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJB2O2`kch)?uWaN!puppD(O;y~ zc8{ENN<+?ps&^7iT_GNt0=_C5Md41xhkmpMd7VzXvz0AwXHw2d*@pGsH_y@WFq59A z{@s+d;UPDpOimw{&Tr=0XVF||u6>kOp1@q>z;}YtQi1(RgAAB+My7({)=B4Mn}5v@ Q0NT#r>FVdQ&MBb@08*MfHvj+t diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/white.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/white.png index 227dc18cef77d395c377633af6a576d77330b138..34f81b18f1e2dda3a50c9a548ddee357cd8baf68 100644 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|{5@S9Lo9le z|NQ^|KZ%X4?J$o(0{2qRj}IF-V;ejKxR0htGqCG;mdK II;Vst022{8`Tzg` diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/yellow.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/yellow.png index f5885cf49eab6fd48695e97034c24aae6517fcb2..cec458f5722100d2c8a817f408a0500de35b0d06 100644 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|B0XIkLo9le zYkpm+Fl1&voXEzpq4iSBkAed&dJa4jrrAkr>(-i0%VD0t$SrhR#FtN9{#7npiuep8 z1A{qk!9D%_>;}viR6l;o6k~H?&PjAIlkjCftR&08;P^$|!}Oy2I-n&Cp00i_>zopr E083ad8vpFS$kch)?uP6#ND2TK?lt1q9 zgpaLh`-2B}4kZ{|>NN2=Cn3>gEO4hcpsZrg`6W}bPB!M+^RAC+Uw_S&Vc)&)n~W4x z+n?<$E%aer@Y9Kbd-7tY!~YH#f7WEJdi|qc@C2i!0{fE&nF-8A4t!uv72ln0kDQOC T-Ix;ww4cG#)z4*}Q$iB}U_U{$ diff --git a/src/main/resources/assets/galacticraft/textures/block/glowstone_torch.png b/src/main/resources/assets/galacticraft/textures/block/glowstone_torch.png index f35176901340493ba7de7aa328465e32298d57e6..ffb146644a07d99e548541d89e7275d2315a3f29 100644 GIT binary patch literal 2806 zcmVuJ@VVD_U zC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$OrQF$}6R&?d%y_c8YA7_1Q zpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X z6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv1)yUy0P^?0*fb9UASvow z`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q{wNRKos+;6rV8ldy0Owz z(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E` zvOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G41dM~{UdP z6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4Es0sQWIt5*Tu0n&*J!lk~ zf_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+AA{TB3-ERLHar49hi4Ih z5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=natP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+e zdD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVb znL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0WMyP6Wy582WNT#4$d1qu znl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8dZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iutvy=3T65Yu+7a4Yv^%sX zb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i^lS773}6Fm1Fpe-gF!>I zp{*g$u-szvGhed; zvo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*ZvFf(^Xl-N7w{EeXveC4O zv)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx)P8cQ&Qi|OhNWW;>JChY zI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_WICNY@+|jrX%s^&6b2i>5 zeqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!ql}XcFH*PieWwLj2ZSq`7 zV9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I-?$tAVKYn8-l({mqQ$Q8{ zO!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;cwT88(J6|n-WB%w`m$h~4 zpmp)YIh_3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dlbFb#!9eY1iCsp6Bajj|H zr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syTu9enWavU5N9)I?I-1m1* z_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$mU2Q)a|9JSc+Uc4zvS-T9 z63!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;;JuhGEb?H5K#o@~7t9DmU zU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX=)z6+o0o6-+`4{y+3mqQ z%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@>;2q1Vm)$Z)P1z?N$8UY zW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHsy69KwU-!MxeeuI@&cF4| zM9z%A|NTALApigX07*qo IM6N<$g7ETon*aa+ literal 3161 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/grating.png b/src/main/resources/assets/galacticraft/textures/block/grating.png new file mode 100644 index 0000000000000000000000000000000000000000..4700f0c9b26aca75cfcd8f1bdb2add25520f3fbe GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|)_S@)hFJ7& zowQr1$w0(~UqrFlL;3#1F21Ut|MyQ23TBbY-LuDpB`sxlin@7uIbTi4^{d@8dknib zpYMNqXy-iLpMN~mtgjpM9L~^Ks?jCQaP8Loeb-K!tkgMucIx%#%XaE3pII&+_{P|2 zZbUX?$C9%)`zNJJW>ziCmAAOQxYX&oZR1Me${$}3T0Oq!w@1)v?uoSj4;{_~TYgwr rE61+r`DS9X?ab>kI@|0{HU7xYif&t@FT&IYbU1^jtDnm{r-UW|3_4=% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/hard_venus_rock.png b/src/main/resources/assets/galacticraft/textures/block/hard_venus_rock.png index bf93707a4f932d1799b2b99c45f301c61c7fc31b..4638cc40d7b1bce0f954f40ca79bbbc3be4f5276 100644 GIT binary patch delta 412 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 JjvixX{~HMHJ#YX3 diff --git a/src/main/resources/assets/galacticraft/textures/block/iron_decoration.png b/src/main/resources/assets/galacticraft/textures/block/iron_decoration.png index efa8153ab6b9cead4b4a4b1a04c845230a8bbfd6..2f0ab1efe4427099b3732f76e424ac7d3fa1166b 100644 GIT binary patch delta 283 zcmV+$0p$MP4WEX>4Tx04R~OMFe&Me>OEtTmS$7+(|@1 zR49>sQ9G{0APk%*S=J*5pv?VGlS|N1BqH?1+lK!T5dbNr zxOEVKbzPYmpE1S&P-{Jog8(q|zVE8~g##exTuLF^Ff%iolDXMxCu0ncFbU^*`X#gK zy+?UfW#*U2BrMC~c~-aRPM8i>f~wl@-n(-m!7&|($W8n<5xKCDe^VlNd~Ydsa5>n3 zi0HvRINV#h$v>tC@Dd>rvA8$wN1@9hw*IB1>(N)lpdE*8-*a%a)|~TW=!jY?0BWtZ h)=DYOyiBYy+|dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Z7^5ZNB z{@+vV5d=i^IDXFT4c_A~CegM@`fK-{jnm*DDDpgzn)cuCZhq+lL7Z_c!AI|{J}$b5 zNhiTRo_5Gx2i9%x`M~i8bGv{lNhR${amOkh`f2Z%)QxTyfPYU8w2r~&gC!k$wD=NH z#dXHxI>)c~8hUU0?UM7F2ESiwKf=sy)G%w7Xmj&AM1QPv*+$e6Y_bKMt+v>#qd)`% zvK<^$0|`1bs45E-jnQF4QHfZPHeDdWh=nWxxiO%lP^3zMkP0>;a)xll0^7N9JFh^{ zlPjnxf^G)t@_*wnpA5bky%(!F0?^yTkt>Z0ao_+WjWphBrhq^{aN{k(bF9Za0ZWP? zZ)pyC!DREkMP_(#i#7s~+Of)=Um$g$h8s(qp3NEzkV0TR5Q7IRhyvgUg94N^awLaY z5ddba8YDU*uh<0Tk)EwS0-G%|?s_d1#fQn0C^nIjf`8>4D}TfVYdagrHq-f z%bb0d9CFO5D1C}6TzrudN-U{jrRpkIU!{f`YiiJxN~XES%{OVG#g@8qty6cMyYJFN zk3B8a4u4cH<1bKy12x=`8g{Z!Q?1C@XxjotpW%U-B8CnWaTy3Gp>bel12~5Rxq+FD zs8zwJLGr++f=vdzLg*SGcUagxkoy`pqq+Ws8-9bF8PNR$AY2*=#oL!vz?)`I+GX>LvIJAapDNzjf^TJd4qNLzLKv`?(ySevZY z^*d=^6d-t(= zVD4S>mNV9msrJNu#yn%lGeQgp2r#~DKf<9U_+|l4K$?pS$PBOfg;<->R9LzhA^I&x zV}AxOs-FmTv0NH+amF%3D{B_(Oj%lihnc)Roo4%c^{i2aoD}cmv!{7k;gyTHE|DfO zElfX;Q%4JfPpH|e%l(RZT3R4A=Pz*OekRW=6U;v$ky;*CgUk~bSec+1eC>0_?WQ{R zqW!wCmdo;ZDN+-jI~#>^?SOsGNlSiH?)qTk4?V%P%U9DNp6TwDnW`|4&%96YOMJlUJ8k0oJl76ndiA}TL2;g001-FtL7Ra!ptNh z!!V5FXdhyX_!~{r0C3K&>q-E|aa@)K|3?VnJkP%Gw{0U8Ez2^cq{*W?rBs%s;vzzS z+Cxg|JWl}nBqFUgkcg_PVrJ47LkM+UE7_g<8~iXSjY%1u9mb1qtV2Op9&(P zK0dgO*u=Z8yJonX^Ki+=c+RlzyRqJN%qUwnF|)d49lzT3;*vqCW(X1K3^B&*mH_0O zbIwIk+_$E`9mjFMC}L*k+%!$!XQveMXz`M3;9sdHW6p+_y7O^ M07*qoM6N<$f)m+}XaE2J diff --git a/src/main/resources/assets/galacticraft/textures/block/iron_rocket_launch_pad.png b/src/main/resources/assets/galacticraft/textures/block/iron_rocket_launch_pad.png new file mode 100644 index 0000000000000000000000000000000000000000..4d117f7157660fa61d20eba8b1262a6dbfc57644 GIT binary patch literal 2915 zcmV-p3!LuJ@VVD_U zC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$OrQF$}6R&?d%y_c8YA7_1Q zpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X z6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv1)yUy0P^?0*fb9UASvow z`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q{wNRKos+;6rV8ldy0Owz z(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E` zvOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G41dM~{UdP z6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4Es0sQWIt5*Tu0n&*J!lk~ zf_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+AA{TB3-ERLHar49hi4Ih z5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=natP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+e zdD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVb znL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0WMyP6Wy582WNT#4$d1qu znl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8dZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iutvy=3T65Yu+7a4Yv^%sX zb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i^lS773}6Fm1Fpe-gF!>I zp{*g$u-szvGhed; zvo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*ZvFf(^Xl-N7w{EeXveC4O zv)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx)P8cQ&Qi|OhNWW;>JChY zI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_WICNY@+|jrX%s^&6b2i>5 zeqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!ql}XcFH*PieWwLj2ZSq`7 zV9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I-?$tAVKYn8-l({mqQ$Q8{ zO!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;cwT88(J6|n-WB%w`m$h~4 zpmp)YIh_3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dlbFb#!9eY1iCsp6Bajj|H zr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syTu9enWavU5N9)I?I-1m1* z_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$mU2Q)a|9JSc+Uc4zvS-T9 z63!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;;JuhGEb?H5K#o@~7t9DmU zU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX=)z6+o0o6-+`4{y+3mqQ z%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@>;2q1Vm)$Z)P1z?N$8UY zW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHsy69KwU-!MxeeuI@&cF4| zM9z%A!S98uklaJ+UjbGZf1z@dB-AD}X_d5bG|6Dldkm0>oyJ_01 zzW^Wr&bjS&cRC*O9>p-%ZieqKihis%%zri9MQQ**p+ZNhQ)nb-OY;^H=}2!fSW4v- zz~lC#sp3C_dy>*)=jd!(nyRwQ6GH#qZ{wq+v~xgGUag39V-1580GeiOjg;3801We8 zB+c29U z5S*5T-6DnkgWlA?=>LC)g4lwGfJhVe;vu@EwwBImA2XZTP1W~3zL=&7K+`m3nvsjc zcy|E0t`iX~5JIpx##abW01kkN48v_4A4`pah(y}U6)xwQO@BoH1Sut;1yGyO4R#5) z(PQSHimE!h$tsoE1Bg+rRqq)*vs4~?37gH#%m?qi!~EVq3jsBs^0q?*z1;-@f$wlBSEK+1J3L(+L+T|iCpR!Zn>1xY=4CE!i5-WR?VPz(*E=C${R~0DxG=E; z2ja5iq~hY99XK#;n%J{Vs&^Y3FK=3MMMuY`v2p2M3mp}i6>VpA&+NHlE2MF0?^b1% zoogBz*Phwpt*pbd;%=>%OPWxCVRqK1EnlvjU}M|Xv&iVF*LAi9CsS9ZD(12VNSYfM ZFfgz-s{8Hf-tr&hZckS~mvv4FO#l?SXT<;j diff --git a/src/main/resources/assets/galacticraft/textures/block/lead_block.png b/src/main/resources/assets/galacticraft/textures/block/lead_block.png index 4c75aa3b9834c4a22c86e670ea886596bcdc8373..f91d162f61a9455cf6a8e3981e474bc564a4ce12 100644 GIT binary patch delta 380 zcmV-?0fYXl8n_oBiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVX-kt3V#7P zNklO;5rw7{`B#&c%WO2O}}@E_%TOpTO_#WoIB>j5jK55C-FAxaeWDtSe&T zb6NMa|F@?-d+5G=^UvC?ms|jJpF4Q11^{i}2jFu&wgAy&20$1kjHF~9#yNr4Y7hj& z{jvO;B#8zJA&g#@rc@jUASY1O>wk54dhA%rVHjyg(PT#O8UWP;fwI>2efoo;6-DhU z`&stI<^KP?sMKtFe}YF+0_X^uK;=6Hju#7SE_#T?ItB)~snv3^=|NCC5JKo-9RmY2 zJwdsQArAU)#^(En)XK-engGmuFXt^gf&48P1iyh*?qYAdS>aaeHi5ESbWu}W7nO|& zVU&=iDbak&Dv1HOa<9wg*lt#OZ9L_XlvEstigSy1cWz@;j|==^1+gJW3V#3~V@Og>004R>004l5008;`004mK004C`008P>0026e000+o zoVrmw00006VoOIv0RI600RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru z;RqNG9tZTQ(LewI0yarRK~z}7wO7k-+%OEBXeD(E0|9!<1AqCP9Euhw(EtC7Hr{wC z+UX&sD{CoG&D> zxW+uCgcu_{5n&hx+&@0yJiTIB7BDkz?;gO3*7=ve>pn!B#uwb)J%G*=oO2+ebsYds zrxWfUpD@oeIDZj{Xtf6bM1&9m#&Lv;F(Rded7c3P&N(nM4u``!_ujAQ#fW9p_A>Lz zfD<%LL(H4G0CLWCK`hI1@y>gX5CVwk9|Nrq%C%{lx_k5W(t$1mIpvxG87&4Rq#B?m z0~T5VtT|!{-FbT5F}Pt=6hhZD~{{09H@6DzNko*Q;ZT5ld3~5I@d9 zNwG$`R(~ay1Xim+^XPv%U$YO0CbSsL!%+h20n|dUxeLU=p1QA9#h!j}AxLsBKhlIO zIV93ty^d>?Yayyth+OBjR@{_i7ERcDR|=3_qEz#$=1H#c_VkC{478F-yDe+Lo1(O) z2jtJF_g`S?{j$Hw05gM`G0*eG;TqM;vRo)Ai#K8t25!Fn`1vMfktb0uOs_G2`Tgr1 kjQp05EX>4Tx04R~Oq6T&Wf5NsA5C8xHPf0{U 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 delta 250 zcmV2`uv;sO?bKSq`yXOu0wZsuU=fl{ zUM9(ht@E;M>w4Mr#M=FK?HG@}o{u)_r{kfm6eU2hV8ql@Lk(R66qpo%&qlt}*r;+! zg2-Dlp3Mz#0^Yl(&(#w`Tsbv`PW?BaY|`84B-SLx=ShP54Ra_U5<+awWu5ZE_XbHvG;KaE-=7nlY?Bk*B)7?2ahvyLvjD-Kkmmy00h}^{LS`LZ1Ei;b z7^B(Se}VcDUDqZX@vfX6koNU22vaa2tW8ec8^12qY*5f;rT_o{07*qoM6N<$f(!X@ A(A#?z7*3EcflJbA+-R}aRcC;tEwH6$K-@gN5eN}@*4 zLJuvrnJr~!XIlbzSZ4W}WU@1x_v3k<_nD!Giwma!w&P+uS$~S-MF4tXh>jHiIvOB^ zhmI9?-bKd>9Ss1mskmA9e+KUW1H3&&p~U9VK%%oGZ~V zyWfA|{N87_{ew~=$66&3c4*1>PbZ!(5#3D;WP)n7*0pi=7t2&ygOu`qXCF%lkAwH0 z>CR12DovCBvQ3?lOUbDVw;FKfR3Stn;%K3el-p|1+T2O2+m6dxCCeLKq`ucc2rnJq z#bsUnVSb=4JBrew;^m~vS3ApkL#1y*$^asZm9n_}5f)c=go+m>w12)F?o z;Sm*GM0S2+J1$ZN^cTzAe!Kv$Hxd!gVP{hm=Ft?#iwGf*QeLB=W0g43xa_LxIvQL` fFlVEijurm_vS}n3kEljkxv#~R=v^F6zCVxo6r&vW81~$vG!{U72 z>F*e@3ym#)rll#uxd+6-U^_0Y1$CqSA2qh$J^5O%}hL`;ad07>i3bbfVEqSI~#;fY}y%~n%Ul$0!Kdaef~tJR*rz~=hEmbQ1c z);8AxD5XhR<$td8W~%&btb{^Xc#Yn=b<=Zw-?bw`{GhuqS{yExAAI_nPHT_~4UmVT zh*%q?LVvj*iI`w6ci-NaNJgIT+hf_({mS`|TL)r72*N-V6X5vWE*8BuJ;@}+_nenk ziVfG#rkI{CE_^dw*Qb<35$POT08B{4353qh%;0ILihl)Al4O4cD6+h#B9&uVfSgR&}=qO*`VV4pJ`w!RJc4kioE`#&be1AmFD`zI|F)_3HL4zog&TNXBRiZH2gyWL0A^xU+&k zvIr!hZbVVgf@@dZy6U3RonjCbKNKsv$Rb*-;%6adGe%tmH;QQ%)pP=3=Do=ni;EkF zyw!d8-gn(Vxw$Ks>FRX4Qg{HEp-oIqe)w3wUb&q)kcpXQ zga9yuzg>M2j=y&6=81zd&33E0zE-c+9SCZ z(-Tw8cB}RKm))?NuisggyuXDJ%pjuhVAXMaye5mqaAG%d;uO`SQEg|aP0 z;B0M4;g5}JH1++fm+e8{*ck)xW@UA^W$jO;R7F)ToJHHp0n3WVOta^@O1V@Ftwt%jN)epCa5g)gwHtP50;cmJY2qE~ wL(Zi=kSBjbeIwx_|GSOTo3M!jA|QS5A3(<1gr&+Fn<69XF*Lt006O%3;baP00009a7bBm000id000id0mpBsWB>pH zK}keGR5(vfQeA5kK@^?Y-R#F~LX%=2MDe993QAEi)>>#lMEVb;DD}zLQVbeUu_DqE zrCKYsXkNtMASft;iYWT#n?8wDEwoKG$?nWfvUNSP8`Mjf+RcSr5EN7s9KuFGcXZ^=oqv3sD`&qes z1y6+?{X2K<*5EZZw{W6pVXl%E+p2eLu`I^s^L-|jc(QFb>$-Gu@+9y`?yL65a1^lR zJ5_J%*WCOP;D6bsL#XPKU?YkH{$Od%|7J1QVHTWZU@{s2jvYCij!t<$e6S*gKU1zC zM8cEDHH6dW&cjbl9~>G^v+;K7M5$F@?@Cb`FMj#@P1E(!L;JYzy?XmG*O!ZlZe&cw z0d*J(K|sK^m7oc3fOaXRt+pRZA%q%;*81?!;PPViczRrppLerq7KA~<`&M!W~?&$QHsg@r=8BhmqJHJQQwQ_kDLf^i5 z38@#aR{yR~6@WB?9`6J-KD$(3gis=ZP9eGq!QsHj{+MWh9&&*nd_02y)qWdB273Tt iH10$)Xf}6FVB!2;OQb$4nuFf3k0003NNklu z-~TOEL6!q?gHWp-oOqU2Ut;4g_HV=6_4-8=eeeJPw7mgf-XtW78rE7%Sw^CGyM4ph zzBh3~@U>PA#YXvDE}tLi9YC#HI|(T~&ofbE-f}Lz_d#+>1Ap+ri$dl*^ZitHKRT#f zq1AHE0Ei~$P3c3@zBg6kgKvA2Dnyg59fAii*yWr`HUKFl5koY|pJD?5A`*I@g@|^W z+C|jInv#~q*bJIZm@S`X`+}?651*pi6)Vx`&P)- zlA(L=qe=YHGCKFqve?woq1Fl@=OXd*`H&NsS7>c4WwG(PuHrc7#Ob|j);aeJ5x&h^ T`!wkv00000NkvXXu0mjfS~QgR delta 650 zcmV;50(Je|0-^06Lfe02gnP zU&TfM000SaNLh0L01FZT01FZU(%pXi0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!00066Nkl1N5U_2gcnl_zHrqhXG%yj*? zuIq*|H%)WBUb(JgSz9==`qJriT0yXx8}rp_Nm-O6jB~yZd_vqH*fU0p^QkP)w!K?# z)&r$0Ns{P*OMjLfD2+Hze4msbWp%y4Cq8*R>c8a~O?I}04g!DhXutPiz%Um1zSryjl;uHdi>Vs3FAW#y#xuqWI~;f%qXUhiAkQ;Q z8309*TiBv$8VF@sS`;UY5*m;V<7onG;-2SyQF;}WAR2|SwcXCbG+9j3G>H=itsn-& ztK-;D4S)DyHrqA0LLBNrNpa3aQo_I!Op*j5=+@d`O3%eD-c39>&JG*QPe%~A-ac=) zDxx6@VR7h*^C=n{#DJA9?%xhh5D*-Yq`n~DTs7@iYd9RLsyZ5t6h*;LiVuC4%cUgs k6jebS2{@Z4SswfY7sn+a diff --git a/src/main/resources/assets/galacticraft/textures/block/machine_fluid_input.png b/src/main/resources/assets/galacticraft/textures/block/machine_fluid_input.png index 75d9d0d92f36382e2b866cb1df22cc16e450136f..b9b5c544cc17e7a19d376c5db63423a304cfb6f0 100644 GIT binary patch delta 354 zcmV-o0iFKR28#x;vjKkrLPUQbA6{Fbo`4snR+?b- z z$-aHO-hX^5NhHa-)(OH^8!zuqf7m+20AOYS!B6`8mgfgiBv9C^2WgJ!3JOAa z@Bjb-VM#hMSoNf*h@&FXl2T% zGhWWb**y%7GZRSbYX^jknWlQR(m1Ih z0%mv%75s@{n=*9udY=Lt!3=k<+_?%ZM(}8@+xcQcB!2 z?v_$YB08*;H}y~`6aZM31%QZhxm<#f6x?1Ok3ALaq_$U%cDxqYrqrwfJioT06}H;l zzq>brgAourr6K^^OvO$Em@WLMMF5yB{h(qyBSjorLf9gvB%)A2`D_;dhMh_O0;sl^ UXQ)oYp8x;=07*qoM6N<$f|5hLeEUQZa7BFbuo~5@b^zjK)Y`k#{s7$8f005(4YftLTI^IM;^#KnlGo*JCQYw0RSMU3?RmtA(0grLKw$M5!uJ%3st0) z`O!2cgdmVZ@#k=O+Yhe*LYVW$;Kp6o5!o1L=f+aXj%&gOU>bkJ3S(SiTsBq9Izi+z zTf#X9fT)de7WOJBr7TLEbNBmQ%6;Dxkyrw-tCwRMQ?mhh?}=KXRx&#P+`}}c>nvxl z=kxV;6B0|}b*&SaEjB(cmp^P7q5#Ag0gP^v-}iAmvLJ@cUOjLF*?r&lEZuv*nQne4zPgaE*~ yk@55S!x>apSce+Nsm6ZWjMkbTr4*@Zt$zXb@Wcyj-a}Xb0000J!A*TL; zumAu7Wl2OqR4C7lQrk|#KoC8%)}>ISMS?~!Vnm5CYT}Ff0se%)YWxRHOz_1J5dta# z1=<2z)A6CPl$sFF%T8v`nLAyc*6@qL!~q~k6bg9&y{|q1L1cerjgXMmQ&cUNYDX2s zzzlb$LYoMNE~Bqb=R;s6nBh#7GgXmC3!fken%!QUmq2!Rdm&(kJM)8pFHQ~sjJ@wq zd*b_kxwr`+m(d>Tjbw%p&Mc_EyxO+S%m7-gwrQGIXVo}IOQg1K+jU)~ln_GGmcvaI zGemzpiCpi45i@@)rS9|jJJVE3G4oTSy9nnvf|EX>4Tx04R~O;RJO7f5VrgPXGV`a7jc# zR5*=wQ!!G*Fc92itg&-;;Yl)~r63(8yn(!cH}DGHKts)2Qj?OQfr6HdY+T3}djx^P zK3Q^xYphw_-tC^wlg;MlmncP?#E@v4768CpJB%m|Fk=jgqC`ZLV!!{yIGVl)03=Ba zV@!ZaL~>ZI&aha{fBWjSQ{i{bvJ6Bim}_WVz*>u`B>7|jh?CgaVm^TR;Mq6~3VfeJ z_Cssk&tL}TIv_g>P16Rlh17Lp_a&lWE&v7#LXMLd%#6w74iDRVlv)cM;x>R21b2SXGrfE2Z4oS{vjk brSJ!Ia?HO@5BUMj00000NkvXXu0mjfRB*;V delta 1512 zcmVaB^>EX>4U6ba`-PAZ2)IW&i+q+O1YumLn+) z{O1&N1SBDroQCL=_ZE*! zE^)>r+WTo+t~Ii5exDERZ!&LRFr+}rS`2Q#mA!uI`%A*mn|~LiPaEWN!;g+b-s^1n zH$*sAu#Zo?KfTx3dt0Z=&La$d9csBSrx_?7h?2~09wXqRn1?wMMzq-$a<uBl zhB@MZ*&fTpp>*e#%mfhVDdfs83U#o?GfNzNE5ML|0_#bXJlVh;h@5Z)K^e$d93NnS zRJj5qI}s0VBJv2nu_w^fW#zSwQUO0IUIMsDl0lYpihukGE+U7riaJ&G8Z>IsY`l2q z)q5ZOsJR>@xS+v@5MoFnM~NZ<6jDqnjXL zdiWz8@kmE5NT1@07GFY%C6!#cN_ADMuc5}8YHrk!N~XD{&9~5EOD%WgT9@v+cHcvf zJ@tICwtrcD8GpbUZPs`)HT1&88dgIXhNcM`_lyqCz!*CM<6$s>gyzASjpQ5;<_2dr zF{(ltAa!t4$!0?y6uL&Noi6Tf=04`lAl5(e#-A`}26g`fb8MPC@%DzbI&Q);8Cz92 zVrm7|*BOC`8PPMIoZ=7Bf0D{eCGqncpX!`OJAV`+yp)p7RE}2XD|<>pyoL_;J-vC+ z9Jdx`<_(rFF@}XP#uLedG;?w+U8eYz-_qwy{be>F9mZ@cnQu^ERtbns1Nu50WKHNwd-HIxQI69U`h~CC ztA3P9q~=T!5#A^OeeJ*+ZiofghwRpBmlg`pFZB{zWZa?7;8pbxZo@*-(6uy&oloAw zrcRrOV_T199_e?i`YjIaXgNX`Ov_rqZGYI-rh&3gQ@A)%T2Z&L<-FjOLt;5*o{d9ERL-9+hZ>Tpix^EHYiCcjQT&Qse1ufC!@K4LH|sj2 zH&?y*eMFX=&w~}*pWC)O;}v3_fJk>RQ&&HO{Q>R|V4II{e*oLO!+j;g&hX~g9e*oS zqg$os`=$e(9BsqZd9k4=;^-ke9q)3xE9tD6gYJUchevOjS_VgW$Z6fNNdB>uSCKwc z@*8P((bQeA{~DXQ!F`48Y9hMpF1@?D&AYo?Qa>-3-3(E{_sd<#<-W7Dt~~M&RU3Cj zy*AkIrTJRnV=xnoc>wd$zFxc2*D%t2(2b}3HkIJfY?rsCAKUkPX+G)9Z({Qz%^y+o zjr_?_!2fH>`~y{Gh08RUo9~e!6#{siu{d=Be|=z10ssI32uVaiR5;6}lFe$uKoo_) zq+^tzL~Rt5BBqOi8z0PHRsigw(FkxhrR*Jrdq-x$!tRa O0000EX>4Tx04R~Oz65mvf5VrgPXGV`W=TXr zR5*=wQ$cRRFc6%gSPq*UP(kzq@B?^5k@#BAz3`eIDcm@g4-_RS2WN?86?#b4u|eHS zR%4HMX6!tzRzHwhocL)HasfIBo!lV*u zrqdUUC(qsKwO0{Nf6en8L>ZWC6h#T=90sx}Bm;m>wYSB50rMrWap@I=K7|}sQ50PU zLonA7*;{BD8_5<@JB|I9h@xBo^cIAyQw?Uu+jfhO^%}eV9`A>PS3xw46b#x0^5i^k zeJ-uVe6zuPHj4;iL2kq=5b}KvqtWPr9I8k{pJh=+59;f9f5c8}eBN#z6S8EG$f@@3 zkt`RBC^Rs48MGFSF;GhN4~e-3Q3l&sOeW)CViv7S?=7_V%YGsBDTHu{RMS{E=XwSA zA%#EKPgOna@d}JF0Dz(>J$SwTLU5V(UnON(J%H!)+4o8*-#h1`eM%|(0n>`kJN~7Z R?*IS*07*qo1w^hwV1mp3w&(x= delta 1476 zcmV;#1v~n$2G$OcBYy;XdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Ywb|Whc z{AU%j1SBC4%i(#>?BFhc#G~6C+p(RK+r$>8g;Z1th-v@*?dFd@5ZM{WL45Sy>f@q| zn6xAI_Oxx+7+5#Ij|cWQn5QpLEvcn77~FnKd;IYCr`14DUVi}JO`tOkUK5A3$I;>! zM2I%n>m#>M?^SwlYjw$arNOU7trX@6qmEfwqB+fL3;JR0huNYwvB?&2w%TH|wgM3l z$aZj04J7E$psFoU6r;n2K`mlInqxu%BNnm*HNvq9gLEjc6TdZk-cg`Xb{R*R7)ZFnJ29O{An^Ie*7mKf#ICP-0@o%$@@aM^46* zcb>iX!H+$c0tFX1_z;4G7?O}UVet|~Bua`HNw*|NA48NFV@jGcIg>c)?4%wkWz3Xa z=InFGl4DLq%cr=)#g|Z|#F8pjs;+YNHB_mwrUp$*$u!rv`4*bA*izS8>(pK6?tAFc zV^61QTYuGu_5;;mtANp9@RBY|S z!Ko$PeI1nuNy?t_;8_2Z{X5IJTq54T@v+XX*ni<5nx&Lvrn6X{uk2w#`5Hbt@9xcm z=Qy>rXP#jB7Gqc#MGhnvYi1`eUj+FsZ|Sqg{tO$m97b>%;AC;qt*U1}D@2%Nsa##!2^YIfbH{MnG(Mv{jJMf(0J6E|FHZ$fI{C=U=ocvz2TbuH-bHB3}Y~}{;ci7CM_UEO+o96i9s6MTk5o153 z*_WSg*fZU+aWCR>J@h+q8j0)Ndc077X3fJ*{Btm~G|lz8dc2K3zkJPihx$voZW+%= zM&4f6pIyY}*-iX}o43~dN~#xuf(`zE7R^8G5{ErIECFkgAr%66oUu4{0e^j9P67Y` z0S8G$K~y-)rIOD|!$1&+zos#bB_*K=Jroh+LFlE=HIO58>SrMRAhKa}W#x*lfP#oi}jQbWDKz@CKc-VtWD& zJplT)Rf;c`YYbW_E4C6^ntwoO_4)NL(Cv6s2MF?X5(1E9yISF(Z}R%KY@R?AzRy3( zNj<9sKMN3g$_t|0;m3#oc=24V!G^jvF(yEiJ3L>-%(`9NgRgB8C+TSmRc8U&`7fF0 zf{*(>?!m{uP61nMtQKJQEalBRz-~9ebP{U2RSlE?^@~>b+{%NdKP9j0EL7VPx$Vo5|nR5*=wQ!!4%KoFcnKJ2Vrpd<=k zp-LJg@&ca1Bk1`AZ{Pt)q~sGsXOrT*v2ze8>|Ni*Vj8d3H@h=)_GG)g|0T+iW+?=1 z(*gjPYwZ!`QO`MtvaFC0<=F2(afzlM0svW-!Z{c91c?-@)qf2Z%XvS&Ru$paq9{O= zgSm#aCA{~T%At@90BM%0E#@PbkAaQjpdj=qxirtnx>6p3#r@2`Xr(# zmnZ`vr&+3`>-Qb50Gu}Ke!y&GVcN+fB^O1mPL6oCy zS}d1~fRsn?rB(~w{j$CYeF`C5B50Zx-upqpWk}%<_ElA*GpfKj2LQ0P)aLp81L@1Q t|B#erHEJFX2d#}UT6^!KbH*6_0kT8W941ksK>z>%00>D%PDHLkV1kItwz>cS delta 318 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 delta 310 zcmV-60m=TS1JDAHBYy!GNklX4+x%M#i^`4q8*HEO@=%YFprY8Z&VCXodBJ5lVcz z2vp@jWHFzEOXPI6plrhOLt#RYB2+qnGGDF$zsg3fs{NV(%zxcZD9$Lp>L38W=+Iy| zgDO%Jz{-i^(FE!v$bHNXa?_b2fU|cz(dOvUKD!Z9KPbT^5*<6{+StQw^2f=Q!htH} z3MNXA#JREsuu10gKxNZr!(Z1pJ)dm4|5j$Si!>v>you~`ZDwr$nGVvZ~X z<`aG2Gm<{ZL@x)Q-aL}c%CM!jV0MEbNSiNHRVwj2Blur=2f!m+2et<0wg3PC07*qo IM6N<$f=tqtKL7v# diff --git a/src/main/resources/assets/galacticraft/textures/block/machine_side.png b/src/main/resources/assets/galacticraft/textures/block/machine_side.png index 213aa787ec603dcc14f6e5831f625df9177495d4..7ac974738498be1335e3efffcc731f9a70cd5800 100644 GIT binary patch delta 411 zcmV;M0c8G>2DJl_B!2;OQb$4nuFf3k0004RNklf*z^7N&)=~# zo81wGzVHD6Fxmi6s^XR?w5^n~C`ykg+-$zlE3FN`2;oa9ZGX$<@nbx`O417eQdZ_b zuyGVcM4?huo)=Bixctr10DR$dLZxb@>O-o!n_%NIZ7a`n07QXOm8H8#S{s|h7rxPk zU5J9dw-7!6x4)c2k_teYrW}SS;FDY~03u>KikJxd+q6S?UEKtx?WK=tJH!Q`lmbxX zrHyxz?(V>n-GBW_+J+nq25$c!^=YCoO;e`(37wnk34nMMzCLwQmg&VR+5J?<`g|$8 zcoYI)^)hz1yWhnsfdkgxU+V4d-z6Tw1Mn~{v#bS>WtcAoP%-^5EkD0nwr3Z#ID5W# zCX*JxdhNV@B-%6pv}qo1C4l|j84fXD3T+y#n?RiZ0Tik^-Z3YxO`iY&002ovPDHLk FV1mbiz5)OM delta 761 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 Q(f|Me07*qoM6N<$f`2RqRsaA1 delta 3328 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 KMNUMnLSTaXxiDt{ diff --git a/src/main/resources/assets/galacticraft/textures/block/mars_copper_ore.png b/src/main/resources/assets/galacticraft/textures/block/mars_copper_ore.png index 3f1c3ec0088305ef602bd411b6876721a67e2fe8..243523a313315af34bc68c3b7d2b15fffb97ef12 100644 GIT binary patch delta 674 zcmV;T0$u%>1iA%~B!2;OQb$4nuFf3k0007XNklcMijOq-LSn>3e1(@R*|3qN3IBi#6aNra#-*BQNOVC$Of<&$NRYP}XlW?5r3}oY z_uiRtF_n0B=Oo`b=R4=8Oy@co^=v^bE@Kf50HYoNTad60z<=Tr0DxFT(-`%bp%=|V z06-%J0JydwHOB>zF!W=w#thwd+~W8IfW*7GqA6gCgrPGUj?$mpzO;2zpIcrHTWHa^ z0pRldo3LM~#Os%U&Zx(zH@mtX?!ycnaLM(K7yu!q@YT)X(R<8#=GJ;TQ~Ou4m8Co- zfyX6xxbOS>M}HnA0XZFuN(oAWjj!z8qr7KH$7JntS<0^`lDg9a|@ua3_%gclC zGwp3(ws$pGdiubT56M1$GLiE4_w?t&!18Cfz;v zV!yQi|G%1<0ze3P{CF~Q_Jowk)%V&q7VD-%sYXdKbuCw@mdh4bpw$H^352f-UuD!I zH!=zMB7eW{H=PCq zLYA!{8B-c~+JclftH%IaT<#Q1MmN>Zmt-_<5{-Ro)HN}-m7ueSVJ;q(8~VkAlYl9ZrRl8z`&4}WB{{gab1?!oU-&c9kw zvoJ=(%FLR^9FeOyGRcdrel@JZr%zWswOginV-0B4t~lc6-t5(z>nMvKwV_IP`|9FC zPf+I45uRr#+fVuzKTeSdJoRd29r6W1d`ZygnV)YHO@9DUKV zXRRQhJbbe9_`#S19-u6W7mPlqX%q)x-VWa5t$ugo%eR>|w^m-h{^|*ZvK)r4dwoBJ z28R7^@;;Y#0kJ`1v85PhF<91Q9;5Qb^pf(K%#yNC?{{SX;Mw|}wdv(FD3rV8a^k8u zU@`Ke&9!=Cj(OLvKetu=y*~eRj;XsnjYXpS-*(9t8QmWt`t8R_D1@{mAu0qhUt%F0 z7Nq-{^IiPAJ8~9J&|q*K2}d%l+%ZCBp&V58H{@XA$XWA9`~Uy|07*qoM6N<$f+zO= A^8f$< diff --git a/src/main/resources/assets/galacticraft/textures/block/mars_iron_ore.png b/src/main/resources/assets/galacticraft/textures/block/mars_iron_ore.png index cdc023cabf897f613f86bc0a2f1aac05afe1e33c..0b30fde8f5bd2fdea504a2852da4315af3ed1212 100644 GIT binary patch delta 633 zcmV-<0*3vU1d;`iB!2;OQb$4nuFf3k0006^NklxY|CPO+|D7mE-z;@dE%gpX%U3I5+e8{DgL~)!QipV2!Ck#CJ(Y+_CJ<_XYTz z`ys6*YP1avIhNg%>{_0mlcifn9F122z7$I(0MrNrC(3j#AxG}IfvIa!+u-Cl0LQWc ztZuD;eDMZAn|~3e#M6H7)l6NZ1OQSK*W@YyG!|!-^2*OYYlTHCO02P*W7#hsKT+;p zz97%1#G^*IC2C}D+>t#`A3X%{ef>aY8CL-)QyEKI+0<=C34pT-r5*roU8v4^LsvuG z5B1&}vmBdk{N;YA^<0Y(XdljY_oegs2^KMxoeiP}jDJH-$HJ6o?ZeqjGCkVg7fU3A z&d9;q59w)d|J9yk*SCe&US0e)f&r5yv{N!Dda+ME_U6Z(^LR7e&qA31v$XfwPuejWn6XZfvIbZgA(sQ*?1or TF->bE00000NkvXXu0mjf8-y)a delta 509 zcmV1gx5QS&% zt|NoeP{g=IN{M&~8X_z2L5&o}qKI&$6i#TYEFk~LqPP7JQ53mN8I&|>+<=5A5Kcna zy?k@WM66c3^K<6RxieQ=4ZW=-(-?%WR{SdA^Z!%f1PT0t>PAFrmr@vw4R6iGM1oK>mt2j@#T6kI(+YK ziKEt4=~h!soa=GQ)Y{Yc2@1CvnIXd?jcd8wl<{}cJDg6AhXn}SrO4;m6qgP)I*4%K z{H|1xYeB}d$$#?4*Q?7560hI32T2d^&tEsDM})K0RP<#-vlux8zH6a-I`C>Na1$w` z)zp|iNBlVY@MixVeQuLh5KxY1Q{oszfU+oFFuKj5QS5|iJ4DgVl)PcTdt?QfvK)r4 zt)^M7fngu+?Wfizz&A+Fx8%djHrF*o%h7p$a!UI|7IuTOPwUYe6wjW&I6s>^g>sj$ zSf>+U`^b;`#p5SWncL#qcY@5y_o!P9^+mew)pn_8xa~I3Pu(L|2x-oty@M0;CFjy% zLAtFu-NlF9QL}oS28ZiN+KXZ3j*-eU#ZcA14&?6g=e2Sn00000NkvXXu0mjfU%mR& diff --git a/src/main/resources/assets/galacticraft/textures/block/mars_stone.png b/src/main/resources/assets/galacticraft/textures/block/mars_stone.png index 8e3a33210af9cbf7d434ba15ebc56638f0272c2f..7290759522c8c613f73fd991d087c54c8d9c12e2 100644 GIT binary patch delta 3035 zcmV<13ncWc821;DBLWIKkvbcHNQs@6cT`l@7KhKhcY2}CFcc|6@4XEmy*H`SL}8d2 zU?>9)Gc>Uwq5=^`LdiiLn+!5)wxpu}JlQBip_vQ~8E<-M1e-ydgv zYoERMJ!kKI*17~vAmcQ7uoQ$&mudEnVrUCi&%W-40ak@%snFBnkD3j81WZzQ5KhzE#g}u z)=U+qaYg)A9Gk{rW&(hJB8lw+4l7B-rXnWs!$RCdyc7T&De)_g|B3~i9D(>!Zs{4h zd~RZrfUe8Zqnp{{O0GU=+k;r7-zyx?6f$29uWyz~Y@hOGaECN~9iXLAsD$ClpY8|Q+RgF4=YDe{;ZlXp}GpJ8!GFl03fVM;Xpd-Lq)(kHo* zVn{-N(st5e(s|N7(kn8VtW9<%N0SBQ?c^r%Me<|vTM3GUv4oEVTVlOLjYPY|ki-i~ zyrh<-i{vWFJjqJQlad3H(^7aTZ7DY?rqnvA8mUuK!&0--6lpW*K@3{{8fLrtcZP`{)0Q)gslWG!XG zWpiX}WY5Ts&=8t7&4-psE2EvD-J!jgQ zfv(`8kfN|tp+n)3B1%zTF<3EM@qpqb#pxx~CH6~LONy7ASaM$pR?=4rQCg#PNU2YM zX;xW9*-JS?d9U(CNC15-G!b?ucG(RXVjF` zyw!wib!z=;^XfY4%he0iTh$+F5HuJX2^tj|-5N8Rs+s|s`I^m|_qFg^46P)sJzBk5 zbJ{xE5!zd{JG3Wt@^qSY9_o^Rb)9rq>(=Yu(!=O6^iuTp>)p_Y^{w=i^lS77 z3}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*rZL#XM z`efGt8hef*7TYE4FA`SKIZrr)}TaS=$NhPT2isZ)Bfhf7E_* zsm@Z)(uSpD4(bj}hdPH5N4jI2<3Yy}Cp9OgQ@zs@XANhzbEETwi=Ioe%Q2T1uBNVh z*EZKVH#@hrZs*+*cQ5y1_kIt58IR>2)gF&M)jbnEn>}Z|ti0BEo%cq2`+4v59`;f8 zVfi%q%=p^)uJ!HlBl(5;Rr@{h*Z1f9cLl%!z5%-e9xl^b##`1A2m*ZqcLhEQ(g|7} z^kXn4I4HO#_-Tk)NPb9fC?zyD^l0dtFxRlMum{U^mkXD7hf9XXgg1qM&qcULlt+w2 znnbRRydI?(#f|EW#zu!nH%8B{@K~{X#dwTWOi|38l{zbPR$g7DxGHtknOMnKX6(s0 zbX-K-(YO!HKxRF2Hr^+GU;GTqjkSmMobAl6U{7%zIOUv)1c!w3gvmsQ#9fI~Nlrz=6$;c zwT88(J6|n-WB%w`m$h~4pmp)GHhtv0VYX+AHW4#TBo2$L_vbX<1pjhpz}3Y2Bx^Z`;1P{p|fi2b>SI)GF7O)V@E+J$SdytFFCXyT0-e z=1|t5rw!o^z27pvZE93(ENT3Bn0I*ONXU_%CYz?Fqe@51n&D<)^VG4JV>iBY|E{ye zsHLuz)>?8L92Xvc_I=#P6$aLXUfhJ&K90sIG1;B_I$?q=?jS$#=2v>A6$&Qc&jJ4r~i`Q zr7M>`FJJ6+={@`mOuh2W$p9Z`j`G8eBSf zcF1Yy!cF&oo0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUum zrN{L@>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sj zp7DHsy69KwU-!MxeeuI@&cF4|M9z%AW_C>#Ap$xdRQc(F6iJ=t$f@T2b*kIoQrY&J>XaxzH34I5w1U)dvTl1|3usXOk)qoQEj(J(J9q?v9 zYX*eVs2st%6ZIgY(wwwJ)L%yAs=%{XhZg6SJtVUAvMxBx5nh2IBspe~t}OnuM=Ie$a1!Or|Zdrc5Ud@Q;agY{hwadVYeRzj>Q> zhF08tc#Kr)>}%)Es3ArNFD9;c0FX81N^6O+05$&ss|xS)&YG@BCuIVSu4U}3V#DWf zAf`l&$x|U5k=Ikt`4S!EG%BE|CXdTZzIjzZgJwRNfwtRVsT6aER+zTLv?boA9e~qL zsD!>lYyyWCLa$sei%(@8*UOjN(>DpO4yiAmFVWf5G%enklE-J`F7>Z$(HLcmw>EFu db|3eknZLEW6_T#`+jIZ`002ovPDHLkV1k7G@Z|si delta 3112 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 delta 3140 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 delta 3182 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 U2Zgb}DgXcg07*qoM6N<$f;0#4HUIzs diff --git a/src/main/resources/assets/galacticraft/textures/block/mars_tin_ore.png b/src/main/resources/assets/galacticraft/textures/block/mars_tin_ore.png index 207f026d4e88ce5248dc6e6dbbfae95ee1a45478..2dd0229bf473ea4f194f9da354fafdfac86a9d0e 100644 GIT binary patch delta 615 zcmV-t0+{`!1b_vQB!2;OQb$4nuFf3k0006yNkl(!5;*Rs2B0jgNH&zp*A&m zP>ULfiAnmio9)ibu7|;;;2gj2y*JdRbA?2x=XZh)w+~E0As>}HPp`6)2f8~M^0->Ns zx@-VK%7!1>CVvy5!D+Pd@olvymuX8a-5lGjZItF;2F;+psW^?uP&Q+m%;KuzMgWA8 zoHD(A{B&0r**_E5)i(=$yZ01-{a9Z8R$M8p-oEYz(w8d1D8SC%d#sCOc%WNzdiU+@ zzkH|P+56<;$$GgSOX^)yohblczShW4Hj^FC18`@jy?>?;AT~-U34l}Pq?5W;aU(L= z+um-q#7f#_03&mY+b3*1oLcjuKi(ES)VV{b(4bh`7C(oTe^Z(NE8v4u@SM;dUhETNpTv~oLTkXmHUTYLr3i8D* z)$|BqZeSpV3Oxan8tGQfIU|=2cgAd;xmeN}o$SjVD6SMLcdvPZrdv4x5~o$)X!{u2 zE+M55vf@S^HUYrmY{vnPIU4E->IRW*GEczb>Myp;NSK#OM^*p;002ovPDHLkV1oKa BDlh;5 delta 524 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 A=l}o! literal 7472 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 delta 1496 zcmV;}1taB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y?lH)22 z{Ld-&2uMN*j)VEAdNRc)T;OYRx22L`b5$C6B4U|7+%#J`lV!jwSf$z17D> z7cuD~*w<69`P>8R#`k>S`Udmm52!QgOy{P!>sPw=r@ddZI)D1&2jJ}htuXi=SkkqR z7C$n|Va0e|=lZl(LTmNBU2HgHf3Bxq2f=$s*Ijt(n|&WIUl>;)2xn8^~5>jN4JMJf~sDPtufX9!m=Fyh7$ zFGJAC1=JKloqvHI`Rg#>8T@3lmaSq0ptpw$E6oeB^8g)2>fdUngh0D^;{os->oIS{ zk}}8x=Aai$_BdS}3@>fb5CEwi>wM}9q;%GBsKjY()?|Q`0_%YoJXk>#07n>{&Q) zk~=pAY%<`LLRSH~!Q$@4+>d!PiuHHA;ZK+|ow|R(9GXfSZ(p!hdMC_- zv9k(0rk1q&8cD*Sf7W0t;8@#LuZpp-N1s^BhJUXG`EIM;0$z(bAJdigJPT;mw9uc6Gnwax)A}$9-oQZoutM>IXhOT{H8gU3cK7 z|AV(X=}TlT7ItQju>fAdZpv9etZVaB_ByokS`uZyNwe3(=f((aK7^MxZ2Zm-@`Lix zxThNMfxnR^zawV)%1+3*Zao0Y>KJ~fc7OF9TFTzRgLtb<+#}fSZu%D4ywEyb@D{x7 zSWS4re8}^w;?28C-QFBvU2Ue2r@a*{&vTZ zn*O5`%^z%sU9#>~?E;Y@6#{siu{d=Be=3mxt^fc5V@X6oR4C6)Qd_EnFc6(r5<$dv zH+TOlDy4`qnVI`>iqsDo#(19LzrVkI-)pVRJjRHK-a8R(+jbm>h?rSs5|O)qJ|Eln zy|q?K$xKz9bDEim^xm-%k%$;$Ff$R^vMeHU90xN;1QCgdyNk%WuI`?hnTg+sf5?DD zL`0;j^z$$?GrK!JwbtC-GLxC{HnaQmoD=YvMP$x-U6&CNNavh@#32#6IYmTOBO)`+ z-I33n6I#s-G9m&frIg;gs;a8JUN4Xmk(osVuz{DEU$17^+vD;0H9E$)uIoI{%v{%X z+cstvk?Xot6|(>UB{1`{EYIhYe~4OZu$!5+R#nYR6OmF1MAup&AR-U|IzhycVCWpH zyN8H~2zLkS9UT$LJ>Ayb-Q7zmwN?>9cVH$W0q>20vc?$ad5$rD^&qitbvYQ#{2z7Ehq$G{sYA1HQ>{<%2ogX002ovPDHLk0$_r%xZ!^Q diff --git a/src/main/resources/assets/galacticraft/textures/block/moon_berry_bush_0.png b/src/main/resources/assets/galacticraft/textures/block/moon_berry_bush_0.png index a2a8be3607bc6bc3e1675f24e3be6a60971c3755..3b4c71bc494e2981d5fbcefcb2d0f79f7ead6514 100644 GIT binary patch delta 276 zcmV+v0qg#i0=xo{F@N?+L_t(IjqQ=qYJ)Hsg};wv^RsnU{_;|u?O;D zd?2ri4`D$l#d;$`L?(G?4+g*wV+JjaC$+HWgO+CMmw#bJ%Y)hOSAPKXsxj52Bn$#<*sW&M zL5rGaM|#!ZhcTYi!VhDf-rj#vj0oDg5c5T3w)+*mYEWIr!}BA6Bbri-0&M?0I}!!~ zFCVX*Pgi=?kY^?9&CYsU$f!bF7ot}Up48&!=1~pn`S%g+*PTySs!NF{wWzwzfHc!# afNx|BYm;7|$_-lp0000#erv7<0|A%fN471!t{W~L z@>;WYPvR3+HZyr$9oL73vs2Q`c;$bdd1G3Cz}X>n&h-|)WS`5Mp6_xOUXUiTIjjC# z33Gz=xivXWfznq+7$ue%{j_#^t=q+Lz-6&owy;Qzz6hhqua`#JKJT|PIvB6&oRhlh k>;;yFWiRUkud0ga9ntj=`Tb&gH_$~4p00i_>zopr0LTegFaQ7m diff --git a/src/main/resources/assets/galacticraft/textures/block/moon_berry_bush_1.png b/src/main/resources/assets/galacticraft/textures/block/moon_berry_bush_1.png index 6a85958f13d2ee781691c55b00d828bbf4cc1f58..d72ff89bbf9cc341cb23c712f05a62f651e5bf26 100644 GIT binary patch delta 532 zcmV+v0_*+d0=Wc`Fn{rn!X~9`kz!LUVQ~vtg2fhYVIf#auu7BvAYDiiK~gBgfFFZQG0wEJh1`cR-s;YK z_ntZT-18JbE|+6FuC8yAcC(=XDz$pj>$KE%jqAGXZ6B7()qh0t+q;&|udZ*B%{z$? z0E2#4$=|0lpHjJ+^g1oIn0O5O-484jz>nLz1RxFrPS4Mn&U^q?%jn&ij3i82e}1Vw zfL^Dij!*I!md(r4GmDAGcsSzV(8RE805WMuk8*l`rrGEbetxg3I1D(-XF1AeF%1)8 z_4YbJ#t|Ti{eMl7wf0aTqY@ca`h9Yk=Q> z|0S8Uqv=I)MB$>ybmp^KM)-3NCzaJq#Z=lzvh#Mcp?{({0^sd+LMH8SaA@MBvK*h} z@#h|K80;2Nb}SU7SODWNz%)$#T`E@-?E{HQt)9qyrm^;bX_%OX$)MlW?7n`xOvDH8 zMBH4dh$uh;EJ8m%+^e0BNt##7b&+A&_;XJ;5Bgp8_;9b^#QrwGw%-AyL2SJl{{dLD W79-KFr41zj0000pF z8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF*7s+TY3Nh0M$uEK~y+TeUC8;LNO3T zJ#h|UBlyuqQ7aJ}!O9ydFY>}928(fL*PXZdt5V8T=lkQW-+vu%&5!ySEQd>725^18 zss}*tf2pofUeC}hjOq^;5KCMoh{l;AW&#_DB?D-^SsH}@{2XTb4uA-HT~7s~Pgn<# zjPSmOm*^8T1>_Y2=?&sh2S6b@-1KtFXEPsxC`%#ks00I?BL_t(IjeV1`Yg17a#(%fykS2MTgtvrJ1C4_q z2m#3;y4YF7shji(521D_z78!2zO5OOPQ~R7uWO+cihn}4hY)HJ3MG|isaYNg_cb+x z;B_ePlD5V(9qv6J=R4nb4orx45b7-VH@5Vox~ZEFt82a~4u5y|Ox_McJ^uIKuI(Vy zOWwX72TcOs8K=1LVv$C)sH4MeY7hEcB$tLsf1qwP@?1wu0r>07qF8>z&i)91UN`2r zb41b3Q;;?Q<&reua!KO3jxY=WytmWhAksSOjHuMA(2W5Ys)YCiigupWHD8xYlKAAO zVI#(AWnKCM#eYR|$xtPzG-YOXj-g5@NSmUar`L@sNE?5BSr`|3-I)GB@$Ji3$|Y$4 zPo6(D`A{Wzt|PLsV9dr=(-*yNj7n4P-+M)+R^|Nc6o7}1A2C1wj+K><97I|VRf501 zEX)WQ{r*6~p9KIGUgp^Oyv;>&$@$qSuNT`yoe_GNh#FLhVN>c!&Wl@ke=Vzx#%Q9n6{R`Y` z`a)V3m0FdV**TPM1(7^TTNetyL-A)t8&~qG7e1N?GSw06j}F) z(GEi04mLuat+&6irQN0X6Yt^HHF~ZiJl7FJm6*5S)209z_dkojqQm>fSk|(500000 LNkvXXu0mjf0H+zR delta 353 zcmV-n0iOQe1cU>SEPsy+{9y$E000SaNLh0L01mxQE&4T**Poen&%(XPa*PFI@00000NkvXXu0mjf@a&R; diff --git a/src/main/resources/assets/galacticraft/textures/block/moon_berry_bush_3.png b/src/main/resources/assets/galacticraft/textures/block/moon_berry_bush_3.png index 6f44cb592f41f113737eab60ba7b7698de1011ef..1ad287398e9e823c858d928a35f30275b97a982a 100644 GIT binary patch delta 568 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 B9Jc@f diff --git a/src/main/resources/assets/galacticraft/textures/block/moon_cheese_log_top.png b/src/main/resources/assets/galacticraft/textures/block/moon_cheese_log_top.png index b48c000ffbd461ebdec647bd8d62b399d8f482c3..6dbae912da7ee231462104bfea59e8277e39ec6a 100644 GIT binary patch delta 3011 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/moon_dirt.png b/src/main/resources/assets/galacticraft/textures/block/moon_dirt.png index 43d5d919ee44a8a8bd4d77e585d2c5dfa7dcc9ff..4766b2af390ba4241dbf8b495055e20e2c543125 100644 GIT binary patch delta 366 zcmV-!0g?XQ4fh3*BNYLJX+uL$Nkc;*aB^>EX>4Tx04R~OMFe#Lf0SnG;{X5wE=fc| zR49>MlEH4nFbqSvh_2lxKR)cRZ(WgKRxJZNuvLoX5IBw~JyH7j{QmM^2M{w_tpKcW zj_B?*l4gYf<_H~@IRXFx8m&;bR!Ad&h?&u5Hb*SooiqUTT2tI=yKOhp>h)O@z@vM2 z=en(V1>o2ZydGsOe=GpHcL1%{lP|g7iKm_snRHPyMX2d))XdB*3rfahXlk9--PFshBYy+|dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Ywa_lG! z{bv=k1oYyu95AM8c5s(J!Zz3qagwRJCT$1^z0Q%k&Hm@#YW~p&f;hwCgNx2teK>N& zq>EthXTRoi4=f+={=oGH^W_2ROghuK>G?XPYro68F{`344u3$V3pC8&)38t1K3e?n zXuECP;as0uOQ>}}qf6{G4eku;G-0|L70j9?I<7e#UO%F1e~hRj*km_gThwCKu|Wg` zvK1JLfdmzHC^~PjsgI01dYutBq+>6T$A}wQ0^&BHqNhlO0wHa<6A>H2;R_sg<6&=u zpq2}$D1s^jy?^rUFh2?WX4JY_%@Ke`4_B_#FT{oev@}wCtC#`;^}^8l6< zK{?VKG{9u@sUi#9+@ga3q;jJ3$uIDwp@s)bSZ#|s1EdgG2PELYdPEPvgh2sH>Nyf) zRs=uW$SXFHl7E85EXp6xK{=F!ghj-OmmpD+ zapc&EbI!X~bIFruFW!0YgO5H13LGT3;6n&8q==EUBqh4&V~8=Pq&5?qBuQ^4l}IUL zrp#Hg%RYx3bJ~Z-4y#($ayY8R@@_#ddjg&H16H90>}(_QbIqC*9=J|hh?MGP4fao-S7LSw_s24Kd9 zT*J&p)T$6vC#7Liz$ODuA>Ox;Q`Hblb$+Vc}P=XPU8Iz=|JEnI}o}oOoP7TGWluy!@nP^+B8Ml%ccMo-~eg!7N>f zmd-Lli_1}dErz)Ia)tJdFH3E`cPxYk0Fu$tvmCmCqdrcVbE2fuD zXkYX4MBIEL{Z*%#%X6w^9vw2j<#cI`Ff;7Y)?YlzuU~F+`|Yz?obLs5Cpf;9-P5f3 zkXW$5w-$NRe*+mgdD2t&EZ z`S$#BYa93BG)!lg2Ty{L5W;@ncU8H2M7X;oGdoX^oO5&K{(irq zJLkB&yQ`sQR!^+8`n!oD!ptOT?+peHBvH!ARYYW_stV{iCo>}gN=fvgIjX8knF#@Z z+04vLGn;c()o-bpMT8JXlNS9a%nYQN33@oN3tJ>fqKM4brL~s3Q;le>fatoea}KV2 zS^B@}TU&3i&2@K0#GI4XEwt<4T5B z8esmzSm@qcuh*;hR M07*qoM6N<$g6{U2a{vGU diff --git a/src/main/resources/assets/galacticraft/textures/block/moon_rock.png b/src/main/resources/assets/galacticraft/textures/block/moon_rock.png index 13ca4673f23922726763a9a66294ab4aceea8cd6..57436b03f9f12ce31d600ea37329ef8e1bcd17ba 100644 GIT binary patch delta 336 zcmV-W0k8h<4%r2eBNYLJX+uL$Nkc;*aB^>EX>4Tx04R~OaRhY%f0SnG;{X5w5J^Nq zR49>MQp<9~APn4Mf$Y>AI{np7^Wk=aWfG=`wG~oMLeJfmK7Ox10HOu}nnnNsY~N_m zGflaa#rCaQlc=FutJVMjM;-urGyy;<3!PDeXc{%WS~ArhPXH>zy4*RO^-+VY%iU8w zZ~lzLGfnxNun~wve+>+jvdky?YHiLJ2SX>pOHYwqInyg$k^>SEueYi)c%WxOs2-K5 zq1V(wI}D#wtwjyu7Bg($SgC1rmC2K~theeg*pCbP*Pbc?kngYTNoVZs^^7%*FO{g8 z6IB^l-!ldvt|^(!`NEwX`jFV;$wt+hkPQR0{mwX+U2vYDF7ylX%kf7^xOk2|RO0be iYy7GVepj61eg6QvP3};;<+LLJ0000 delta 1500 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 delta 1336 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 JPDHLkV1m`XiTnTn literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/moon_turf_path_side.png b/src/main/resources/assets/galacticraft/textures/block/moon_turf_path_side.png new file mode 100644 index 0000000000000000000000000000000000000000..f1a6c1c1e93bfcc96cd391ec0a41764927869e11 GIT binary patch literal 2994 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 RuJ@VVD_U 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 JPDHLkV1iM{p49*V literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/netherite_rocket_launch_pad_side.png b/src/main/resources/assets/galacticraft/textures/block/netherite_rocket_launch_pad_side.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d277e22fb43bbfa87bae9cd2abfd431385c5bc GIT binary patch literal 345 zcmV-f0jBPx$6G=otR5*>5lF?3sFcgMAlhUogLYJ5=K85;pCdPME-@wI-O}Vg)LAP#+UJ%My z0NHoL38yFhehxQJ&o969V6FAFQmXU4xPN@;95%-IT5H|eFA9rze|_r{@T>-UVzXJ3 zB$~VB0x=DJBZ^e(U{N&Mr+vx#>zgbyh+R>VB-%G>va`C6T~Q+9sJhke4*;m?WN@fH z2M|YLV{mW|z(2>(GPqqVed98J&G~ouTzymq&K-g4^8+|{L`WF`?QCO_GN=rcQq1&x zP`{>*ad3__O&f#LzC=vJR?a@^xKaky768mPhiwkPM9R*=%MJN0Or&I{=l|-T$H>i3 r^B-L18;dtES=Q1U6Twh)VdccqdRJRA zC%MY+lZe=bbTCR%j-_KI4`gNEzKfG=f<1P~X6MLPODG*jpzs($5TJN}V}b9$!Ex%3 z8UWBA&rUHto3rR78{_Kw20D&-nDQ$Jtm6p1+xv$_>zY46M9nkGpo<`9Bim{{qlBN6 zTj*cZ|F3nw@Q+9>_;AAm4DXAz_V*TK@AHdG0Kn@yhpj((7RukcB%2`3rT~ET%QLFd ipehaW)v~o0M1*e-9;b|Z$A3Wp0000X;gEfB&YZU#C-d@5c$ww~? zxH+=`JVzPDFTB40R0H%onrKoF5vlPg^{^eRFlvVmL_vP|mr*aFSF;)C5skYvSG0XU#FmU3vP= zl@fiG+9%1U5SmMtOllXqZgQ3>0Cd{{aaxpFdtpGgy|%?^QQZSyvJm`?@|MW~XuqZ= l$=j9;K>Ll^Hib<{(m!#wq?3l${E`3w002ovPDHLkV1fW;n-Bm1 diff --git a/src/main/resources/assets/galacticraft/textures/block/oxygen_bubble_distributor.png b/src/main/resources/assets/galacticraft/textures/block/oxygen_bubble_distributor.png index e4df548f91fc9ca25424b6b0df1fde17f4aac027..e92087453d51fffbd4f5abac082ceb132d3f1ea4 100644 GIT binary patch literal 455 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 TpK%~100000NkvXXu0mjfiIxn4 diff --git a/src/main/resources/assets/galacticraft/textures/block/oxygen_collector.png b/src/main/resources/assets/galacticraft/textures/block/oxygen_collector.png index ab7aa454396df848792d2472cc04ce1d6785e5c9..f9bfd112d62acd8872e728aa7d7e4170b13754cf 100644 GIT binary patch delta 863 zcmV-l1EBoZ2k8co7k@wq0ssI2oF8Dp00004XF*Lt006O$eEU(80009ZNklBjE6vzKI7D;8%vrV9xn!&*)5a?t>XzIwh=^WSp- zv)L_mO|#71IF4^_#wF7%R|?;%W*I=`<>I&K=bRdo$#(#iG5}o9lN%T%0M%;w^bYB&wSO9*s6it_2=-89Yv1>kQq=BtyWMUVfKsa0>pke9-|quxwObU)=xRhG zx)hNo9CxKs;lb;1lJkS-c@znScX)W{I8MsLZ1!t1S?nw8`u+at=_$LSd;l1Rk;;KA zCgU-+C*v_M!!l{pe8C-E9YxXV>Ix;zYnmiUiL#-U_J4gJK(pB(i}m$aY|2|%*xh|w zGk);IYc+!!)oPgsCzD%RqQNB!TU%Rth)I%gewmR)(i+Ei)udOa!|`i`zfVHhf<^dirCAf0X7^?IGA z$RP0-9)EPn;lcB~3=h;zd0-w~*A2sv=4KwCK?1-qjHL&zZJmevu`PL^l@>y5Zq{+f z1I_Xv52TCZn0es+dImhS+a2Hcb9q=4U*>+GbAK@S$|KY16j%dL78wn z4T)%MwObt0@$qpKMJW%&!-o@JPmV*%2y*d>F*^Lod}-n% pd7zMcu-2wmHsby_ybJf#J%}kx>EoE002ovPDHLkV1iEgrDOmA delta 974 zcmV;<12O#R2G<9W7k@Aa0ssI2mpyF&00004XF*Lt006O%3;baP00009a7bBm000ib z000ib0l1NC?EnA(7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%hhNHvLWs=l}o%RY^oa zR7gwhm03$0Q547X0c^w-6SL1GE{#;P?=h3zWR#f17&jC}jDH{^qDUS@3@8QhEf1w% zrXQ`p$qYfI5Rg#%(8Fc8_uR9e^S`58D<;&HmcspwlnTA&sK-n?GBY!yC@d^2xZQ4# zcg5pb@%z0lrjQy6EEY|trDQU}MsS*EXJ>VVLfq%~MWc~YdF|H^Bcc}<7u|06 z_4T#W`hr@s*?&l-R%7v)Lp0fJHpK&n&CLqZBO@aYhvW40^y%s8_V!kmWuwsuA1AA+ zBpwt6JY;hj41e#@&-bJS=K{Cu%kJUct%J2y862jVu9 zk?exW;jk+qaejV&zQ4cU-Q7*4QrT?w@bEAk4x@8$aDPCA=p&;k5E4ZWIKEE%WFc1tWl6^Xz#yp*Y z&#fe-w0|5Jn0O+V&*wHaWbQCVr+0RC$cH0qeO)e>ONnHhDrt=ih602rNvm|QR>VNfmr_*_Oc%ajEyZuX#;13B8GfHU0ree5f4m(*=!aBA(>2~Q!14*nGAs;eRp?vetwROrtnET zkn8pJH9#x(s8XqTJRTrH>a-QlluH|pJ|6b>_X#}|3I&5fHibfg=8TSxlH2g`K$WmZ zJAb#gw?QV*Q=g0hc%Yz2pPZagHU{38 zmX>%@K^(6J8`?)aJRb}><S-GvjKkrvPnciR49>UQ9Vx^K@=R|%pUK86nq;yMRZ27CC5@A0-^NK zz#pKb=J%vdnKDgMq)iirhz3zaRw8hO2w!*FGY0QI&RGeiShJkq6}$6Bt9fr`CpI?L zi6RjS002hC2mrHjEm7oKt#zLF1EMI)Qk1GFMh=9b&|3S}Rp5WFTCE<-Dgdp=+TULN zaNzY$n^5ost_R?+R&&PfmW#`pYW>w}JYi&^! z!QFo5`|h(4n=5ZlL@0j0?6uoX;Ola4v3t<&0=2mvH*l)eYF%FsPt!FaW`&qNI-aP@ z%lCs%dmoO7X8wO(tUCVk>S;WeX>BIGo9Ic?0cJB@7rzz`TtuFCH3@)-%9MLIT^Byw za(ed@jP4DGXKXSNinsgAkNNvpnK`}Kr>N%t&TE(XFcbg+=9}^AcN*^XzjX9~2T-Y0 z#w*RgID7z{na6xUG{ekN#zbcTh++V{&-Y*eK*|_6biqq7v$ZzxdQwWiPxEI3080ZP zNfH1`sqqA@H2|e@AotGPsZ*&0sKOnHM#{m`Rd&??kNGZhcvfZdP^XGBq8BA%p-B5uAT>M9f5a5t3*UYrAGz zjy-!H@=)#Vujsa(pTqD~ceZ)onAzbMhtJ)gFg!`$T7x8sm^~TtJU=+tpL74UKE0^* z#nnH*{q*a>)#AtBe|h%!yOFL3sXw}X=Ny5&niBD1*{_?^B=O0q|K{Yu{LY~geSh}D z`903f z*c;II-L%R@5F3RMNzOZ3}zUjG~0g;AlUz}7gYkqICR}kwE)s? zwCNP0U#fbDG z4fPPO9^79KDebDoZrRRev$FVCQa!{E4^K9#N<>~&%5w7Ay;(|c@(`xe>E-Jc5w7Xo zz47M{ABBH){VEiJKy7QP<_%_M-uo=iyz`RM(b3)d{V{q9A;doJRaFr}jFFhxv4MQaew>Kn(ssIVCuVR%uiiP$dQ)op=lkKqo-3 z6p8*3#BXEgv9JLvG*jtRlthW-I}(BfgUb=s!=3H(N0LExB ziF|7^bCRSEk^k{AK~0LH6vgvgX11n?BUih<+zJC`Z6C^_l)``Q_OdjInKS48y0VXPe*ccBdUITw@Fo0U#n{j16rx8nciDYamFIahj5?jp$?1tL7ss&x`6n%q zk~kfWMq$`8MhkyEV?F^8EeJ73=t`(0_jGze-y8$=MHreh>h-xIDhNJVtF<91E^4H)(p{`~4vJd3c$8eT%aw%Kx91 z;V|nw&wr{3fJd#N_5R{goeY4vqoc$6dU=0qi`o`i$+9KPNs@HNC5lo?l&Y%it5WJ0 X%x2prl5HN-00000NkvXXu0mjft3=9o delta 647 zcmV;20(kw^2CfLOvjKksWl2OqR4C6?%FAxkP!NFOnK>87v2%eYy`-f)_1 z0w6@_8?UwUUa~x=C<_11=INps3`gmrD5`pqm4nq$nib2!m1Td^Fx4K*O42Ng+M#+d z-t-M09UXu9^7-l0XMt^vHb!MxjmHmvPN%aZDT=bHocA0AfiX%w*xF#hruN-V_v-3O z8+~%}X)>97{q{9UlIzUwm)4xcaikRy3tMY{{P@ny!@*#EZEbgNXF8qsdcC@? zg>O`F(8wPjCJ@nDA3i>e<94^(ajtsu_=(aKSZl3CjD2;gc-t5wB7{UpSXJfP z>iWUKq1Jjfn?+GPc{Wi>v1e2vLJX>?U5yB&5MLY}=7rnZ+(v@^NBgZ-czSkvb8~&K zf4?XT5I{lz6yfDEC-hnby!W@af5LWnesL}$Raq%gX*z!wVE`bdl_KvwGZTUK-V-S= zb=2tvEm#?>{Jxxj{CEQYHyHM}wzd&~w9!PArfHt#NwQ$((Z=TUFuYq|y*|D(A!uPB zM5QQ>V&;9S+zAPQaOtRYgG hJ-4iFhxeUp{sEbBScGJV)F=P|002ovPDHLkV1lDrHl6?g diff --git a/src/main/resources/assets/galacticraft/textures/block/oxygen_decompressor.png b/src/main/resources/assets/galacticraft/textures/block/oxygen_decompressor.png index 24e89b470918ef19475b0271a773a8162f377587..f196edbecd75f9c4b53e0527ccc47fc783c234d8 100644 GIT binary patch delta 479 zcmV<50U-YK2!{u-vjKkrzDYzuR5*=wl22fuEe5d~G3k1c))BPRS{g zQl=aPQZiy(6G90uy+%c;s)~P{GbtNJK_88F+7f&q zl!5ttMpXuUjFB=_?C$IlLSWT(I8{O!_~Yy)l*Z?~U*Mdwv%O195z9v3_aGU~DPuXa zTCHfOEz`Con)b$!ETQ=?{vs`A(Cnj-At{08&Y$6Q}uGu*2fw)+&` zbNZ&C2#5G$1Jh4gu9g^vW&;3G4=74vG#+4<@m7Esb<<$t5K+7{>bfGQ%zC{>ohr^b zFa;5OaEwP4%VkHOdMv_lI0QVZLfs4rp};VlDvE%rf_Q(x7>@=N!65<&WVr=)+F=Nz zQHj`XEGnpTO3n#U!#l_JR*fYigup>N<9M>7swz@+l)*D73;v&a@9{YqW?;z}RzkK! zdo$;U?;r5w@wWi{^6T$B|G6cEjB_xXttra^0%*33h;aPLznD$9n!MrY?hGumBf{SP zE{pjMkH3E_iTxRu7q2 diff --git a/src/main/resources/assets/galacticraft/textures/block/oxygen_sealer_top.png b/src/main/resources/assets/galacticraft/textures/block/oxygen_sealer_top.png index 51994bf1872f2b2482fd8e3ac9d66daddfb8b32b..c3c220af7415432b9b345a44f70ff7921c7623e1 100644 GIT binary patch delta 397 zcmV;80doGH1f~O!BYyw^b5ch_0Itp)=>Px$U`a$lR5*>5lkIAQFcgNL7M)#EhZb}& z3Zs7pGT3cwx4k>qMU;YCKbUFOlEL=Fn#Qg$`u;I_(3AJP$4uVdUVns;1harahy4Kn zt#_6QAxBIpMOD>!LP&}t=Un?^5rEk&Kq)n1gS=t!bYBz4{eLOZT>u2MpTh?Sn&#wY zTN^fAgfZq+AdV&PAGQeqvMi%43%1(|khZ|fY6UU3u$LD-@41MZWb6;wj`d<#m5QPwcCd)Ewd$n2tkR&Ndl3FgMWV>El*PdIg zEDOrAu=^xQ?SJ0oH|Gwt)&R$}PfC*XB7X>-47C0Nuyej<3cl};L%e1RgQh~<_BLzt zC+(u>`@S@V{r)ii6Z_s;pe35*L<>OYJTE0I0TfM>^Nkrf@RU*jY`Vz8+MI4CxqGoB r=kltm{sY^#9R)SWnDObp@AC_Y?6Hq~8AEIU0000&o728Lk?K&>;aO#pbi;m7Yc1Q9eiq}0(kqfBoZhJmq+40&L^UbEe9$vGd{ zFffiIee`280@A$Ebsg?J8XoF{p0Z&WsIws=G;av*s4BR>Fh1!2#tyhU5(Etrn5F~W zc?bHs1YVU8K!0LDn>D7XkkX3xAJ;t9JkRX+dp4WRGyd)J5|JJ=L*2p5aGdRS`^>oC z?*U%$=#ADIA|PglNMt&UI8DdrDP^M0;4x69LYD-IO0&kI>sSsKlv4QzZj?4-Zc|Jo00000NkvXX Hu0mjf0O|J> diff --git a/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_0.png b/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_0.png index f17329483b35a5ec1bfba49fcdb16bc5a4b0d5cc..0236a50620974606deba2bb764e2787fa728d89d 100644 GIT binary patch delta 335 zcmV-V0kHn^2lxfBvjKkrFG)l}R5*=&lR<97AP_}gBO^Nln>tZ?faVJ66`K1WB2ptr zvjFPIi*^$*IBxz5eVCd5XNH&K@$*+i({?Qhx8Vjrj3IL(y5hX|ICr5D(VWj;%rV@P z0CZi8_rBs1nsnIh-q>vWd-jl3lvRx}h-hLASnC+aaZ0e+_Bnqr1;qGMRTEi1@J;Cx zz*@`cbb62qu;0I9t*y9K@;jGZLMeq(ir2o+Tz7B!DiP0umuyrDLy!O0^scBse&>%_aI67uLmW(4~Xczl}f3}!hD=1La6V`w~fd; zTSym&j{`u}6Yoa@-^@R5;6hl1*l_|Mv}>cbBLcw>RHV zfSe681>oVw0|4vI2Gs$8yW77wygbrc=j!?=o}XX1yZIAQp(I~oCtT^9rw=R@XUG~ zDYfF=@dz~M#KnJy3jkD?8nu?!v-L(0SXv%G9(Saa$U_DMt+jGGot8c+0nmHLQliz0 z_l}5SX0O#!GAtP?f}Tz%RFwHN6X5`i~Zwh~U@3=cj)esR>6_vNRDQ8-1 zxcC3W2QV|jeeszp<2cfLXP%FXL5qnNW#aO*n6=~PHt`V_>(BfRfFbwAc%hi8E6JtUM-&r@2`4wNJ zJ^`F_>~^~=sQ{bJGtRk;n?=8uvQrpiFvjq(SSVMGL!U+BR`QgMOo501WKTJTy0+>+ zzKAL)tCG65lZn>me5zsw5JCW;afh1<(qx@Ml=R;WQh47YVs$HxG3Px9q1B7_>6QEW z-|$Y=oF6UmuCY}Sg~(hj#EX~p7r;1^Ub}xD&KA3_&o?pk7z5LUv(kJ!3-3Ju&NWI_ v7tcBMiL^k|Tz5Ghk9tlQX&8nq&KScl{c55RoK08D00000NkvXXu0mjfh8(0o delta 614 zcmV-s0-61W28{@?vjKksL`g(JR5;6hl1*|WMG%F*%&Ka2OEVhFf&nHb2$&$a47cDG zv*RcPS7ODIiGi>UGPYz(-Sv~nqBVA~;caS>85Q4qFXg-Mzx72*r`miF6%+^>Xl|G} zK@|;(h!R6UR55eFND*R6iMMaR88({>u5WJm;`M9x_j_{5v^sx+B;LIFio3f#!_c$) z`-;_z3p50-uRfpvDFs4M0B--e1z@>aq1pj(bNv^`$2)3mTyDSQ;o*^+t3LsVDR!(@ zFE}1gY`2$u{O~)UB&w(g8K*VlboxlYd`Sp_u3wU;1F`Em?(g?>i;g4-fc1Jq&J&A% zz|Al-%o@kz1IvHDCzpaX!`#u7BI{Rc090oirR1l#wu<9~IDdXR?TImxx&#PXN?{zw z*-wlBwAKhQQcJ;FLqrK7JXwn|5Mn?@&~Y45QKoUi-2mwO0c#WCTpRE-0|+q^HGn{@ zwQ@W@o{0#Ft&;1a>>i}E4GV{6eFcp4u=C8lpze5JBSd15*M9t zdwW$?CAMaOlk)-hb6~0j-mqJf4IZ~y=R07*qoM6N<$f&!5n A-T(jq diff --git a/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_2.png b/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_2.png index 7a74da1242561774a71cb80adf6aab1622657774..1c679fdf72d17408e0bcb9f53efb5c4ec0faca63 100644 GIT binary patch delta 353 zcmV-n0iOPf2#N-j>`0N;B6oa-W|l+HM7Ep2RLzt zVIxsNDNE{FFD7c8^Qnq8fO8Ij)|~GuNRz`1iXbVSLHGQ|L-p_dDl1lH$*=cV`w=hF zT8j{3vM^s~3h!C-0jIHrQdP7NKD_R}0mhm5v17;Ad9v8|KEK4&V+c$WrtbN57S>t- zjA0?!GgckrKtSia=6R4K#+GbJbAP&7jBr?SHg|Emy3Th_%lAKg7mKbt))u3vpn$2-!f_8w z6*WafNoI&D?g2Pmg4A^#@7{eoZZ;QO-`w!!>(}facI1+2^#p&?@%HT-?(cVuQN{U?W~dunZ5ZolI3@rj$OKLAKw>RGK` za5x;-C15ClXuW4R5Wv50!t^E4)hZ(_)a3{h^rpho3wAPrW<2=yy>?-UJjR+7C z@c+1LPHm2=l0=nKGX&&w2EYCC6aS~2^W08AQZrPHsZ1bndHDq%jgkw;X<~D+VH^h{ z;P&>GsbpJ*b0Z!>igP%EP;%kaCYH-3FW0ZwE_%9@D7CWR?@?1m8}XS7GbJs0;qLCL xs!D3jfgtBS5$DcTL7=uahmFi9tgz^N{sG`lF`_kb5R3o-002ovPDHLkV1f^CDyskh diff --git a/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_3.png b/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_3.png index fbcf703558887f700909834480f5ab4b5e31f019..88812b144cc9f5b23ea754f37a94fd72fa1c9d92 100644 GIT binary patch delta 354 zcmV-o0iFJk2#W@=vjKkrLPR%mU`r!ESB5CQOwn5R`GC{dLS(5e#1HSAFMx3-y;lD`omAL$eSV1%B1;WS1^4Rtbr#-x z0Gw-;tS0N6`-wC`+dft~pU?VE4`~?k;TmK31=D<~*PZYxKmY&$07*qoM6N<$f^OWV A-T(jq delta 617 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 N002ovPDHLkV1lPYBFz8* diff --git a/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_7.png b/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_7.png index 719787e59d647bc164aa2bbb3271df21982e8ba5..c8d6d70c9e10723274e59c72dd7c541204b9418f 100644 GIT binary patch delta 351 zcmV-l0igbr2#5x-vjKkrKS@MER5*=&lfiDnFc3svX)K3LE(JudmCA=yy_Em|2at*! zK&oRBMOAwscI+f#Pu6B^9SOeRurI(;*a zrf&j}=NfBmlJk-I$9DV5db8@g*FihDEC8Hy095AuP(ch1Gw_n)8T{V5S+KP=B1O1L zrPN?yyv{hetc>&&dR02ot+ xWIkHw+)or5RMnK_dcB6XQo~VoT{>K)6#t{rsCz-mei;A&002ovPDHLkV1jb)rkel& delta 621 zcmV-z0+RiR29yY}vjKksOG!jQR5;6hkxgxp}%vir;8BmxAh#IsOy=NSEEQS-h zzN1tj*IJpT>By7wF<|qW^Ve6*^Gux^tvO-#f|hflc|t|dX_`<`=4mFv0qE2TYm`!O zYlIndDK7yjXR;;`$gMRFhbI7PtpGd~gQ+nV!{WGP9-n{ZA|Qf$kO5jVLKR)R!xWqs){}bBvD+1=7Cis;&}H3Atl0{2q!01hGD?WnCFq> zM-{P#Tf;o)lCsdx2+f>kj;fMHmD&mflxGLO{`@2VH%GaK1Y}JKmBd_U5V*X&!o#Sg zGR`v>=NDxxmje-Se}B(h3&V3;9zhPb7qhigCYxEUR-Bxkv03zVIa6C>zu%)tS*9f( z0V1TNM2yvY7)xDf?$}kW@jS*|8}_@Ca04(f9lVerQQADc4(B00000NkvXX Hu0mjfyR9UH diff --git a/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_8.png b/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_8.png index 1a8fbf402012a90b62e540422a83fd8c034bc7cd..64e3b7a481bc1306b3ffe28a5e79279038f3b9d5 100644 GIT binary patch delta 349 zcmV-j0iynq2!;l*vjKkrJxN4CR5*==ld)36Fbsx2N?fOM7TR8U1vXxRjlTcN#K1t$ zDZRsSlgn{1G_IVobzjG3Ok0eWVaE91fpM ztsRO0l%>Wwm&Jk=!P)H|*=*NC^(L}NyH-_&h{5{?Yis(x9}9nMw(AHC0PoLPH<8sW zUZgq!thKx?pDrKEobEI4SZn7J+P0g~zF(>6>+;h1L9OxrBhCe25t9A`Ph|vKT!Jzr zYi?OpnW#T(Br?#YrmDxp}%viEU6B0&Y0*G*M9ge~Y zyz)Uh7w_Ocpa(toZB9AOGb~dH2KjvFN(7Su8~b1(GH#9QPop zqDc`^a!QCQ?g2PmhTL@>Z{L2m+-%OcxxMA9%S(2TJ4!8Bn?Qd$uCBi3;bF&eIdJ#a zHS1SrXiD5%e?$SgE|HP~aR2u`0IT&H)gFM`n?HGedZ0DqeEWvapP#tB{sVyA<(~EW z70=Hj+wD1@KK{-@$LSW{M<0ppI2`MG|VMUqu#OLc$qqCCqROYAIjPa!xc)s0cbu6DrC)%|ti=)t%CuYJmrc zfb*i1Gg%V|P4I2y7ToD8hFnh5O1Vn#u4>CY&hKL}d$C2QvG{&hh zbcyCcwf|-a%nWxYt0qJQRYi{mDhjFuFjgZFROAIACBmHuCnr^gVZh9o=aECAide&~ zVIFiz={3F>G;^9cs!A4BYAX;>jyL%2mk<1(N-4M*5|A||R1$NYLE!xS0uQ5>$~ez# z&NeKU0}*0ycX!8J3&XK3k08hKK?I?e%49RE)rynT*K8L(UCz|j*zfmfQkH3n$D!Ml zl)UJL`}^yrD)~@VP|BV-A}3W4Xm)5y5j+A_SoA&r007oKhZCPr@Bjb+07*qoM6N<$ Ef)AG<^Z)<= diff --git a/src/main/resources/assets/galacticraft/textures/block/poisonous_cavernous_vine.png b/src/main/resources/assets/galacticraft/textures/block/poisonous_cavernous_vine.png new file mode 100644 index 0000000000000000000000000000000000000000..c5777d698f9cceece9d9343f5bfa11c2e0a1307a GIT binary patch literal 3319 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/poisonous_cavernous_vine.png.mcmeta b/src/main/resources/assets/galacticraft/textures/block/poisonous_cavernous_vine.png.mcmeta new file mode 100644 index 000000000..60b5d0a60 --- /dev/null +++ b/src/main/resources/assets/galacticraft/textures/block/poisonous_cavernous_vine.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation": { + "frametime": 10, + "interpolate":true + } +} diff --git a/src/main/resources/assets/galacticraft/textures/block/pumice.png b/src/main/resources/assets/galacticraft/textures/block/pumice.png index 9a077b0ba62fd739ece5bb765a0c8640a40fdc6c..03cd825bc03fab5d99fd88644987f19e068b81ed 100644 GIT binary patch delta 3020 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 O0000KLZ*U+< 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/refinery_back.png b/src/main/resources/assets/galacticraft/textures/block/refinery_back.png index fcdaa54bfd271c588f5477a6fabccd29f5a1969a..093d3c647ed34d5578587f35a4f4539f392bd329 100644 GIT binary patch delta 376 zcmV-;0f+vi1D^wsFnV4e5Jf-8mN#A+w639ABvzC;0S(+CM?k4^ zfm|XtNkNqpq>NHP71O|Ky-*mlD=R34Vd5mpG@h|%{=6BvGoR0-OhqC90BD;QfOE$X zN|{n}*Ql@3OLu5_U1}8~`wU)wQEF8UFFBTgYV*rckB!9d3DHX4a>RF6V%Z(R6*#VWsssZVmbjg0)o9D{B<|F6acY#tF z32Uum?Ug$%`*E4NYO&Cc1|X`KdoUOPu-0#`K@jY$W;QIFs4%RF5KT}6`OuSi1VPXPc!J;=yqbOpioZrB8g(~| znW$Jh-I;xWV9^XUJyp~5=-Qy)qb1(rL|7T?%}^LoX4oI>f`848;Zy~_Qo@MtZtuka zCOM*2KUWmd-|0f;$!v)r48P_EvDMjBb;SWL%S0uEj&u+-FoI7eQ>{0S(is9A89sAv zz~1A>XAW>=j!(`o?u{<&x*)s5cCY&|enM$%&)GEnWa3~JM(%*8bnoCQfa5#}-&Y(g zfVgyrPCMe@X?7gXm|U*pvXY@#!J()I{;a^;v-OXKt;Q2rhI0gdJ>C3Cz9;iiHA07;OQtUHEr6aGdZ!&|- b{sW?4$U>C5;nJVj00000NkvXXu0mjfU+S+a diff --git a/src/main/resources/assets/galacticraft/textures/block/refinery_front.png b/src/main/resources/assets/galacticraft/textures/block/refinery_front.png index 1b635ba74d91216040dc0788af06579add83ba08..1be44bec4eff0eb42ecb0f076cfdc7e24a78c797 100644 GIT binary patch delta 435 zcmV;k0Zjg!1K9(RFnW zkmxBQT}4GlNk^3`9sNlh$`6SYibz)^6(1L6y?ffiJFIa-F)N?p74{p=c-|Y^E5qS| zlu6u)0RXU#1wd4DC}rY9V@z2tA}NzR|BnDoW0`b1u`$MnjDLu?Y$s##aQ~2|8=*+I z+XX=MOhnGP_JA?<)8o_T)~1w+ncf2Ul_~)Gb3U-p+X5Iu+0 zwz0eQ8i3aJ&na4k#26!lSoNhuWE)FVpJ{!j+gmz38sXCj!8=B5j$>ZGDFuK9e%wxd z$ELB)xs~DYpeV}q^^ZQ`|6=%>MNtq@RaKEO20&4ioGjoE7vAGLL}j@MBP>zCa*q1&Arw4fZGFC~p=eo`2YPTJ4nH_LEva?N)Trd)@ z$PVDeBN5qmU~Y%pNJR0a+2Q|4z*1YnN|L9jG%QQ&jc_t`9NVhbAx%F%A*xDMt)Igh zTNe<2=5yPz{kI_P@ciOGK0LuQ#HqC0OP4maKG^Ru$o?}T_aiT_ZsGzHEd!BX0ymST T#Hjs!00000NkvXXu0mjf_!OoD diff --git a/src/main/resources/assets/galacticraft/textures/block/sapphire_ore.png b/src/main/resources/assets/galacticraft/textures/block/sapphire_ore.png index bc2343ed8224a6545092f1b02c010668eacf2959..917e27c84decbcece7fae9a5af87a40896bfe76a 100644 GIT binary patch delta 607 zcmV-l0-*i3dH4j7B!2;OQb$4nuFf3k0006qNkl? z4UrlRr4B_3g5cCe7p3k>Db_{kP)fBG3c5IS5nMu+IygAhLB+*pbLrsdB2s8Yhmbab zn0J@FyX4}K-fONuc<|%*d%r*5@B6;k`o_~ffMIF?nDGRmNq?`S{4hQ;V$*K7kX{F0 z2Iz*V;md$(O#qP15HVi{090$o08HjjbB3v*nehbmrpx+fiJTnq+IP#-6i-aD0U0Q*XLhDFZ8IFqyx=QgM(s;|T@VmjSWO7wdg9 zo>15Te*Zn@sDII7x-gDqCnJ!CdGTd{el`d&d+QAVyXEg(y#AhS#!@SX(?ehPWq|DV z5RT8mpJVRad&}~I!L^AJQ-xWM8ZE4pdAdQjhj8Qx;TD=w>^VEk zFCIoP4&x4Wk{(SGY6n11kJ+RjmB@J=e0f?lY!k&-OcY`F%VV+`OEop)3AEu?2&c<# zPo2;2E(5TPbZ(sR>IT64SX3yB%K@DY`QRxyz~L#4DMNWQmHn! tvbNd>uu_IZ!002ovPDHLkV1h;nBIp1B literal 15543 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/sealable_aluminum_wire.png b/src/main/resources/assets/galacticraft/textures/block/sealable_aluminum_wire.png index 09ae00bb71dd83d2ef3d636e8f58173bb87bbe9e..6487518637686877f5c69e52a737ea0536908a4e 100644 GIT binary patch literal 3047 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 literal 3953 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 LNkvXXu0mjfc@Jwx diff --git a/src/main/resources/assets/galacticraft/textures/block/silicon_block.png b/src/main/resources/assets/galacticraft/textures/block/silicon_block.png index a7f3fdacd9d1e4da86cbcbfe2780978e188ce737..96d80f3488abb1c5bd0de02529f87175049d1e1c 100644 GIT binary patch literal 391 zcmV;20eJq2P)Px$K}keGR49>clCe(1Fcd{^BUkMnOI3_)b?DLwsk92@6F_1>75~7%0s{+Q#a1CP zA`lE^lS5Gehj5%QL_4&;eneQ1X13<8_Pm?O6vt-Vg zAdMDn)150a08(i)9s#iF&ZfJ64xMzIEc|#)Rf|xD>rLh-AxQu&`X>@QaBi|TZGO8{-6R%$wZtiB4vDS0B6e!0ItZIsuoo3cS+i= z$cSc%zot89GE3&%x>P#Pw*i3Cl{AyqcaTccdyygaCg|?*VMV{dr#UUXcce^H)xD#` l1VB^O{o#NL3gd76`Wqh!?Byw$iOT>0002ovPDHLkV1livtBn8v literal 1624 zcmV-e2B-OnP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGxhX4Q_hXIe}@nrx21?@>hK~zXfUDjDw zRYwp7;PX>dMgbKgB7@8zC@M$*A%Kd45C#=cRB&XTF##4n0Y5e0xy8CMsfS*D`*iPJ zyQ;eSCVynCr>E!s{re3K4ULVBb#-+nt*xzh@7^`C2M-?D@bu}^nVFe|g@q3vK1@$f zTdb+6sjsiMZD?rd_l!M!_|VF&Teq%Wy?XKD#S0fMB;DQJeSLkt-Me?Msi_I{?c2AV zY;JCDX=%B0=Z*<$Z*TAH>>L;vn3$M&_wF46D>rZ6ymaYOQBhIsG`6+11#zGo6TiE< zx)4wh`>Lv{%FD~qP!pPhgA|~ojE#+rj*j;C_usg2BR4k}kg=?+tfHc#va(VD;QmVh zm+z!8V*R88fdiQAuC1-58jW>^#@;{>CdRuu(G{u4jM0V072tuj&w!tJn9aZ#T= zd-nYKbMbuf;)R^akPR%Y+@>bmguynEFgJ=hZ;Xk6Fwu`I6DD>ND9qr1Ipy&K5z);=jZh+u8_-80?<+~`q}t|SroUy!9mT3f;Vs8 zpb4@sU%o6YEv>Gu8b5#jjN2ZvaO;DMi;I|WKu4TJwX**aSl0x_C;a;O@uS1$yyhbX zYiny88yhPtE2MxXPTcH4`ThHME5b!ql9tjh&_Nb+Uf9Q@hzWm<$f&^qcXM-dYio;? z<>h5NtsCjXy1u@yv13gFD@;Dz7eO;o2?*@A)d48k(Mdqm@N{QqXM1~lcX!ul9X)S| z`|;z);o%|Y{zKrJs3^I0CzPEVF8UxC8pnczabM8Ho$r5T4C4O&K9xS%e0+R-a&mHd zdU{SEEa7;dbKeUgh_c5EvF4y?n4k#`(8A4MaDQhE&B4KeZH%U$KYyN`ot+a%sk&6J z2wYUvt>uZ}+qZA2=2vhy1}+Sfbx~pvK?jG(?CtH@Y&<$TN(m$x0R<8uM0$Xps%a}B zc|#x*;G{Idg$zNAf<_8Kz6uczu`)u(iY6rxA5|X&+Oqzm?YLsDzQT_}f)X_oX6~?& zMZ_3B^avO!_|6F^fX?JVU(z7m00eGn+yjA@x?n*Q8KDgJzT;rr_jEuHCY@csl?EKzR#X%YXPo3Xh|u9Df)E$> zD@WoP5*!Ll1V@N)VDgfvS5Jauh?Ta5!@W~cjxp$Q?@VY4v!0zGU?~CLmA?W-;QjFi zcuzokNzhnSxZ1scnC_i!s&M5TlL=D-Y7D3(lPGS&7)-|W!Qn4B77CzCGH3)|P0yil zdAzK9SkzVA@Mz%r6>(auLcnBHb(#{g$X3F4E{lfhgbT=o%iutpuy}7J20h~VBOJLg zx{_`_ePW0ScRV#bpe*qxz)2ilb0@tpUML6njw4u&=Avh(3=!(#)k{E2k0dFFcsrd{ zd;ZL6WzgKD^vPsg&ZL8WSOPL|cT;ViGhcS^D&Mbo>L{ WVEY1|8zB(@0000Dr4VAM8<}(pvoM*OnN88e#ff9^Ztj`$_xqih z+GsSw-!FuaQUV~QOew_}l~R1nIU&Q{lbWT07@hW%uau?#xV>4Z-)q*_mwaB7n*$_VADp0uhN^y$G8J zV%w%oDx-VvXR{gaAf;3v4u{QVbG=?uQK&}o=H2_dkXa^|U-ur>Q%XuH)EmFo4}bo+ z+moH=&q}c)G%do$+S99xu`y+SLf06Lfe02gnP zU&TfM000SaNLh0L01FZT01FZU(%pXi0000PbVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-)@KG4UX2l>h(%0ZBwbR5(v{l09w$F%U-g9w|8iO2q|8k$*^ZNED%7DJhXC-9s$LqlO4$Eaa&o2KdO`15ckgc*s z%PTVMKfe_K2Xb**qf;R*xmr*e=J5l6Oy|p$9GXyFTau0zs1?vvfJlDIE&P!20MA|l z@bk=JoCi6oZhkcYauu%Nu`)BLLVX8vYqB@$V9`~YX9f9wO9~%vyR@OV;GoYy4{T(m z$nWXKS?lipQZ>zgZ_q1*WPj2Cr>t0TdM=eoPS~ESkM z^#FT1DZZZ~Jg5fnG?V}o&e4`R1uB4myv}r+y!G{bDZ+QVeKZ&0MdbJWE-GF=PFg*{ z0MOgo=IsW+%g1TV3E?6ZLyEAsZr;uNbeL&SUEgk_KL{h%KqaQcl%C%W-@b>XAwS|; zL}&<%OuY4<6)|uJ}=f9-Wi7K5sWg*uFkPK68pS zJ-?f`9(4hx)u*^2@#E>FOlc7r!JA+43g=iHjVS(m^=q1knV3>oDxB4=2v6bFTOSE( z_4RxSun}m0Y4s^Qjmx-*6ybThIUbh6nJEQx+-Ly*0Lq&beh_HAm(TzJ002ovPDHLk FV1oP1!0G@1 delta 713 zcmV;)0yh2j7o!@GBMtxrXF*Lt006O%3;baPu^~tbe*hq3NK#Dz0D2|>0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000JJOGiWiV*pP8Ld3;fqW}N^32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rd0u&b&BfeOn5&!@KE=fc|R4C5{!Ap|cHV^>NMt1`Q zNRB=ueJIK z`3R;FNXiOGS#og9waa;A8ax7i+}7H3Rb^|A$BCFqX=Df8qxZf@m#Unl?O9v}HZWNw zZ*MVc?!Uet{(EeJ&|5qm{91*`SZjHS{Wu2cf9jlzqW|9RpDx$SWqvLXHLyx4YtGUP zaT5>)o~J6xr1obj*YnX2h^ZP87wFr4W79;zjLvN-KdVJnYe=#f zcD2T3eU*%)=F{bfgj-f-CPs3D4codfZfV(W77?tL2ev>iOf+N@zoySQOXd((E0#x%Gd=2#LthX!0~rqnWd_sik< z$g;g&02KG_a+s~fS8Q7Ax<_Q-TEw|we;h0mKVJJ@o(ez!=hIv7y5$`!LZt%i18#A} z*7@hh`h2A(-CIUf)W)jabV4`;%TSXf?A2(W#y1>2|MvO4YaJYQO`|1aFl*ai+mDaM zLRFZjfv(rdkc&x}P*~wSh9YHT|JZgW_ZFP9#8#8y_2M6o{`LC}9gdC}6k@D~F8~xo v+B}ZhT5ztlhG3Ru-?zNgJ~{`e!MXndE6r!I{2|Gr00000NkvXXu0mjfy^28R diff --git a/src/main/resources/assets/galacticraft/textures/block/solar_ore.png b/src/main/resources/assets/galacticraft/textures/block/solar_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8fcb2bc5e26bf4cd6e3737a43cd441e2b2a7ec GIT binary patch literal 3241 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 boD+WmqBk?Sv<+OB00000NkvXXu0mjfIC)R7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/solar_panel.png b/src/main/resources/assets/galacticraft/textures/block/solar_panel.png index 63bfa5238328a22a40f668abf54e80418ed55438..787316fc4959da9b6cba61b232b87dc8c1e52f9d 100644 GIT binary patch literal 3016 zcmV;(3pezMP)uJ@VVD_U zC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$OrQF$}6R&?d%y_c8YA7_1Q zpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X z6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv1)yUy0P^?0*fb9UASvow z`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q{wNRKos+;6rV8ldy0Owz z(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E` zvOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G41dM~{UdP z6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4Es0sQWIt5*Tu0n&*J!lk~ zf_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+AA{TB3-ERLHar49hi4Ih z5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=natP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+e zdD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVb znL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0WMyP6Wy582WNT#4$d1qu znl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8dZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iutvy=3T65Yu+7a4Yv^%sX zb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i^lS773}6Fm1Fpe-gF!>I zp{*g$u-szvGhed; zvo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*ZvFf(^Xl-N7w{EeXveC4O zv)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx)P8cQ&Qi|OhNWW;>JChY zI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_WICNY@+|jrX%s^&6b2i>5 zeqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!ql}XcFH*PieWwLj2ZSq`7 zV9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I-?$tAVKYn8-l({mqQ$Q8{ zO!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;cwT88(J6|n-WB%w`m$h~4 zpmp)YIh_3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dlbFb#!9eY1iCsp6Bajj|H zr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syTu9enWavU5N9)I?I-1m1* z_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$mU2Q)a|9JSc+Uc4zvS-T9 z63!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;;JuhGEb?H5K#o@~7t9DmU zU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX=)z6+o0o6-+`4{y+3mqQ z%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@>;2q1Vm)$Z)P1z?N$8UY zW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHsy69KwU-!MxeeuI@&cF4| zM9z%A6ldR+6U(NpW?d;5s7smrBoAuK= z008^l9zeg}2QZmDOW6camKy*?QLI*9Ldxdr><&Pq6#>|OrT|7GtF`{vJ#I}3CW#xL zB2G72ky45uDZ9=W)>?5)yL#(E%QEhhyf_}bn|p4p^To^4 zr7`Aqc;Z?oU8o09mRtP&S*O}ErM}%5K@j*Anx<4r@lNN>kZlf0000< KMNUMnLSTY_G1m(K literal 4444 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 delta 1319 zcmV+?1=#ws1+xv1BYy+sdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1YwlH)oE z{bv=k1OY;i<>*;8JGjdqWLt9DZFkaD*Ghs5AwcIG*@5=o-wuED!r&}e@xevsj9xa{ zNJ(#kIj?ru-G|0*zw^T57vXk-)UsOMo!%a^eE4U)TUHa@On;zU7Vs)VuZ4X&{AB1$ zM7?=|$^_T44x6b83%YA*pZjRs~#iMM4=hu5#@z28RE5lk`#t*NG%tfOE= zLN*;OR=|WE8&IJvDajRD_ zXyu9;N~p0!JBLV&#^9eA(oXv z*xT!Roj13)b*pjW(u6oL{V|*ZYxZOM&A#BZD(#j4UeSelVbdroovBXe|xq z24^Oco(dstQU*5_O#*aEp>0UgadCGt_c3pvSij?qK4A_9b^il%1dT7e-LO{2ldx=z z?Wb^HYFJNSr<^G0#{e}!s~=+ytMdQqSQ85BbAKeqrQ^MKyE@Gg(E z(Y|hw9xZ%zWIXCj>+DQsXH1H-7soTo3;f*6=k}VY9wbnmV1#;<6+Y%Tt*E#_gew#D z%U%%o4DfyF$xN6SSX>n4*`GVQ!rcQWu2;+Hfg*QDGK`xxw_H8}hF66+Q-?O`kMu?; zp?}>he)YghaCFB_af_ANVs%T>@fHGjxA!|cp)fBNF4%nMN%AS*A0z@lY2!v3k27$i z8nKJ1IKj&Da0KS|z+4C{lI1a9+R+~1 zO*=vl8@hr8#@vYF6RR)7BX@HOAMA3U^?zDk>Rt!XUNR70XNCvvgU!?8vmf``&wfPi z`YFFv13aF0f0f?KDO0A5^MO)2Okc)%N7t0`Epy*=RG%POAii+rXFJJHWxKrO)h|$p z|4m)dZvS4(r%vi4CXB?-z44jk4}VtXkt{{y?POR0004nX+uL$Ns%fH z0(hLUICcSlKIVp-0002^NklwG|*5Szz0y8r+nZ#1cFbq$a zu|JdKB*XY93s0J3wGij_qI{KF{;LgPYUAo@?|wxH;V%FTHIgB6G=y ze6{O~OP)2PgF^_dwGcwB^}Z!%7}fupZ)_#IC?cYq^R{iDXJ;LLkvV4(d8L#(Ti$Yi dw|d?d*bhq5&o7V~I~xE1002ovPDHLkV1nnuZ`l9< diff --git a/src/main/resources/assets/galacticraft/textures/block/tin_block.png b/src/main/resources/assets/galacticraft/textures/block/tin_block.png index deacf7637239a1d524fc8e3e7732e84db056e6d3..452c3cf04403dcaeb3edd43eeeb21e7cd5360a2e 100644 GIT binary patch delta 230 zcmVgQLvj1CowdUw*U0ya=H8O!p^s=)Cyv1YAdyBY6}1aE#hpw-5hs&Hcwt%S7f;l zZ^nu&Pn330RV9~NnP)>K#{hQ*lo07s`j(Usp-&C~VV;YGz+Yj6T&ot5M~yl~W}vP8 z%Ztx2NgM#my8!@;ND#^*{vOab*AL@ghb0_*E$LM{!ICe(RWCxo2lM(JqHB$cY_r4V gMCXMNE#e@20O(A7ef3$(0ssI207*qoM6N<$f*~Md$N&HU delta 249 zcmV@D1_i4;OghGInOacbqiQX(OJRP??nG;3f@{K z1S5oMf;}8yt^`4*5zqo(nrR$xrV%*Uq(K!IWA6g4WdYiu00000NkvXXu0mjf6fIw4 diff --git a/src/main/resources/assets/galacticraft/textures/block/tin_decoration.png b/src/main/resources/assets/galacticraft/textures/block/tin_decoration.png index 388f52b6e4596cc49e148d687e169688765016ea..7ef481149b3190bd4e30ac8250aa9bcaa9d9bd4d 100644 GIT binary patch delta 326 zcmV-M0lEI~0^tIXB!2;OQb$4nuFf3k0003SNkl?PzXfuG{s`GckGFcSEiU{TyN38x|yB%zulQD zeSUx8UT2d5cnNB5$Pxg?Z=-f2!ei}D3czf+_>1=fK)Vr5H-BrB>L)z_hW){6J{J^3 zbs5#AN;G|w3wx_XQ_^0EZ~$u6DgZ)le}7zilj>fld(Cs((0pw%ii-%y4VFMdFsaTi z7XXK2OdJ4|DaaCnQ1&`q_dq2&2qha+bERAsO!TKjMGUkAT2K&5cybBcb|d)SzOH#L z&L-QPRDr;ue?L!4I2>b6J(<$&(Ol$uQ__99UEFNB81@GRGk1d|`Ws491Q8-<9wVE_OC07*qoM6N<$f{-|h+W-In delta 340 zcmV-a0jvJu0`CHlB!3`dNK#Dz0D2_=0Dyx40Qvs_0D$QL0Cg|`0P0`>06Lfe02gnP zU&TfM000SaNLh0L01FZT01FZU(%pXi0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0002dNkleBVi};Pc zV~%m}48kMq&fUyzjLo?1=8GjvrZW*+)mC^mgW>3O+`nH>^SIwCq;J+MJjpEX>4Tx04R~O$^&%)e;hpv!2kdN@kvBM zR5*>*ld+1zFaU->#nnS_>=ikb_AMMdIvozK4&o@f_#&O%4&T6`I+fngp>I&Ap&+7; zF8Tm*F(tN0orL=!B#=LZ|097rQ4-71d@3m+pQ{2aH!EoyCOyX?N@97wUZk4!5hZb! zJ6|snpavjPfp?$(e|(?MuNDC7-0jERo}S|%Qh}R_$Ia1vDhK0XX@z{Qsuq*UjC!L{ zcD|6S09hX|46xc3wqa(0?dgDRm~2l60Bpm=3j_MyZ<_UwN)5pMU0`*rf&+ze@lPG- zC?8%J05JX;yyifmJ1Fh;jQ2TEeRXsPFTI1e{Dm82qsY174{x9000000NkvXXu0mjf D$wP)A delta 1174 zcmV;H1Zn%a1*;5@BYy*idQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Yuk|QY$ z{pS>Y1hgSI4#^TRH<;tM$c1#J?P|Nq5Ka+75<>3*cJ2TFy8B}dl4r-FF{BW@HBOu` z+aUV0wOwvH@VtJH2KyJ>!wED=CTUYD@3XY)5Bo5s1$r<6a({84xeVSeta;a?$1fSR zKG!(6v;TUpvG=y^E_1Llgl$vX67C3NhKp5+R<~eX?I$+YwI}P*XJ3GQ^~EpN3nV}w z-+`ez$k3rdHCdooj*Jb}Bw|5Yb&(Vk7V-qdqeDlfM3o{T6>LPrj&SAz>$+)OuRyew zE0`&Q1p{;Wwtu^S8NAYaFWzbdV7rICR+bmyzyU@XX?)Gh0D->aCToF@KAXD%mJC5z z%N%Wk*)Lm&Md0KXtpp&m6O$XiK5xq{vZXh#F%|F(*u9M^aKqnqo>RXInF~%aYAIn?=qGF0}9> zOIUP?OImU<`V=lwLeUaSD!F2%%2jHpT4PN$H)uvB*SJXwOVI8-12x!D!xgDvrxP{Ps*XTw2pIQ_49pBMWH7{aAYg>XftioMj03rWnNMh^ zLeP?wflURU9R!1r8=!QU*qz9|jGMDs{|h&K1vxjM`v7w28eMREfLa|lVObH|PT{Dj zCp&#M-(tp?t=PB?eAjh=(Nol8R1Ujo_Ds5G6Mt{U?Jk7FDwktq5bYz*yJ5|T3c^+8 zhjho_Mn15;iG8luLOng*rmKA9T&D*eX_x8B&nxC0Pn^Cv+y$O>!E()LZmOQ4`mA-o zZ2h5h-x$0V*4?Ij zfzOPVrx#o2Gt`k;qgP*$jYp53gdc=;zkbm0`au5lLCYIS+>NfCcfdg|3bW*Lr}`4} zHqZmxGj^Lu^|aj6h}?&0bbXF~Or!l``xiZpzSQVF8g={Ml- z0(hLUICTMkqRQcn0002cNklZx05JaD&901|Y2cU96N$ERq2TE$rLCGCB zgzw-AdUtaMr%3qv@D-6R$y6(AcIADVg)dFhR6+=a8(n<{U>Jtty(gtaUDr70$T{Pj zJ2f9~DJ8u3jN@qD0VI)9LK54yVXXyV-}lo1NifzxWKmJkJF$;kMz~H+a04&S$nS&T3 o2ZQGv+%fp$Ir!-<{C*BT0O>=hkX~s+y8r+H07*qoM6N<$f<#y;C;$Ke diff --git a/src/main/resources/assets/galacticraft/textures/block/tin_ore.png b/src/main/resources/assets/galacticraft/textures/block/tin_ore.png index ddb5629bd9fc5fb05bc4f15a2ec438b7befa18d5..9a20b2c8c4aa7d722c93594016b061fcd93566d3 100644 GIT binary patch delta 520 zcmV+j0{8v>0<8p)Fn| z-Ya_3UM2rY{s8grMGyq79wd;19>gDkkVcw_Ntf)_E}3>`aAD%&;ib!>b9!&)d-J~c zy>F%6ZsYVQrHnBEgb>CUt+ngAoaPuuDFwh7!=U_42*Gg_MSon$0Ef|9>y53=bL;D$ z-o6K*wdOL{b!)X+tJT^Irq7=~6GD`H-zTDKwYoUg2j55KayiSgyASU_dAxJw#`Tkx zKSw_gqQ&p8oo*b**4k2|(IBEUO*v1Jgou*xFj+fuR)~*p-T_#g7ywz85s@Q=kWwn8 zij0jh>g6jbC4aNc1@Ju2VOaod?>xHdUEB+%(_e?9@qRj)1wp`L2qEq~*dC4d!``6O zY&Na6^Z8swOBx?u?=FtDQi_O($XaWy4aYxpbOgZhJa6sN1pr}h(C>8n01F*OQLcTZ zQsKZD<0z$|l#~*uPykZO{~7X}rFy;Yx^5iDL}ZL%dVg^o_dkCb>v?H)6~OFUpG{z` zb-3Ne)~0{6S^P5W4Z_|aoy>A#EaP(1>14J$c`@~G17I}UWH=n=D`#aLDJAa#K)=&1 zTJZd}`mM|NiUUX~ouWhYp}9M=%4Jx(^&j^#L%u9Z7X$&r{sP1%P$po7_v-)v002ov KPDHLkU;%<1i~&ag delta 342 zcmV-c0jd721pNY#Fn<69XF*Lt006O%3;baP00009a7bBm000id000id0mpBsWB>pF z7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%hhNHvLWs=l}o!?ny*JR5(vvkueU!FbqX= z+#Z0vN62N^*jSK|5EBCoNZf>HKjT(BmGEtUJ83%RoNJ;uB!7x!SvsUDBfME=#Zl?R z5=lX0iw6Eo-7lx^1hnDnaifHQIFb;!0*>qXxX&Q$AI<>do~;$Zsykh49I3}({k)%y zH^gMq`?j2_Yo=9q^fiZ3l$S okfjO{8UX$O4nU!M_C)ubU((l_<$%}q6#xJL07*qoM6N<$g7ct}8~^|S diff --git a/src/main/resources/assets/galacticraft/textures/block/titanium_block.png b/src/main/resources/assets/galacticraft/textures/block/titanium_block.png index 5dc69b957c08ddc1d0888cc4f47c1e1605cdaef9..e0f3627e8ab6b76d73af7d398f6fa41c0a9b463d 100644 GIT binary patch delta 298 zcmV+_0oDG%8t4`wiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVX-ku3V-QI zL_t(Ijg^zV3c@fHg^$spP{AM2(Zv_g-O0gsaBy%J!O2x;U%Q1Z#H?@fg?3N%@-Gm`^D< zvqS(HGZQAVo8tz`B%&CjX%A!H1h!Sl2%b;V#yqP=`58eNnKH=>06=f*QDj{(Q5~9? wr3oS)|83A!z47^xrP+9x2+_7G5Qe7w2IYy#tLH<*iU0rr07*qoM6N<$f=*u7Qh-YiBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^Z)<=1ZP1_ zK>z@;j|==^1+gJX3V$GDNK#Dz0D2|>0Dy!50Qvv`0D$NK0Cg|`0P0`>06Lfe02gqa zx=}m;000JJOGiWi{{a60|De66lK=n!32;bRa{vGf6951U69E94oEQKA00(qQO+^Rc z3lkD48}%`Y{r~_1OG!jQR9M5cS4*zjFbo{il;H=Y2#TPqcYlGm=;{HzL>ImPIf^uO zBwFqwkt50aIYqRxESV;U!x7beeEwXxXUHtzo&f-)Mp!e!jaSWO7O?y2Fdo(ogBqZL zm(C|MfqMqaEEvWEj;D9X^#UvwB7!f+uduUT=f~4G$n^s12k7a1TbBvw2x9cQ4glu* z2glPptO)F^A%8|c>;Vv?L287a&LHj?)=aP>H}^WiVhxCSowIueRwFGVw|B7y_KpC_ zEFd)&4T*E^KG<`vIu^Tm)sX_J5i-jIfzk)@n$dsjd%g9=ntcd#q&6QUM*#sFq2@bO zMxX^&;K7lG)M=vwJ|q$F4F(ZsVD=-75sDEU)Ub~O+JEQ(k=0-$Iw^;!AA;{!1mcK9 zB=p!vzVJpl5r`p9L7ptb1_CFmAVr%0QNE%MxSp`dpqGx=p_+rK6a;6%YG6;@XR0FR zMzIVx4T(>>Cq$@)L#{PXAIBNUlPStnh&#@6Qe1Ay8hXOoySM?_*OVrr;>tOZJAQNe zup0sKnw4A{QYqRvUTR8x13^TK-LN=yFKE*K`%C^J0wQwTAhKS|im6yEn7OJW@mb*z z=)V8>wYahfE|Xqk`il8<`F#t@UCZ@!_WV7(eC~R}f0q#8?GYCXT>t<807*qoM6N<$ Eg2yR81poj5 diff --git a/src/main/resources/assets/galacticraft/textures/block/titanium_decoration.png b/src/main/resources/assets/galacticraft/textures/block/titanium_decoration.png index ed74131fa9eb004c5e2939e2712fd6680790a891..7810cbbdef34ea9fb3cc622305c4ce765de57b3c 100644 GIT binary patch delta 352 zcmV-m0iXWO4eAAuBNYLKX+uL$Nkc;*aB^>EX>4Tx04R~OIRthAe>OEtTmS$8AW1|) zR49>slD|&EP!xwhk~^3fnqu38I3aN)qE^PNAfJwM%ZtYlpR(S>K5MhdvTxoh@D{IAt~49upJ#doZL zW^eTQ`jTeFi5#Fme;B^Ke<(4$M&vc3GEd|i2rk<|_PYeiJQ1gENpL{D?gN5ael6_s zX;!p5-R*9#6Ruhl6-!q zlp(rXk{|=r1UXO`_&Bl&Chb6QYrER+_9|JItNFM>Fs9q5J|_Icv2mT)(qU*5WY-p_ yJ-R;JY&z)=hLvLW1x4~V)E*yhD`VLWxSl@+!iDYV($s1I0000aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y=(&H!$ z{Ld-&2uMN*j>EHRZm`E+*#?r&iQ~-7nk2YnA<5k>h-v@+>gFH4AoyS$OYqTqtCx!| zV$z#nA6FamVFT;--+96K1@ra+>P$M*VH7u>(y&i|zh({e=6?b3X#uS?_?%eMu%pEv z6_v7bJYHvfd#|DQcD!A3USaUZOC2f945N-&QKEgB*CG04y_bDN9l<7Bz}aex%{mH1 zKp@+}K{b$|LxZYwfuc1!Y$!S-7Np%4NHAg{OF(WL&`~H-r9emp8xc7}xN3ntZ`|`0 z2%5Qqx*}*W(0?T#hq-h3X7paHVg#UX4+AT$3vuHCHW+F9RW~IB`rwUsfah43c_NmS zLEd2w`hv;kBSdC+Xp43MkovLChrU4S#v1M_ahjX87$BvJ(q;U35yqzAW>4F-~ww`N(do_6fu&vBu5`5h8SZ?nlm|*IO*!79w}wa zlwIcRv*eItPDSNYT;bx2lu%+x6)RO&x%w(K)L2u4rcyG^HEzC13oW+PRcoEP>)d^p z9(wF)v41vLeHp*O8VuHOXKM44#hO}0wm^Fb*!CITI8(;Zfif-|11f0TII{tq!;QI( zGaFI6f>Dd)jhhNK8SqM>Yk=Hgara>EYu=1vea9Pq!<^Zu`yZG?)9A$88`kQ!6PBH^ zqYF1oEot|43JJH5HLCgjUOmPf&W1V1_QBJtEFn5<+ye!19QPtzk()SNX^*lS21qh;cWR*l=V%t?e8k-JDzIv88=|+=j=l%)|0W!b zHwlryWDhl6R=@4Rl(9@ZLqFd8d7c5}oB;qZ#>kO#j-0bGhDs^xx;p3NM@k8Q!&(a< zgm4@O0dUUk`;Px3#@KsbmgPK8(pm!`qShKGkLuPM5iy=~CZ3^xwbpwFz+a^lR}099 zF@|`=7^5+U$wuxsNW#Q4(n@d!#i;v&Qc7qz5#ncuQVRR{;1*(OZmqpFjOILC5*beo z{H|{eV$`n&tu?zO6Mwbqi%TQTh$y94LrUr1B>=V7TI)1T$=8`BCT}@VcWL% v+Hr+!WC$VW{PEr(k44;&gV&4^&H?-Ym4(cDr_EQ200000NkvXXu0mjf_h*9J diff --git a/src/main/resources/assets/galacticraft/textures/block/transport_tube_inner_side.png b/src/main/resources/assets/galacticraft/textures/block/transport_tube_inner_side.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ae05739a2f8d7cd5dab282c0805ebe3bf083b1 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Hh8)?hFJ7o zoovl_SV6#LzOs}`xrD`(o%8!e;#nEzs!sPzOkAsbRDP*v9Bb1|*WJ#>Jcln!FgI+S z=H=BH#KmCf#;`1tX+duEp6^E_DnF=7Ge4I(w=Jcln!FgI+S z=H=BH#KmCf#;`1tX+duEp6^E_DnF=7Ge4I(w=7c{Hr0yqF*tGDy(IBA((Me7`r6G}&Z?h-<^mnX;OXk;vd$@? F2>={@P=5db literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/unlit_lantern.png b/src/main/resources/assets/galacticraft/textures/block/unlit_lantern.png index 85ed08d86556e622f2684137694f0680b4d05f00..d8717aa052e1bc114a32de68f1092768bdc28407 100644 GIT binary patch delta 342 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 aUIPH4=pTbQ^b=kH0000KLZ*U+< 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 Tl6FV~UC7|+>gTe~DWM4fMIl$5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/vacuum_glass_pane_top.png b/src/main/resources/assets/galacticraft/textures/block/vacuum_glass_pane_top.png new file mode 100644 index 0000000000000000000000000000000000000000..bbcb2467a5480474e171bb590b69b5e64f983ee5 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|(mY)pLo9le z6Am!1i>duqf4j~5|HqYyhtz+*_$J*Z?r;AnxamGa5uJ@VVD_U zC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$OrQF$}6R&?d%y_c8YA7_1Q zpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X z6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv1)yUy0P^?0*fb9UASvow z`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q{wNRKos+;6rV8ldy0Owz z(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E` zvOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G41dM~{UdP z6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4Es0sQWIt5*Tu0n&*J!lk~ zf_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+AA{TB3-ERLHar49hi4Ih z5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=natP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+e zdD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVb znL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0WMyP6Wy582WNT#4$d1qu znl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8dZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iutvy=3T65Yu+7a4Yv^%sX zb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i^lS773}6Fm1Fpe-gF!>I zp{*g$u-szvGhed; zvo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*ZvFf(^Xl-N7w{EeXveC4O zv)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx)P8cQ&Qi|OhNWW;>JChY zI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_WICNY@+|jrX%s^&6b2i>5 zeqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!ql}XcFH*PieWwLj2ZSq`7 zV9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I-?$tAVKYn8-l({mqQ$Q8{ zO!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;cwT88(J6|n-WB%w`m$h~4 zpmp)YIh_3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dlbFb#!9eY1iCsp6Bajj|H zr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syTu9enWavU5N9)I?I-1m1* z_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$mU2Q)a|9JSc+Uc4zvS-T9 z63!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;;JuhGEb?H5K#o@~7t9DmU zU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX=)z6+o0o6-+`4{y+3mqQ z%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@>;2q1Vm)$Z)P1z?N$8UY zW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHsy69KwU-!MxeeuI@&cF4| zM9z%AoWORreI0a52^3FLjTDZ*Enb$c3MgHmS8aPQDA_K6br6BDtCSN^jSSoBH;2Sbj?mW&q7a?t?(0=~ZXYue!b(*OVf07*qoM6N<$f`p#{J^%m! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/block/venus_aluminum_ore.png b/src/main/resources/assets/galacticraft/textures/block/venus_aluminum_ore.png index 329ea7a1e307b46bd0aaedf3174c93c5795b363e..3436876fc5197b8df257bf12612a7939f0ad3417 100644 GIT binary patch delta 3263 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 literal 18320 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 BWSsy2 literal 18295 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 SCph)~vZ;}!VXnchgZ~AR)PXku diff --git a/src/main/resources/assets/galacticraft/textures/block/venus_dungeon_brick_block_1.png b/src/main/resources/assets/galacticraft/textures/block/venus_dungeon_brick_block_1.png index 8615abb17b7f5d9fc38152a782129be5f78fd438..892b3a86027752943f106f5be3a3546188733108 100644 GIT binary patch delta 3102 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 s@{yemho}>AqHo^kK=u$_r6TYGKLZ*U+< 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 A3IG5A diff --git a/src/main/resources/assets/galacticraft/textures/block/venus_dungeon_brick_block_2.png b/src/main/resources/assets/galacticraft/textures/block/venus_dungeon_brick_block_2.png index 3dd2137a12cd69eb31d4ef7edcd8a347187a6c80..6ca09b1fd2af807bb3fc17fca6f825f279daabe0 100644 GIT binary patch delta 3069 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 LNkvXXu0mjf(I5W- delta 3200 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 literal 18300 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/volcanic_rock.png b/src/main/resources/assets/galacticraft/textures/block/volcanic_rock.png index 2fe2fe059818b8dda2296b506d0f2aa36d2e1471..8f5e6b584056e3351faf584fab3bccc8c6323b8d 100644 GIT binary patch delta 1168 zcmV;B1aJHJ8kY%>7k@Aa1^@s67+?BV00001b5ch_0Itp)=>Px(QAtEWR7i=%mcdIL zR~*MbYaa=W?2G$YTo*)`DT=ooY-kZ7hlE^ui08l}gb3V2u(^BN(fqZAuO5|nI&U)=qA%{56|D5*)*6Y1Ui?UWq;^+=_*m^U{ z%T`3EYipKGw%&}o#Zp%5G)(`g_btr^^L3z`MWxW@^mvXwJ6t*KZEV{jnVM zq`v{Du8g?$4N=2RDcG^j+O4kt6cQ8@$AfIzsecQGjoA;|tpEz1ay$?xR&Kz9U7UzF ztI``E;DLx@$^k1G9<<|r9u!LI(|7=yQvNe}Fg0eFyVU%A9@y#pLOhUrv9XT_x2}x! zARU%Z<-ve7j`odPEUJrLu1nAA79La{t1rld#hRu%6a6P16g-vk;NI1sH+QMY=&Z`FD6q?z&{I}30=4<78|+WuS~ zG>>D}Y8ps4Q{{k{t>^AN$1?33b}E{wF~elZrZ0ZiPweJmX({hf%6oLW2?G)>YJ{kA zz@xcH;xB86>WL2Q_+3G zh=|g*+2;Be4<<`C12BCPXAf1QtTsXyS*|P()ZC?}Ynn9mh`ZY(XSSWOqGltC8zSgu zoewtWCjd(*cRt82KJR=`DB09S$h3#SMV5o+(s+oO{)V5Y;r^E8;nH}>?e(Oe2Y&@m zv3y|Isk{$R)3>mB9FzU%Iv&VqiZEi?c{~t%bAN7L@5vx#d9XP@!R_^Zm#RdS=WaH> z|M7XBufl_HFG7yGBB0|z9yeIIYm>zu?_I(G=|ss)N?E-eu~@Uexx+g{J+Tnd^TE`Z ialIkWv!{5m`ycIpKtq|f8NUDk00{s|MNUMnLSTaH+CeG+ literal 3448 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 delta 582 zcmV-M0=fOO1KtFXBYy%VNkl{y?Prt3`GwBa%Lp|DRz{{*?#x^`=n1S`->#c za7Yj-BrCW%HN!J8urIcM^aN#mz&RYa7B$9tY% zcGTK16-0&o{)Ji_$KNL`8F$+)%RD33keFR;&+`X4Cj@2413!NqI2_&)l$;aWyE{JS z8C4}BsI{S`RDafWWhpZ+U-#77E;-L!2=1=hyl^+4}|nvqk+z2WX0kEbif;V;JX`8TD^ zL_p37_dkw%BLeh#y1mDBa=l?pmW-#zd?j(QO9*C}b%lt)Ovyt=;9@%sAOaEm0exLU U;0^WMV*mgE07*qoM6N<$g4U=MPXGV_ From 8087c7e2ade4b32e85e31fcfaf20c5c24586b8a0 Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Sat, 31 Aug 2024 20:43:22 +1000 Subject: [PATCH 17/23] Rocket Nose Cone Part added added Rocket Nose Cone items --- .../blockstates/testrocket_launch_pad.json | 40 -------------- .../assets/galacticraft/lang/en_us.json | 2 +- .../block/testrocket_launch_pad_center.json | 9 ---- .../block/testrocket_launch_pad_corner.json | 9 ---- .../block/testrocket_launch_pad_side.json | 9 ---- .../models/item/iron_nose_cone.json | 6 +++ .../models/item/testrocket_launch_pad.json | 3 -- .../data/c/tags/items/rocket_nose_cone.json | 6 +++ .../galacticraft/dimension_type/asteroid.json | 2 +- .../blocks/testrocket_launch_pad.json | 53 ------------------- .../worldgen/biome/asteroid_field.json | 4 +- .../tags/blocks/mineable/pickaxe.json | 1 - .../mod/content/item/GCCreativeModeTabs.java | 5 ++ .../mod/content/item/GCItems.java | 6 +++ .../mod/data/GCBlockLootTableProvider.java | 1 + .../mod/data/GCDataGenerator.java | 1 - .../mod/data/model/GCModelProvider.java | 5 ++ .../mod/data/tag/GCItemTagProvider.java | 3 ++ .../mod/events/GCEventHandlers.java | 21 ++++---- .../mod/rockets/RocketNoseConeItem.java | 14 ++++- .../galacticraft/mod/rockets/RocketParts.java | 4 ++ .../java/dev/galacticraft/mod/tag/GCTags.java | 1 + .../mod/world/biome/AsteroidBiomes.java | 16 +----- 23 files changed, 68 insertions(+), 153 deletions(-) delete mode 100644 src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json delete mode 100644 src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json delete mode 100644 src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json delete mode 100644 src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json create mode 100644 src/main/generated/assets/galacticraft/models/item/iron_nose_cone.json delete mode 100644 src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json create mode 100644 src/main/generated/data/c/tags/items/rocket_nose_cone.json delete mode 100644 src/main/generated/data/galacticraft/loot_tables/blocks/testrocket_launch_pad.json diff --git a/src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json b/src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json deleted file mode 100644 index 2ecdfb701..000000000 --- a/src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "variants": { - "part=center": { - "model": "galacticraft:block/testrocket_launch_pad_center" - }, - "part=east": { - "model": "galacticraft:block/testrocket_launch_pad_side", - "y": 90 - }, - "part=none": { - "model": "galacticraft:block/testrocket_launch_pad_center" - }, - "part=north": { - "model": "galacticraft:block/testrocket_launch_pad_side" - }, - "part=north_east": { - "model": "galacticraft:block/testrocket_launch_pad_corner", - "y": 90 - }, - "part=north_west": { - "model": "galacticraft:block/testrocket_launch_pad_corner" - }, - "part=south": { - "model": "galacticraft:block/testrocket_launch_pad_side", - "y": 180 - }, - "part=south_east": { - "model": "galacticraft:block/testrocket_launch_pad_corner", - "y": 180 - }, - "part=south_west": { - "model": "galacticraft:block/testrocket_launch_pad_corner", - "y": 270 - }, - "part=west": { - "model": "galacticraft:block/testrocket_launch_pad_side", - "y": 270 - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/lang/en_us.json b/src/main/generated/assets/galacticraft/lang/en_us.json index 2cc8696fa..ba26917e4 100644 --- a/src/main/generated/assets/galacticraft/lang/en_us.json +++ b/src/main/generated/assets/galacticraft/lang/en_us.json @@ -227,7 +227,6 @@ "block.galacticraft.steel_decoration_stairs": "Steel Decoration Stairs", "block.galacticraft.steel_decoration_wall": "Steel Decoration Wall", "block.galacticraft.sulfuric_acid": "Sulfuric Acid", - "block.galacticraft.testrocket_launch_pad": "Testrocket Launch Pad", "block.galacticraft.tin_decoration": "Tin Decoration", "block.galacticraft.tin_decoration_slab": "Tin Decoration Slab", "block.galacticraft.tin_decoration_stairs": "Tin Decoration Stairs", @@ -417,6 +416,7 @@ "item.galacticraft.hot_throwable_meteor_chunk": "Hot Throwable Meteor Chunk", "item.galacticraft.infinite_battery": "Infinite Battery", "item.galacticraft.infinite_oxygen_tank": "Infinite Oxygen Tank", + "item.galacticraft.iron_nose_cone": "Iron Nose Cone", "item.galacticraft.iron_shard": "Iron Shard", "item.galacticraft.isothermal_fabric": "Isothermal Fabric", "item.galacticraft.large_oxygen_tank": "Large Oxygen Tank", diff --git a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json deleted file mode 100644 index beea922ff..000000000 --- a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_center", - "textures": { - "bottom": "galacticraft:block/testrocket_launch_pad", - "particle": "galacticraft:block/testrocket_launch_pad", - "side": "galacticraft:block/testrocket_launch_pad", - "top": "galacticraft:block/testrocket_launch_pad" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json deleted file mode 100644 index 79a3ed9f5..000000000 --- a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_part", - "textures": { - "bottom": "galacticraft:block/testrocket_launch_pad", - "particle": "galacticraft:block/testrocket_launch_pad_corner", - "side": "galacticraft:block/testrocket_launch_pad", - "top": "galacticraft:block/testrocket_launch_pad_corner" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json deleted file mode 100644 index 89c2b441a..000000000 --- a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_part", - "textures": { - "bottom": "galacticraft:block/testrocket_launch_pad", - "particle": "galacticraft:block/testrocket_launch_pad_side", - "side": "galacticraft:block/testrocket_launch_pad", - "top": "galacticraft:block/testrocket_launch_pad_side" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/iron_nose_cone.json b/src/main/generated/assets/galacticraft/models/item/iron_nose_cone.json new file mode 100644 index 000000000..02a684cd5 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/iron_nose_cone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraft:item/iron_nose_cone" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json b/src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json deleted file mode 100644 index 0c40fbc55..000000000 --- a/src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "galacticraft:block/testrocket_launch_pad_center" -} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/items/rocket_nose_cone.json b/src/main/generated/data/c/tags/items/rocket_nose_cone.json new file mode 100644 index 000000000..75b4fa519 --- /dev/null +++ b/src/main/generated/data/c/tags/items/rocket_nose_cone.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "galacticraft:iron_nose_cone" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/dimension_type/asteroid.json b/src/main/generated/data/galacticraft/dimension_type/asteroid.json index 608a264ae..8d27cad49 100644 --- a/src/main/generated/data/galacticraft/dimension_type/asteroid.json +++ b/src/main/generated/data/galacticraft/dimension_type/asteroid.json @@ -3,7 +3,7 @@ "bed_works": false, "coordinate_scale": 1.0, "effects": "galacticraft:asteroid", - "has_ceiling": false, + "has_ceiling": true, "has_raids": false, "has_skylight": false, "height": 384, diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/testrocket_launch_pad.json b/src/main/generated/data/galacticraft/loot_tables/blocks/testrocket_launch_pad.json deleted file mode 100644 index 7fef3be4b..000000000 --- a/src/main/generated/data/galacticraft/loot_tables/blocks/testrocket_launch_pad.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "galacticraft:testrocket_launch_pad", - "condition": "minecraft:block_state_property", - "properties": { - "part": "none" - } - } - ], - "name": "galacticraft:testrocket_launch_pad" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "galacticraft:testrocket_launch_pad", - "condition": "minecraft:block_state_property", - "properties": { - "part": "center" - } - } - ], - "name": "galacticraft:testrocket_launch_pad" - } - ], - "rolls": 9.0 - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json b/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json index e3d05e3e6..b24e8f59d 100644 --- a/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json +++ b/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json @@ -13,7 +13,7 @@ "max_delay": 24000, "min_delay": 12000, "replace_current_music": false, - "sound": "galacticraft:music.music_moon" + "sound": "galacticraft:music.music_orbit" }, "sky_color": 0, "water_color": 0, @@ -57,5 +57,5 @@ "water_ambient": [], "water_creature": [] }, - "temperature": -2.0 + "temperature": 2.0 } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json index 1a4d6d2b4..8aefc5127 100644 --- a/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -38,7 +38,6 @@ "galacticraft:mars_cobblestone_stairs", "galacticraft:iron_rocket_launch_pad", "galacticraft:netherite_rocket_launch_pad", - "galacticraft:testrocket_launch_pad", "galacticraft:fallen_meteor", "galacticraft:tin_ladder", "galacticraft:fueling_pad", diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java index 40e27fcc9..c65b47a64 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java @@ -186,6 +186,11 @@ public class GCCreativeModeTabs { output.accept(ROCKET_FIN); output.accept(ROCKET_ENGINE); + for (Item noseCone : NOSE_CONES) + { + output.accept(noseCone); + } + // SCHEMATICS output.accept(TIER_2_ROCKET_SCHEMATIC); output.accept(CARGO_ROCKET_SCHEMATIC); diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java index 10d17b1ba..a9e624c73 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java @@ -28,6 +28,7 @@ import dev.galacticraft.mod.content.GCRegistry; import dev.galacticraft.mod.content.GCRocketParts; import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlock; +import dev.galacticraft.mod.rockets.RocketNoseConeItem; import dev.galacticraft.mod.rockets.RocketParts; import dev.galacticraft.mod.util.TextureUtils; import dev.galacticraft.mod.util.Translations; @@ -438,6 +439,7 @@ public class GCItems { //rocket parts public static List LAUNCH_PADS = new ArrayList<>(); + public static List NOSE_CONES = new ArrayList<>(); public static void register() { // === START BLOCKS === @@ -449,6 +451,10 @@ public static void register() { { LAUNCH_PADS.add(ITEMS.register(launchPadBlock.getType(), new BlockItem(launchPadBlock, new Item.Properties()))); } + for (RocketNoseConeItem noseConeItem : RocketParts.NOSE_CONES) + { + NOSE_CONES.add(ITEMS.register(noseConeItem.getType(), noseConeItem)); + } // MOON NATURAL Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.MOON_TURF), MOON_TURF); diff --git a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java index 8ef54011d..06549f6fc 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java @@ -30,6 +30,7 @@ import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider; import net.minecraft.advancements.critereon.StatePropertiesPredicate; import net.minecraft.data.loot.BlockLootSubProvider; +import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.block.Block; diff --git a/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java b/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java index e16468d2e..41f1fbc56 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java +++ b/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java @@ -82,7 +82,6 @@ public void onInitializeDataGenerator(@NotNull FabricDataGenerator generator) { pack.addProvider(GCStructureTagProvider::new); // world generation -// pack.addProvider(BootstrapDataProvider.create("Noise", GCNoiseData::bootstrapRegistries)); pack.addProvider(BootstrapDataProvider.create("Density Functions", GCDensityFunctions::bootstrapRegistries)); pack.addProvider(BootstrapDataProvider.create("Biomes", GCBiomes::bootstrapRegistries)); pack.addProvider(BootstrapDataProvider.create("Dimension Types", GCDimensionTypes::bootstrapRegistries)); diff --git a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java index 90fa9aa1d..810499994 100644 --- a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java @@ -44,6 +44,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.DyeColor; +import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.properties.BlockStateProperties; @@ -421,6 +422,10 @@ public void generateItemModels(ItemModelGenerators generator) { generator.generateFlatItem(GCItems.NOSE_CONE, ModelTemplates.FLAT_ITEM); generator.generateFlatItem(GCItems.HEAVY_NOSE_CONE, "_joined", ModelTemplates.FLAT_ITEM); + for (Item noseCone : GCItems.NOSE_CONES) + { + generator.generateFlatItem(noseCone, ModelTemplates.FLAT_ITEM); + } // ROCKET PLATES generator.generateFlatItem(GCItems.TIER_1_HEAVY_DUTY_PLATE, ModelTemplates.FLAT_ITEM); diff --git a/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java b/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java index 09aa183c2..7c7ca45a8 100644 --- a/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java @@ -127,6 +127,9 @@ protected void addTags(HolderLookup.Provider provider) { GCItems.BEEF_PATTY, GCItems.CHEESEBURGER ); + + //rocket tags + tag(GCTags.ROCKET_NOSE_CONE).add(GCItems.NOSE_CONES.toArray(new Item[0])); } protected FabricTagProvider.FabricTagBuilder tag(TagKey tag) { diff --git a/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java b/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java index 0b73c744f..1d8b193fa 100644 --- a/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java +++ b/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java @@ -80,15 +80,18 @@ private static InteractionResultHolder onPlayerUseItem(Player player, { ItemStack itemStack = player.getItemInHand(hand); - if (itemStack.getItem() instanceof CannedFoodItem) - { - return InteractionResultHolder.pass(itemStack); - } else { - player.displayClientMessage(Component.literal("You cannot eat this here!").withColor(Color.RED.getRGB()), true); - player.playNotifySound(SoundEvents.GENERIC_EAT, player.getSoundSource(), 1.0F, 1.0F); - - return InteractionResultHolder.fail(itemStack); - } + if (itemStack.isEdible()) + { + if (itemStack.getItem() instanceof CannedFoodItem) + { + return InteractionResultHolder.pass(itemStack); + } else { + player.displayClientMessage(Component.literal("You cannot eat this here!").withColor(Color.RED.getRGB()), true); + player.playNotifySound(SoundEvents.GENERIC_EAT, player.getSoundSource(), 1.0F, 1.0F); + + return InteractionResultHolder.fail(itemStack); + } + } } return InteractionResultHolder.pass(player.getItemInHand(hand)); } diff --git a/src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java b/src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java index 0e88a5a24..2750a9a6b 100644 --- a/src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java +++ b/src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java @@ -1,4 +1,16 @@ package dev.galacticraft.mod.rockets; -public class RocketNoseConeItem { +import net.minecraft.world.item.Item; + +public class RocketNoseConeItem extends Item { + private final String type; + public RocketNoseConeItem(Properties properties, String type) { + super(properties); + this.type = type; + } + + public String getType() + { + return this.type + "nose_cone"; + } } diff --git a/src/main/java/dev/galacticraft/mod/rockets/RocketParts.java b/src/main/java/dev/galacticraft/mod/rockets/RocketParts.java index 19fe17063..64360a99b 100644 --- a/src/main/java/dev/galacticraft/mod/rockets/RocketParts.java +++ b/src/main/java/dev/galacticraft/mod/rockets/RocketParts.java @@ -4,6 +4,7 @@ import dev.galacticraft.api.rocket.part.RocketFin; import dev.galacticraft.api.rocket.part.type.RocketFinType; import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlock; +import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; @@ -26,5 +27,8 @@ public static void register() LAUNCH_PADS.add(new LaunchPadBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_GRAY).instrument(NoteBlockInstrument.BASEDRUM).strength(1.5F, 10.0F), "iron_", 500)); //netherite launch pad... use as an example for more launch pads LAUNCH_PADS.add(new LaunchPadBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_GRAY).instrument(NoteBlockInstrument.BASEDRUM).strength(1.5F, 10.0F), "netherite_", 1000)); + //iron nose cone + NOSE_CONES.add(new RocketNoseConeItem(new FabricItemSettings(), "iron_")); + } } diff --git a/src/main/java/dev/galacticraft/mod/tag/GCTags.java b/src/main/java/dev/galacticraft/mod/tag/GCTags.java index 73f085000..a132d454b 100644 --- a/src/main/java/dev/galacticraft/mod/tag/GCTags.java +++ b/src/main/java/dev/galacticraft/mod/tag/GCTags.java @@ -72,6 +72,7 @@ public class GCTags { public static final TagKey COMPRESSED_STEEL = commonTag("compressed_steel"); public static final TagKey COMPRESSED_IRON = commonTag("compressed_iron"); public static final TagKey COMPRESSED_TIN = commonTag("compressed_tin"); + public static final TagKey ROCKET_NOSE_CONE = commonTag("rocket_nose_cone"); public static final TagKey MOON_RUINS = TagKey.create(Registries.STRUCTURE, Constant.id("moon_ruins")); diff --git a/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java b/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java index 6005e1211..3d2a33a4b 100644 --- a/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java +++ b/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java @@ -47,15 +47,6 @@ public static void monsters(MobSpawnSettings.Builder builder, int zombieWeight, // builder.addSpawn(MobCategory.MONSTER, new MobSpawnSettings.SpawnerData(GCEntityTypes.EVOLVED_WITCH, 5, 1, 1)); } - public static void addDefaultAsteroidOres(BiomeGenerationSettings.Builder builder) { -// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_COPPER_MOON); -// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_COPPER_LARGE_MOON); -// -// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_TIN_SMALL_MOON); -// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_TIN_MIDDLE_MOON); -// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_TIN_UPPER_MOON); - } - public static Biome asteroid( HolderGetter featureGetter, HolderGetter> carverGetter ) { @@ -67,16 +58,13 @@ public static Biome asteroid( .fogColor(0) .skyColor(0) .ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS) - .backgroundMusic(Musics.createGameMusic(GCSounds.MUSIC_MOON)); - - AsteroidBiomes.addDefaultAsteroidOres(generation); -// AsteroidBiomes.addDefaultSoftDisks(generation); + .backgroundMusic(Musics.createGameMusic(GCSounds.MUSIC_ORBIT)); AsteroidBiomes.monsters(spawnBuilder, 95, 5, 100); return new Biome.BiomeBuilder() .mobSpawnSettings(spawnBuilder.build()) .hasPrecipitation(false) - .temperature(-2F) // temp is hot to prevent snow + .temperature(2.0F) .downfall(0.5F) .specialEffects(specialEffects.build()) .generationSettings(generation.build()) From 697ed02ef772294565116c995b520355c0642ab7 Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Mon, 2 Sep 2024 20:01:12 +1000 Subject: [PATCH 18/23] made machines autogenerated --- .../blockstates/rocket_workbench.json | 2 +- .../assets/galacticraft/lang/en_us.json | 4 + .../galacticraft/models/item/iron_engine.json | 6 + .../galacticraft/models/item/iron_fin.json | 6 + .../models/item/iron_plating.json | 6 + .../galacticraft/models/item/test_module.json | 6 + .../models/machine/circuit_fabricator.json | 0 .../models/machine/coal_generator.json | 0 .../models/machine/compressor.json | 0 .../models/machine/electric_arc_furnace.json | 2 +- .../models/machine/electric_compressor.json | 0 .../models/machine/electric_furnace.json | 0 .../models/machine/energy_storage_module.json | 0 .../models/machine/food_canner.json | 2 +- .../models/machine/fuel_loader.json | 2 +- .../machine/oxygen_bubble_distributor.json | 1 + .../models/machine/oxygen_collector.json | 0 .../models/machine/oxygen_compressor.json | 2 +- .../models/machine/oxygen_decompressor.json | 2 +- .../models/machine/oxygen_sealer.json | 8 +- .../models/machine/oxygen_storage_module.json | 8 + .../galacticraft/models/machine/refinery.json | 8 + .../models/machine/rocket_workbench.json | 15 ++ .../data/c/tags/items/rocket_engine.json | 6 + .../data/c/tags/items/rocket_fin.json | 6 + .../data/c/tags/items/rocket_module.json | 6 + .../data/c/tags/items/rocket_plating.json | 6 + .../iron_rocket_launch_pad.json | 6 +- .../netherite_rocket_launch_pad.json | 6 +- .../recipes/iron_rocket_launch_pad.json | 4 +- .../recipes/netherite_rocket_launch_pad.json | 4 +- .../galacticraft/tags/blocks/machines.json | 3 +- .../tags/blocks/mineable/pickaxe.json | 2 +- .../mod/data/model/GCModelProvider.java | 154 +++++++++++++++--- .../mod/data/tag/GCBlockTagProvider.java | 3 +- .../models/machine/oxygen_storage_module.json | 8 - .../galacticraft/models/machine/refinery.json | 17 -- 37 files changed, 244 insertions(+), 67 deletions(-) create mode 100644 src/main/generated/assets/galacticraft/models/item/iron_engine.json create mode 100644 src/main/generated/assets/galacticraft/models/item/iron_fin.json create mode 100644 src/main/generated/assets/galacticraft/models/item/iron_plating.json create mode 100644 src/main/generated/assets/galacticraft/models/item/test_module.json rename src/main/{resources => generated}/assets/galacticraft/models/machine/circuit_fabricator.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/coal_generator.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/compressor.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/electric_arc_furnace.json (98%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/electric_compressor.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/electric_furnace.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/energy_storage_module.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/food_canner.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/fuel_loader.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/oxygen_bubble_distributor.json (66%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/oxygen_collector.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/oxygen_compressor.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/oxygen_decompressor.json (70%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/oxygen_sealer.json (80%) create mode 100644 src/main/generated/assets/galacticraft/models/machine/oxygen_storage_module.json create mode 100644 src/main/generated/assets/galacticraft/models/machine/refinery.json create mode 100644 src/main/generated/assets/galacticraft/models/machine/rocket_workbench.json create mode 100644 src/main/generated/data/c/tags/items/rocket_engine.json create mode 100644 src/main/generated/data/c/tags/items/rocket_fin.json create mode 100644 src/main/generated/data/c/tags/items/rocket_module.json create mode 100644 src/main/generated/data/c/tags/items/rocket_plating.json delete mode 100644 src/main/resources/assets/galacticraft/models/machine/oxygen_storage_module.json delete mode 100644 src/main/resources/assets/galacticraft/models/machine/refinery.json diff --git a/src/main/generated/assets/galacticraft/blockstates/rocket_workbench.json b/src/main/generated/assets/galacticraft/blockstates/rocket_workbench.json index 64cb5e5f0..46a3012c9 100644 --- a/src/main/generated/assets/galacticraft/blockstates/rocket_workbench.json +++ b/src/main/generated/assets/galacticraft/blockstates/rocket_workbench.json @@ -1,7 +1,7 @@ { "variants": { "": { - "model": "galacticraft:block/rocket_workbench" + "model": "galacticraft:machine/rocket_workbench" } } } \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/lang/en_us.json b/src/main/generated/assets/galacticraft/lang/en_us.json index ba26917e4..07010c390 100644 --- a/src/main/generated/assets/galacticraft/lang/en_us.json +++ b/src/main/generated/assets/galacticraft/lang/en_us.json @@ -416,7 +416,10 @@ "item.galacticraft.hot_throwable_meteor_chunk": "Hot Throwable Meteor Chunk", "item.galacticraft.infinite_battery": "Infinite Battery", "item.galacticraft.infinite_oxygen_tank": "Infinite Oxygen Tank", + "item.galacticraft.iron_engine": "Iron Engine", + "item.galacticraft.iron_fin": "Iron Fin", "item.galacticraft.iron_nose_cone": "Iron Nose Cone", + "item.galacticraft.iron_plating": "Iron Plating", "item.galacticraft.iron_shard": "Iron Shard", "item.galacticraft.isothermal_fabric": "Isothermal Fabric", "item.galacticraft.large_oxygen_tank": "Large Oxygen Tank", @@ -462,6 +465,7 @@ "item.galacticraft.standard_wrench": "Standard Wrench", "item.galacticraft.steel_pole": "Steel Pole", "item.galacticraft.sulfuric_acid_bucket": "Sulfuric Acid Bucket", + "item.galacticraft.test_module": "Test Module", "item.galacticraft.thermal_cloth": "Thermal Cloth", "item.galacticraft.thermal_padding_boots": "Thermal Padding Boots", "item.galacticraft.thermal_padding_chestpiece": "Thermal Padding Chestpiece", diff --git a/src/main/generated/assets/galacticraft/models/item/iron_engine.json b/src/main/generated/assets/galacticraft/models/item/iron_engine.json new file mode 100644 index 000000000..90d5b6942 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/iron_engine.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraft:item/iron_engine" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/iron_fin.json b/src/main/generated/assets/galacticraft/models/item/iron_fin.json new file mode 100644 index 000000000..86ff0cc55 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/iron_fin.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraft:item/iron_fin" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/iron_plating.json b/src/main/generated/assets/galacticraft/models/item/iron_plating.json new file mode 100644 index 000000000..153a78509 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/iron_plating.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraft:item/iron_plating" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/test_module.json b/src/main/generated/assets/galacticraft/models/item/test_module.json new file mode 100644 index 000000000..54e40b6be --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/test_module.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "galacticraft:item/test_module" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/circuit_fabricator.json b/src/main/generated/assets/galacticraft/models/machine/circuit_fabricator.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/circuit_fabricator.json rename to src/main/generated/assets/galacticraft/models/machine/circuit_fabricator.json diff --git a/src/main/resources/assets/galacticraft/models/machine/coal_generator.json b/src/main/generated/assets/galacticraft/models/machine/coal_generator.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/coal_generator.json rename to src/main/generated/assets/galacticraft/models/machine/coal_generator.json diff --git a/src/main/resources/assets/galacticraft/models/machine/compressor.json b/src/main/generated/assets/galacticraft/models/machine/compressor.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/compressor.json rename to src/main/generated/assets/galacticraft/models/machine/compressor.json diff --git a/src/main/resources/assets/galacticraft/models/machine/electric_arc_furnace.json b/src/main/generated/assets/galacticraft/models/machine/electric_arc_furnace.json similarity index 98% rename from src/main/resources/assets/galacticraft/models/machine/electric_arc_furnace.json rename to src/main/generated/assets/galacticraft/models/machine/electric_arc_furnace.json index 859b4dbd5..20704eddf 100644 --- a/src/main/resources/assets/galacticraft/models/machine/electric_arc_furnace.json +++ b/src/main/generated/assets/galacticraft/models/machine/electric_arc_furnace.json @@ -3,4 +3,4 @@ "sprites": { "sprite": "galacticraft:block/electric_arc_furnace" } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/electric_compressor.json b/src/main/generated/assets/galacticraft/models/machine/electric_compressor.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/electric_compressor.json rename to src/main/generated/assets/galacticraft/models/machine/electric_compressor.json diff --git a/src/main/resources/assets/galacticraft/models/machine/electric_furnace.json b/src/main/generated/assets/galacticraft/models/machine/electric_furnace.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/electric_furnace.json rename to src/main/generated/assets/galacticraft/models/machine/electric_furnace.json diff --git a/src/main/resources/assets/galacticraft/models/machine/energy_storage_module.json b/src/main/generated/assets/galacticraft/models/machine/energy_storage_module.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/energy_storage_module.json rename to src/main/generated/assets/galacticraft/models/machine/energy_storage_module.json diff --git a/src/main/resources/assets/galacticraft/models/machine/food_canner.json b/src/main/generated/assets/galacticraft/models/machine/food_canner.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/food_canner.json rename to src/main/generated/assets/galacticraft/models/machine/food_canner.json index 488777b0d..75f5f54bb 100644 --- a/src/main/resources/assets/galacticraft/models/machine/food_canner.json +++ b/src/main/generated/assets/galacticraft/models/machine/food_canner.json @@ -1,8 +1,8 @@ { "machinelib:generate": "machinelib:z_axis", "sprites": { - "front": "galacticraft:block/food_canner", "back": "galacticraft:block/food_canner_back", + "front": "galacticraft:block/food_canner", "sided": true } } \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/fuel_loader.json b/src/main/generated/assets/galacticraft/models/machine/fuel_loader.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/fuel_loader.json rename to src/main/generated/assets/galacticraft/models/machine/fuel_loader.json index 8781c25ef..66e1032b0 100644 --- a/src/main/resources/assets/galacticraft/models/machine/fuel_loader.json +++ b/src/main/generated/assets/galacticraft/models/machine/fuel_loader.json @@ -1,8 +1,8 @@ { "machinelib:generate": "machinelib:z_axis", "sprites": { - "front": "galacticraft:block/fuel_loader_controls", "back": "galacticraft:block/fuel_loader_controls", + "front": "galacticraft:block/fuel_loader_controls", "sided": false } } \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/oxygen_bubble_distributor.json b/src/main/generated/assets/galacticraft/models/machine/oxygen_bubble_distributor.json similarity index 66% rename from src/main/resources/assets/galacticraft/models/machine/oxygen_bubble_distributor.json rename to src/main/generated/assets/galacticraft/models/machine/oxygen_bubble_distributor.json index 9ccde990a..9048c9436 100644 --- a/src/main/resources/assets/galacticraft/models/machine/oxygen_bubble_distributor.json +++ b/src/main/generated/assets/galacticraft/models/machine/oxygen_bubble_distributor.json @@ -1,6 +1,7 @@ { "machinelib:generate": "machinelib:single", "sprites": { + "particle": "galacticraft:block/oxygen_bubble_distributor", "sprite": "galacticraft:block/oxygen_bubble_distributor" } } \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/oxygen_collector.json b/src/main/generated/assets/galacticraft/models/machine/oxygen_collector.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/oxygen_collector.json rename to src/main/generated/assets/galacticraft/models/machine/oxygen_collector.json diff --git a/src/main/resources/assets/galacticraft/models/machine/oxygen_compressor.json b/src/main/generated/assets/galacticraft/models/machine/oxygen_compressor.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/oxygen_compressor.json rename to src/main/generated/assets/galacticraft/models/machine/oxygen_compressor.json index fcd76c2f7..045400b25 100644 --- a/src/main/resources/assets/galacticraft/models/machine/oxygen_compressor.json +++ b/src/main/generated/assets/galacticraft/models/machine/oxygen_compressor.json @@ -1,8 +1,8 @@ { "machinelib:generate": "machinelib:z_axis", "sprites": { - "front": "galacticraft:block/oxygen_compressor", "back": "galacticraft:block/oxygen_compressor_back", + "front": "galacticraft:block/oxygen_compressor", "sided": true } } \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/oxygen_decompressor.json b/src/main/generated/assets/galacticraft/models/machine/oxygen_decompressor.json similarity index 70% rename from src/main/resources/assets/galacticraft/models/machine/oxygen_decompressor.json rename to src/main/generated/assets/galacticraft/models/machine/oxygen_decompressor.json index e6f4744bc..1ce7c8525 100644 --- a/src/main/resources/assets/galacticraft/models/machine/oxygen_decompressor.json +++ b/src/main/generated/assets/galacticraft/models/machine/oxygen_decompressor.json @@ -1,8 +1,8 @@ { "machinelib:generate": "machinelib:z_axis", "sprites": { + "back": "galacticraft:block/oxygen_decompressor_back", "front": "galacticraft:block/oxygen_decompressor", - "back": "galacticraft:block/oxygen_compressor_back", "sided": true } } \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/oxygen_sealer.json b/src/main/generated/assets/galacticraft/models/machine/oxygen_sealer.json similarity index 80% rename from src/main/resources/assets/galacticraft/models/machine/oxygen_sealer.json rename to src/main/generated/assets/galacticraft/models/machine/oxygen_sealer.json index d30644978..e4211588b 100644 --- a/src/main/resources/assets/galacticraft/models/machine/oxygen_sealer.json +++ b/src/main/generated/assets/galacticraft/models/machine/oxygen_sealer.json @@ -4,12 +4,12 @@ "top": "galacticraft:block/oxygen_sealer_top" }, "textures": { - "up": "galacticraft:block/oxygen_sealer_top", "down": "galacticraft:block/machine", + "east": "galacticraft:block/machine_side", "north": "galacticraft:block/machine_side", + "particle": "galacticraft:block/machine", "south": "galacticraft:block/machine_side", - "east": "galacticraft:block/machine_side", - "west": "galacticraft:block/machine_side", - "particle": "galacticraft:block/machine" + "up": "galacticraft:block/oxygen_sealer_top", + "west": "galacticraft:block/machine_side" } } \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/machine/oxygen_storage_module.json b/src/main/generated/assets/galacticraft/models/machine/oxygen_storage_module.json new file mode 100644 index 000000000..4ef24116e --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/machine/oxygen_storage_module.json @@ -0,0 +1,8 @@ +{ + "machinelib:generate": "machinelib:z_axis", + "sprites": { + "back": "galacticraft:block/oxygen_storage_model_8", + "front": "galacticraft:block/oxygen_storage_model_8", + "sided": false + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/machine/refinery.json b/src/main/generated/assets/galacticraft/models/machine/refinery.json new file mode 100644 index 000000000..f4e4b2da4 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/machine/refinery.json @@ -0,0 +1,8 @@ +{ + "machinelib:generate": "machinelib:z_axis", + "sprites": { + "back": "galacticraft:block/refinery_back", + "front": "galacticraft:block/refinery_front", + "sided": true + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/machine/rocket_workbench.json b/src/main/generated/assets/galacticraft/models/machine/rocket_workbench.json new file mode 100644 index 000000000..bb71976f3 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/machine/rocket_workbench.json @@ -0,0 +1,15 @@ +{ + "machinelib:generate": "machinelib:front_face", + "sprites": { + "sprite": "galacticraft:block/refinery_front" + }, + "textures": { + "down": "galacticraft:block/machine_side", + "east": "galacticraft:block/machine_side", + "north": "galacticraft:block/machine_side", + "particle": "galacticraft:block/machine_side", + "south": "galacticraft:block/machine_side", + "up": "galacticraft:block/machine_side", + "west": "galacticraft:block/machine_side" + } +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/items/rocket_engine.json b/src/main/generated/data/c/tags/items/rocket_engine.json new file mode 100644 index 000000000..13fe8f27d --- /dev/null +++ b/src/main/generated/data/c/tags/items/rocket_engine.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "galacticraft:iron_engine" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/items/rocket_fin.json b/src/main/generated/data/c/tags/items/rocket_fin.json new file mode 100644 index 000000000..dd6c596b0 --- /dev/null +++ b/src/main/generated/data/c/tags/items/rocket_fin.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "galacticraft:iron_fin" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/items/rocket_module.json b/src/main/generated/data/c/tags/items/rocket_module.json new file mode 100644 index 000000000..e287b9216 --- /dev/null +++ b/src/main/generated/data/c/tags/items/rocket_module.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "galacticraft:test_module" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/items/rocket_plating.json b/src/main/generated/data/c/tags/items/rocket_plating.json new file mode 100644 index 000000000..9eecb002a --- /dev/null +++ b/src/main/generated/data/c/tags/items/rocket_plating.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "galacticraft:iron_plating" + ] +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/advancements/recipes/transportation/iron_rocket_launch_pad.json b/src/main/generated/data/galacticraft/advancements/recipes/transportation/iron_rocket_launch_pad.json index 3bb25deb6..1b88b4e58 100644 --- a/src/main/generated/data/galacticraft/advancements/recipes/transportation/iron_rocket_launch_pad.json +++ b/src/main/generated/data/galacticraft/advancements/recipes/transportation/iron_rocket_launch_pad.json @@ -1,12 +1,12 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_iron_block": { + "has_desh_block": { "conditions": { "items": [ { "items": [ - "minecraft:iron_block" + "galacticraft:desh_block" ] } ] @@ -23,7 +23,7 @@ "requirements": [ [ "has_the_recipe", - "has_iron_block" + "has_desh_block" ] ], "rewards": { diff --git a/src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json b/src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json index feaa26fdc..7c147f78d 100644 --- a/src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json +++ b/src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json @@ -1,12 +1,12 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_desh_block": { + "has_iron_block": { "conditions": { "items": [ { "items": [ - "galacticraft:desh_block" + "minecraft:iron_block" ] } ] @@ -23,7 +23,7 @@ "requirements": [ [ "has_the_recipe", - "has_desh_block" + "has_iron_block" ] ], "rewards": { diff --git a/src/main/generated/data/galacticraft/recipes/iron_rocket_launch_pad.json b/src/main/generated/data/galacticraft/recipes/iron_rocket_launch_pad.json index 32e4c6510..7f5abe250 100644 --- a/src/main/generated/data/galacticraft/recipes/iron_rocket_launch_pad.json +++ b/src/main/generated/data/galacticraft/recipes/iron_rocket_launch_pad.json @@ -3,10 +3,10 @@ "category": "misc", "key": { "C": { - "item": "galacticraft:compressed_iron" + "item": "galacticraft:compressed_steel" }, "I": { - "item": "minecraft:iron_block" + "item": "galacticraft:desh_block" } }, "pattern": [ diff --git a/src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json b/src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json index 27345706e..125f9167b 100644 --- a/src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json +++ b/src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json @@ -3,10 +3,10 @@ "category": "misc", "key": { "C": { - "item": "galacticraft:compressed_steel" + "item": "galacticraft:compressed_iron" }, "I": { - "item": "galacticraft:desh_block" + "item": "minecraft:iron_block" } }, "pattern": [ diff --git a/src/main/generated/data/galacticraft/tags/blocks/machines.json b/src/main/generated/data/galacticraft/tags/blocks/machines.json index 111b488c9..2e0a71a0b 100644 --- a/src/main/generated/data/galacticraft/tags/blocks/machines.json +++ b/src/main/generated/data/galacticraft/tags/blocks/machines.json @@ -18,6 +18,7 @@ "galacticraft:oxygen_compressor", "galacticraft:food_canner", "galacticraft:oxygen_storage_module", - "galacticraft:fuel_loader" + "galacticraft:fuel_loader", + "galacticraft:rocket_workbench" ] } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json index 8aefc5127..1ff227b5b 100644 --- a/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -36,8 +36,8 @@ "galacticraft:cracked_moon_basalt_brick_stairs", "galacticraft:mars_stone_stairs", "galacticraft:mars_cobblestone_stairs", - "galacticraft:iron_rocket_launch_pad", "galacticraft:netherite_rocket_launch_pad", + "galacticraft:iron_rocket_launch_pad", "galacticraft:fallen_meteor", "galacticraft:tin_ladder", "galacticraft:fueling_pad", diff --git a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java index 810499994..fd66491bf 100644 --- a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java @@ -23,6 +23,8 @@ package dev.galacticraft.mod.data.model; import com.google.common.collect.Maps; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.content.GCBlockRegistry; import dev.galacticraft.mod.content.GCBlocks; @@ -51,6 +53,7 @@ import org.jetbrains.annotations.Contract; import java.util.List; +import java.util.function.Supplier; public class GCModelProvider extends FabricModelProvider { private static final TexturedModel.Provider DETAILED_DECORATION = TexturedModel.createDefault(GCModelProvider::detailedTexture, ModelTemplates.CUBE_BOTTOM_TOP); @@ -138,7 +141,6 @@ public void generateBlockStateModels(BlockModelGenerators generator) { { createLaunchPadBlock(launch_pad, generator); } - generator.createNonTemplateModelBlock(GCBlocks.ROCKET_WORKBENCH); generator.createNonTemplateModelBlock(GCBlocks.FALLEN_METEOR); // LIGHT PANELS @@ -227,25 +229,25 @@ public void generateBlockStateModels(BlockModelGenerators generator) { // generator.createNonTemplateModelBlock(GCBlocks.CRYOGENIC_CHAMBER); generator.createNonTemplateModelBlock(GCBlocks.PLAYER_TRANSPORT_TUBE); - //todo gen models (not just blockstates) - createMachineDelegate(generator, GCBlocks.CIRCUIT_FABRICATOR); - createMachineDelegate(generator, GCBlocks.COMPRESSOR); - createMachineDelegate(generator, GCBlocks.ELECTRIC_COMPRESSOR); - createMachineDelegate(generator, GCBlocks.COAL_GENERATOR); + createMachineDelegateFrontFace(generator, GCBlocks.CIRCUIT_FABRICATOR); + createMachineDelegateFrontFace(generator, GCBlocks.COMPRESSOR); + createMachineDelegateFrontFace(generator, GCBlocks.ELECTRIC_COMPRESSOR); + createMachineDelegateFrontFace(generator, GCBlocks.COAL_GENERATOR); + createMachineDelegateFrontFace(generator, GCBlocks.ROCKET_WORKBENCH, "refinery_front", "machine_side"); //Todo not sure if its supposed to be a multiblock model? createMachineDelegate(generator, GCBlocks.BASIC_SOLAR_PANEL); createMachineDelegate(generator, GCBlocks.ADVANCED_SOLAR_PANEL); - createMachineDelegate(generator, GCBlocks.ENERGY_STORAGE_MODULE); - createMachineDelegate(generator, GCBlocks.ELECTRIC_FURNACE); - createMachineDelegate(generator, GCBlocks.ELECTRIC_ARC_FURNACE); - createMachineDelegate(generator, GCBlocks.REFINERY); - createMachineDelegate(generator, GCBlocks.OXYGEN_COLLECTOR); - createMachineDelegate(generator, GCBlocks.OXYGEN_SEALER); - createMachineDelegate(generator, GCBlocks.OXYGEN_BUBBLE_DISTRIBUTOR); - createMachineDelegate(generator, GCBlocks.OXYGEN_DECOMPRESSOR); - createMachineDelegate(generator, GCBlocks.OXYGEN_COMPRESSOR); - createMachineDelegate(generator, GCBlocks.FOOD_CANNER); - createMachineDelegate(generator, GCBlocks.OXYGEN_STORAGE_MODULE); - createMachineDelegate(generator, GCBlocks.FUEL_LOADER); + createMachineDelegateFrontFace(generator, GCBlocks.ENERGY_STORAGE_MODULE, "energy_storage_module_0"); + createMachineDelegateFrontFace(generator, GCBlocks.ELECTRIC_FURNACE); + createMachineDelegateFrontFace(generator, GCBlocks.ELECTRIC_ARC_FURNACE); + createMachineDelegateZAxis(generator, GCBlocks.REFINERY, "refinery_front", "refinery_back"); + createMachineDelegateSingle(generator, GCBlocks.OXYGEN_COLLECTOR, "oxygen_collector"); + createMachineDelegateColumn(generator, GCBlocks.OXYGEN_SEALER, "oxygen_sealer", "oxygen_sealer_top", "machine", "machine_side"); //column with particle + createMachineDelegateSingle(generator, GCBlocks.OXYGEN_BUBBLE_DISTRIBUTOR, "oxygen_bubble_distributor"); + createMachineDelegateZAxis(generator, GCBlocks.OXYGEN_DECOMPRESSOR, "oxygen_decompressor", "oxygen_decompressor_back"); + createMachineDelegateZAxis(generator, GCBlocks.OXYGEN_COMPRESSOR, "oxygen_compressor", "oxygen_compressor_back"); + createMachineDelegateZAxis(generator, GCBlocks.FOOD_CANNER, "food_canner", "food_canner_back"); + createMachineDelegateZAxis(generator, GCBlocks.OXYGEN_STORAGE_MODULE, "oxygen_storage_model_8"); + createMachineDelegateZAxis(generator, GCBlocks.FUEL_LOADER, "fuel_loader_controls"); generator.createNonTemplateModelBlock(GCBlocks.CRUDE_OIL); generator.createNonTemplateModelBlock(GCBlocks.FUEL); @@ -339,7 +341,121 @@ public static ResourceLocation getMachineModelLocation(Block block) { return resourceLocation.withPrefix("machine/"); } - private static void createMachineDelegate(BlockModelGenerators generator, Block block) { //todo: look into why we need this prefix + private static void createMachineDelegateFrontFace(BlockModelGenerators generator, Block block) { + JsonObject customJson = new JsonObject(); + customJson.addProperty("machinelib:generate", "machinelib:front_face"); + + JsonObject sprites = new JsonObject(); + sprites.addProperty("sprite", getMachineModelLocation(block).toString().replace("machine", "block")); + + customJson.add("sprites", sprites); + Supplier jsonSupplier = () -> customJson; + generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); + generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); + } + + private static void createMachineDelegate(BlockModelGenerators generator, Block block) { + generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); + } + + private static void createMachineDelegateFrontFace(BlockModelGenerators generator, Block block, String id) { + JsonObject customJson = new JsonObject(); + customJson.addProperty("machinelib:generate", "machinelib:front_face"); + + JsonObject sprites = new JsonObject(); + sprites.addProperty("sprite", "galacticraft:block/" + id); + + customJson.add("sprites", sprites); + Supplier jsonSupplier = () -> customJson; + generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); + generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); + } + + private static void createMachineDelegateFrontFace(BlockModelGenerators generator, Block block, String id, String sides) { + JsonObject customJson = new JsonObject(); + customJson.addProperty("machinelib:generate", "machinelib:front_face"); + + JsonObject sprites = new JsonObject(); + sprites.addProperty("sprite", "galacticraft:block/" + id); + customJson.add("sprites", sprites); + JsonObject textures = new JsonObject(); + textures.addProperty("up", "galacticraft:block/" + sides); + textures.addProperty("down", "galacticraft:block/" + sides); + textures.addProperty("north", "galacticraft:block/" + sides); + textures.addProperty("east", "galacticraft:block/" + sides); + textures.addProperty("south", "galacticraft:block/" + sides); + textures.addProperty("west", "galacticraft:block/" + sides); + textures.addProperty("particle", "galacticraft:block/" + sides); + customJson.add("textures", textures); + Supplier jsonSupplier = () -> customJson; + generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); + generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); + } + + private static void createMachineDelegateZAxis(BlockModelGenerators generator, Block block, String id) { + JsonObject customJson = new JsonObject(); + customJson.addProperty("machinelib:generate", "machinelib:z_axis"); + + JsonObject sprites = new JsonObject(); + sprites.addProperty("front", "galacticraft:block/" + id); + sprites.addProperty("back", "galacticraft:block/" + id); + sprites.addProperty("sided", false); + + + customJson.add("sprites", sprites); + Supplier jsonSupplier = () -> customJson; + generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); + generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); + } + + private static void createMachineDelegateZAxis(BlockModelGenerators generator, Block block, String id, String id2) { + JsonObject customJson = new JsonObject(); + customJson.addProperty("machinelib:generate", "machinelib:z_axis"); + + JsonObject sprites = new JsonObject(); + sprites.addProperty("front", "galacticraft:block/" + id); + sprites.addProperty("back", "galacticraft:block/" + id2); + sprites.addProperty("sided", true); + + + customJson.add("sprites", sprites); + Supplier jsonSupplier = () -> customJson; + generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); + generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); + } + + private static void createMachineDelegateSingle(BlockModelGenerators generator, Block block, String id) { + JsonObject customJson = new JsonObject(); + customJson.addProperty("machinelib:generate", "machinelib:single"); + + JsonObject sprites = new JsonObject(); + sprites.addProperty("sprite", "galacticraft:block/" + id); + sprites.addProperty("particle", "galacticraft:block/" + id); + + customJson.add("sprites", sprites); + Supplier jsonSupplier = () -> customJson; + generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); + generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); + } + + private static void createMachineDelegateColumn(BlockModelGenerators generator, Block block, String id, String top, String bottom, String side) { + JsonObject customJson = new JsonObject(); + customJson.addProperty("machinelib:generate", "galacticraft:" + id); + + JsonObject sprites = new JsonObject(); + sprites.addProperty("top", "galacticraft:block/" + top); + customJson.add("sprites", sprites); + JsonObject textures = new JsonObject(); + textures.addProperty("up", "galacticraft:block/" + top); + textures.addProperty("down", "galacticraft:block/" + bottom); + textures.addProperty("north", "galacticraft:block/" + side); + textures.addProperty("east", "galacticraft:block/" + side); + textures.addProperty("south", "galacticraft:block/" + side); + textures.addProperty("west", "galacticraft:block/" + side); + textures.addProperty("particle", "galacticraft:block/" + bottom); + customJson.add("textures", textures); + Supplier jsonSupplier = () -> customJson; + generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); } diff --git a/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java b/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java index 9e9da8286..e4d14f808 100644 --- a/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java @@ -87,7 +87,8 @@ protected void addTags(HolderLookup.Provider provider) { GCBlocks.OXYGEN_COMPRESSOR, GCBlocks.FOOD_CANNER, GCBlocks.OXYGEN_STORAGE_MODULE, - GCBlocks.FUEL_LOADER + GCBlocks.FUEL_LOADER, + GCBlocks.ROCKET_WORKBENCH ); this.tag(BlockTags.CLIMBABLE) diff --git a/src/main/resources/assets/galacticraft/models/machine/oxygen_storage_module.json b/src/main/resources/assets/galacticraft/models/machine/oxygen_storage_module.json deleted file mode 100644 index 439458216..000000000 --- a/src/main/resources/assets/galacticraft/models/machine/oxygen_storage_module.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "machinelib:generate": "machinelib:z_axis", - "sprites": { - "front": "galacticraft:block/oxygen_storage_module_8", - "back": "galacticraft:block/oxygen_storage_module_8", - "sided": false - } -} \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/refinery.json b/src/main/resources/assets/galacticraft/models/machine/refinery.json deleted file mode 100644 index 3bb7f0e90..000000000 --- a/src/main/resources/assets/galacticraft/models/machine/refinery.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "machinelib:generate": "machinelib:z_axis", - "sprites": { - "front": "galacticraft:block/refinery_front", - "back": "galacticraft:block/refinery_back", - "sided": true - }, - "textures": { - "up": "galacticraft:block/machine", - "down": "galacticraft:block/machine", - "north": "galacticraft:block/refinery_front", - "south": "galacticraft:block/machine_side", - "east": "galacticraft:block/machine_side", - "west": "galacticraft:block/machine_side", - "particle": "galacticraft:block/machine" - } -} \ No newline at end of file From a643484c83d92a584e7a8590db36860475b844f2 Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Mon, 2 Sep 2024 20:09:15 +1000 Subject: [PATCH 19/23] Revert "made machines autogenerated" This reverts commit 697ed02ef772294565116c995b520355c0642ab7. --- .../blockstates/rocket_workbench.json | 2 +- .../assets/galacticraft/lang/en_us.json | 4 - .../galacticraft/models/item/iron_engine.json | 6 - .../galacticraft/models/item/iron_fin.json | 6 - .../models/item/iron_plating.json | 6 - .../galacticraft/models/item/test_module.json | 6 - .../models/machine/oxygen_storage_module.json | 8 - .../galacticraft/models/machine/refinery.json | 8 - .../models/machine/rocket_workbench.json | 15 -- .../data/c/tags/items/rocket_engine.json | 6 - .../data/c/tags/items/rocket_fin.json | 6 - .../data/c/tags/items/rocket_module.json | 6 - .../data/c/tags/items/rocket_plating.json | 6 - .../iron_rocket_launch_pad.json | 6 +- .../netherite_rocket_launch_pad.json | 6 +- .../recipes/iron_rocket_launch_pad.json | 4 +- .../recipes/netherite_rocket_launch_pad.json | 4 +- .../galacticraft/tags/blocks/machines.json | 3 +- .../tags/blocks/mineable/pickaxe.json | 2 +- .../mod/data/model/GCModelProvider.java | 154 +++--------------- .../mod/data/tag/GCBlockTagProvider.java | 3 +- .../models/machine/circuit_fabricator.json | 0 .../models/machine/coal_generator.json | 0 .../models/machine/compressor.json | 0 .../models/machine/electric_arc_furnace.json | 2 +- .../models/machine/electric_compressor.json | 0 .../models/machine/electric_furnace.json | 0 .../models/machine/energy_storage_module.json | 0 .../models/machine/food_canner.json | 2 +- .../models/machine/fuel_loader.json | 2 +- .../machine/oxygen_bubble_distributor.json | 1 - .../models/machine/oxygen_collector.json | 0 .../models/machine/oxygen_compressor.json | 2 +- .../models/machine/oxygen_decompressor.json | 2 +- .../models/machine/oxygen_sealer.json | 8 +- .../models/machine/oxygen_storage_module.json | 8 + .../galacticraft/models/machine/refinery.json | 17 ++ 37 files changed, 67 insertions(+), 244 deletions(-) delete mode 100644 src/main/generated/assets/galacticraft/models/item/iron_engine.json delete mode 100644 src/main/generated/assets/galacticraft/models/item/iron_fin.json delete mode 100644 src/main/generated/assets/galacticraft/models/item/iron_plating.json delete mode 100644 src/main/generated/assets/galacticraft/models/item/test_module.json delete mode 100644 src/main/generated/assets/galacticraft/models/machine/oxygen_storage_module.json delete mode 100644 src/main/generated/assets/galacticraft/models/machine/refinery.json delete mode 100644 src/main/generated/assets/galacticraft/models/machine/rocket_workbench.json delete mode 100644 src/main/generated/data/c/tags/items/rocket_engine.json delete mode 100644 src/main/generated/data/c/tags/items/rocket_fin.json delete mode 100644 src/main/generated/data/c/tags/items/rocket_module.json delete mode 100644 src/main/generated/data/c/tags/items/rocket_plating.json rename src/main/{generated => resources}/assets/galacticraft/models/machine/circuit_fabricator.json (100%) rename src/main/{generated => resources}/assets/galacticraft/models/machine/coal_generator.json (100%) rename src/main/{generated => resources}/assets/galacticraft/models/machine/compressor.json (100%) rename src/main/{generated => resources}/assets/galacticraft/models/machine/electric_arc_furnace.json (98%) rename src/main/{generated => resources}/assets/galacticraft/models/machine/electric_compressor.json (100%) rename src/main/{generated => resources}/assets/galacticraft/models/machine/electric_furnace.json (100%) rename src/main/{generated => resources}/assets/galacticraft/models/machine/energy_storage_module.json (100%) rename src/main/{generated => resources}/assets/galacticraft/models/machine/food_canner.json (100%) rename src/main/{generated => resources}/assets/galacticraft/models/machine/fuel_loader.json (100%) rename src/main/{generated => resources}/assets/galacticraft/models/machine/oxygen_bubble_distributor.json (66%) rename src/main/{generated => resources}/assets/galacticraft/models/machine/oxygen_collector.json (100%) rename src/main/{generated => resources}/assets/galacticraft/models/machine/oxygen_compressor.json (100%) rename src/main/{generated => resources}/assets/galacticraft/models/machine/oxygen_decompressor.json (70%) rename src/main/{generated => resources}/assets/galacticraft/models/machine/oxygen_sealer.json (80%) create mode 100644 src/main/resources/assets/galacticraft/models/machine/oxygen_storage_module.json create mode 100644 src/main/resources/assets/galacticraft/models/machine/refinery.json diff --git a/src/main/generated/assets/galacticraft/blockstates/rocket_workbench.json b/src/main/generated/assets/galacticraft/blockstates/rocket_workbench.json index 46a3012c9..64cb5e5f0 100644 --- a/src/main/generated/assets/galacticraft/blockstates/rocket_workbench.json +++ b/src/main/generated/assets/galacticraft/blockstates/rocket_workbench.json @@ -1,7 +1,7 @@ { "variants": { "": { - "model": "galacticraft:machine/rocket_workbench" + "model": "galacticraft:block/rocket_workbench" } } } \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/lang/en_us.json b/src/main/generated/assets/galacticraft/lang/en_us.json index 07010c390..ba26917e4 100644 --- a/src/main/generated/assets/galacticraft/lang/en_us.json +++ b/src/main/generated/assets/galacticraft/lang/en_us.json @@ -416,10 +416,7 @@ "item.galacticraft.hot_throwable_meteor_chunk": "Hot Throwable Meteor Chunk", "item.galacticraft.infinite_battery": "Infinite Battery", "item.galacticraft.infinite_oxygen_tank": "Infinite Oxygen Tank", - "item.galacticraft.iron_engine": "Iron Engine", - "item.galacticraft.iron_fin": "Iron Fin", "item.galacticraft.iron_nose_cone": "Iron Nose Cone", - "item.galacticraft.iron_plating": "Iron Plating", "item.galacticraft.iron_shard": "Iron Shard", "item.galacticraft.isothermal_fabric": "Isothermal Fabric", "item.galacticraft.large_oxygen_tank": "Large Oxygen Tank", @@ -465,7 +462,6 @@ "item.galacticraft.standard_wrench": "Standard Wrench", "item.galacticraft.steel_pole": "Steel Pole", "item.galacticraft.sulfuric_acid_bucket": "Sulfuric Acid Bucket", - "item.galacticraft.test_module": "Test Module", "item.galacticraft.thermal_cloth": "Thermal Cloth", "item.galacticraft.thermal_padding_boots": "Thermal Padding Boots", "item.galacticraft.thermal_padding_chestpiece": "Thermal Padding Chestpiece", diff --git a/src/main/generated/assets/galacticraft/models/item/iron_engine.json b/src/main/generated/assets/galacticraft/models/item/iron_engine.json deleted file mode 100644 index 90d5b6942..000000000 --- a/src/main/generated/assets/galacticraft/models/item/iron_engine.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "galacticraft:item/iron_engine" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/iron_fin.json b/src/main/generated/assets/galacticraft/models/item/iron_fin.json deleted file mode 100644 index 86ff0cc55..000000000 --- a/src/main/generated/assets/galacticraft/models/item/iron_fin.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "galacticraft:item/iron_fin" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/iron_plating.json b/src/main/generated/assets/galacticraft/models/item/iron_plating.json deleted file mode 100644 index 153a78509..000000000 --- a/src/main/generated/assets/galacticraft/models/item/iron_plating.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "galacticraft:item/iron_plating" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/test_module.json b/src/main/generated/assets/galacticraft/models/item/test_module.json deleted file mode 100644 index 54e40b6be..000000000 --- a/src/main/generated/assets/galacticraft/models/item/test_module.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "galacticraft:item/test_module" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/machine/oxygen_storage_module.json b/src/main/generated/assets/galacticraft/models/machine/oxygen_storage_module.json deleted file mode 100644 index 4ef24116e..000000000 --- a/src/main/generated/assets/galacticraft/models/machine/oxygen_storage_module.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "machinelib:generate": "machinelib:z_axis", - "sprites": { - "back": "galacticraft:block/oxygen_storage_model_8", - "front": "galacticraft:block/oxygen_storage_model_8", - "sided": false - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/machine/refinery.json b/src/main/generated/assets/galacticraft/models/machine/refinery.json deleted file mode 100644 index f4e4b2da4..000000000 --- a/src/main/generated/assets/galacticraft/models/machine/refinery.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "machinelib:generate": "machinelib:z_axis", - "sprites": { - "back": "galacticraft:block/refinery_back", - "front": "galacticraft:block/refinery_front", - "sided": true - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/machine/rocket_workbench.json b/src/main/generated/assets/galacticraft/models/machine/rocket_workbench.json deleted file mode 100644 index bb71976f3..000000000 --- a/src/main/generated/assets/galacticraft/models/machine/rocket_workbench.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "machinelib:generate": "machinelib:front_face", - "sprites": { - "sprite": "galacticraft:block/refinery_front" - }, - "textures": { - "down": "galacticraft:block/machine_side", - "east": "galacticraft:block/machine_side", - "north": "galacticraft:block/machine_side", - "particle": "galacticraft:block/machine_side", - "south": "galacticraft:block/machine_side", - "up": "galacticraft:block/machine_side", - "west": "galacticraft:block/machine_side" - } -} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/items/rocket_engine.json b/src/main/generated/data/c/tags/items/rocket_engine.json deleted file mode 100644 index 13fe8f27d..000000000 --- a/src/main/generated/data/c/tags/items/rocket_engine.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "galacticraft:iron_engine" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/items/rocket_fin.json b/src/main/generated/data/c/tags/items/rocket_fin.json deleted file mode 100644 index dd6c596b0..000000000 --- a/src/main/generated/data/c/tags/items/rocket_fin.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "galacticraft:iron_fin" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/items/rocket_module.json b/src/main/generated/data/c/tags/items/rocket_module.json deleted file mode 100644 index e287b9216..000000000 --- a/src/main/generated/data/c/tags/items/rocket_module.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "galacticraft:test_module" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/items/rocket_plating.json b/src/main/generated/data/c/tags/items/rocket_plating.json deleted file mode 100644 index 9eecb002a..000000000 --- a/src/main/generated/data/c/tags/items/rocket_plating.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "galacticraft:iron_plating" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/advancements/recipes/transportation/iron_rocket_launch_pad.json b/src/main/generated/data/galacticraft/advancements/recipes/transportation/iron_rocket_launch_pad.json index 1b88b4e58..3bb25deb6 100644 --- a/src/main/generated/data/galacticraft/advancements/recipes/transportation/iron_rocket_launch_pad.json +++ b/src/main/generated/data/galacticraft/advancements/recipes/transportation/iron_rocket_launch_pad.json @@ -1,12 +1,12 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_desh_block": { + "has_iron_block": { "conditions": { "items": [ { "items": [ - "galacticraft:desh_block" + "minecraft:iron_block" ] } ] @@ -23,7 +23,7 @@ "requirements": [ [ "has_the_recipe", - "has_desh_block" + "has_iron_block" ] ], "rewards": { diff --git a/src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json b/src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json index 7c147f78d..feaa26fdc 100644 --- a/src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json +++ b/src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json @@ -1,12 +1,12 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_iron_block": { + "has_desh_block": { "conditions": { "items": [ { "items": [ - "minecraft:iron_block" + "galacticraft:desh_block" ] } ] @@ -23,7 +23,7 @@ "requirements": [ [ "has_the_recipe", - "has_iron_block" + "has_desh_block" ] ], "rewards": { diff --git a/src/main/generated/data/galacticraft/recipes/iron_rocket_launch_pad.json b/src/main/generated/data/galacticraft/recipes/iron_rocket_launch_pad.json index 7f5abe250..32e4c6510 100644 --- a/src/main/generated/data/galacticraft/recipes/iron_rocket_launch_pad.json +++ b/src/main/generated/data/galacticraft/recipes/iron_rocket_launch_pad.json @@ -3,10 +3,10 @@ "category": "misc", "key": { "C": { - "item": "galacticraft:compressed_steel" + "item": "galacticraft:compressed_iron" }, "I": { - "item": "galacticraft:desh_block" + "item": "minecraft:iron_block" } }, "pattern": [ diff --git a/src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json b/src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json index 125f9167b..27345706e 100644 --- a/src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json +++ b/src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json @@ -3,10 +3,10 @@ "category": "misc", "key": { "C": { - "item": "galacticraft:compressed_iron" + "item": "galacticraft:compressed_steel" }, "I": { - "item": "minecraft:iron_block" + "item": "galacticraft:desh_block" } }, "pattern": [ diff --git a/src/main/generated/data/galacticraft/tags/blocks/machines.json b/src/main/generated/data/galacticraft/tags/blocks/machines.json index 2e0a71a0b..111b488c9 100644 --- a/src/main/generated/data/galacticraft/tags/blocks/machines.json +++ b/src/main/generated/data/galacticraft/tags/blocks/machines.json @@ -18,7 +18,6 @@ "galacticraft:oxygen_compressor", "galacticraft:food_canner", "galacticraft:oxygen_storage_module", - "galacticraft:fuel_loader", - "galacticraft:rocket_workbench" + "galacticraft:fuel_loader" ] } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json index 1ff227b5b..8aefc5127 100644 --- a/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -36,8 +36,8 @@ "galacticraft:cracked_moon_basalt_brick_stairs", "galacticraft:mars_stone_stairs", "galacticraft:mars_cobblestone_stairs", - "galacticraft:netherite_rocket_launch_pad", "galacticraft:iron_rocket_launch_pad", + "galacticraft:netherite_rocket_launch_pad", "galacticraft:fallen_meteor", "galacticraft:tin_ladder", "galacticraft:fueling_pad", diff --git a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java index fd66491bf..810499994 100644 --- a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java @@ -23,8 +23,6 @@ package dev.galacticraft.mod.data.model; import com.google.common.collect.Maps; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.content.GCBlockRegistry; import dev.galacticraft.mod.content.GCBlocks; @@ -53,7 +51,6 @@ import org.jetbrains.annotations.Contract; import java.util.List; -import java.util.function.Supplier; public class GCModelProvider extends FabricModelProvider { private static final TexturedModel.Provider DETAILED_DECORATION = TexturedModel.createDefault(GCModelProvider::detailedTexture, ModelTemplates.CUBE_BOTTOM_TOP); @@ -141,6 +138,7 @@ public void generateBlockStateModels(BlockModelGenerators generator) { { createLaunchPadBlock(launch_pad, generator); } + generator.createNonTemplateModelBlock(GCBlocks.ROCKET_WORKBENCH); generator.createNonTemplateModelBlock(GCBlocks.FALLEN_METEOR); // LIGHT PANELS @@ -229,25 +227,25 @@ public void generateBlockStateModels(BlockModelGenerators generator) { // generator.createNonTemplateModelBlock(GCBlocks.CRYOGENIC_CHAMBER); generator.createNonTemplateModelBlock(GCBlocks.PLAYER_TRANSPORT_TUBE); - createMachineDelegateFrontFace(generator, GCBlocks.CIRCUIT_FABRICATOR); - createMachineDelegateFrontFace(generator, GCBlocks.COMPRESSOR); - createMachineDelegateFrontFace(generator, GCBlocks.ELECTRIC_COMPRESSOR); - createMachineDelegateFrontFace(generator, GCBlocks.COAL_GENERATOR); - createMachineDelegateFrontFace(generator, GCBlocks.ROCKET_WORKBENCH, "refinery_front", "machine_side"); //Todo not sure if its supposed to be a multiblock model? + //todo gen models (not just blockstates) + createMachineDelegate(generator, GCBlocks.CIRCUIT_FABRICATOR); + createMachineDelegate(generator, GCBlocks.COMPRESSOR); + createMachineDelegate(generator, GCBlocks.ELECTRIC_COMPRESSOR); + createMachineDelegate(generator, GCBlocks.COAL_GENERATOR); createMachineDelegate(generator, GCBlocks.BASIC_SOLAR_PANEL); createMachineDelegate(generator, GCBlocks.ADVANCED_SOLAR_PANEL); - createMachineDelegateFrontFace(generator, GCBlocks.ENERGY_STORAGE_MODULE, "energy_storage_module_0"); - createMachineDelegateFrontFace(generator, GCBlocks.ELECTRIC_FURNACE); - createMachineDelegateFrontFace(generator, GCBlocks.ELECTRIC_ARC_FURNACE); - createMachineDelegateZAxis(generator, GCBlocks.REFINERY, "refinery_front", "refinery_back"); - createMachineDelegateSingle(generator, GCBlocks.OXYGEN_COLLECTOR, "oxygen_collector"); - createMachineDelegateColumn(generator, GCBlocks.OXYGEN_SEALER, "oxygen_sealer", "oxygen_sealer_top", "machine", "machine_side"); //column with particle - createMachineDelegateSingle(generator, GCBlocks.OXYGEN_BUBBLE_DISTRIBUTOR, "oxygen_bubble_distributor"); - createMachineDelegateZAxis(generator, GCBlocks.OXYGEN_DECOMPRESSOR, "oxygen_decompressor", "oxygen_decompressor_back"); - createMachineDelegateZAxis(generator, GCBlocks.OXYGEN_COMPRESSOR, "oxygen_compressor", "oxygen_compressor_back"); - createMachineDelegateZAxis(generator, GCBlocks.FOOD_CANNER, "food_canner", "food_canner_back"); - createMachineDelegateZAxis(generator, GCBlocks.OXYGEN_STORAGE_MODULE, "oxygen_storage_model_8"); - createMachineDelegateZAxis(generator, GCBlocks.FUEL_LOADER, "fuel_loader_controls"); + createMachineDelegate(generator, GCBlocks.ENERGY_STORAGE_MODULE); + createMachineDelegate(generator, GCBlocks.ELECTRIC_FURNACE); + createMachineDelegate(generator, GCBlocks.ELECTRIC_ARC_FURNACE); + createMachineDelegate(generator, GCBlocks.REFINERY); + createMachineDelegate(generator, GCBlocks.OXYGEN_COLLECTOR); + createMachineDelegate(generator, GCBlocks.OXYGEN_SEALER); + createMachineDelegate(generator, GCBlocks.OXYGEN_BUBBLE_DISTRIBUTOR); + createMachineDelegate(generator, GCBlocks.OXYGEN_DECOMPRESSOR); + createMachineDelegate(generator, GCBlocks.OXYGEN_COMPRESSOR); + createMachineDelegate(generator, GCBlocks.FOOD_CANNER); + createMachineDelegate(generator, GCBlocks.OXYGEN_STORAGE_MODULE); + createMachineDelegate(generator, GCBlocks.FUEL_LOADER); generator.createNonTemplateModelBlock(GCBlocks.CRUDE_OIL); generator.createNonTemplateModelBlock(GCBlocks.FUEL); @@ -341,121 +339,7 @@ public static ResourceLocation getMachineModelLocation(Block block) { return resourceLocation.withPrefix("machine/"); } - private static void createMachineDelegateFrontFace(BlockModelGenerators generator, Block block) { - JsonObject customJson = new JsonObject(); - customJson.addProperty("machinelib:generate", "machinelib:front_face"); - - JsonObject sprites = new JsonObject(); - sprites.addProperty("sprite", getMachineModelLocation(block).toString().replace("machine", "block")); - - customJson.add("sprites", sprites); - Supplier jsonSupplier = () -> customJson; - generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); - generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); - } - - private static void createMachineDelegate(BlockModelGenerators generator, Block block) { - generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); - } - - private static void createMachineDelegateFrontFace(BlockModelGenerators generator, Block block, String id) { - JsonObject customJson = new JsonObject(); - customJson.addProperty("machinelib:generate", "machinelib:front_face"); - - JsonObject sprites = new JsonObject(); - sprites.addProperty("sprite", "galacticraft:block/" + id); - - customJson.add("sprites", sprites); - Supplier jsonSupplier = () -> customJson; - generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); - generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); - } - - private static void createMachineDelegateFrontFace(BlockModelGenerators generator, Block block, String id, String sides) { - JsonObject customJson = new JsonObject(); - customJson.addProperty("machinelib:generate", "machinelib:front_face"); - - JsonObject sprites = new JsonObject(); - sprites.addProperty("sprite", "galacticraft:block/" + id); - customJson.add("sprites", sprites); - JsonObject textures = new JsonObject(); - textures.addProperty("up", "galacticraft:block/" + sides); - textures.addProperty("down", "galacticraft:block/" + sides); - textures.addProperty("north", "galacticraft:block/" + sides); - textures.addProperty("east", "galacticraft:block/" + sides); - textures.addProperty("south", "galacticraft:block/" + sides); - textures.addProperty("west", "galacticraft:block/" + sides); - textures.addProperty("particle", "galacticraft:block/" + sides); - customJson.add("textures", textures); - Supplier jsonSupplier = () -> customJson; - generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); - generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); - } - - private static void createMachineDelegateZAxis(BlockModelGenerators generator, Block block, String id) { - JsonObject customJson = new JsonObject(); - customJson.addProperty("machinelib:generate", "machinelib:z_axis"); - - JsonObject sprites = new JsonObject(); - sprites.addProperty("front", "galacticraft:block/" + id); - sprites.addProperty("back", "galacticraft:block/" + id); - sprites.addProperty("sided", false); - - - customJson.add("sprites", sprites); - Supplier jsonSupplier = () -> customJson; - generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); - generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); - } - - private static void createMachineDelegateZAxis(BlockModelGenerators generator, Block block, String id, String id2) { - JsonObject customJson = new JsonObject(); - customJson.addProperty("machinelib:generate", "machinelib:z_axis"); - - JsonObject sprites = new JsonObject(); - sprites.addProperty("front", "galacticraft:block/" + id); - sprites.addProperty("back", "galacticraft:block/" + id2); - sprites.addProperty("sided", true); - - - customJson.add("sprites", sprites); - Supplier jsonSupplier = () -> customJson; - generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); - generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); - } - - private static void createMachineDelegateSingle(BlockModelGenerators generator, Block block, String id) { - JsonObject customJson = new JsonObject(); - customJson.addProperty("machinelib:generate", "machinelib:single"); - - JsonObject sprites = new JsonObject(); - sprites.addProperty("sprite", "galacticraft:block/" + id); - sprites.addProperty("particle", "galacticraft:block/" + id); - - customJson.add("sprites", sprites); - Supplier jsonSupplier = () -> customJson; - generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); - generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); - } - - private static void createMachineDelegateColumn(BlockModelGenerators generator, Block block, String id, String top, String bottom, String side) { - JsonObject customJson = new JsonObject(); - customJson.addProperty("machinelib:generate", "galacticraft:" + id); - - JsonObject sprites = new JsonObject(); - sprites.addProperty("top", "galacticraft:block/" + top); - customJson.add("sprites", sprites); - JsonObject textures = new JsonObject(); - textures.addProperty("up", "galacticraft:block/" + top); - textures.addProperty("down", "galacticraft:block/" + bottom); - textures.addProperty("north", "galacticraft:block/" + side); - textures.addProperty("east", "galacticraft:block/" + side); - textures.addProperty("south", "galacticraft:block/" + side); - textures.addProperty("west", "galacticraft:block/" + side); - textures.addProperty("particle", "galacticraft:block/" + bottom); - customJson.add("textures", textures); - Supplier jsonSupplier = () -> customJson; - generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); + private static void createMachineDelegate(BlockModelGenerators generator, Block block) { //todo: look into why we need this prefix generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); } diff --git a/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java b/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java index e4d14f808..9e9da8286 100644 --- a/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java @@ -87,8 +87,7 @@ protected void addTags(HolderLookup.Provider provider) { GCBlocks.OXYGEN_COMPRESSOR, GCBlocks.FOOD_CANNER, GCBlocks.OXYGEN_STORAGE_MODULE, - GCBlocks.FUEL_LOADER, - GCBlocks.ROCKET_WORKBENCH + GCBlocks.FUEL_LOADER ); this.tag(BlockTags.CLIMBABLE) diff --git a/src/main/generated/assets/galacticraft/models/machine/circuit_fabricator.json b/src/main/resources/assets/galacticraft/models/machine/circuit_fabricator.json similarity index 100% rename from src/main/generated/assets/galacticraft/models/machine/circuit_fabricator.json rename to src/main/resources/assets/galacticraft/models/machine/circuit_fabricator.json diff --git a/src/main/generated/assets/galacticraft/models/machine/coal_generator.json b/src/main/resources/assets/galacticraft/models/machine/coal_generator.json similarity index 100% rename from src/main/generated/assets/galacticraft/models/machine/coal_generator.json rename to src/main/resources/assets/galacticraft/models/machine/coal_generator.json diff --git a/src/main/generated/assets/galacticraft/models/machine/compressor.json b/src/main/resources/assets/galacticraft/models/machine/compressor.json similarity index 100% rename from src/main/generated/assets/galacticraft/models/machine/compressor.json rename to src/main/resources/assets/galacticraft/models/machine/compressor.json diff --git a/src/main/generated/assets/galacticraft/models/machine/electric_arc_furnace.json b/src/main/resources/assets/galacticraft/models/machine/electric_arc_furnace.json similarity index 98% rename from src/main/generated/assets/galacticraft/models/machine/electric_arc_furnace.json rename to src/main/resources/assets/galacticraft/models/machine/electric_arc_furnace.json index 20704eddf..859b4dbd5 100644 --- a/src/main/generated/assets/galacticraft/models/machine/electric_arc_furnace.json +++ b/src/main/resources/assets/galacticraft/models/machine/electric_arc_furnace.json @@ -3,4 +3,4 @@ "sprites": { "sprite": "galacticraft:block/electric_arc_furnace" } -} \ No newline at end of file +} diff --git a/src/main/generated/assets/galacticraft/models/machine/electric_compressor.json b/src/main/resources/assets/galacticraft/models/machine/electric_compressor.json similarity index 100% rename from src/main/generated/assets/galacticraft/models/machine/electric_compressor.json rename to src/main/resources/assets/galacticraft/models/machine/electric_compressor.json diff --git a/src/main/generated/assets/galacticraft/models/machine/electric_furnace.json b/src/main/resources/assets/galacticraft/models/machine/electric_furnace.json similarity index 100% rename from src/main/generated/assets/galacticraft/models/machine/electric_furnace.json rename to src/main/resources/assets/galacticraft/models/machine/electric_furnace.json diff --git a/src/main/generated/assets/galacticraft/models/machine/energy_storage_module.json b/src/main/resources/assets/galacticraft/models/machine/energy_storage_module.json similarity index 100% rename from src/main/generated/assets/galacticraft/models/machine/energy_storage_module.json rename to src/main/resources/assets/galacticraft/models/machine/energy_storage_module.json diff --git a/src/main/generated/assets/galacticraft/models/machine/food_canner.json b/src/main/resources/assets/galacticraft/models/machine/food_canner.json similarity index 100% rename from src/main/generated/assets/galacticraft/models/machine/food_canner.json rename to src/main/resources/assets/galacticraft/models/machine/food_canner.json index 75f5f54bb..488777b0d 100644 --- a/src/main/generated/assets/galacticraft/models/machine/food_canner.json +++ b/src/main/resources/assets/galacticraft/models/machine/food_canner.json @@ -1,8 +1,8 @@ { "machinelib:generate": "machinelib:z_axis", "sprites": { - "back": "galacticraft:block/food_canner_back", "front": "galacticraft:block/food_canner", + "back": "galacticraft:block/food_canner_back", "sided": true } } \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/machine/fuel_loader.json b/src/main/resources/assets/galacticraft/models/machine/fuel_loader.json similarity index 100% rename from src/main/generated/assets/galacticraft/models/machine/fuel_loader.json rename to src/main/resources/assets/galacticraft/models/machine/fuel_loader.json index 66e1032b0..8781c25ef 100644 --- a/src/main/generated/assets/galacticraft/models/machine/fuel_loader.json +++ b/src/main/resources/assets/galacticraft/models/machine/fuel_loader.json @@ -1,8 +1,8 @@ { "machinelib:generate": "machinelib:z_axis", "sprites": { - "back": "galacticraft:block/fuel_loader_controls", "front": "galacticraft:block/fuel_loader_controls", + "back": "galacticraft:block/fuel_loader_controls", "sided": false } } \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/machine/oxygen_bubble_distributor.json b/src/main/resources/assets/galacticraft/models/machine/oxygen_bubble_distributor.json similarity index 66% rename from src/main/generated/assets/galacticraft/models/machine/oxygen_bubble_distributor.json rename to src/main/resources/assets/galacticraft/models/machine/oxygen_bubble_distributor.json index 9048c9436..9ccde990a 100644 --- a/src/main/generated/assets/galacticraft/models/machine/oxygen_bubble_distributor.json +++ b/src/main/resources/assets/galacticraft/models/machine/oxygen_bubble_distributor.json @@ -1,7 +1,6 @@ { "machinelib:generate": "machinelib:single", "sprites": { - "particle": "galacticraft:block/oxygen_bubble_distributor", "sprite": "galacticraft:block/oxygen_bubble_distributor" } } \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/machine/oxygen_collector.json b/src/main/resources/assets/galacticraft/models/machine/oxygen_collector.json similarity index 100% rename from src/main/generated/assets/galacticraft/models/machine/oxygen_collector.json rename to src/main/resources/assets/galacticraft/models/machine/oxygen_collector.json diff --git a/src/main/generated/assets/galacticraft/models/machine/oxygen_compressor.json b/src/main/resources/assets/galacticraft/models/machine/oxygen_compressor.json similarity index 100% rename from src/main/generated/assets/galacticraft/models/machine/oxygen_compressor.json rename to src/main/resources/assets/galacticraft/models/machine/oxygen_compressor.json index 045400b25..fcd76c2f7 100644 --- a/src/main/generated/assets/galacticraft/models/machine/oxygen_compressor.json +++ b/src/main/resources/assets/galacticraft/models/machine/oxygen_compressor.json @@ -1,8 +1,8 @@ { "machinelib:generate": "machinelib:z_axis", "sprites": { - "back": "galacticraft:block/oxygen_compressor_back", "front": "galacticraft:block/oxygen_compressor", + "back": "galacticraft:block/oxygen_compressor_back", "sided": true } } \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/machine/oxygen_decompressor.json b/src/main/resources/assets/galacticraft/models/machine/oxygen_decompressor.json similarity index 70% rename from src/main/generated/assets/galacticraft/models/machine/oxygen_decompressor.json rename to src/main/resources/assets/galacticraft/models/machine/oxygen_decompressor.json index 1ce7c8525..e6f4744bc 100644 --- a/src/main/generated/assets/galacticraft/models/machine/oxygen_decompressor.json +++ b/src/main/resources/assets/galacticraft/models/machine/oxygen_decompressor.json @@ -1,8 +1,8 @@ { "machinelib:generate": "machinelib:z_axis", "sprites": { - "back": "galacticraft:block/oxygen_decompressor_back", "front": "galacticraft:block/oxygen_decompressor", + "back": "galacticraft:block/oxygen_compressor_back", "sided": true } } \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/machine/oxygen_sealer.json b/src/main/resources/assets/galacticraft/models/machine/oxygen_sealer.json similarity index 80% rename from src/main/generated/assets/galacticraft/models/machine/oxygen_sealer.json rename to src/main/resources/assets/galacticraft/models/machine/oxygen_sealer.json index e4211588b..d30644978 100644 --- a/src/main/generated/assets/galacticraft/models/machine/oxygen_sealer.json +++ b/src/main/resources/assets/galacticraft/models/machine/oxygen_sealer.json @@ -4,12 +4,12 @@ "top": "galacticraft:block/oxygen_sealer_top" }, "textures": { + "up": "galacticraft:block/oxygen_sealer_top", "down": "galacticraft:block/machine", - "east": "galacticraft:block/machine_side", "north": "galacticraft:block/machine_side", - "particle": "galacticraft:block/machine", "south": "galacticraft:block/machine_side", - "up": "galacticraft:block/oxygen_sealer_top", - "west": "galacticraft:block/machine_side" + "east": "galacticraft:block/machine_side", + "west": "galacticraft:block/machine_side", + "particle": "galacticraft:block/machine" } } \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/oxygen_storage_module.json b/src/main/resources/assets/galacticraft/models/machine/oxygen_storage_module.json new file mode 100644 index 000000000..439458216 --- /dev/null +++ b/src/main/resources/assets/galacticraft/models/machine/oxygen_storage_module.json @@ -0,0 +1,8 @@ +{ + "machinelib:generate": "machinelib:z_axis", + "sprites": { + "front": "galacticraft:block/oxygen_storage_module_8", + "back": "galacticraft:block/oxygen_storage_module_8", + "sided": false + } +} \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/refinery.json b/src/main/resources/assets/galacticraft/models/machine/refinery.json new file mode 100644 index 000000000..3bb7f0e90 --- /dev/null +++ b/src/main/resources/assets/galacticraft/models/machine/refinery.json @@ -0,0 +1,17 @@ +{ + "machinelib:generate": "machinelib:z_axis", + "sprites": { + "front": "galacticraft:block/refinery_front", + "back": "galacticraft:block/refinery_back", + "sided": true + }, + "textures": { + "up": "galacticraft:block/machine", + "down": "galacticraft:block/machine", + "north": "galacticraft:block/refinery_front", + "south": "galacticraft:block/machine_side", + "east": "galacticraft:block/machine_side", + "west": "galacticraft:block/machine_side", + "particle": "galacticraft:block/machine" + } +} \ No newline at end of file From d198e833f7b7bb114871f09af326c18672eb32d5 Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Mon, 2 Sep 2024 20:09:27 +1000 Subject: [PATCH 20/23] Revert "Rocket Nose Cone Part added" This reverts commit 8087c7e2ade4b32e85e31fcfaf20c5c24586b8a0. --- .../blockstates/testrocket_launch_pad.json | 40 ++++++++++++++ .../assets/galacticraft/lang/en_us.json | 2 +- .../block/testrocket_launch_pad_center.json | 9 ++++ .../block/testrocket_launch_pad_corner.json | 9 ++++ .../block/testrocket_launch_pad_side.json | 9 ++++ .../models/item/iron_nose_cone.json | 6 --- .../models/item/testrocket_launch_pad.json | 3 ++ .../data/c/tags/items/rocket_nose_cone.json | 6 --- .../galacticraft/dimension_type/asteroid.json | 2 +- .../blocks/testrocket_launch_pad.json | 53 +++++++++++++++++++ .../worldgen/biome/asteroid_field.json | 4 +- .../tags/blocks/mineable/pickaxe.json | 1 + .../mod/content/item/GCCreativeModeTabs.java | 5 -- .../mod/content/item/GCItems.java | 6 --- .../mod/data/GCBlockLootTableProvider.java | 1 - .../mod/data/GCDataGenerator.java | 1 + .../mod/data/model/GCModelProvider.java | 5 -- .../mod/data/tag/GCItemTagProvider.java | 3 -- .../mod/events/GCEventHandlers.java | 21 ++++---- .../mod/rockets/RocketNoseConeItem.java | 14 +---- .../galacticraft/mod/rockets/RocketParts.java | 4 -- .../java/dev/galacticraft/mod/tag/GCTags.java | 1 - .../mod/world/biome/AsteroidBiomes.java | 16 +++++- 23 files changed, 153 insertions(+), 68 deletions(-) create mode 100644 src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json create mode 100644 src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json create mode 100644 src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json create mode 100644 src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json delete mode 100644 src/main/generated/assets/galacticraft/models/item/iron_nose_cone.json create mode 100644 src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json delete mode 100644 src/main/generated/data/c/tags/items/rocket_nose_cone.json create mode 100644 src/main/generated/data/galacticraft/loot_tables/blocks/testrocket_launch_pad.json diff --git a/src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json b/src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json new file mode 100644 index 000000000..2ecdfb701 --- /dev/null +++ b/src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json @@ -0,0 +1,40 @@ +{ + "variants": { + "part=center": { + "model": "galacticraft:block/testrocket_launch_pad_center" + }, + "part=east": { + "model": "galacticraft:block/testrocket_launch_pad_side", + "y": 90 + }, + "part=none": { + "model": "galacticraft:block/testrocket_launch_pad_center" + }, + "part=north": { + "model": "galacticraft:block/testrocket_launch_pad_side" + }, + "part=north_east": { + "model": "galacticraft:block/testrocket_launch_pad_corner", + "y": 90 + }, + "part=north_west": { + "model": "galacticraft:block/testrocket_launch_pad_corner" + }, + "part=south": { + "model": "galacticraft:block/testrocket_launch_pad_side", + "y": 180 + }, + "part=south_east": { + "model": "galacticraft:block/testrocket_launch_pad_corner", + "y": 180 + }, + "part=south_west": { + "model": "galacticraft:block/testrocket_launch_pad_corner", + "y": 270 + }, + "part=west": { + "model": "galacticraft:block/testrocket_launch_pad_side", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/lang/en_us.json b/src/main/generated/assets/galacticraft/lang/en_us.json index ba26917e4..2cc8696fa 100644 --- a/src/main/generated/assets/galacticraft/lang/en_us.json +++ b/src/main/generated/assets/galacticraft/lang/en_us.json @@ -227,6 +227,7 @@ "block.galacticraft.steel_decoration_stairs": "Steel Decoration Stairs", "block.galacticraft.steel_decoration_wall": "Steel Decoration Wall", "block.galacticraft.sulfuric_acid": "Sulfuric Acid", + "block.galacticraft.testrocket_launch_pad": "Testrocket Launch Pad", "block.galacticraft.tin_decoration": "Tin Decoration", "block.galacticraft.tin_decoration_slab": "Tin Decoration Slab", "block.galacticraft.tin_decoration_stairs": "Tin Decoration Stairs", @@ -416,7 +417,6 @@ "item.galacticraft.hot_throwable_meteor_chunk": "Hot Throwable Meteor Chunk", "item.galacticraft.infinite_battery": "Infinite Battery", "item.galacticraft.infinite_oxygen_tank": "Infinite Oxygen Tank", - "item.galacticraft.iron_nose_cone": "Iron Nose Cone", "item.galacticraft.iron_shard": "Iron Shard", "item.galacticraft.isothermal_fabric": "Isothermal Fabric", "item.galacticraft.large_oxygen_tank": "Large Oxygen Tank", diff --git a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json new file mode 100644 index 000000000..beea922ff --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json @@ -0,0 +1,9 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_center", + "textures": { + "bottom": "galacticraft:block/testrocket_launch_pad", + "particle": "galacticraft:block/testrocket_launch_pad", + "side": "galacticraft:block/testrocket_launch_pad", + "top": "galacticraft:block/testrocket_launch_pad" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json new file mode 100644 index 000000000..79a3ed9f5 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json @@ -0,0 +1,9 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_part", + "textures": { + "bottom": "galacticraft:block/testrocket_launch_pad", + "particle": "galacticraft:block/testrocket_launch_pad_corner", + "side": "galacticraft:block/testrocket_launch_pad", + "top": "galacticraft:block/testrocket_launch_pad_corner" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json new file mode 100644 index 000000000..89c2b441a --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json @@ -0,0 +1,9 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_part", + "textures": { + "bottom": "galacticraft:block/testrocket_launch_pad", + "particle": "galacticraft:block/testrocket_launch_pad_side", + "side": "galacticraft:block/testrocket_launch_pad", + "top": "galacticraft:block/testrocket_launch_pad_side" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/iron_nose_cone.json b/src/main/generated/assets/galacticraft/models/item/iron_nose_cone.json deleted file mode 100644 index 02a684cd5..000000000 --- a/src/main/generated/assets/galacticraft/models/item/iron_nose_cone.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "galacticraft:item/iron_nose_cone" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json b/src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json new file mode 100644 index 000000000..0c40fbc55 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json @@ -0,0 +1,3 @@ +{ + "parent": "galacticraft:block/testrocket_launch_pad_center" +} \ No newline at end of file diff --git a/src/main/generated/data/c/tags/items/rocket_nose_cone.json b/src/main/generated/data/c/tags/items/rocket_nose_cone.json deleted file mode 100644 index 75b4fa519..000000000 --- a/src/main/generated/data/c/tags/items/rocket_nose_cone.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "galacticraft:iron_nose_cone" - ] -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/dimension_type/asteroid.json b/src/main/generated/data/galacticraft/dimension_type/asteroid.json index 8d27cad49..608a264ae 100644 --- a/src/main/generated/data/galacticraft/dimension_type/asteroid.json +++ b/src/main/generated/data/galacticraft/dimension_type/asteroid.json @@ -3,7 +3,7 @@ "bed_works": false, "coordinate_scale": 1.0, "effects": "galacticraft:asteroid", - "has_ceiling": true, + "has_ceiling": false, "has_raids": false, "has_skylight": false, "height": 384, diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/testrocket_launch_pad.json b/src/main/generated/data/galacticraft/loot_tables/blocks/testrocket_launch_pad.json new file mode 100644 index 000000000..7fef3be4b --- /dev/null +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/testrocket_launch_pad.json @@ -0,0 +1,53 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "galacticraft:testrocket_launch_pad", + "condition": "minecraft:block_state_property", + "properties": { + "part": "none" + } + } + ], + "name": "galacticraft:testrocket_launch_pad" + } + ], + "rolls": 1.0 + }, + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "galacticraft:testrocket_launch_pad", + "condition": "minecraft:block_state_property", + "properties": { + "part": "center" + } + } + ], + "name": "galacticraft:testrocket_launch_pad" + } + ], + "rolls": 9.0 + } + ] +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json b/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json index b24e8f59d..e3d05e3e6 100644 --- a/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json +++ b/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json @@ -13,7 +13,7 @@ "max_delay": 24000, "min_delay": 12000, "replace_current_music": false, - "sound": "galacticraft:music.music_orbit" + "sound": "galacticraft:music.music_moon" }, "sky_color": 0, "water_color": 0, @@ -57,5 +57,5 @@ "water_ambient": [], "water_creature": [] }, - "temperature": 2.0 + "temperature": -2.0 } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json index 8aefc5127..1a4d6d2b4 100644 --- a/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -38,6 +38,7 @@ "galacticraft:mars_cobblestone_stairs", "galacticraft:iron_rocket_launch_pad", "galacticraft:netherite_rocket_launch_pad", + "galacticraft:testrocket_launch_pad", "galacticraft:fallen_meteor", "galacticraft:tin_ladder", "galacticraft:fueling_pad", diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java index c65b47a64..40e27fcc9 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java @@ -186,11 +186,6 @@ public class GCCreativeModeTabs { output.accept(ROCKET_FIN); output.accept(ROCKET_ENGINE); - for (Item noseCone : NOSE_CONES) - { - output.accept(noseCone); - } - // SCHEMATICS output.accept(TIER_2_ROCKET_SCHEMATIC); output.accept(CARGO_ROCKET_SCHEMATIC); diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java index a9e624c73..10d17b1ba 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java @@ -28,7 +28,6 @@ import dev.galacticraft.mod.content.GCRegistry; import dev.galacticraft.mod.content.GCRocketParts; import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlock; -import dev.galacticraft.mod.rockets.RocketNoseConeItem; import dev.galacticraft.mod.rockets.RocketParts; import dev.galacticraft.mod.util.TextureUtils; import dev.galacticraft.mod.util.Translations; @@ -439,7 +438,6 @@ public class GCItems { //rocket parts public static List LAUNCH_PADS = new ArrayList<>(); - public static List NOSE_CONES = new ArrayList<>(); public static void register() { // === START BLOCKS === @@ -451,10 +449,6 @@ public static void register() { { LAUNCH_PADS.add(ITEMS.register(launchPadBlock.getType(), new BlockItem(launchPadBlock, new Item.Properties()))); } - for (RocketNoseConeItem noseConeItem : RocketParts.NOSE_CONES) - { - NOSE_CONES.add(ITEMS.register(noseConeItem.getType(), noseConeItem)); - } // MOON NATURAL Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.MOON_TURF), MOON_TURF); diff --git a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java index 06549f6fc..8ef54011d 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java @@ -30,7 +30,6 @@ import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider; import net.minecraft.advancements.critereon.StatePropertiesPredicate; import net.minecraft.data.loot.BlockLootSubProvider; -import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.block.Block; diff --git a/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java b/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java index 41f1fbc56..e16468d2e 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java +++ b/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java @@ -82,6 +82,7 @@ public void onInitializeDataGenerator(@NotNull FabricDataGenerator generator) { pack.addProvider(GCStructureTagProvider::new); // world generation +// pack.addProvider(BootstrapDataProvider.create("Noise", GCNoiseData::bootstrapRegistries)); pack.addProvider(BootstrapDataProvider.create("Density Functions", GCDensityFunctions::bootstrapRegistries)); pack.addProvider(BootstrapDataProvider.create("Biomes", GCBiomes::bootstrapRegistries)); pack.addProvider(BootstrapDataProvider.create("Dimension Types", GCDimensionTypes::bootstrapRegistries)); diff --git a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java index 810499994..90fa9aa1d 100644 --- a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java @@ -44,7 +44,6 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.properties.BlockStateProperties; @@ -422,10 +421,6 @@ public void generateItemModels(ItemModelGenerators generator) { generator.generateFlatItem(GCItems.NOSE_CONE, ModelTemplates.FLAT_ITEM); generator.generateFlatItem(GCItems.HEAVY_NOSE_CONE, "_joined", ModelTemplates.FLAT_ITEM); - for (Item noseCone : GCItems.NOSE_CONES) - { - generator.generateFlatItem(noseCone, ModelTemplates.FLAT_ITEM); - } // ROCKET PLATES generator.generateFlatItem(GCItems.TIER_1_HEAVY_DUTY_PLATE, ModelTemplates.FLAT_ITEM); diff --git a/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java b/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java index 7c7ca45a8..09aa183c2 100644 --- a/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/tag/GCItemTagProvider.java @@ -127,9 +127,6 @@ protected void addTags(HolderLookup.Provider provider) { GCItems.BEEF_PATTY, GCItems.CHEESEBURGER ); - - //rocket tags - tag(GCTags.ROCKET_NOSE_CONE).add(GCItems.NOSE_CONES.toArray(new Item[0])); } protected FabricTagProvider.FabricTagBuilder tag(TagKey tag) { diff --git a/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java b/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java index 1d8b193fa..0b73c744f 100644 --- a/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java +++ b/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java @@ -80,18 +80,15 @@ private static InteractionResultHolder onPlayerUseItem(Player player, { ItemStack itemStack = player.getItemInHand(hand); - if (itemStack.isEdible()) - { - if (itemStack.getItem() instanceof CannedFoodItem) - { - return InteractionResultHolder.pass(itemStack); - } else { - player.displayClientMessage(Component.literal("You cannot eat this here!").withColor(Color.RED.getRGB()), true); - player.playNotifySound(SoundEvents.GENERIC_EAT, player.getSoundSource(), 1.0F, 1.0F); - - return InteractionResultHolder.fail(itemStack); - } - } + if (itemStack.getItem() instanceof CannedFoodItem) + { + return InteractionResultHolder.pass(itemStack); + } else { + player.displayClientMessage(Component.literal("You cannot eat this here!").withColor(Color.RED.getRGB()), true); + player.playNotifySound(SoundEvents.GENERIC_EAT, player.getSoundSource(), 1.0F, 1.0F); + + return InteractionResultHolder.fail(itemStack); + } } return InteractionResultHolder.pass(player.getItemInHand(hand)); } diff --git a/src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java b/src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java index 2750a9a6b..0e88a5a24 100644 --- a/src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java +++ b/src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java @@ -1,16 +1,4 @@ package dev.galacticraft.mod.rockets; -import net.minecraft.world.item.Item; - -public class RocketNoseConeItem extends Item { - private final String type; - public RocketNoseConeItem(Properties properties, String type) { - super(properties); - this.type = type; - } - - public String getType() - { - return this.type + "nose_cone"; - } +public class RocketNoseConeItem { } diff --git a/src/main/java/dev/galacticraft/mod/rockets/RocketParts.java b/src/main/java/dev/galacticraft/mod/rockets/RocketParts.java index 64360a99b..19fe17063 100644 --- a/src/main/java/dev/galacticraft/mod/rockets/RocketParts.java +++ b/src/main/java/dev/galacticraft/mod/rockets/RocketParts.java @@ -4,7 +4,6 @@ import dev.galacticraft.api.rocket.part.RocketFin; import dev.galacticraft.api.rocket.part.type.RocketFinType; import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlock; -import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; @@ -27,8 +26,5 @@ public static void register() LAUNCH_PADS.add(new LaunchPadBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_GRAY).instrument(NoteBlockInstrument.BASEDRUM).strength(1.5F, 10.0F), "iron_", 500)); //netherite launch pad... use as an example for more launch pads LAUNCH_PADS.add(new LaunchPadBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_GRAY).instrument(NoteBlockInstrument.BASEDRUM).strength(1.5F, 10.0F), "netherite_", 1000)); - //iron nose cone - NOSE_CONES.add(new RocketNoseConeItem(new FabricItemSettings(), "iron_")); - } } diff --git a/src/main/java/dev/galacticraft/mod/tag/GCTags.java b/src/main/java/dev/galacticraft/mod/tag/GCTags.java index a132d454b..73f085000 100644 --- a/src/main/java/dev/galacticraft/mod/tag/GCTags.java +++ b/src/main/java/dev/galacticraft/mod/tag/GCTags.java @@ -72,7 +72,6 @@ public class GCTags { public static final TagKey COMPRESSED_STEEL = commonTag("compressed_steel"); public static final TagKey COMPRESSED_IRON = commonTag("compressed_iron"); public static final TagKey COMPRESSED_TIN = commonTag("compressed_tin"); - public static final TagKey ROCKET_NOSE_CONE = commonTag("rocket_nose_cone"); public static final TagKey MOON_RUINS = TagKey.create(Registries.STRUCTURE, Constant.id("moon_ruins")); diff --git a/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java b/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java index 3d2a33a4b..6005e1211 100644 --- a/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java +++ b/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java @@ -47,6 +47,15 @@ public static void monsters(MobSpawnSettings.Builder builder, int zombieWeight, // builder.addSpawn(MobCategory.MONSTER, new MobSpawnSettings.SpawnerData(GCEntityTypes.EVOLVED_WITCH, 5, 1, 1)); } + public static void addDefaultAsteroidOres(BiomeGenerationSettings.Builder builder) { +// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_COPPER_MOON); +// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_COPPER_LARGE_MOON); +// +// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_TIN_SMALL_MOON); +// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_TIN_MIDDLE_MOON); +// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_TIN_UPPER_MOON); + } + public static Biome asteroid( HolderGetter featureGetter, HolderGetter> carverGetter ) { @@ -58,13 +67,16 @@ public static Biome asteroid( .fogColor(0) .skyColor(0) .ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS) - .backgroundMusic(Musics.createGameMusic(GCSounds.MUSIC_ORBIT)); + .backgroundMusic(Musics.createGameMusic(GCSounds.MUSIC_MOON)); + + AsteroidBiomes.addDefaultAsteroidOres(generation); +// AsteroidBiomes.addDefaultSoftDisks(generation); AsteroidBiomes.monsters(spawnBuilder, 95, 5, 100); return new Biome.BiomeBuilder() .mobSpawnSettings(spawnBuilder.build()) .hasPrecipitation(false) - .temperature(2.0F) + .temperature(-2F) // temp is hot to prevent snow .downfall(0.5F) .specialEffects(specialEffects.build()) .generationSettings(generation.build()) From 90f54b52de2d708ddd9d85f7fde732e3f72d37c6 Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Mon, 2 Sep 2024 20:09:32 +1000 Subject: [PATCH 21/23] Revert "Made launch pads dynamic" This reverts commit 838e1cb5430379a8c36aadda09f51ec1611fd8dd. --- .../blockstates/iron_rocket_launch_pad.json | 40 ------------- .../netherite_rocket_launch_pad.json | 40 ------------- .../blockstates/rocket_launch_pad.json | 40 +++++++++++++ .../blockstates/testrocket_launch_pad.json | 40 ------------- .../assets/galacticraft/lang/en_us.json | 4 +- .../models/block/fueling_pad_center.json | 9 --- .../block/iron_rocket_launch_pad_center.json | 9 --- .../block/iron_rocket_launch_pad_corner.json | 9 --- .../block/iron_rocket_launch_pad_side.json | 9 --- .../netherite_rocket_launch_pad_center.json | 9 --- .../netherite_rocket_launch_pad_corner.json | 9 --- .../netherite_rocket_launch_pad_side.json | 9 --- .../block/rocket_launch_pad_corner.json | 9 +++ .../models/block/rocket_launch_pad_side.json | 9 +++ .../block/testrocket_launch_pad_center.json | 9 --- .../block/testrocket_launch_pad_corner.json | 9 --- .../block/testrocket_launch_pad_side.json | 9 --- .../models/item/iron_rocket_launch_pad.json | 3 - .../item/netherite_rocket_launch_pad.json | 3 - .../models/item/rocket_launch_pad.json | 3 + .../models/item/testrocket_launch_pad.json | 3 - .../netherite_rocket_launch_pad.json | 34 ----------- ...launch_pad.json => rocket_launch_pad.json} | 4 +- .../blocks/iron_rocket_launch_pad.json | 53 ------------------ .../blocks/netherite_rocket_launch_pad.json | 53 ------------------ ...launch_pad.json => rocket_launch_pad.json} | 8 +-- .../recipes/netherite_rocket_launch_pad.json | 20 ------- ...launch_pad.json => rocket_launch_pad.json} | 2 +- .../tags/blocks/mineable/pickaxe.json | 4 +- .../java/dev/galacticraft/mod/Constant.java | 1 + .../dev/galacticraft/mod/Galacticraft.java | 2 - .../mod/content/GCBlockEntityTypes.java | 22 +------- .../galacticraft/mod/content/GCBlocks.java | 11 +--- .../entity/machine/FuelLoaderBlockEntity.java | 2 +- .../block/special/launchpad/FuelPadBlock.java | 3 +- .../special/launchpad/LaunchPadBlock.java | 19 +------ .../launchpad/LaunchPadBlockEntity.java | 13 ++--- .../content/entity/orbital/RocketEntity.java | 19 +------ .../mod/content/item/GCCreativeModeTabs.java | 8 +-- .../mod/content/item/GCItems.java | 13 +---- .../mod/content/item/RocketItem.java | 6 +- .../mod/data/GCBlockLootTableProvider.java | 5 +- .../mod/data/model/GCModelProvider.java | 8 +-- .../mod/data/model/GCModelTemplates.java | 1 - .../data/recipes/GCMiscRecipeProvider.java | 10 +--- .../mod/data/tag/GCBlockTagProvider.java | 3 +- .../mod/rockets/RocketEngineItem.java | 4 -- .../mod/rockets/RocketFinItem.java | 4 -- .../mod/rockets/RocketNoseConeItem.java | 4 -- .../galacticraft/mod/rockets/RocketParts.java | 30 ---------- .../mod/rockets/RocketPlatingItem.java | 4 -- .../block/rocket_launch_pad_center.json | 15 ++--- .../textures/block/advanced_solar_panel.png | Bin 3107 -> 4829 bytes .../textures/block/air_lock_controller.png | Bin 3127 -> 3549 bytes .../textures/block/air_lock_frame.png | Bin 439 -> 1120 bytes .../textures/block/aluminum_block.png | Bin 264 -> 289 bytes .../textures/block/aluminum_decoration.png | Bin 746 -> 1932 bytes .../textures/block/aluminum_ore.png | Bin 591 -> 382 bytes .../textures/block/aluminum_wire.png | Bin 275 -> 259 bytes .../textures/block/asteroid_aluminum_ore.png | Bin 3273 -> 7386 bytes .../textures/block/asteroid_iron_ore.png | Bin 3266 -> 7386 bytes .../textures/block/asteroid_rock_block_0.png | Bin 3068 -> 0 bytes .../textures/block/asteroid_rock_block_1.png | Bin 3103 -> 6362 bytes .../textures/block/asteroid_rock_block_2.png | Bin 3116 -> 6362 bytes .../textures/block/basic_solar_panel.png | Bin 3138 -> 4837 bytes .../textures/block/bronze_decoration.png | Bin 720 -> 2043 bytes .../textures/block/cavernous_vine.png | Bin 346 -> 0 bytes .../textures/block/cavernous_vine_tip.png | Bin 211 -> 0 bytes .../textures/block/cheese_block.png | Bin 420 -> 0 bytes .../textures/block/cheese_bottom.png | Bin 221 -> 0 bytes .../textures/block/cheese_inner.png | Bin 260 -> 0 bytes .../textures/block/cheese_side.png | Bin 228 -> 0 bytes .../textures/block/cheese_top.png | Bin 265 -> 0 bytes .../block/chiseled_moon_rock_brick.png | Bin 360 -> 562 bytes .../textures/block/circuit_fabricator.png | Bin 510 -> 666 bytes .../textures/block/circuit_fabricator_off.png | Bin 491 -> 642 bytes .../textures/block/circuit_fabricator_on.png | Bin 510 -> 666 bytes .../textures/block/coal_generator.png | Bin 473 -> 770 bytes .../textures/block/cobbled_lunaslate.png | Bin 484 -> 702 bytes .../textures/block/cobbled_moon_rock.png | Bin 743 -> 2107 bytes .../textures/block/compressor.png | Bin 395 -> 632 bytes .../textures/block/copper_decoration.png | Bin 333 -> 348 bytes .../block/cracked_moon_basalt_brick.png | Bin 889 -> 1899 bytes .../textures/block/crude_oil_still.png.mcmeta | 42 +------------- .../textures/block/dark_decoration.png | Bin 2952 -> 3080 bytes .../textures/block/deepslate_aluminum_ore.png | Bin 677 -> 589 bytes .../textures/block/deepslate_silicon_ore.png | Bin 646 -> 669 bytes .../textures/block/deepslate_tin_ore.png | Bin 673 -> 656 bytes .../textures/block/desh_block.png | Bin 3035 -> 3080 bytes .../galacticraft/textures/block/desh_ore.png | Bin 3220 -> 3277 bytes .../detailed_aluminum_decoration_side.png | Bin 921 -> 2334 bytes .../detailed_aluminum_decoration_top.png | Bin 796 -> 2225 bytes .../block/detailed_bronze_decoration_side.png | Bin 902 -> 2411 bytes .../block/detailed_bronze_decoration_top.png | Bin 771 -> 2309 bytes .../block/detailed_copper_decoration_side.png | Bin 466 -> 469 bytes .../block/detailed_copper_decoration_top.png | Bin 776 -> 2278 bytes .../block/detailed_dark_decoration_side.png | Bin 3087 -> 422 bytes .../block/detailed_dark_decoration_top.png | Bin 3007 -> 427 bytes .../block/detailed_iron_decoration_side.png | Bin 800 -> 1999 bytes .../block/detailed_iron_decoration_top.png | Bin 728 -> 1903 bytes ...detailed_meteoric_iron_decoration_side.png | Bin 919 -> 2185 bytes .../detailed_meteoric_iron_decoration_top.png | Bin 798 -> 2074 bytes .../block/detailed_steel_decoration_side.png | Bin 847 -> 1974 bytes .../block/detailed_steel_decoration_top.png | Bin 729 -> 1877 bytes .../block/detailed_tin_decoration_side.png | Bin 528 -> 398 bytes .../block/detailed_tin_decoration_top.png | Bin 415 -> 408 bytes .../detailed_titanium_decoration_side.png | Bin 911 -> 2004 bytes .../detailed_titanium_decoration_top.png | Bin 796 -> 1894 bytes .../textures/block/electric_arc_furnace.png | Bin 477 -> 758 bytes .../textures/block/electric_compressor.png | Bin 377 -> 624 bytes .../block/electric_compressor_off.png | Bin 353 -> 602 bytes .../textures/block/electric_compressor_on.png | Bin 377 -> 624 bytes .../textures/block/electric_furnace.png | Bin 492 -> 786 bytes .../block/energy_storage_module_0.png | Bin 348 -> 640 bytes .../block/energy_storage_module_1.png | Bin 374 -> 669 bytes .../block/energy_storage_module_2.png | Bin 387 -> 692 bytes .../block/energy_storage_module_3.png | Bin 389 -> 708 bytes .../block/energy_storage_module_4.png | Bin 390 -> 730 bytes .../block/energy_storage_module_5.png | Bin 395 -> 749 bytes .../block/energy_storage_module_6.png | Bin 395 -> 762 bytes .../block/energy_storage_module_7.png | Bin 398 -> 780 bytes .../block/energy_storage_module_8.png | Bin 400 -> 797 bytes .../textures/block/fallen_meteor.png | Bin 2973 -> 3394 bytes .../textures/block/fuel_flowing.png | Bin 7155 -> 6673 bytes .../textures/block/fuel_loader_controls.png | Bin 427 -> 449 bytes .../textures/block/fuel_still.png | Bin 4531 -> 4848 bytes .../textures/block/fuel_still.png.mcmeta | 42 +------------- .../textures/block/galena_ore.png | Bin 3273 -> 18266 bytes .../textures/block/glass_fluid_pipe/black.png | Bin 159 -> 153 bytes .../textures/block/glass_fluid_pipe/blue.png | Bin 159 -> 175 bytes .../textures/block/glass_fluid_pipe/brown.png | Bin 159 -> 175 bytes .../textures/block/glass_fluid_pipe/cyan.png | Bin 149 -> 175 bytes .../textures/block/glass_fluid_pipe/gray.png | Bin 159 -> 162 bytes .../textures/block/glass_fluid_pipe/green.png | Bin 149 -> 174 bytes .../block/glass_fluid_pipe/light_blue.png | Bin 149 -> 175 bytes .../block/glass_fluid_pipe/light_gray.png | Bin 149 -> 170 bytes .../textures/block/glass_fluid_pipe/lime.png | Bin 149 -> 175 bytes .../block/glass_fluid_pipe/magenta.png | Bin 149 -> 175 bytes .../block/glass_fluid_pipe/orange.png | Bin 149 -> 174 bytes .../textures/block/glass_fluid_pipe/pink.png | Bin 149 -> 174 bytes .../block/glass_fluid_pipe/purple.png | Bin 149 -> 175 bytes .../textures/block/glass_fluid_pipe/red.png | Bin 149 -> 171 bytes .../textures/block/glass_fluid_pipe/white.png | Bin 149 -> 163 bytes .../block/glass_fluid_pipe/yellow.png | Bin 159 -> 173 bytes .../textures/block/glowstone_torch.png | Bin 2806 -> 3161 bytes .../galacticraft/textures/block/grating.png | Bin 243 -> 0 bytes .../textures/block/hard_venus_rock.png | Bin 3063 -> 3362 bytes .../textures/block/ilmenite_ore.png | Bin 3260 -> 7386 bytes .../textures/block/iron_decoration.png | Bin 678 -> 1758 bytes .../textures/block/iron_rocket_launch_pad.png | Bin 2915 -> 0 bytes .../textures/block/landing_pad.png | Bin 283 -> 303 bytes .../textures/block/lead_block.png | Bin 3000 -> 3371 bytes .../textures/block/lunar_sapphire_block.png | Bin 793 -> 2750 bytes .../galacticraft/textures/block/lunaslate.png | Bin 427 -> 278 bytes .../textures/block/lunaslate_copper_ore.png | Bin 659 -> 748 bytes .../textures/block/lunaslate_tin_ore.png | Bin 595 -> 684 bytes .../galacticraft/textures/block/machine.png | Bin 348 -> 674 bytes .../textures/block/machine_fluid_input.png | Bin 779 -> 850 bytes .../textures/block/machine_fluid_output.png | Bin 777 -> 854 bytes .../textures/block/machine_item_input.png | Bin 825 -> 1914 bytes .../textures/block/machine_item_output.png | Bin 815 -> 1878 bytes .../textures/block/machine_oxygen_input.png | Bin 424 -> 344 bytes .../textures/block/machine_oxygen_output.png | Bin 420 -> 342 bytes .../textures/block/machine_painter.png | Bin 487 -> 797 bytes .../textures/block/machine_power_input.png | Bin 429 -> 347 bytes .../textures/block/machine_power_output.png | Bin 423 -> 336 bytes .../textures/block/machine_side.png | Bin 437 -> 785 bytes .../textures/block/mars_cobblestone.png | Bin 3102 -> 3331 bytes .../textures/block/mars_copper_ore.png | Bin 698 -> 536 bytes .../textures/block/mars_iron_ore.png | Bin 658 -> 535 bytes .../textures/block/mars_stone.png | Bin 3063 -> 3116 bytes .../textures/block/mars_sub_surface_rock.png | Bin 3067 -> 3144 bytes .../textures/block/mars_surface_rock.png | Bin 3051 -> 3186 bytes .../textures/block/mars_tin_ore.png | Bin 640 -> 549 bytes .../textures/block/meteoric_iron_block.png | Bin 3110 -> 7472 bytes .../block/meteoric_iron_decoration.png | Bin 738 -> 1853 bytes .../textures/block/moon_basalt.png | Bin 771 -> 1837 bytes .../textures/block/moon_basalt_brick.png | Bin 761 -> 1898 bytes .../textures/block/moon_berry_bush_0.png | Bin 316 -> 277 bytes .../textures/block/moon_berry_bush_1.png | Bin 569 -> 357 bytes .../textures/block/moon_berry_bush_2.png | Bin 606 -> 388 bytes .../textures/block/moon_berry_bush_3.png | Bin 601 -> 379 bytes .../textures/block/moon_cheese_leaves.png | Bin 3146 -> 3466 bytes .../textures/block/moon_cheese_log_side.png | Bin 2938 -> 3218 bytes .../textures/block/moon_cheese_log_top.png | Bin 3016 -> 3326 bytes .../textures/block/moon_cheese_ore.png | Bin 629 -> 665 bytes .../textures/block/moon_copper_ore.png | Bin 617 -> 670 bytes .../galacticraft/textures/block/moon_dirt.png | Bin 759 -> 1757 bytes .../galacticraft/textures/block/moon_rock.png | Bin 729 -> 1902 bytes .../textures/block/moon_rock_brick.png | Bin 725 -> 1847 bytes .../textures/block/moon_surface_rock.png | Bin 731 -> 1725 bytes .../textures/block/moon_tin_ore.png | Bin 629 -> 705 bytes .../textures/block/moon_turf_block_side.png | Bin 380 -> 0 bytes .../textures/block/moon_turf_block_top.png | Bin 311 -> 0 bytes .../textures/block/moon_turf_path_side.png | Bin 2994 -> 0 bytes .../textures/block/moon_turf_path_top.png | Bin 319 -> 0 bytes .../block/netherite_rocket_launch_pad.png | Bin 2915 -> 0 bytes .../netherite_rocket_launch_pad_corner.png | Bin 363 -> 0 bytes .../netherite_rocket_launch_pad_side.png | Bin 345 -> 0 bytes .../galacticraft/textures/block/oxygen.png | Bin 763 -> 766 bytes .../block/oxygen_bubble_distributor.png | Bin 455 -> 2141 bytes .../textures/block/oxygen_collector.png | Bin 873 -> 983 bytes .../block/oxygen_collector.png.mcmeta | 2 +- .../textures/block/oxygen_compressor.png | Bin 891 -> 1071 bytes .../textures/block/oxygen_compressor_back.png | Bin 853 -> 1070 bytes .../textures/block/oxygen_decompressor.png | Bin 903 -> 1139 bytes .../textures/block/oxygen_sealer_top.png | Bin 422 -> 542 bytes .../block/oxygen_storage_module_0.png | Bin 760 -> 1010 bytes .../block/oxygen_storage_module_1.png | Bin 774 -> 1037 bytes .../block/oxygen_storage_module_2.png | Bin 778 -> 1034 bytes .../block/oxygen_storage_module_3.png | Bin 779 -> 1040 bytes .../block/oxygen_storage_module_4.png | Bin 773 -> 1043 bytes .../block/oxygen_storage_module_5.png | Bin 776 -> 1043 bytes .../block/oxygen_storage_module_6.png | Bin 777 -> 1050 bytes .../block/oxygen_storage_module_7.png | Bin 776 -> 1044 bytes .../block/oxygen_storage_module_8.png | Bin 774 -> 1041 bytes .../block/poisonous_cavernous_vine.png | Bin 3319 -> 0 bytes .../block/poisonous_cavernous_vine.png.mcmeta | 6 -- .../galacticraft/textures/block/pumice.png | Bin 3048 -> 3404 bytes .../textures/block/refinery_back.png | Bin 415 -> 420 bytes .../textures/block/refinery_front.png | Bin 473 -> 412 bytes ...orner.png => rocket_launch_pad_corner.png} | Bin ...ad_side.png => rocket_launch_pad_side.png} | Bin .../textures/block/sapphire_ore.png | Bin 632 -> 15543 bytes .../textures/block/scorched_venus_rock.png | Bin 3080 -> 18230 bytes .../textures/block/sealable_aluminum_wire.png | Bin 3047 -> 3953 bytes .../textures/block/silicon_block.png | Bin 391 -> 1624 bytes .../textures/block/silicon_ore.png | Bin 506 -> 416 bytes .../textures/block/soft_venus_rock.png | Bin 3062 -> 3363 bytes .../galacticraft/textures/block/solar_ore.png | Bin 3241 -> 0 bytes .../textures/block/solar_panel.png | Bin 3016 -> 4444 bytes .../textures/block/steel_decoration.png | Bin 690 -> 1715 bytes .../galacticraft/textures/block/tin_block.png | Bin 271 -> 290 bytes .../textures/block/tin_decoration.png | Bin 353 -> 367 bytes .../textures/block/tin_ladder.png | Bin 698 -> 1579 bytes .../galacticraft/textures/block/tin_ore.png | Bin 557 -> 381 bytes .../textures/block/titanium_block.png | Bin 2920 -> 3392 bytes .../textures/block/titanium_decoration.png | Bin 746 -> 1741 bytes .../block/transport_tube_inner_side.png | Bin 246 -> 0 bytes .../textures/block/transport_tube_side.png | Bin 246 -> 0 bytes .../textures/block/transport_tube_top.png | Bin 207 -> 0 bytes .../textures/block/unlit_lantern.png | Bin 356 -> 313 bytes .../textures/block/unlit_torch.png | Bin 2802 -> 2890 bytes .../textures/block/vacuum_glass.png | Bin 220 -> 0 bytes .../textures/block/vacuum_glass_pane_top.png | Bin 172 -> 0 bytes .../textures/block/vapor_spout_block_top.png | Bin 3094 -> 0 bytes .../textures/block/venus_aluminum_ore.png | Bin 3288 -> 18320 bytes .../textures/block/venus_copper_ore.png | Bin 3292 -> 18295 bytes .../block/venus_dungeon_brick_block_1.png | Bin 3129 -> 3217 bytes .../block/venus_dungeon_brick_block_2.png | Bin 3097 -> 3204 bytes .../textures/block/venus_tin_ore.png | Bin 3276 -> 18300 bytes .../textures/block/volcanic_rock.png | Bin 1175 -> 3448 bytes .../textures/block/volcanic_rock.png.mcmeta | 11 ---- .../galacticraft/textures/block/walkway.png | Bin 435 -> 606 bytes 254 files changed, 107 insertions(+), 665 deletions(-) delete mode 100644 src/main/generated/assets/galacticraft/blockstates/iron_rocket_launch_pad.json delete mode 100644 src/main/generated/assets/galacticraft/blockstates/netherite_rocket_launch_pad.json create mode 100644 src/main/generated/assets/galacticraft/blockstates/rocket_launch_pad.json delete mode 100644 src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json delete mode 100644 src/main/generated/assets/galacticraft/models/block/fueling_pad_center.json delete mode 100644 src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_center.json delete mode 100644 src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_corner.json delete mode 100644 src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_side.json delete mode 100644 src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_center.json delete mode 100644 src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_corner.json delete mode 100644 src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_side.json create mode 100644 src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_corner.json create mode 100644 src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_side.json delete mode 100644 src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json delete mode 100644 src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json delete mode 100644 src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json delete mode 100644 src/main/generated/assets/galacticraft/models/item/iron_rocket_launch_pad.json delete mode 100644 src/main/generated/assets/galacticraft/models/item/netherite_rocket_launch_pad.json create mode 100644 src/main/generated/assets/galacticraft/models/item/rocket_launch_pad.json delete mode 100644 src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json delete mode 100644 src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json rename src/main/generated/data/galacticraft/advancements/recipes/transportation/{iron_rocket_launch_pad.json => rocket_launch_pad.json} (84%) delete mode 100644 src/main/generated/data/galacticraft/loot_tables/blocks/iron_rocket_launch_pad.json delete mode 100644 src/main/generated/data/galacticraft/loot_tables/blocks/netherite_rocket_launch_pad.json rename src/main/generated/data/galacticraft/loot_tables/blocks/{testrocket_launch_pad.json => rocket_launch_pad.json} (80%) delete mode 100644 src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json rename src/main/generated/data/galacticraft/recipes/{iron_rocket_launch_pad.json => rocket_launch_pad.json} (84%) delete mode 100644 src/main/java/dev/galacticraft/mod/rockets/RocketEngineItem.java delete mode 100644 src/main/java/dev/galacticraft/mod/rockets/RocketFinItem.java delete mode 100644 src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java delete mode 100644 src/main/java/dev/galacticraft/mod/rockets/RocketParts.java delete mode 100644 src/main/java/dev/galacticraft/mod/rockets/RocketPlatingItem.java delete mode 100644 src/main/resources/assets/galacticraft/textures/block/asteroid_rock_block_0.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/cavernous_vine.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/cavernous_vine_tip.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/cheese_block.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/cheese_bottom.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/cheese_inner.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/cheese_side.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/cheese_top.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/grating.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/iron_rocket_launch_pad.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/moon_turf_block_side.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/moon_turf_block_top.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/moon_turf_path_side.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/moon_turf_path_top.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/netherite_rocket_launch_pad.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/netherite_rocket_launch_pad_corner.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/netherite_rocket_launch_pad_side.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/poisonous_cavernous_vine.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/poisonous_cavernous_vine.png.mcmeta rename src/main/resources/assets/galacticraft/textures/block/{iron_rocket_launch_pad_corner.png => rocket_launch_pad_corner.png} (100%) rename src/main/resources/assets/galacticraft/textures/block/{iron_rocket_launch_pad_side.png => rocket_launch_pad_side.png} (100%) delete mode 100644 src/main/resources/assets/galacticraft/textures/block/solar_ore.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/transport_tube_inner_side.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/transport_tube_side.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/transport_tube_top.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/vacuum_glass.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/vacuum_glass_pane_top.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/vapor_spout_block_top.png delete mode 100644 src/main/resources/assets/galacticraft/textures/block/volcanic_rock.png.mcmeta diff --git a/src/main/generated/assets/galacticraft/blockstates/iron_rocket_launch_pad.json b/src/main/generated/assets/galacticraft/blockstates/iron_rocket_launch_pad.json deleted file mode 100644 index e27df1f2f..000000000 --- a/src/main/generated/assets/galacticraft/blockstates/iron_rocket_launch_pad.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "variants": { - "part=center": { - "model": "galacticraft:block/iron_rocket_launch_pad_center" - }, - "part=east": { - "model": "galacticraft:block/iron_rocket_launch_pad_side", - "y": 90 - }, - "part=none": { - "model": "galacticraft:block/iron_rocket_launch_pad_center" - }, - "part=north": { - "model": "galacticraft:block/iron_rocket_launch_pad_side" - }, - "part=north_east": { - "model": "galacticraft:block/iron_rocket_launch_pad_corner", - "y": 90 - }, - "part=north_west": { - "model": "galacticraft:block/iron_rocket_launch_pad_corner" - }, - "part=south": { - "model": "galacticraft:block/iron_rocket_launch_pad_side", - "y": 180 - }, - "part=south_east": { - "model": "galacticraft:block/iron_rocket_launch_pad_corner", - "y": 180 - }, - "part=south_west": { - "model": "galacticraft:block/iron_rocket_launch_pad_corner", - "y": 270 - }, - "part=west": { - "model": "galacticraft:block/iron_rocket_launch_pad_side", - "y": 270 - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/blockstates/netherite_rocket_launch_pad.json b/src/main/generated/assets/galacticraft/blockstates/netherite_rocket_launch_pad.json deleted file mode 100644 index 65a02c2ab..000000000 --- a/src/main/generated/assets/galacticraft/blockstates/netherite_rocket_launch_pad.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "variants": { - "part=center": { - "model": "galacticraft:block/netherite_rocket_launch_pad_center" - }, - "part=east": { - "model": "galacticraft:block/netherite_rocket_launch_pad_side", - "y": 90 - }, - "part=none": { - "model": "galacticraft:block/netherite_rocket_launch_pad_center" - }, - "part=north": { - "model": "galacticraft:block/netherite_rocket_launch_pad_side" - }, - "part=north_east": { - "model": "galacticraft:block/netherite_rocket_launch_pad_corner", - "y": 90 - }, - "part=north_west": { - "model": "galacticraft:block/netherite_rocket_launch_pad_corner" - }, - "part=south": { - "model": "galacticraft:block/netherite_rocket_launch_pad_side", - "y": 180 - }, - "part=south_east": { - "model": "galacticraft:block/netherite_rocket_launch_pad_corner", - "y": 180 - }, - "part=south_west": { - "model": "galacticraft:block/netherite_rocket_launch_pad_corner", - "y": 270 - }, - "part=west": { - "model": "galacticraft:block/netherite_rocket_launch_pad_side", - "y": 270 - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/blockstates/rocket_launch_pad.json b/src/main/generated/assets/galacticraft/blockstates/rocket_launch_pad.json new file mode 100644 index 000000000..bad529938 --- /dev/null +++ b/src/main/generated/assets/galacticraft/blockstates/rocket_launch_pad.json @@ -0,0 +1,40 @@ +{ + "variants": { + "part=center": { + "model": "galacticraft:block/rocket_launch_pad_center" + }, + "part=east": { + "model": "galacticraft:block/rocket_launch_pad_side", + "y": 90 + }, + "part=none": { + "model": "galacticraft:block/rocket_launch_pad_center" + }, + "part=north": { + "model": "galacticraft:block/rocket_launch_pad_side" + }, + "part=north_east": { + "model": "galacticraft:block/rocket_launch_pad_corner", + "y": 90 + }, + "part=north_west": { + "model": "galacticraft:block/rocket_launch_pad_corner" + }, + "part=south": { + "model": "galacticraft:block/rocket_launch_pad_side", + "y": 180 + }, + "part=south_east": { + "model": "galacticraft:block/rocket_launch_pad_corner", + "y": 180 + }, + "part=south_west": { + "model": "galacticraft:block/rocket_launch_pad_corner", + "y": 270 + }, + "part=west": { + "model": "galacticraft:block/rocket_launch_pad_side", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json b/src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json deleted file mode 100644 index 2ecdfb701..000000000 --- a/src/main/generated/assets/galacticraft/blockstates/testrocket_launch_pad.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "variants": { - "part=center": { - "model": "galacticraft:block/testrocket_launch_pad_center" - }, - "part=east": { - "model": "galacticraft:block/testrocket_launch_pad_side", - "y": 90 - }, - "part=none": { - "model": "galacticraft:block/testrocket_launch_pad_center" - }, - "part=north": { - "model": "galacticraft:block/testrocket_launch_pad_side" - }, - "part=north_east": { - "model": "galacticraft:block/testrocket_launch_pad_corner", - "y": 90 - }, - "part=north_west": { - "model": "galacticraft:block/testrocket_launch_pad_corner" - }, - "part=south": { - "model": "galacticraft:block/testrocket_launch_pad_side", - "y": 180 - }, - "part=south_east": { - "model": "galacticraft:block/testrocket_launch_pad_corner", - "y": 180 - }, - "part=south_west": { - "model": "galacticraft:block/testrocket_launch_pad_corner", - "y": 270 - }, - "part=west": { - "model": "galacticraft:block/testrocket_launch_pad_side", - "y": 270 - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/lang/en_us.json b/src/main/generated/assets/galacticraft/lang/en_us.json index 2cc8696fa..c4bf9edbd 100644 --- a/src/main/generated/assets/galacticraft/lang/en_us.json +++ b/src/main/generated/assets/galacticraft/lang/en_us.json @@ -139,7 +139,6 @@ "block.galacticraft.iron_decoration_slab": "Iron Decoration Slab", "block.galacticraft.iron_decoration_stairs": "Iron Decoration Stairs", "block.galacticraft.iron_decoration_wall": "Iron Decoration Wall", - "block.galacticraft.iron_rocket_launch_pad": "Iron Rocket Launch Pad", "block.galacticraft.lead_block": "Block of Lead", "block.galacticraft.light_blue_candle_moon_cheese_block": "Block of Cheese with Light Blue Candle", "block.galacticraft.light_gray_candle_moon_cheese_block": "Block of Cheese with Light Gray Candle", @@ -194,7 +193,6 @@ "block.galacticraft.moon_surface_rock": "Moon Surface Rock", "block.galacticraft.moon_tin_ore": "Moon Tin Ore", "block.galacticraft.moon_turf": "Moon Turf", - "block.galacticraft.netherite_rocket_launch_pad": "Netherite Rocket Launch Pad", "block.galacticraft.orange_candle_moon_cheese_block": "Block of Cheese with Orange Candle", "block.galacticraft.oxygen_bubble_distributor": "Bubble Distributor", "block.galacticraft.oxygen_bubble_distributor.description": "Oxygen Bubble Distributor creates a bubble of air around itself. Requires oxygen and electricity.", @@ -213,6 +211,7 @@ "block.galacticraft.red_candle_moon_cheese_block": "Block of Cheese with Red Candle", "block.galacticraft.refinery": "Refinery", "block.galacticraft.refinery.description": "Refinery will take an input of oil and energy, and output fuel used for rockets and vehicles.", + "block.galacticraft.rocket_launch_pad": "Rocket Launch Pad", "block.galacticraft.rocket_workbench": "Rocket Workbench", "block.galacticraft.scorched_venus_rock": "Scorched Rock", "block.galacticraft.sealable_aluminum_wire": "Sealable Aluminum Wire", @@ -227,7 +226,6 @@ "block.galacticraft.steel_decoration_stairs": "Steel Decoration Stairs", "block.galacticraft.steel_decoration_wall": "Steel Decoration Wall", "block.galacticraft.sulfuric_acid": "Sulfuric Acid", - "block.galacticraft.testrocket_launch_pad": "Testrocket Launch Pad", "block.galacticraft.tin_decoration": "Tin Decoration", "block.galacticraft.tin_decoration_slab": "Tin Decoration Slab", "block.galacticraft.tin_decoration_stairs": "Tin Decoration Stairs", diff --git a/src/main/generated/assets/galacticraft/models/block/fueling_pad_center.json b/src/main/generated/assets/galacticraft/models/block/fueling_pad_center.json deleted file mode 100644 index 0343fa6df..000000000 --- a/src/main/generated/assets/galacticraft/models/block/fueling_pad_center.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_center", - "textures": { - "bottom": "galacticraft:block/fueling_pad", - "particle": "galacticraft:block/fueling_pad", - "side": "galacticraft:block/fueling_pad", - "top": "galacticraft:block/fueling_pad" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_center.json b/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_center.json deleted file mode 100644 index 6c6eb4e39..000000000 --- a/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_center.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_center", - "textures": { - "bottom": "galacticraft:block/iron_rocket_launch_pad", - "particle": "galacticraft:block/iron_rocket_launch_pad", - "side": "galacticraft:block/iron_rocket_launch_pad", - "top": "galacticraft:block/iron_rocket_launch_pad" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_corner.json b/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_corner.json deleted file mode 100644 index c121629c6..000000000 --- a/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_corner.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_part", - "textures": { - "bottom": "galacticraft:block/iron_rocket_launch_pad", - "particle": "galacticraft:block/iron_rocket_launch_pad_corner", - "side": "galacticraft:block/iron_rocket_launch_pad", - "top": "galacticraft:block/iron_rocket_launch_pad_corner" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_side.json b/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_side.json deleted file mode 100644 index d7b5d1f92..000000000 --- a/src/main/generated/assets/galacticraft/models/block/iron_rocket_launch_pad_side.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_part", - "textures": { - "bottom": "galacticraft:block/iron_rocket_launch_pad", - "particle": "galacticraft:block/iron_rocket_launch_pad_side", - "side": "galacticraft:block/iron_rocket_launch_pad", - "top": "galacticraft:block/iron_rocket_launch_pad_side" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_center.json b/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_center.json deleted file mode 100644 index 517b698f4..000000000 --- a/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_center.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_center", - "textures": { - "bottom": "galacticraft:block/netherite_rocket_launch_pad", - "particle": "galacticraft:block/netherite_rocket_launch_pad", - "side": "galacticraft:block/netherite_rocket_launch_pad", - "top": "galacticraft:block/netherite_rocket_launch_pad" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_corner.json b/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_corner.json deleted file mode 100644 index 9743db4c2..000000000 --- a/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_corner.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_part", - "textures": { - "bottom": "galacticraft:block/netherite_rocket_launch_pad", - "particle": "galacticraft:block/netherite_rocket_launch_pad_corner", - "side": "galacticraft:block/netherite_rocket_launch_pad", - "top": "galacticraft:block/netherite_rocket_launch_pad_corner" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_side.json b/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_side.json deleted file mode 100644 index ebaf45cec..000000000 --- a/src/main/generated/assets/galacticraft/models/block/netherite_rocket_launch_pad_side.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_part", - "textures": { - "bottom": "galacticraft:block/netherite_rocket_launch_pad", - "particle": "galacticraft:block/netherite_rocket_launch_pad_side", - "side": "galacticraft:block/netherite_rocket_launch_pad", - "top": "galacticraft:block/netherite_rocket_launch_pad_side" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_corner.json b/src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_corner.json new file mode 100644 index 000000000..ecc33eb90 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_corner.json @@ -0,0 +1,9 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_part", + "textures": { + "bottom": "galacticraft:block/rocket_launch_pad", + "particle": "galacticraft:block/rocket_launch_pad_corner", + "side": "galacticraft:block/rocket_launch_pad", + "top": "galacticraft:block/rocket_launch_pad_corner" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_side.json b/src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_side.json new file mode 100644 index 000000000..cc2945ec8 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/block/rocket_launch_pad_side.json @@ -0,0 +1,9 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_part", + "textures": { + "bottom": "galacticraft:block/rocket_launch_pad", + "particle": "galacticraft:block/rocket_launch_pad_side", + "side": "galacticraft:block/rocket_launch_pad", + "top": "galacticraft:block/rocket_launch_pad_side" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json deleted file mode 100644 index beea922ff..000000000 --- a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_center.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_center", - "textures": { - "bottom": "galacticraft:block/testrocket_launch_pad", - "particle": "galacticraft:block/testrocket_launch_pad", - "side": "galacticraft:block/testrocket_launch_pad", - "top": "galacticraft:block/testrocket_launch_pad" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json deleted file mode 100644 index 79a3ed9f5..000000000 --- a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_corner.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_part", - "textures": { - "bottom": "galacticraft:block/testrocket_launch_pad", - "particle": "galacticraft:block/testrocket_launch_pad_corner", - "side": "galacticraft:block/testrocket_launch_pad", - "top": "galacticraft:block/testrocket_launch_pad_corner" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json b/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json deleted file mode 100644 index 89c2b441a..000000000 --- a/src/main/generated/assets/galacticraft/models/block/testrocket_launch_pad_side.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "galacticraft:block/rocket_launch_pad_part", - "textures": { - "bottom": "galacticraft:block/testrocket_launch_pad", - "particle": "galacticraft:block/testrocket_launch_pad_side", - "side": "galacticraft:block/testrocket_launch_pad", - "top": "galacticraft:block/testrocket_launch_pad_side" - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/iron_rocket_launch_pad.json b/src/main/generated/assets/galacticraft/models/item/iron_rocket_launch_pad.json deleted file mode 100644 index 40e7641ec..000000000 --- a/src/main/generated/assets/galacticraft/models/item/iron_rocket_launch_pad.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "galacticraft:block/iron_rocket_launch_pad_center" -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/netherite_rocket_launch_pad.json b/src/main/generated/assets/galacticraft/models/item/netherite_rocket_launch_pad.json deleted file mode 100644 index b57ed5cc4..000000000 --- a/src/main/generated/assets/galacticraft/models/item/netherite_rocket_launch_pad.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "galacticraft:block/netherite_rocket_launch_pad_center" -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/rocket_launch_pad.json b/src/main/generated/assets/galacticraft/models/item/rocket_launch_pad.json new file mode 100644 index 000000000..8ce9b7268 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/item/rocket_launch_pad.json @@ -0,0 +1,3 @@ +{ + "parent": "galacticraft:block/rocket_launch_pad_center" +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json b/src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json deleted file mode 100644 index 0c40fbc55..000000000 --- a/src/main/generated/assets/galacticraft/models/item/testrocket_launch_pad.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "galacticraft:block/testrocket_launch_pad_center" -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json b/src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json deleted file mode 100644 index feaa26fdc..000000000 --- a/src/main/generated/data/galacticraft/advancements/recipes/transportation/netherite_rocket_launch_pad.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_desh_block": { - "conditions": { - "items": [ - { - "items": [ - "galacticraft:desh_block" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "galacticraft:netherite_rocket_launch_pad" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_desh_block" - ] - ], - "rewards": { - "recipes": [ - "galacticraft:netherite_rocket_launch_pad" - ] - } -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/advancements/recipes/transportation/iron_rocket_launch_pad.json b/src/main/generated/data/galacticraft/advancements/recipes/transportation/rocket_launch_pad.json similarity index 84% rename from src/main/generated/data/galacticraft/advancements/recipes/transportation/iron_rocket_launch_pad.json rename to src/main/generated/data/galacticraft/advancements/recipes/transportation/rocket_launch_pad.json index 3bb25deb6..b5b906130 100644 --- a/src/main/generated/data/galacticraft/advancements/recipes/transportation/iron_rocket_launch_pad.json +++ b/src/main/generated/data/galacticraft/advancements/recipes/transportation/rocket_launch_pad.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "galacticraft:iron_rocket_launch_pad" + "recipe": "galacticraft:rocket_launch_pad" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "galacticraft:iron_rocket_launch_pad" + "galacticraft:rocket_launch_pad" ] } } \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/iron_rocket_launch_pad.json b/src/main/generated/data/galacticraft/loot_tables/blocks/iron_rocket_launch_pad.json deleted file mode 100644 index fe80fb08d..000000000 --- a/src/main/generated/data/galacticraft/loot_tables/blocks/iron_rocket_launch_pad.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "galacticraft:iron_rocket_launch_pad", - "condition": "minecraft:block_state_property", - "properties": { - "part": "none" - } - } - ], - "name": "galacticraft:iron_rocket_launch_pad" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "galacticraft:iron_rocket_launch_pad", - "condition": "minecraft:block_state_property", - "properties": { - "part": "center" - } - } - ], - "name": "galacticraft:iron_rocket_launch_pad" - } - ], - "rolls": 9.0 - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/netherite_rocket_launch_pad.json b/src/main/generated/data/galacticraft/loot_tables/blocks/netherite_rocket_launch_pad.json deleted file mode 100644 index 5f2729d8c..000000000 --- a/src/main/generated/data/galacticraft/loot_tables/blocks/netherite_rocket_launch_pad.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "type": "minecraft:block", - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "galacticraft:netherite_rocket_launch_pad", - "condition": "minecraft:block_state_property", - "properties": { - "part": "none" - } - } - ], - "name": "galacticraft:netherite_rocket_launch_pad" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "conditions": [ - { - "block": "galacticraft:netherite_rocket_launch_pad", - "condition": "minecraft:block_state_property", - "properties": { - "part": "center" - } - } - ], - "name": "galacticraft:netherite_rocket_launch_pad" - } - ], - "rolls": 9.0 - } - ] -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/loot_tables/blocks/testrocket_launch_pad.json b/src/main/generated/data/galacticraft/loot_tables/blocks/rocket_launch_pad.json similarity index 80% rename from src/main/generated/data/galacticraft/loot_tables/blocks/testrocket_launch_pad.json rename to src/main/generated/data/galacticraft/loot_tables/blocks/rocket_launch_pad.json index 7fef3be4b..17c48fc37 100644 --- a/src/main/generated/data/galacticraft/loot_tables/blocks/testrocket_launch_pad.json +++ b/src/main/generated/data/galacticraft/loot_tables/blocks/rocket_launch_pad.json @@ -13,14 +13,14 @@ "type": "minecraft:item", "conditions": [ { - "block": "galacticraft:testrocket_launch_pad", + "block": "galacticraft:rocket_launch_pad", "condition": "minecraft:block_state_property", "properties": { "part": "none" } } ], - "name": "galacticraft:testrocket_launch_pad" + "name": "galacticraft:rocket_launch_pad" } ], "rolls": 1.0 @@ -37,14 +37,14 @@ "type": "minecraft:item", "conditions": [ { - "block": "galacticraft:testrocket_launch_pad", + "block": "galacticraft:rocket_launch_pad", "condition": "minecraft:block_state_property", "properties": { "part": "center" } } ], - "name": "galacticraft:testrocket_launch_pad" + "name": "galacticraft:rocket_launch_pad" } ], "rolls": 9.0 diff --git a/src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json b/src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json deleted file mode 100644 index 27345706e..000000000 --- a/src/main/generated/data/galacticraft/recipes/netherite_rocket_launch_pad.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "galacticraft:compressed_steel" - }, - "I": { - "item": "galacticraft:desh_block" - } - }, - "pattern": [ - "CCC", - "III" - ], - "result": { - "count": 9, - "item": "galacticraft:netherite_rocket_launch_pad" - } -} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/recipes/iron_rocket_launch_pad.json b/src/main/generated/data/galacticraft/recipes/rocket_launch_pad.json similarity index 84% rename from src/main/generated/data/galacticraft/recipes/iron_rocket_launch_pad.json rename to src/main/generated/data/galacticraft/recipes/rocket_launch_pad.json index 32e4c6510..022a91914 100644 --- a/src/main/generated/data/galacticraft/recipes/iron_rocket_launch_pad.json +++ b/src/main/generated/data/galacticraft/recipes/rocket_launch_pad.json @@ -15,6 +15,6 @@ ], "result": { "count": 9, - "item": "galacticraft:iron_rocket_launch_pad" + "item": "galacticraft:rocket_launch_pad" } } \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json index 1a4d6d2b4..7fd7884c2 100644 --- a/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json +++ b/src/main/generated/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -36,12 +36,10 @@ "galacticraft:cracked_moon_basalt_brick_stairs", "galacticraft:mars_stone_stairs", "galacticraft:mars_cobblestone_stairs", - "galacticraft:iron_rocket_launch_pad", - "galacticraft:netherite_rocket_launch_pad", - "galacticraft:testrocket_launch_pad", "galacticraft:fallen_meteor", "galacticraft:tin_ladder", "galacticraft:fueling_pad", + "galacticraft:rocket_launch_pad", "galacticraft:glowstone_lantern", "galacticraft:unlit_lantern", "galacticraft:grating", diff --git a/src/main/java/dev/galacticraft/mod/Constant.java b/src/main/java/dev/galacticraft/mod/Constant.java index 687ff6cbd..7232225d3 100644 --- a/src/main/java/dev/galacticraft/mod/Constant.java +++ b/src/main/java/dev/galacticraft/mod/Constant.java @@ -247,6 +247,7 @@ interface Block { // Pad Blocks String FUELING_PAD = "fueling_pad"; + String ROCKET_LAUNCH_PAD = "rocket_launch_pad"; String FUEL_LOADER = "fuel_loader"; String CARGO_LOADER = "cargo_loader"; String CARGO_UNLOADER = "cargo_unloader"; diff --git a/src/main/java/dev/galacticraft/mod/Galacticraft.java b/src/main/java/dev/galacticraft/mod/Galacticraft.java index e2a71272e..3f4a451c1 100644 --- a/src/main/java/dev/galacticraft/mod/Galacticraft.java +++ b/src/main/java/dev/galacticraft/mod/Galacticraft.java @@ -37,7 +37,6 @@ import dev.galacticraft.mod.network.GCServerPacketReceivers; import dev.galacticraft.mod.particle.GCParticleTypes; import dev.galacticraft.mod.recipe.GCRecipes; -import dev.galacticraft.mod.rockets.RocketParts; import dev.galacticraft.mod.screen.GCMenuTypes; import dev.galacticraft.mod.structure.GCStructurePieceTypes; import dev.galacticraft.mod.tag.GCTags; @@ -67,7 +66,6 @@ public void onInitialize() { long startInitTime = System.currentTimeMillis(); Constant.LOGGER.info("Starting initialization."); GCChunkGenerator.register(); - RocketParts.register(); GCTags.register(); GCFluids.register(); GCBlocks.register(); diff --git a/src/main/java/dev/galacticraft/mod/content/GCBlockEntityTypes.java b/src/main/java/dev/galacticraft/mod/content/GCBlockEntityTypes.java index f16befb9f..a61575a3a 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCBlockEntityTypes.java +++ b/src/main/java/dev/galacticraft/mod/content/GCBlockEntityTypes.java @@ -30,17 +30,12 @@ import dev.galacticraft.mod.content.block.entity.networked.WireBlockEntity; import dev.galacticraft.mod.content.block.entity.networked.WireWalkwayBlockEntity; import dev.galacticraft.mod.content.block.special.ParaChestBlockEntity; -import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlock; import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlockEntity; -import dev.galacticraft.mod.rockets.RocketParts; import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.level.block.entity.BlockEntityType; -import java.util.ArrayList; -import java.util.List; - public class GCBlockEntityTypes { public static final GCRegistry> BLOCK_ENTITIES = new GCRegistry<>(BuiltInRegistries.BLOCK_ENTITY_TYPE); // POWER GENERATION @@ -77,10 +72,7 @@ public class GCBlockEntityTypes { public static final BlockEntityType OXYGEN_STORAGE_MODULE = FabricBlockEntityTypeBuilder.create(OxygenStorageModuleBlockEntity::new, GCBlocks.OXYGEN_STORAGE_MODULE).build(); // ROCKETS - public static List> LAUNCH_PADS = new ArrayList<>(); - - - + public static final BlockEntityType LAUNCH_PAD = FabricBlockEntityTypeBuilder.create(LaunchPadBlockEntity::new, GCBlocks.ROCKET_LAUNCH_PAD).build(); public static final BlockEntityType FUEL_LOADER = FabricBlockEntityTypeBuilder.create(FuelLoaderBlockEntity::new, GCBlocks.FUEL_LOADER).build(); public static final BlockEntityType PARACHEST = FabricBlockEntityTypeBuilder.create(ParaChestBlockEntity::new, GCBlocks.PARACHEST).build(); @@ -94,17 +86,6 @@ public class GCBlockEntityTypes { public static final BlockEntityType ROCKET_WORKBENCH = FabricBlockEntityTypeBuilder.create(RocketWorkbenchBlockEntity::new, GCBlocks.ROCKET_WORKBENCH).build(); public static void register() { - //ROCKET PARTS - for (LaunchPadBlock launchPadBlock : RocketParts.LAUNCH_PADS) - { - var ref = new Object() { - BlockEntityType launchPadBlockEntityBlockEntityType = null; - }; - ref.launchPadBlockEntityBlockEntityType = FabricBlockEntityTypeBuilder.create((pos, state) -> new LaunchPadBlockEntity(pos, state, launchPadBlock.getThrust(), ref.launchPadBlockEntityBlockEntityType), launchPadBlock).build(); - LAUNCH_PADS.add(ref.launchPadBlockEntityBlockEntityType); - Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(launchPadBlock.getType()), ref.launchPadBlockEntityBlockEntityType); - } - Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.COAL_GENERATOR), COAL_GENERATOR); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.BASIC_SOLAR_PANEL), BASIC_SOLAR_PANEL); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.ADVANCED_SOLAR_PANEL), ADVANCED_SOLAR_PANEL); @@ -134,6 +115,7 @@ public static void register() { Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.FUEL_LOADER), FUEL_LOADER); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.PARACHEST), PARACHEST); + Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.ROCKET_LAUNCH_PAD), LAUNCH_PAD); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.SOLAR_PANEL_PART), SOLAR_PANEL_PART); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.CRYOGENIC_CHAMBER_PART), CRYOGENIC_CHAMBER_PART); Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, Constant.id(Constant.Block.CRYOGENIC_CHAMBER), CRYOGENIC_CHAMBER); diff --git a/src/main/java/dev/galacticraft/mod/content/GCBlocks.java b/src/main/java/dev/galacticraft/mod/content/GCBlocks.java index 19dc797e8..7411c8e15 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCBlocks.java +++ b/src/main/java/dev/galacticraft/mod/content/GCBlocks.java @@ -43,7 +43,6 @@ import dev.galacticraft.mod.content.block.special.walkway.FluidPipeWalkway; import dev.galacticraft.mod.content.block.special.walkway.WalkwayBlock; import dev.galacticraft.mod.content.block.special.walkway.WireWalkway; -import dev.galacticraft.mod.rockets.RocketParts; import dev.galacticraft.mod.util.MultiBlockUtil; import net.fabricmc.fabric.api.registry.FlammableBlockRegistry; import net.fabricmc.fabric.api.registry.FlattenableBlockRegistry; @@ -60,8 +59,6 @@ import net.minecraft.world.level.material.MapColor; import net.minecraft.world.level.material.PushReaction; -import java.util.ArrayList; -import java.util.List; import java.util.function.ToIntFunction; @SuppressWarnings("unused") @@ -191,6 +188,7 @@ public class GCBlocks { public static final Block HEAVY_SEALABLE_ALUMINUM_WIRE = BLOCKS.register(Constant.Block.HEAVY_SEALABLE_ALUMINUM_WIRE, new HeavySealableAluminumWireBlock(BlockBehaviour.Properties.ofFullCopy(TIN_DECORATION.block()))); public static final Block GLASS_FLUID_PIPE = BLOCKS.register(Constant.Block.GLASS_FLUID_PIPE, new GlassFluidPipeBlock(BlockBehaviour.Properties.of().instrument(NoteBlockInstrument.HAT).sound(SoundType.GLASS))); public static final Block FUELING_PAD = BLOCKS.register(Constant.Block.FUELING_PAD, new FuelPadBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_GRAY).instrument(NoteBlockInstrument.BASEDRUM).strength(1.5F, 10.0F))); + public static final Block ROCKET_LAUNCH_PAD = BLOCKS.register(Constant.Block.ROCKET_LAUNCH_PAD, new LaunchPadBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_GRAY).instrument(NoteBlockInstrument.BASEDRUM).strength(1.5F, 10.0F))); public static final Block ROCKET_WORKBENCH = BLOCKS.register(Constant.Block.ROCKET_WORKBENCH, new RocketWorkbench(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_GRAY).instrument(NoteBlockInstrument.BASEDRUM).strength(1.5F, 6.0F))); public static final Block PARACHEST = BLOCKS.registerWithItem(Constant.Block.PARACHEST, new ParaChestBlock(BlockBehaviour.Properties.of())); @@ -304,9 +302,6 @@ public class GCBlocks { public static final AirlockBlock AIR_LOCK_CONTROLLER = BLOCKS.register(Constant.Block.AIR_LOCK_CONTROLLER, new AirlockBlock(true, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BLOCK))); public static final Block AIR_LOCK_SEAL = BLOCKS.register(Constant.Block.AIR_LOCK_SEAL, new AirlockSealBlock(BlockBehaviour.Properties.ofFullCopy(AIR_LOCK_FRAME))); - //dynamic rockets - public static List LAUNCH_PADS = new ArrayList<>(); - public static Block register(String id, Block block) { return Registry.register(BuiltInRegistries.BLOCK, Constant.id(id), block); } @@ -317,10 +312,6 @@ public static void register() { FlammableBlockRegistry.getDefaultInstance().add(CAVERNOUS_VINES, 15, 60); FlammableBlockRegistry.getDefaultInstance().add(CAVERNOUS_VINES_PLANT, 15, 60); FlattenableBlockRegistry.register(MOON_DIRT, MOON_DIRT_PATH.defaultBlockState()); - for (LaunchPadBlock launchPadBlock : RocketParts.LAUNCH_PADS) - { - LAUNCH_PADS.add(BLOCKS.register(launchPadBlock.getType(), launchPadBlock)); - } } private static BlockBehaviour.Properties oreSettings(float hardness, float resistance, boolean deepslate) { diff --git a/src/main/java/dev/galacticraft/mod/content/block/entity/machine/FuelLoaderBlockEntity.java b/src/main/java/dev/galacticraft/mod/content/block/entity/machine/FuelLoaderBlockEntity.java index 180fafa52..cd0c20416 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/entity/machine/FuelLoaderBlockEntity.java +++ b/src/main/java/dev/galacticraft/mod/content/block/entity/machine/FuelLoaderBlockEntity.java @@ -91,7 +91,7 @@ public BlockPos getConnectionPos() { public void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull ProfilerFiller profiler) { if (this.check != null) { BlockPos launchPad = this.worldPosition.relative(this.check); - if (GCBlocks.LAUNCH_PADS.contains(this.level.getBlockState(launchPad).getBlock())) { + if (this.level.getBlockState(launchPad).getBlock() == GCBlocks.ROCKET_LAUNCH_PAD) { launchPad = launchPad.offset(AbstractLaunchPad.partToCenterPos(level.getBlockState(launchPad).getValue(AbstractLaunchPad.PART))); if (this.level.getBlockState(launchPad).getBlock() instanceof AbstractLaunchPad && this.level.getBlockState(launchPad).getValue(AbstractLaunchPad.PART) == AbstractLaunchPad.Part.CENTER diff --git a/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/FuelPadBlock.java b/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/FuelPadBlock.java index 5d8cdaf19..64a807288 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/FuelPadBlock.java +++ b/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/FuelPadBlock.java @@ -23,7 +23,6 @@ package dev.galacticraft.mod.content.block.special.launchpad; import com.mojang.serialization.MapCodec; -import dev.galacticraft.mod.content.GCBlockEntityTypes; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; @@ -42,6 +41,6 @@ protected MapCodec codec() { @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new LaunchPadBlockEntity(pos, state, LaunchPadBlockEntity.Type.FUEL, 0, null); + return new LaunchPadBlockEntity(pos, state, LaunchPadBlockEntity.Type.FUEL); } } diff --git a/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlock.java b/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlock.java index 9123296af..db74d2a52 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlock.java +++ b/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlock.java @@ -23,26 +23,17 @@ package dev.galacticraft.mod.content.block.special.launchpad; import com.mojang.serialization.MapCodec; -import dev.galacticraft.mod.content.GCBlockEntityTypes; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; public class LaunchPadBlock extends AbstractLaunchPad { - public static final MapCodec CODEC = simpleCodec(properties1 -> new LaunchPadBlock(properties1, "", 0)); - public String type; - public Integer thrust; + public static final MapCodec CODEC = simpleCodec(LaunchPadBlock::new); - public LaunchPadBlock(Properties properties, String type, Integer thrust) { + public LaunchPadBlock(Properties properties) { super(properties); - this.type = type; - this.thrust = thrust; } - public String getType() - { - return type + "rocket_launch_pad"; - } @Override protected MapCodec codec() { return CODEC; @@ -50,10 +41,6 @@ protected MapCodec codec() { @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new LaunchPadBlockEntity(pos, state, LaunchPadBlockEntity.Type.ROCKET, 0, GCBlockEntityTypes.LAUNCH_PADS.get(0)); - } - - public Integer getThrust() { - return this.thrust; + return new LaunchPadBlockEntity(pos, state, LaunchPadBlockEntity.Type.ROCKET); } } diff --git a/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlockEntity.java b/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlockEntity.java index 98e0ce0f1..ff7eef7c7 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlockEntity.java +++ b/src/main/java/dev/galacticraft/mod/content/block/special/launchpad/LaunchPadBlockEntity.java @@ -26,13 +26,13 @@ import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.api.block.entity.FuelDock; import dev.galacticraft.mod.api.entity.Dockable; +import dev.galacticraft.mod.content.GCBlockEntityTypes; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.ByIdMap; import net.minecraft.util.StringRepresentable; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; @@ -42,21 +42,18 @@ public class LaunchPadBlockEntity extends BlockEntity implements FuelDock { public static final String ENTITY_UUID = "entity_uuid"; public static final String TYPE = "type"; - private final int thrustLimit; private UUID entityUUID = null; private @Nullable Dockable docked; private Type type; - public LaunchPadBlockEntity(BlockPos pos, BlockState state, Type type, int thrustLimit, BlockEntityType blockEntityType) { - super(blockEntityType, pos, state); + public LaunchPadBlockEntity(BlockPos pos, BlockState state, Type type) { + super(GCBlockEntityTypes.LAUNCH_PAD, pos, state); this.type = type; - this.thrustLimit = thrustLimit; } - public LaunchPadBlockEntity(BlockPos pos, BlockState state, int thrustLimit, BlockEntityType blockEntityType) { - super(blockEntityType, pos, state); - this.thrustLimit = 0; + public LaunchPadBlockEntity(BlockPos pos, BlockState state) { + super(GCBlockEntityTypes.LAUNCH_PAD, pos, state); } public void setDockedEntity(@Nullable Dockable dockable) { diff --git a/src/main/java/dev/galacticraft/mod/content/entity/orbital/RocketEntity.java b/src/main/java/dev/galacticraft/mod/content/entity/orbital/RocketEntity.java index 22d2e4bfe..9321b9742 100644 --- a/src/main/java/dev/galacticraft/mod/content/entity/orbital/RocketEntity.java +++ b/src/main/java/dev/galacticraft/mod/content/entity/orbital/RocketEntity.java @@ -39,7 +39,6 @@ import dev.galacticraft.mod.content.GCFluids; import dev.galacticraft.mod.content.advancements.GCTriggers; import dev.galacticraft.mod.content.block.special.launchpad.AbstractLaunchPad; -import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlock; import dev.galacticraft.mod.content.entity.ControllableEntity; import dev.galacticraft.mod.content.entity.data.GCEntityDataSerializers; import dev.galacticraft.mod.content.item.GCItems; @@ -115,7 +114,6 @@ public class RocketEntity extends AdvancedVehicle implements Rocket, IgnoreShift private final boolean debugMode = false && FabricLoader.getInstance().isDevelopmentEnvironment(); private FuelDock linkedPad = null; - private LaunchPadBlock launchPadType = null; private final SingleFluidStorage tank = SingleFluidStorage.withFixedCapacity(FluidUtil.bucketsToDroplets(100), () -> { this.entityData.set(FUEL, getTank().getAmount()); }); @@ -196,10 +194,6 @@ public void setLaunchStage(LaunchStage launchStage) { return linkedPad.getDockPos(); } - public @NotNull LaunchPadBlock getLaunchPadType() { - return launchPadType; - } - @Override public void remove(RemovalReason reason) { super.remove(reason); @@ -261,10 +255,6 @@ public void setPad(FuelDock pad) { this.linkedPad = pad; } - public void setLaunchPadType(LaunchPadBlock pad) { - this.launchPadType = pad; - } - @Override public FuelDock getLandingPad() { return this.linkedPad; @@ -483,15 +473,12 @@ public void tick() { if (passenger instanceof ServerPlayer player) { GCServerPlayer gcPlayer = GCServerPlayer.get(player); gcPlayer.setRocketData(this); - - - gcPlayer.setLaunchpadStack(new ItemStack(this.launchPadType, 9)); + gcPlayer.setLaunchpadStack(new ItemStack(GCBlocks.ROCKET_LAUNCH_PAD, 9)); } this.linkedPad.setDockedEntity(null); - this.linkedPad.setDockedEntity(this); for (int x = -1; x <= 1; x++) { for (int z = -1; z <= 1; z++) { - if (GCBlocks.LAUNCH_PADS.contains(level().getBlockState(getLinkedPad().offset(x, 0, z)).getBlock()) + if (level().getBlockState(getLinkedPad().offset(x, 0, z)).getBlock() == GCBlocks.ROCKET_LAUNCH_PAD && level().getBlockState(getLinkedPad().offset(x, 0, z)).getValue(AbstractLaunchPad.PART) != AbstractLaunchPad.Part.NONE) { level().setBlock(getLinkedPad().offset(x, 0, z), Blocks.AIR.defaultBlockState(), Block.UPDATE_NONE); } @@ -724,8 +711,6 @@ protected void readAdditionalSaveData(CompoundTag tag) { BlockEntity be = this.level().getBlockEntity(new BlockPos(tag.getInt("lX"), tag.getInt("lY"), tag.getInt("lZ"))); if (be instanceof FuelDock pad) this.linkedPad = pad; - if (this.level().getBlockState(new BlockPos(tag.getInt("lX"), tag.getInt("lY"), tag.getInt("lZ"))).getBlock() instanceof LaunchPadBlock pad) - this.launchPadType = pad; } @Override diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java index 40e27fcc9..13b9ca235 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCCreativeModeTabs.java @@ -39,7 +39,6 @@ import net.minecraft.network.chat.Component; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import static dev.galacticraft.mod.content.GCBlocks.FOOD_CANNER; @@ -344,12 +343,7 @@ public class GCCreativeModeTabs { output.accept(HEAVY_SEALABLE_ALUMINUM_WIRE); output.accept(GLASS_FLUID_PIPE); output.accept(FUELING_PAD); - - - for (Item launchPad : GCItems.LAUNCH_PADS) - { - output.accept(launchPad); - } + output.accept(ROCKET_LAUNCH_PAD); for (DyeColor color : DyeColor.values()) { ItemStack stack = new ItemStack(GCBlocks.PARACHEST); diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java index 10d17b1ba..2fb22dcb9 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java @@ -27,8 +27,6 @@ import dev.galacticraft.mod.content.GCFluids; import dev.galacticraft.mod.content.GCRegistry; import dev.galacticraft.mod.content.GCRocketParts; -import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlock; -import dev.galacticraft.mod.rockets.RocketParts; import dev.galacticraft.mod.util.TextureUtils; import dev.galacticraft.mod.util.Translations; import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin; @@ -149,6 +147,7 @@ public class GCItems { public static final Item HEAVY_SEALABLE_ALUMINUM_WIRE = new BlockItem(GCBlocks.HEAVY_SEALABLE_ALUMINUM_WIRE, new Item.Properties()); public static final Item GLASS_FLUID_PIPE = new BlockItem(GCBlocks.GLASS_FLUID_PIPE, new Item.Properties()); public static final Item FUELING_PAD = ITEMS.register(Constant.Block.FUELING_PAD, new BlockItem(GCBlocks.FUELING_PAD, new Item.Properties())); + public static final Item ROCKET_LAUNCH_PAD = ITEMS.register(Constant.Block.ROCKET_LAUNCH_PAD, new BlockItem(GCBlocks.ROCKET_LAUNCH_PAD, new Item.Properties())); // LIGHT PANELS public static final Item SQUARE_LIGHT_PANEL = new BlockItem(GCBlocks.SQUARE_LIGHT_PANEL, new Item.Properties()); @@ -436,20 +435,12 @@ public class GCItems { public static final CannedFoodItem CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(new FoodProperties.Builder().nutrition(0).saturationMod(0).build()).stacksTo(1)); public static final CannedFoodItem EMPTY_CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(null).stacksTo(64)); - //rocket parts - public static List LAUNCH_PADS = new ArrayList<>(); - + public static void register() { // === START BLOCKS === Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Item.EMPTY_CANNED_FOOD), EMPTY_CANNED_FOOD); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Item.CANNED_FOOD), CANNED_FOOD); - //ROCKET PARTS - for (LaunchPadBlock launchPadBlock : RocketParts.LAUNCH_PADS) - { - LAUNCH_PADS.add(ITEMS.register(launchPadBlock.getType(), new BlockItem(launchPadBlock, new Item.Properties()))); - } - // MOON NATURAL Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.MOON_TURF), MOON_TURF); Registry.register(BuiltInRegistries.ITEM, Constant.id(Constant.Block.MOON_DIRT), MOON_DIRT); diff --git a/src/main/java/dev/galacticraft/mod/content/item/RocketItem.java b/src/main/java/dev/galacticraft/mod/content/item/RocketItem.java index 5e54fd62f..451918b23 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/RocketItem.java +++ b/src/main/java/dev/galacticraft/mod/content/item/RocketItem.java @@ -30,7 +30,6 @@ import dev.galacticraft.mod.content.GCBlocks; import dev.galacticraft.mod.content.GCEntityTypes; import dev.galacticraft.mod.content.block.special.launchpad.AbstractLaunchPad; -import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlock; import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlockEntity; import dev.galacticraft.mod.content.entity.orbital.RocketEntity; import dev.galacticraft.mod.util.Translations; @@ -64,10 +63,10 @@ public RocketItem(Properties properties) { @Override public InteractionResult useOn(UseOnContext context) { - if (!context.getLevel().isClientSide && GCBlocks.LAUNCH_PADS.contains(context.getLevel().getBlockState(context.getClickedPos()).getBlock()) + if (!context.getLevel().isClientSide && context.getLevel().getBlockState(context.getClickedPos()).getBlock() == GCBlocks.ROCKET_LAUNCH_PAD && context.getLevel().getBlockState(context.getClickedPos()).getValue(AbstractLaunchPad.PART) != AbstractLaunchPad.Part.NONE) { BlockPos pos = new BlockPos(context.getClickedPos()).offset(AbstractLaunchPad.partToCenterPos(context.getLevel().getBlockState(context.getClickedPos()).getValue(AbstractLaunchPad.PART))); - assert GCBlocks.LAUNCH_PADS.contains(context.getLevel().getBlockState(pos).getBlock()); + assert context.getLevel().getBlockState(pos).getBlock() == GCBlocks.ROCKET_LAUNCH_PAD; LaunchPadBlockEntity pad = (LaunchPadBlockEntity) context.getLevel().getBlockEntity(pos); if (pad.hasDockedEntity()) return InteractionResult.FAIL; @@ -77,7 +76,6 @@ public InteractionResult useOn(UseOnContext context) { RocketData data = RocketData.fromNbt(tag); rocket.setData(data); rocket.setPad(pad); - rocket.setLaunchPadType((LaunchPadBlock) context.getLevel().getBlockState(context.getClickedPos()).getBlock()); rocket.setOldPosAndRot(); rocket.absMoveTo(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D); if (tag.contains("creative")) { diff --git a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java index 8ef54011d..4d39d11d3 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/GCBlockLootTableProvider.java @@ -238,10 +238,7 @@ public void generate() { this.add(GCBlocks.BOSS_SPAWNER, noDrop()); this.add(GCBlocks.FUELING_PAD, this::createLaunchPadTable); - for (Block launch_pad : GCBlocks.LAUNCH_PADS) - { - this.add(launch_pad, this::createLaunchPadTable); - } + this.add(GCBlocks.ROCKET_LAUNCH_PAD, this::createLaunchPadTable); this.dropSelf(GCBlocks.AIR_LOCK_CONTROLLER); this.dropSelf(GCBlocks.AIR_LOCK_FRAME); this.dropSelf(GCBlocks.CRYOGENIC_CHAMBER); diff --git a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java index 90fa9aa1d..8cf44452f 100644 --- a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java @@ -133,10 +133,7 @@ public void generateBlockStateModels(BlockModelGenerators generator) { generator.createTrivialCube(GCBlocks.SEALABLE_ALUMINUM_WIRE); generator.createTrivialCube(GCBlocks.HEAVY_SEALABLE_ALUMINUM_WIRE); createLaunchPadBlock(GCBlocks.FUELING_PAD, generator); - for (Block launch_pad : GCBlocks.LAUNCH_PADS) - { - createLaunchPadBlock(launch_pad, generator); - } + createLaunchPadBlock(GCBlocks.ROCKET_LAUNCH_PAD, generator); generator.createNonTemplateModelBlock(GCBlocks.ROCKET_WORKBENCH); generator.createNonTemplateModelBlock(GCBlocks.FALLEN_METEOR); @@ -543,8 +540,7 @@ private void createCandleCheeseBlock(BlockModelGenerators generators, Block cand } private void createLaunchPadBlock(Block pad, BlockModelGenerators generator) { - - var centerModel = GCModelTemplates.ROCKET_LAUNCH_PAD_CENTER.createWithSuffix(pad, "_center", rocketLaunchPadPart(pad, ""), generator.modelOutput); + var centerModel = ModelLocationUtils.getModelLocation(pad, "_center"); var corner = GCModelTemplates.ROCKET_LAUNCH_PAD_PART.createWithSuffix(pad, "_corner", rocketLaunchPadPart(pad, "_corner"), generator.modelOutput); var side = GCModelTemplates.ROCKET_LAUNCH_PAD_PART.createWithSuffix(pad, "_side", rocketLaunchPadPart(pad, "_side"), generator.modelOutput); var defaultModel = Variant.variant().with(VariantProperties.MODEL, centerModel); diff --git a/src/main/java/dev/galacticraft/mod/data/model/GCModelTemplates.java b/src/main/java/dev/galacticraft/mod/data/model/GCModelTemplates.java index 195781b30..eabbec277 100644 --- a/src/main/java/dev/galacticraft/mod/data/model/GCModelTemplates.java +++ b/src/main/java/dev/galacticraft/mod/data/model/GCModelTemplates.java @@ -38,7 +38,6 @@ public class GCModelTemplates { public static final ModelTemplate GLASS_FLUID_PIPE = create("template_glass_fluid_pipe", GCTextureSlot.COLOR); public static final ModelTemplate FLUID_PIPE_WALKWAY = create("template_fluid_pipe_walkway", GCTextureSlot.COLOR); public static final ModelTemplate ROCKET_LAUNCH_PAD_PART = create("rocket_launch_pad_part", TextureSlot.PARTICLE, TextureSlot.TOP, TextureSlot.BOTTOM, TextureSlot.SIDE); - public static final ModelTemplate ROCKET_LAUNCH_PAD_CENTER = create("rocket_launch_pad_center", TextureSlot.PARTICLE, TextureSlot.TOP, TextureSlot.BOTTOM, TextureSlot.SIDE); private static ModelTemplate create(String string, TextureSlot... textureSlots) { return new ModelTemplate(Optional.of(Constant.id("block/" + string)), Optional.empty(), textureSlots); diff --git a/src/main/java/dev/galacticraft/mod/data/recipes/GCMiscRecipeProvider.java b/src/main/java/dev/galacticraft/mod/data/recipes/GCMiscRecipeProvider.java index 75acf88b7..33e47c1fa 100644 --- a/src/main/java/dev/galacticraft/mod/data/recipes/GCMiscRecipeProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/recipes/GCMiscRecipeProvider.java @@ -289,7 +289,7 @@ public void buildRecipes(RecipeOutput output) { .unlockedBy(getHasName(Items.COPPER_INGOT), has(Items.COPPER_INGOT)) .save(output); - ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, GCItems.LAUNCH_PADS.get(0), 9) + ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, GCItems.ROCKET_LAUNCH_PAD, 9) .define('C', GCItems.COMPRESSED_IRON) .define('I', Items.IRON_BLOCK) .pattern("CCC") @@ -297,14 +297,6 @@ public void buildRecipes(RecipeOutput output) { .unlockedBy(getHasName(Items.IRON_BLOCK), has(Items.IRON_BLOCK)) .save(output); - ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, GCItems.LAUNCH_PADS.get(1), 9) - .define('C', GCItems.COMPRESSED_STEEL) - .define('I', GCItems.DESH_BLOCK) - .pattern("CCC") - .pattern("III") - .unlockedBy(getHasName(GCItems.DESH_BLOCK), has(GCItems.DESH_BLOCK)) - .save(output); - ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, GCItems.FUELING_PAD, 9) .define('C', GCItems.COMPRESSED_STEEL) .define('I', Items.IRON_BLOCK) diff --git a/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java b/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java index 9e9da8286..2d0797af2 100644 --- a/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java @@ -25,7 +25,6 @@ import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.content.GCBlockRegistry; import dev.galacticraft.mod.content.GCBlocks; -import dev.galacticraft.mod.rockets.RocketParts; import dev.galacticraft.mod.tag.GCTags; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider; @@ -170,11 +169,11 @@ protected void addTags(HolderLookup.Provider provider) { .add(ores) .add(slab) .add(stairs) - .add(GCBlocks.LAUNCH_PADS.toArray(new Block[0])) .add( GCBlocks.FALLEN_METEOR, GCBlocks.TIN_LADDER, GCBlocks.FUELING_PAD, + GCBlocks.ROCKET_LAUNCH_PAD, GCBlocks.GLOWSTONE_LANTERN, GCBlocks.UNLIT_LANTERN, GCBlocks.GRATING, diff --git a/src/main/java/dev/galacticraft/mod/rockets/RocketEngineItem.java b/src/main/java/dev/galacticraft/mod/rockets/RocketEngineItem.java deleted file mode 100644 index 51653a8d6..000000000 --- a/src/main/java/dev/galacticraft/mod/rockets/RocketEngineItem.java +++ /dev/null @@ -1,4 +0,0 @@ -package dev.galacticraft.mod.rockets; - -public class RocketEngineItem { -} diff --git a/src/main/java/dev/galacticraft/mod/rockets/RocketFinItem.java b/src/main/java/dev/galacticraft/mod/rockets/RocketFinItem.java deleted file mode 100644 index 17cd4db57..000000000 --- a/src/main/java/dev/galacticraft/mod/rockets/RocketFinItem.java +++ /dev/null @@ -1,4 +0,0 @@ -package dev.galacticraft.mod.rockets; - -public class RocketFinItem { -} diff --git a/src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java b/src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java deleted file mode 100644 index 0e88a5a24..000000000 --- a/src/main/java/dev/galacticraft/mod/rockets/RocketNoseConeItem.java +++ /dev/null @@ -1,4 +0,0 @@ -package dev.galacticraft.mod.rockets; - -public class RocketNoseConeItem { -} diff --git a/src/main/java/dev/galacticraft/mod/rockets/RocketParts.java b/src/main/java/dev/galacticraft/mod/rockets/RocketParts.java deleted file mode 100644 index 19fe17063..000000000 --- a/src/main/java/dev/galacticraft/mod/rockets/RocketParts.java +++ /dev/null @@ -1,30 +0,0 @@ -package dev.galacticraft.mod.rockets; - -import dev.galacticraft.api.rocket.part.RocketEngine; -import dev.galacticraft.api.rocket.part.RocketFin; -import dev.galacticraft.api.rocket.part.type.RocketFinType; -import dev.galacticraft.mod.content.block.special.launchpad.LaunchPadBlock; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; -import net.minecraft.world.level.material.MapColor; - -import java.util.ArrayList; -import java.util.List; - -public class RocketParts { - //LAUNCH PADS - public static List LAUNCH_PADS = new ArrayList<>(); - public static List NOSE_CONES = new ArrayList<>(); - public static List ROCKET_FINS = new ArrayList<>(); - public static List ROCKET_ENGINES = new ArrayList<>(); - public static List ROCKET_PLATINGS = new ArrayList<>(); - - public static void register() - { - //iron launch pad - LAUNCH_PADS.add(new LaunchPadBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_GRAY).instrument(NoteBlockInstrument.BASEDRUM).strength(1.5F, 10.0F), "iron_", 500)); - //netherite launch pad... use as an example for more launch pads - LAUNCH_PADS.add(new LaunchPadBlock(BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_LIGHT_GRAY).instrument(NoteBlockInstrument.BASEDRUM).strength(1.5F, 10.0F), "netherite_", 1000)); - } -} diff --git a/src/main/java/dev/galacticraft/mod/rockets/RocketPlatingItem.java b/src/main/java/dev/galacticraft/mod/rockets/RocketPlatingItem.java deleted file mode 100644 index 4af648941..000000000 --- a/src/main/java/dev/galacticraft/mod/rockets/RocketPlatingItem.java +++ /dev/null @@ -1,4 +0,0 @@ -package dev.galacticraft.mod.rockets; - -public class RocketPlatingItem { -} diff --git a/src/main/resources/assets/galacticraft/models/block/rocket_launch_pad_center.json b/src/main/resources/assets/galacticraft/models/block/rocket_launch_pad_center.json index 87ed94501..8c6ad40a0 100644 --- a/src/main/resources/assets/galacticraft/models/block/rocket_launch_pad_center.json +++ b/src/main/resources/assets/galacticraft/models/block/rocket_launch_pad_center.json @@ -2,19 +2,20 @@ "credit": "Made with Blockbench", "parent": "block/thin_block", "textures": { - "particle": "#top" + "particle": "galacticraft:block/rocket_launch_pad", + "all": "galacticraft:block/rocket_launch_pad" }, "elements": [ { "from": [0, 0, 0], "to": [16, 3, 16], "faces": { - "north": {"uv": [0, 0, 16, 3], "texture": "#side", "cullface": "north"}, - "east": {"uv": [0, 0, 16, 3], "texture": "#side", "cullface": "east"}, - "south": {"uv": [0, 0, 16, 3], "texture": "#side", "cullface": "south"}, - "west": {"uv": [0, 0, 16, 3], "texture": "#side", "cullface": "west"}, - "up": {"uv": [0, 0, 16, 16], "texture": "#top"}, - "down": {"uv": [0, 0, 16, 16], "texture": "#bottom", "cullface": "down"} + "north": {"uv": [0, 0, 16, 3], "texture": "#all", "cullface": "north"}, + "east": {"uv": [0, 0, 16, 3], "texture": "#all", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 3], "texture": "#all", "cullface": "south"}, + "west": {"uv": [0, 0, 16, 3], "texture": "#all", "cullface": "west"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#all"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#all", "cullface": "down"} } } ] diff --git a/src/main/resources/assets/galacticraft/textures/block/advanced_solar_panel.png b/src/main/resources/assets/galacticraft/textures/block/advanced_solar_panel.png index 61ca3967c7d610553c6c03012f53cd6ffaeafab9..ec1f92164bb813ac5cbc5b9ce2305622c3da6fa9 100644 GIT binary patch literal 4829 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/air_lock_controller.png b/src/main/resources/assets/galacticraft/textures/block/air_lock_controller.png index 69b3a0248053c526d9a968c3c4e8fff3783d326a..7b76016008a0e1cf5234e588f6c42bc926c255c3 100644 GIT binary patch literal 3549 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 X<-5vQ622?n00000NkvXXu0mjfY&ftq literal 3127 zcmV-749N3|P)uJ@VVD_U zC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$OrQF$}6R&?d%y_c8YA7_1Q zpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X z6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv1)yUy0P^?0*fb9UASvow z`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q{wNRKos+;6rV8ldy0Owz z(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E` zvOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G41dM~{UdP z6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4Es0sQWIt5*Tu0n&*J!lk~ zf_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+AA{TB3-ERLHar49hi4Ih z5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=natP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+e zdD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVb znL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0WMyP6Wy582WNT#4$d1qu znl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8dZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iutvy=3T65Yu+7a4Yv^%sX zb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i^lS773}6Fm1Fpe-gF!>I zp{*g$u-szvGhed; zvo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*ZvFf(^Xl-N7w{EeXveC4O zv)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx)P8cQ&Qi|OhNWW;>JChY zI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_WICNY@+|jrX%s^&6b2i>5 zeqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!ql}XcFH*PieWwLj2ZSq`7 zV9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I-?$tAVKYn8-l({mqQ$Q8{ zO!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;cwT88(J6|n-WB%w`m$h~4 zpmp)YIh_3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dlbFb#!9eY1iCsp6Bajj|H zr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syTu9enWavU5N9)I?I-1m1* z_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$mU2Q)a|9JSc+Uc4zvS-T9 z63!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;;JuhGEb?H5K#o@~7t9DmU zU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX=)z6+o0o6-+`4{y+3mqQ z%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@>;2q1Vm)$Z)P1z?N$8UY zW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHsy69KwU-!MxeeuI@&cF4| zM9z%A6NqE3F+vAZljxcz5o-@4lJz zeShHO#1zq@&+g@D(e++>rU1s6+SD`+)>;5kN`w$lN&z4uhzQ<$a?XShxGF$n4DSmT_-F4nYdi`E*uSl6fbo|IBm zd{v~y7|~iYEO(6K$gtcUXAon3AC^0E&edK_k!eiv!fTP5QmSm@I9ApWLhYIKeSa{< zRJk!ePg$QN5nqxh$9vCyzdtJIx~>8WtM~o_BqBKH&Mg477~|2-o4dE%T$?lS<5OVy z^GCHKB52V}PnQO$;K!$MR=>G6ynFwV)$d=32&>f!cwVG&9IJ`~em#Fx!QVfB0^q~f zZ)`Rja?UhO!^7}!oI#nWh+OzC;JYvPID5-%Hmf$Y=$BPKji&fNWp?(qel*5d$tHc@ zAG)pssH{tGU_ R6mtLo002ovPDHLkV1oTQ5Lo~K diff --git a/src/main/resources/assets/galacticraft/textures/block/air_lock_frame.png b/src/main/resources/assets/galacticraft/textures/block/air_lock_frame.png index aeeafa0a29f05030cb5e72cbe6fb8c1107c346df..8242c06e010b9ee87503c2ab7695962ea44d9d1c 100644 GIT binary patch literal 1120 zcmah|e`wTJ91pF3_^WQ96YciLTb!cn-dwRFZHg9hzm*HdtW}E z@Avcl@pd(3R@cm~olQ|xO{!7LlJ&#jn^{HvyZ00XvMk1lJZ?tqxTt%OQcTnaLCV%U zU>53T&!+RRo}#L0E0@Rl^cu-PHlqg^rewQ>O;PnLORjEoLJZnqhvmrhqZ21-V3{)A z5=)2Et_llQW3LCBdowwsx6=?!dgTgGUy_Ie8)6-l>@LTbN-{m=S0eks%+g>Af;(mU zm8g8W38=_}AjU*OMwsJ(ATV4sCJ5Xzz=t`W4U<<0aZxEINc?h8erOWSGux%CmMq62 zCz&o_>`E+KEEbt!gh5^h%ZZ{G_~7{vL4^Ds2kWJf<1eXr(4cR4mWwUqfWV{PhPts# z6Q!?Gu-$Ze+Ogx83q?xCmUNfpm@sSGL0(g6A7|lf8Sg~Q84H?}wbZ|seQ84^9k>?!9yF@}^Jz9Nr0@_8;{&jGy{zKGOS84>^Ba8hr3P z(kol%hJVj9-)HC}AJ5qb_GBNP8s56fTF_Q^b6~;kuDb`0%ez`W>;G=Vr6zMrg-rVK z%wN8F@xjp0xA-gd#FL@X)=$Uo*FLjv-1{vq)lUAit)Hr<#MF!NuebL-3hsO=kAY(<1X delta 413 zcmV;O0b>5(2)6@}B!2;OQb$4nuFf3k0004TNklb)O6 z-am*a=Nw~ft({IM5fKsZ{XEal=d-nzbN1dl=lV~d)bxBlgE8n1(Q2(29lxM7VbDPr z?4e@_VW8m@mVaq%3J*{-8{#lC{Oh{zi-V4%?
0F_copI@H`If^3(G}IW$M6@i+ zJkQ&!d}NmldZ_ItdsnbaA6;`l)V*B*4tDei1N1 zO_oV0u*OKi%&V-N;M1Uf7Vwq62!yB*gNuNxFWVkG#{|_WU?D~41z+D2`==>9)-oYD yAyyOo;Q)6f2r_*EEAXY6z5~v50tcHkD188;b_$FgDy;(m0000a delta 223 zcmV<503iRN0*C^TF@M5IL_t(2k(H7`4#FT1MW^G!G#Y}C9;OGdabb7Hg_r8Ghv?B7 zC?zy*YT{xHl7g}QtH&_R`~kAI=>+4DlD0-LuB`z854-E-etVqr{lQJHs>={w^IX-X zVA6vf916zm@T8J!0KEYz3wFvwOHvlGPXvHC&qrcFSRvm^TUdihqh5&_=(2w0rDxbA z1b|Ub0H9P)5KF24dw`zV7#D8GB|LmAaemxjDOA{M5h1|8dCLyTYfXx5XKmBbI{wK? Zcmw%*eyjEdF}DB!002ovPDHLkV1kxNW;*}? diff --git a/src/main/resources/assets/galacticraft/textures/block/aluminum_decoration.png b/src/main/resources/assets/galacticraft/textures/block/aluminum_decoration.png index 5333b884741a5c47822491b816bfa1833888e987..d71b5888f72352b652da81970866419c265b4b3c 100644 GIT binary patch delta 1529 zcmVaB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y?lEbJD z{Ld-&2uMO8j)O5&?G4`Xw+-0I#L0YAJu?$143g+>3A^^cf4ln!4`m82XtJ1N^msxJ znF|KyA5UBToFgB`@A=UBCHM9PqZjltCsSB&WzC=Keu5(+n1FKuN~7h?elL7^l%Pn)%`@1;6|1H?#_n znZ$Prv^y%)snL$UQbmk`8z=P4m1WGCB+gvL3rRQ{bxx9H7ZaAsO+!9m=7N4fKiTLECV6b7jHTMKHK%UCt?K* z>VVmBz~Z-QVpDo(ONIah>lFRe7p47RjfYACd@F(>0R=viC`Iy#IS~b613?9mvjpD2 z0IBkhAUTLcaAVLBd}B|dv6hwRJW>Vxs6D_XF-U_~h#Z?c6= zx45Ovw!D=J`P5Lg#+s_tT+7b8>|xhE?rFC@@1;?Llw1o1txFGGd+e!O z&%Io%Eq_*T?GLQcVvPq=$GUW}hS`)3L&F3ebw&@)z!(PttJkV z;en|aWM2zx1%DMf5-nq#$&>>AfZ&{o?8{i^&wrllK9*Pr`Q% z_J2O|fZlxt^RjW0-giA z&TC5yPkM151T>R{?=bgyeB5Vt$_V9Y(SKk4_egyspG!6F6Bd6|RCGF}jeDW!3?=6$ zN!^m=leF9$ZGDo~C8^k^_v7Z;mM8ZpO|tVOqoP7>H=^cw0`plD>lf|1ClPja~Xn&lPNz%f$jd-&z_D-68Q+iGf|QtA9TE z=?(60pu9V~`vJpu(7nN_cE{%xla+2Nf8^aApBJ25{1J~U?^w=ycv;>0f~w*}>%8`! z$=lY|<7|ghUbbp}ke& zKllN}x2MXbssuf7s7l&2iQ^tPOtgfw>>=8W*E750y?K9oeVRT1sGA4?fOkfInKSAp zdS_JI#`$~}!a@$JV~M|Udv_0@DDscbF9jfk#df>F|4|;)22(2 z$*8(ZG1G>4-9*J6x)f771K?L{#cBbyR?d0vjAD!BVL$N`k`1{p!CxlQh?L+20XXOT zme_;PFcIRhLfc0AIN}y!5r3RM_cIL58M!25jAuC2Ct)4xh*9#`%34F0q~oi0U2#bu zstKaC;tbWX>~{%3LyTRFoiW+))p)I{>fuHyYfVw)%jL`E+Oa}5vMBQY9rD#WU#)pS fK?c{12y*~GU#QU*KMOYW00000NkvXXu0mjf`eEwm delta 352 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 Hu0mjfpSn>p diff --git a/src/main/resources/assets/galacticraft/textures/block/asteroid_iron_ore.png b/src/main/resources/assets/galacticraft/textures/block/asteroid_iron_ore.png index bf96466e9fbfcdd9086a3d64cb37288b46719f48..f3d8108257c71342d15eb4f1bea6efbfd699170f 100644 GIT binary patch literal 7386 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 G3;zW#;7>&W literal 3266 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 KMNUMnLSTa6?E97g diff --git a/src/main/resources/assets/galacticraft/textures/block/asteroid_rock_block_1.png b/src/main/resources/assets/galacticraft/textures/block/asteroid_rock_block_1.png index da228c8b391e08d87ebc9c02fd3301b81ecd5c9a..48af4f69f2357df668fccaf8677945f34468cf8b 100644 GIT binary patch literal 6362 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 literal 3103 zcmV+)4B+#LP)uJ@VVD_U zC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$OrQF$}6R&?d%y_c8YA7_1Q zpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X z6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv1)yUy0P^?0*fb9UASvow z`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q{wNRKos+;6rV8ldy0Owz z(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E` zvOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G41dM~{UdP z6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4Es0sQWIt5*Tu0n&*J!lk~ zf_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+AA{TB3-ERLHar49hi4Ih z5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=natP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+e zdD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVb znL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0WMyP6Wy582WNT#4$d1qu znl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8dZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iutvy=3T65Yu+7a4Yv^%sX zb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i^lS773}6Fm1Fpe-gF!>I zp{*g$u-szvGhed; zvo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*ZvFf(^Xl-N7w{EeXveC4O zv)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx)P8cQ&Qi|OhNWW;>JChY zI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_WICNY@+|jrX%s^&6b2i>5 zeqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!ql}XcFH*PieWwLj2ZSq`7 zV9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I-?$tAVKYn8-l({mqQ$Q8{ zO!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;cwT88(J6|n-WB%w`m$h~4 zpmp)YIh_3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dlbFb#!9eY1iCsp6Bajj|H zr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syTu9enWavU5N9)I?I-1m1* z_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$mU2Q)a|9JSc+Uc4zvS-T9 z63!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;;JuhGEb?H5K#o@~7t9DmU zU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX=)z6+o0o6-+`4{y+3mqQ z%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@>;2q1Vm)$Z)P1z?N$8UY zW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHsy69KwU-!MxeeuI@&cF4| zM9z%AwrS(crgpsH@K#oRu&kN!o8LUm-H-2&%-(V!A~(79a$$@jq8P-< zjo3A1wJMUb$cU(}QXn6%i>V?r3&?c9RPs8FHmin;Y5K-3;$98m+BO; z#a=^5%J=UwBbmK~*sXofmlt%)jj*iUMI3(VlwC zK}NXSK9~|I2>tx^8xaY!;#lx;*OUpVqdNw>nt;J;0Z2=Ig~}#52N?5G7bujV>3}|IJ t{P}x9a|s`Aw5ge#t^%)#F}WL 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 LNkvXXu0mjf(rzBj literal 3138 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/bronze_decoration.png b/src/main/resources/assets/galacticraft/textures/block/bronze_decoration.png index 8317c3408e16071f94371e7eb702ce92d98c405f..93d79fc08fff49f6caf878f33f82187bbc0ef9bf 100644 GIT binary patch delta 1641 zcmV-v2A28I1^W+>BYy<`dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Yua_cw@ z{O2j=2n4_dJPyUB>fK3Js;X%GH*K=rJ$767~Srb-F}V_SBZt*bbpY)O^|CFe%?6d-OiT3 zSR~0t`~2wRzxS%Ww{^Pg0^AVRq1G1WTm}OVcuD58fH&gbqaNp*@T$$Wkh9emd*CgU zh)HZGN7YcKPK_$cLIpNDZX8iE7na$k5;<`ZD!he)+U-Q#|-@LsS3m*~T^t62iyO;+KG~6iTi(vqS`o_&q2cPftm?vNb z2>R(}#R0QD))I%O2e)JrKrqguT>PR~2WmW7;;^@eF(iP%1`?LFsjm7OYOGpQ&5atUWSVQfg%+E()N%*cx^&ll z4?TA6sek7SwTcpM0T&^$1+O3v{> zZeV5;BPu+@NI$TtWV4|F2wfxgoi6Mi$o(2O17H7y8~+A5Gobq)kYm&2hT9v|>QKTm z5nE9>d};;J*QI9G%!eB7L#fs;$jYiI0GO4mj(?oTAJEyQ>$Bpt%#qkbN5yE)Bg#gn zC8?w0S`0xZX?WT&8L#$nw%cT zmbABp-fGFKZagGT+8leJ3hkctW+BN!tE0N&KG}Ab=BEMoQrFr@M|rs)1XP%2=8x#8 zlz$MHt23ok`>Gd?;JLp#h-MWQULdAfVMF?ZlP+gnYn*ehsR%PQ(~&gjI(MxOIm|CV zWwx!XlOS~+?u06_TQ%W_>&(psX;onKCxg-px7^}ULVsB_vsu!r9@(~VqKOn;THmG( z(mtbk?mQCYoSG2VyX`ZtUx!{z=5;z3zkdVem-gAVVy$Y6U(Y*^d%^qa*SDql&c8c4 z5OK|iWdgkD;F}d_HpUgYxb~O^$y>idhU(ra@@rO^Ct7{axOaq0eKRYOsdc%wxELWK zD|#OexkBrciO3qW0%v~$Iq^N77z(vuWF(i(%p+?X7cIW1)!J4NmZRitwAH(9e19Tq z%QJ4~JE?e@b2VM+_N1fD?Vtsys%2X}l=s-Or`q~65kE#G!Py@|@wcUHvKjaWi8L(> z4vXAyValE1$Fv zxL$+qE03uheftd=&6P!w10*QRVSnbYH0-^mjTm?43hoPu=UClUxG{Z!^=sA|dCr`P z?m{-)<>^IP-nz<6Yc${J#{Oht-P(qqDLZXnPL;K&nZ8 zIp=75pK7A6_b-dv)iRfZeQWVI?otDwD66l!Apomo{`vib|D!%w7f#Rf*|vW)(Pvlj|e4?O^GH}NhZE3 z*AjK7Ba5;c-eJAj ntv5S9=*}hwz&2wfIs5z<&qmQ-#N%#Z00000NkvXXu0mjfawj6y delta 326 zcmV-M0lEJB56}gWBNYLKX+uL$Nkc;*aB^>EX>4Tx04R~OLIrjKe>OEtTmS$821!Ig zR49>sQAApcY)w2x!qY>UtmYxl86gH%@(IKjKTZG+ zeGnf2(plhd2VHDzeU-tp(M1v#ve8NPx$6iGxuR5*=wk}-~iFbqY1V3Y=lObRO6IRbsoPR|i&x1z|f5)Bga7Q|jBfE!5i zV?Tcf;20eF(2)-v0RVrq7#!6fNBl4QK6K}S-h4<>Ca8SqC~iC2-lG0qYCeWI335WjAXXNC#)t&TdVb+A3K0HA1e*eEDfhTFsVdp>md#x|>Z~5~55)$WX zQbd3n`q#|kT=(!nwp+^W8TJMS3wCqqoj=>QNbc}S19hX-9}dqwwWjH=fm%+}`~6OH zeupzCww+PqDX@^8Z4oBEfL()`Ic<#qi%PZxtFjaWLvx_XU%@(&nLvjzc)I$ztaD0e F0syb^PAvcc diff --git a/src/main/resources/assets/galacticraft/textures/block/cheese_block.png b/src/main/resources/assets/galacticraft/textures/block/cheese_block.png deleted file mode 100644 index 91e6cf49563a7350043d1fabb114f151499c4ea4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420 zcmV;V0bBlwP)Px$UP(kjR5*=&lfO^GKpe$CP?OvHBh7`hV}pZ(Mkgkt-Hii-1Am-<0Hcc#CnpFD z3>Ze6+M(K+PB_pz?yB&eF899o`u)E5+WC4J?A)k_2qb3JWueasGw)P&wyWXpSfdD} z^{C2nma{bgcaQe~bk(CO%PAIf>asut644)7qyXQa8=}x53LTAg&2g5qHPi6~y!6kg zB9QoT0)QVUn%G)l^Zte(C&;Vo(|UL*{Jb6rsw~HidPha8vK#=6nzWb;^cO!^Hl6Fw%2yVCK}!$Jzrpa}>yEvQ3HSAz z5A5aNQ_ap0^Zxu8bq@q7rT^ z7PP+6sSrzcU-tH_&x(hhbB}gc#~VePx#zDYzuR5*?8k1-B{U<`#nen=$I1_#2RFgdY%1xF9zCA^r|aOVK%#-RBZ7Q{hI z3dS4ornax|^%Z8!fB@ie+4oYUxMVvJujd^AUpH9J&ez9l5CKS$(q|`-axmx@6#%OY zdY}VBDRJqC7tR1g>Xz(EI$!;b+WH&uw+^Mm*9`zp7dl_j`rAkpnnbbW*j`pA ziJDH0Ed~R|)x^CvoGY8J`l`y2Ysz;8et#@J)O4t}3b>phgvo)7xY&RZEy8Lm;uVsdN bp4TwS&vSN84==6;x|G4w)z4*}Q$iB})rDF! diff --git a/src/main/resources/assets/galacticraft/textures/block/cheese_top.png b/src/main/resources/assets/galacticraft/textures/block/cheese_top.png deleted file mode 100644 index 14459b5e15df1890c81dc8db77f27086ef47cd8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|4tu&dhFJ72 zon$R^NI{@&{~9ws_Jm8fBaSBDsJLY!cR0lCn-AZC2uWQb4#rOff27-v|G$y?&|ie% z{qLvD3cFtUht90euH; z_?63{l!Y6_Pq@CH_tPk@Khx6FC%Ql7dj;dZ&dDO#F4;z$+msZ}b03N27yPO%+97jI zp>wg;YF9fsGBoGIYsN!}S!u9MR%pZdQy_O?RR4V|wE-52$LFj>8|UbU(?@dnU4 N44$rjF6*2UngGI?YcT)- diff --git a/src/main/resources/assets/galacticraft/textures/block/chiseled_moon_rock_brick.png b/src/main/resources/assets/galacticraft/textures/block/chiseled_moon_rock_brick.png index e8208b467d6378b04be03aab94115bcea5a146a2..e8e2a97511b78bcc2289487ef7e3ab96f0d6d8da 100644 GIT binary patch delta 537 zcmV+!0_Oeb006Lfe02gnP zU&TfM000SaNLh0L01m7G01m7H+^AxM0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0004$NklAI3 ziYkq)#P)c`-iPb;`-aQqY;ga3U!6`TnvkWNXzR62*>~09(Cl_fsX|JTi==Ie{jN^a z4Lv{;;PEw|KW#z>}al*tGY zHBEuICGcZJ;D6A!_?!dR`G_JP!zM|CRUm~TB4kZ%xp;M*&oEd;8<#2~B$GI##}ZV{ ze$klKG{*bhGL8L4W#%L#F$NP&O*oyp;ZS4gbnJYd|QkGEWLaEFcCBDBs!$Abjcz==-!tu}oO)yuAW1m*D-^=XL zS!-8GqzS)E2Y>It1Do@kXqJY62lQ`eHQU>>YJd8T93mOOATS=s&qa)}VdyM@C&VSj zloG6n_3cRJJ`hk~91R%J1jb;FR9U25Co3fy#SH{f`i@(VQYAA=R)IYLUpMf}ynnDg b)5#Ch^AeS#Myz7+00000NkvXXu0mjfA!q9e delta 333 zcmV-T0kZzG1n2^gB!2;OQb$4nuFf3k0003ZNklQzl2b|mVvGQS4_Pvyl#=8$ z%}X167{-B7$q9fDkuZHa^f50DD)S-MW#$9OqL0U{tF~-vz<)F^x+<{sJe-cfyDZ8- zfM)ft@8TGnc=Nb#`QiFGvO0MUYBqu(|@qacW-85MDdV2i5pyjl- zgzNPaz#DLR|3&~nxx+X}PK0PJ$%1z_*f{*`<{@bo-R@9|lp@6X-kY9Mgf}r1KwFCJ fZfwT5q1?wWoAbSFk7=hD00000NkvXXu0mjf_=lWB diff --git a/src/main/resources/assets/galacticraft/textures/block/circuit_fabricator.png b/src/main/resources/assets/galacticraft/textures/block/circuit_fabricator.png index 48072df68a436671c8b54057ca8eff1dee0db404..b65f3ec29de894e3f7658e5f5fa64e6c03a1c9f7 100644 GIT binary patch delta 629 zcmV-*0*d|q1DXYpFn<69XF*Lt006O%3;baP00009a7bBm000tl000tl0bXTW;{X5x zFG)l}R5(wKQaf)GK@i@Zdxwkf;$Vt9CqcwmK@lhw5|JQEM6f~%6#fSlqNbsygPMkd ziVg&BP*8+K6@(zcmMl3j3g%+2GQnSXC)kLI$zJ!zkIPlXUC z?GEQ04MkB1A!wigKxWEKxhd&zL9ga>Ue*IpD5Zw3B^ZHd0E(Ir4Aa4IBsil0M?a6~ zyzkBD=bNo=lKz)u&Zlb!hbnSVRSo@J@lCmIL@BOxh$t~*QZ;lFG>C`cs2(j2@<4?( zVF6CW8eP{++kaH98Os+8hXb-Ym!0ri-ps*_HDysnlElUOy*{o4NFDuQYskytPHWIk z2}sGBzz8aFC8n{Uh?cEoL9(O>!w7KxC6g}btP`=xKecWsTE`Z}yRk?h^ynipueQRB5FD&sTzDEYXM*6JL zowcft`%(VM)=d&zWxq0I+6eY3GKC@{W=zrM$gfL_!o<1nPc>E4SFP{`q zKY#Qd^=`xaGV-QaNB#QQHX^s@oyc2#!T@Y~&v%9bG z?cwhF+O*@)!rHC>{PXab`}<{@_5D%5XFF~bMVcm`{ERe$z)7daHjlzTK4&LbHiId* P00000NkvXXu0mjf0D2)e delta 472 zcmV;}0Vn>N1^xq&FnPr07=1Gx%Y!{a(1f6{=_ZRtELs+&LI|ly zpv(n&n%*Mf0&oG2fJDoW8nUQVC|%JY)QDsp&B8XeOeQSsPG?cx#_xTf{QXCHK46T~ zlmY-?jRl~!@{%!LODUxgi-a*goBc)u##m3%lu9XU>5=%S(|@_&YOe#3Qdwi`3;?n$ zV~lI9ib6Q&!iQFS{mqNFYn#MN{jOxs?*LeScXq01m+!uM7&6qs?1{t)=vD?G9=T=L z?F=^o9PN+o^g3beiu1LF+jWAPF3`4 zRsXDZ2xhCxXMek>mH^gzy&e!T#?I&8095DZ>Bq->&hLG>yI9Sm+fj5`;p_6r`^l`+ zF~)=pG^N!>;9|T8v9B!HK$-5L5TPWkHGq7)=Ql+kg(YtP*scrKP@xB{|9I16@)Q3@ zzu%Wq5<=oIc&$FaK06p(oE{Gk1{Y0!dOYNu*VB&~yHVAQB+p*n$o=%4b5WiTibAy8 zEq`Y>!iO&kQI=&QrSt+20Me_oMdJ#aNQ784by=345EAanIahlLA^!lh>g7Q|rA)K{ O0000UHS`-|mp(Eghtshl+RVtPhHioeaS+Z=qr0;z5MeD?fD^Gs*EQ2N>8i1Q)yQ(d ztuB=oio?Rv(SMS)Xb~!x#KZilk0$}Hj(#u&D%f#DXANww49S zks=Hu!1*^#Qqx&CLN>5Pd@W|zV@)LnO9_w+08*JcnxTbCsF;dOBAWy#0Glx9EG`8y zhUl}w5byvTr>gYUIV&`o`^vgAs;%)gzNgH7%=KksvVUwHX5~If9|6e+S%~=)Q=E~NQ4pBwx4gTpY{hhDh;JM*$h`=3=QN5v-!*J+xmN1 zu<`WCZzxJ)|NWay(?I|An@xn_R$`}pu-)9j(3kxK)LWlEqfR5Ouip}T7m+vzG8sFJ znC}MTcK{*Tio_lrQHz~^l#yHI> z007Q90LJJ*8RHFAN=doM7~`|qZ?s^o3qqb#rBp)$vhekK8-JbdIsm1#v#!YipePE) zxG`D?>AjB*o$mUVk6+ieNTB9h#XdX(u)Oqcs%f9^eSQ@)G{M}3!UgDd0U#auW#8|9 z+5&KLICj&AglQ;RDNVPFbn>@tJ2@PmX6Nb1rz8LJ_&Cq$Ll4e6H`OUX``k@+@@v(2 z*1H6=)$RK|)PG9=YlFc6NEl;R^Pd3fEBo&34WIKD-=8m5^WECO(r*Z9K+#I zDMbiLdz%+2GQnSXC)kLI$zJ!zkIPlXUC z?GEQ04MkB1A!wigKxWEKxhd&zL9ga>Ue*IpD5Zw3B^ZHd0E(Ir4Aa4IBsil0M?a6~ zyzkBD=bNo=lKz)u&Zlb!hbnSVRSo@J@lCmIL@BOxh$t~*QZ;lFG>C`cs2(j2@<4?( zVF6CW8eP{++kaH98Os+8hXb-Ym!0ri-ps*_HDysnlElUOy*{o4NFDuQYskytPHWIk z2}sGBzz8aFC8n{Uh?cEoL9(O>!w7KxC6g}btP`=xKecWsTE`Z}yRk?h^ynipueQRB5FD&sTzDEYXM*6JL zowcft`%(VM)=d&zWxq0I+6eY3GKC@{W=zrM$gfL_!o<1nPc>E4SFP{`q zKY#Qd^=`xaGV-QaNB#QQHX^s@oyc2#!T@Y~&v%9bG z?cwhF+O*@)!rHC>{PXab`}<{@_5D%5XFF~bMVcm`{ERe$z)7daHjlzTK4&LbHiId* P00000NkvXXu0mjf0D2)e delta 472 zcmV;}0Vn>N1^xq&FnPr07=1Gx%Y!{a(1f6{=_ZRtELs+&LI|ly zpv(n&n%*Mf0&oG2fJDoW8nUQVC|%JY)QDsp&B8XeOeQSsPG?cx#_xTf{QXCHK46T~ zlmY-?jRl~!@{%!LODUxgi-a*goBc)u##m3%lu9XU>5=%S(|@_&YOe#3Qdwi`3;?n$ zV~lI9ib6Q&!iQFS{mqNFYn#MN{jOxs?*LeScXq01m+!uM7&6qs?1{t)=vD?G9=T=L z?F=^o9PN+o^g3beiu1LF+jWAPF3`4 zRsXDZ2xhCxXMek>mH^gzy&e!T#?I&8095DZ>Bq->&hLG>yI9Sm+fj5`;p_6r`^l`+ zF~)=pG^N!>;9|T8v9B!HK$-5L5TPWkHGq7)=Ql+kg(YtP*scrKP@xB{|9I16@)Q3@ zzu%Wq5<=oIc&$FaK06p(oE{Gk1{Y0!dOYNu*VB&~yHVAQB+p*n$o=%4b5WiTibAy8 zEq`Y>!iO&kQI=&QrSt+20Me_oMdJ#aNQ784by=345EAanIahlLA^!lh>g7Q|rA)K{ O0000N2bZe?^JG%hhNH;PF)egFUhb4f%&R5(vnQA=nOQ52o` z=9|f+jlon%f^AKj&`6geidqy@?55B{6+{s?y72>QMHB=#rGE%rxDXdE+_({}pbK#q znrKSuMzL*d4Q)a{rcImX-^_GoJktTu19Q3We$GAj4haSPic6_hs-|gfl*)!-z+qXI zVHh|7rPRB}-QsSs9)?MJ!XaP4M=47P5d|I%Kj$-l+qxqmLTF>VX&O4Abai=^tJmtt z6*h{X1j^;o_j4qP$8kK~-CYMNm2x`uDLFO$a_srx z(?jv(w>P81pooTpD4@i2$PNxl&?5-ErO+^D5))T%UymF*^ZwamL{J9{uq=f_$l&iLBH={Pk(f+uo($4 z9DH5Z=NGd3yq+K5XDCi-cTc6h-Z_63qj{bizS!rKWrrjQf^cKtR3eeIrVz4T+_IKN z5pZpw@6!EImgN$ONycPivG}_WA0hI}gQqty^n(UkgID9$U;7u^O^b+h1bmTjm$suV;1 zG*m0R;@YWIp$!oX1j4~~oH?DICjq~|S+6OrZd=JN*MBJF^Q|6_?Hii<2mBK~RXNtn QG5`Po07*qoM6N<$g4!@mO#lD@ delta 435 zcmV;k0Zjga2H69UFncgR63*)Xf2W)ffexShA^P(Wci+=JJ>B=D zrNLlJYg4P&003~M17K~zRBI!Yh_Y-NX>BHxF#?pOJWOw~gQ&Ry@fNk#%hp-|OM}5ynr3V3Yn+c9VjLR@!{*vAFWNz;(_{?oJy&@M{VuBG+aalAj${v=8wef~~1{_*gD5r5ilx7Rnbr>8$1ksIsI z-=6k*J%rGF{@CpbrEFD=lvXGu0*|qlF=mzQ_wo?xSl9i2Pf7`BW4)ACTMvr?sg$F~ zRfREpqY#_APS!aBzoA~P|JI?-IL~r~6Tu{{R@*u@^mcY7isIyCoDCX7i8 zp<#>)LA*^ZJAba_PE*Fn$#gOtlrsR2=CcN*6*Gv{3JZP&5AB7weNmP;e|O>9Dgluv|U(1Fm5b8jt5$a)9& z;b?F=t=a%e8U=B@Gsb0{SOaj#okO({{qFw5``NoTgERo9x7Sw)gVzQn5`1uA7WkXw zgQtXEoPVFq=g*t%ZZ8#~#9B`fhF8-h#5wKtJJ8a2IJmjJghF8hR;zWE0q_3-Dze)t zXD#e2!l>Wva>A^&e8Gi-<001BJ|6u?C00DDSM?wIu&K&6g00Ev!L_t(Ijct=bYui8& zg}=he0&RkX!FEsrrlnx&TTA~z5BdL>6hmnd*uu5JtcXV-?V&v=GnPvCBzE^{-hA`+ z-ShLeKLF*bq`5YnPZu(u(n`n25AP|80)Us@3*LJ~#O?w(fPYpx+fZ?gJw;IvLZJR# z(@KZl)g>ahCcFYrAC4r+41gGWfQdN9o>qo4bqe5;WJcywwwo;>1al%H_8ntSlFaPK z=hMaZ+}AIkty*(!5D@^H@H(-p;_~r<_0t-FYG2`0nBV0lZlxnH?(yE+WfhFY=hJ0? z2uwi5*i){C34c`kY64BU=yGF7fPvI1D*Sg^TF7lTTVwF!=Pxp!;{ANWqm_=#r^MJB zeRELlD?|kE{lu#G-dfUZ{12uZi*(kRPc4z^V6mJ}04fhRwy71G(7)~7tgfHdCWK+k zU#iat_^M+(*dC8e7e{O^G>_mTGZItqI;3S!`SkB*Eq`1X$PJK8U9BtwIZbx3+(@JMKDIXt00000 LNkvXXu0mjfrU&RS diff --git a/src/main/resources/assets/galacticraft/textures/block/cobbled_moon_rock.png b/src/main/resources/assets/galacticraft/textures/block/cobbled_moon_rock.png index 62060ef86e0d341da610c6b1029f842ba081a656..664377de42e87de4bcb7a61f69b459e713586e56 100644 GIT binary patch delta 1713 zcmV;i22T0s1-lTCBYy;CdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxk|QY$ z{O1&V1SIi14$p|a!5n`D230rMGrbX06*hzrAZ4cHZqw}BVX?{#J z5fe{>exA0*mkqR;-}`~}4eIRz@<=?=%jnHorDfm#PDVcH&3^*eV*|-G`1N9+mK`;I zi>RaA@uagpz1Prtdu5l5V;I~ksn->1AH$BBQKGrc@$30xdG6;M`3*Yh0!CL|bmq4} z1O(C@3{(XPIy9&}7APE}!G@kk#DX+!fjmYmqzTB37dm>1R4EWr!A3+z5lSpD?~U`m z0)cO?z^({<7=Q4V-@fWk4nKK&FPbp|;Ot>x#c?4H9$>&o5a^3HI|1IWJn9Rv z#0=UAbKnG%&aWe~g-2U71wia)d3@;$d>yReREgocEe8X{6le!z!GZRO9>5R=CMa>_ zNCq=A0M=sVAkh#x<|eR?_-@|gVfv!Qmz_(6`LX24Gk-Uc5|d?&W&L;)SVPH@HP%{Z zy$v?nq#QZptaHx0QFFZy$?S66eyTrg9|={5JQR>iA&N(7kvyd#+3NZWK^<= zcPI8pDPyK=vdu309CFO5uzZRswz%R;D6yo9m8z+>y6S7Fv8D!%rKFl^wz=k8XtAZv zTI-`_B!D0<3Q^U^-Yi#v?95j!B(P!-7j2S}%%(x#6u%K~p zrUMv*gSo+(j>uJEk%P2@n+iH9a7>|TfVP8h_b~Tk-V|f~C*JTU%&9@$UtkVZql33M ztkuy8%Vg|Tg#%MfTz$MdBn-T+Dvb#S#(qy~1%G3?fpN{u5lTBPcJEJh7%U$IYhuej zr*H4P*9L0KD=shS+u~jprax|zSx)5leKD;`w#$jBJG@cPiQ-w_Atdpt`^>llg`L9= zQ_yj9yZVy2acc>WksJCt*N6$1Nv~0%B&2s9=|Tje8vl^rD z8$SXkkmNp78!`2r?^Z0FGM57_oNWT4mw$t#hwQ==G3l$`)3K5UTV~p|f@zEIb{QR7Ajxo;joKhm9)oS(f z^3pVaO-cz76*B_>GYd8mbzQe!uK_?Q_4f8Q41;qngwVDv04Qs12tj%faU4egSS%L8 zDuf{Qo12@i>vGQO>gvilHw?r1e4eHW5dq+QK1(MvGxIo(vUgpF_xJaIe}5^ZoHH|P zt(8(u(-4u?x|9L{wbrI-N-5Jcsk^(o7-P>%xRoqwK-`^tCT1!NwlEX>4Tx04R~OsRVWbe>OEtTmS$89Z5t% zR49>MQqgL|FbupE4>BxGFM%X%>^}#C{p;9B1AQ@;X`m4Ha7CErA=uL0Nhj;+>-)3% z-kJl*SyTp50|3Bl0l=%70Vt)U>N|jW8b!@(d3*n0BG6uos6`~@m*;l9k=7@w?$(9@833eqy|v~!e+v_>x$5h294bRpBcGyaStej&$J8KN)c$^dXn_CocA2L!g&R?0 z1v;i)*r>keETWbu!_dQ^7-XEqy_VE_V$=PUmSqYWg;JaX7w-^V^?fFlA!bT6wOO<8 zlbCegF6h2~MefK$x7 vU(Z-4Hby4h-c9E$#KKI-ilgVhvI7@a(U4PfVwsBQe0II4giUNS3 zlnz|SaxA&1YI1Kn2}dENDj}rT)f!F>Hl+kvQBWrNzNo7Mq4e_SB^eLH@pQb2cFp$x zVi0&g7T+m6bUGT=SL;o(FScnKXW42KWkLY#@*H^`OF2qv-OyFf;$Gk%4u|FHx+sb~ z-=}E`l@AN;(=GAhAktnP~AdaGFy++QGWVhV{Cvgmb2SpGtOqOP}oe~|e z#>dFmYXcZ{Dfy=^IXKD|aoe^W2ibOAW?3fZSOWJA14|GPm`x6?s!~JObr6tU*98ay z-}78NzV8`^(X^B|Lz|a^*5Og$ayGhk6k$=?R zu`i?$xlBC@?@sTOH|4j*1*+0RveOv9NfUTO1q~6?@v))zXR|M4G#nOL%50}~(rEn? h*UP2tc`dF=@f%IpAC!p`eA55`002ovPDHLkV1kAr3PJz? delta 356 zcmV-q0h|8#1d9WZFn<9>NklIZtx2l|qJ zqkkxULR%;_(3^WGBuK%5wPGU*J**=FX-el{%}Bdz?W}r5u_V%ImI46KHZ1_}Ymr1c zN@jL$mk{agc7qc%O)DhJQf7`)kjOHdT}{jw0CU|oZTtg(;eT*Qq`j}Lbs>Z~n?qR#XDJZQh)k5Vlxc12`RGgcvP7B;Frnt1LhNxcYoPXJ(~T*R=Qb?Ru@X zems0>t>13eT3ze+r@Q!#?)QlX=k+!ZIe_o`6##s!WV3175JImgmex9BCi2dHg_O6} zRaKQRvk1W9IGtGXJUMZ0cdEri07@w#A%u9Ul==Z0#Gn~MCVCVA000006Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0002KNklCC2W|H?qTDx(*61$;aEFcNz)8YMkn#X-^(0n^?FgqR^oc|p66J`-^*NYY?8ayll zl`@RvIHaylppRjq8CF6Jc4{0#7I;fOA>xUPBIpkAGuSP;MQFl|CNi_YgAh|ye}j;| zG(xHN}I&+J`e*NSpo;1H~{GHJ^+MK)TNyxQBG2)@|2Sb%djOf z>i8%(H>qKaBnP6LmhC|5pkuScT6=-GrNOh~)51Z^^);hI@0?OkwlsfQn^J8d)33+F zHEp-wZ5P%>W-C=#9!=W;FmCj2^gqY5up`f*Ezz2}0WX7#Vb?^1ivR!s07*qoM6N<$ Ef~;GSa{vGU diff --git a/src/main/resources/assets/galacticraft/textures/block/cracked_moon_basalt_brick.png b/src/main/resources/assets/galacticraft/textures/block/cracked_moon_basalt_brick.png index 548520de47f4a0668ce2f47bb57b35dbffef258a..e178ff235985b805df56e748dbffca1b27dcee33 100644 GIT binary patch delta 1497 zcmV;~1t$9W2I~%xBYy-QdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1aGk?bf8 z{U?eI0Z9l!IG9J(&0xb{VH>)Q+tYKa)=V1;^g`!I9#jAQ)675mKm=j#~EYYs!b%_30*RqeOBiLj!I9qJCn~tnW zMj+e3K{1e^L4~4ohO99B+p+HC(D-k(EIAej`Z`}Q5 z28Rn(5~sddg8@s!EL3yOURYzc#MaE-aOGWWv@+68)q<^GfImgN$aX~qhnAkD1XW_t+ zlkw!8XYalEUUNxEoUnKi2@)j*3NCQ)K|%;Iq==EUBsuyhF~k^CQlH70#7VW2N~E;m zMw{Ds^P6m8i(AS{pX@ScpCyMJb1GP7-f&{SG*`+!>MoiOi+ z9aY$KYN_>xUPHp5=ca6Zf!YJlnL-+?jh8bF41Z4lw7iA^9EPe-=dwn>9Hw2172|R@RCO)G`-BgXHfR4W>jd4r$f;+A1l8t;!{mVxYb{RGP{?0yZYV5)X5NC+lA$Wo<=uihyhdjBET?<86R7g-QpcUl=hR&@N9W4L1;v?4 z2!Cc<&cu}!Yx^)?@HW@H;4=Zz>XOqtsm#}mOm@mJz^ic2i`li<->`P8p}WC6WU1aF zvNtkJJ+J-i2=+yuw^}q;eHxfWeC80YxOypI4kx&>0LrrQO~Tx(2_MSrX$I|WBiS>v zTN`wOkqAG5hsBQ-PpLMnFGSO1 z=lD$Px15z*p|JF`mMK0Nc_$(Dg96I118^kz(2Yoz;Fc3vgf+``fDiv}UND3E$6#j$!y^HitZ566y z7*rX&#jb?nz)myxO7qan@#*<|?tR|_FijKVI0CS)D_z$C@P5C!UawUL5D`KMs3M98 z0L!va5*FP#$LsaNIY%*L3;^dM^nH)DmJkB#f4UN5L`29r18})qh%o|G51@=O%=3)3 z7OgeTIp%rBdyg>&V+YI<8sAXCB&yK+@VC%YaZr?eMBQZv_)>TU>k#nwZ zMHMl|_(9*%ADJlrGz`Oj-1Cuva=vZb7Z)c#wpky&6M@g400000NkvXXu0mjfABW+5 delta 497 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 RAQ%7u002ovPDHLkV1l(Sye|L% delta 2923 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 abN&w}(ocKs>W)_c0000pH zGD$>1R5(vfQbB7PQ4n@rs$o}c7FQ)MYPFQqri9dxK+4)2EYd>@rSz(Y;H~FCCD23u zP0po<<{&K;LJLicml$Z#8uwv$eJZY9+$3iEtuK`hGR~X%-haGrzFDqXtr~_wDfRrb zUT*}yyqso7RzgyiLkRdtByx84dvEV`yFYE7HZ04Y!8{yyB?!VC4KE0O1iY%MvMdoo zj@}=2JA?F{C~;y>C{<$SkO+|lgkON@uDc9nd3OT|1zfBL=QZ&yZg#? zgqY-8Tf3i3Dt|qVE+s_t1(KJfD0<|#AAk8+XFXu``Zu4)1}c?GjgF~ze&Co$#IIGtA-l4^vA%Nf?$hz%2VHk( zUENG}TYnI+V?476p}0z=!rnrP83cuNtP3lpZ)KaU6MrVF7b*2o5vdv2wQ{*EN0SIp z3WvkM0gWST%H{I~{EbFq_)I2#VJ*-Z0nh*?fN%kx0YaewUn~|d>;C>5q7AnnJZ;D>D@ zkHNfn2ytA40fhzd$imLAZeXzg#Xu6?-832uhrQ=7UJmGlkR~3)+;0yK`#QzP0&W-p z-^h4uQ95+@Fu%=2L;wWlQ`JqaW13?P8OQ|>xm`-k<{~n^nfLi840_GhF#ZB|qDSn0 Sq(rp<00006MZu^(fHt>FfslZ6MP}W2qA7UY-y@Xai$@eE*rP7yFT1ny$_R_J7?~_ z=bRzcYE=l)ZnxoYNT~pzRGP*kUP-A8g8@LwG|gu7ywz%7Tz_<;C<%fPafHOWuJ_RZ zpzDKDDvfh4rDBXK<$K;arD*_QjJmFeI1HtH+@#X!jA5`=tG)Ah=h=(r6S;9ZJk~mE z98KFjdytBa}W`M2+0+g3rf z)#A#7)>(s)Sbs`Is?{n0IF3^;m$9kiI5Lxw_WflVh^JzR|C}we|4m>&bw20^{{aVKl9d!*?T{Bl49U1&*90264#na;>0LV_TTCKjec2@}T%ToYg-<}WrrfHfQ vwniF(-<)5VMJrKtd~BK~!0+@;QwZ?~iw!fM;)kYI00000NkvXXu0mjfY0@p9 diff --git a/src/main/resources/assets/galacticraft/textures/block/deepslate_tin_ore.png b/src/main/resources/assets/galacticraft/textures/block/deepslate_tin_ore.png index fe400418dd4cad3ea871021d95be22ef5fc0a492..e4e0d31a32a7d4184ea1cb56dd4765bf4d797209 100644 GIT binary patch delta 619 zcmV-x0+jus1&{@hFn<69XF*Lt006O%3;baP00009a7bBm000id000id0mpBsWB>pH zB}qgL{qw&G~oP@43xVsI29C=5nLnH22~)`J(X9tB$v1wjT~g|QtR zv;`5Sh$6y7|A8I6co4j(OhhK42hl^ShgFuO&ZcB@Z1I!4(tqdheV-rS_xbg{qSG%5}PQ%cMCcZ_|we1bt?&0-3ANGhRvE6Qi2+?G@T-NpM z~C%Py`BT^?S&W4SI(X}zWV$Xcf`!hIcn*;F1w-#`1nER zx4ZG^>8fEEv47JA5eg;^W1Jj9?8kwKjl5lZ_vNdN5(I&&svtUS2#IR-^z?KIJD1B* z>e-X~q>nDevN%6izjP5Qg2^Tha8MC8v7Ny8e*M66^Ty@Q@(K#(?(R;v+e6P}(x9l- zYO)rF6w=VT?3va~&3{+oeTwS{T5R&XrW*IeO zSr(Wql}ap5j`7|8X__Yem}X&ndq^jRf^qN8trJs6Uazgo!J?t5z?*ZMOr(+HHfOJm zr84Yo_+%$~PB> zd^{-CxQT}$!F)cSkbe^)K=<*#B2x&;5LA9Ona~}_`3HGQI>MMpY5V{H002ovPDHLk FV1n0qFVO%1 delta 636 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 RAQ%7u002ovPDHLkV1k-syn+A# delta 3007 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_aluminum_decoration_side.png b/src/main/resources/assets/galacticraft/textures/block/detailed_aluminum_decoration_side.png index f4a0738397e1c2ecac23eead3920483fb3d61574..fb181afe4d331131876cf873052a92ca4fc91bab 100644 GIT binary patch delta 1945 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 delta 387 zcmV-}0et?k5u65)Ba>qV69Ooavv>t|0e?0%Ok4l}0a8gsK~yM_eNjD213?rVVZp?3 zdr2S`BEcpGB{qktB+dPRKuUY@U-<+44c1~2xD*L$Vv1lqICkNZ-6LO}#XI-b96Ht8 z*?sfg%pN>GJmEKDy#!F@W&3Er0CfCoUMb>l=*0#=&>zjihymc0;&d`o@y@(>eSez( zxV$*G+q`xw7z`O5N(Hxcg4I@09fcy+%SN-lO11!2TU9E!*-8M$?^6H{=KvH0kssqv zBd;JD&3dv{X~XGR&5QyNg+dDH-dtr3KMOMoLB+d7YXE?BI4AOJCi4L>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1btlH@29 z{O1&V1fIbi2Vo-i27CNXj7*uHnT=Sft3)BpBQsw@oA%G&-TZ}%ZHh)+h(395acR=T z8HH%?tL^8iBdhcKyl8)u`TBzK6g*{B2HkIE*PreE^~6A5UVo5#>mb)O{G2%CUC)+Z zB09(h`@G`)>Al9@+ge>#4;cJf)SAMa!=T{-lw@}ExC1^8l7MSg^hBzGE+L9>%K|6=%(iep~SmUV@#oP|TkbnZ~NgR2IfjJPVa0Edak+Uct zV1S(CiXd4@{vdie5(IV%A z4>|O3hd;s*k96b$`4la#_!3GispQI4s#aHh4K>zObE5_+nWoJ(-$IKmwcMe#E?v9p zzK0%r>VNrSZL|7u{|DA+v&NID(Jox9p*Dmu&>Vt>&$z)E7-JfBvl^F z4bE(0WQAh{=>|8IY&PUUp*CXI>EiBY?vHsh!1{N*@t-hf26g`fb8MQt@%DwaI-Iaf z##R;%OsydMy41`u^ASz#!>QIU*vcwJ5HJflDu1cNAK2MX?X#e<%$ArVj)I9fk1QK6 zElC{($8wJM{=CP($18I@!-s?M<+fr<+Nz|ueq?PbN8hodr=BsK&$deq$}Vlsk`lkK zA_O-}&{J(^r7J5at^WeyW_7n!f$$m}c^@`e z5Wka+IWqp8UF?#pp;9qL@5LQ^aSqvbO@FL=;w(tmwPJLrw1I2zg3;d$Ywz@1WDfUP6BOLu)3VGlSbDXqRxXqYY~+@g3IhsNyuT!*uq;1L9t` zj-9e@(OwQT3vDT1~1u7a-_t z-_7=83t6kjcJv;u`DMI+7_P*EU1XAH8{d|?cN*rgW8UbVW~c9lYR~My(RG)oi2Py* zTs#E*%%VU$wLQ+^&iI|%@pT95lD5)Hmpfs;+VONxGwt)W?!{3*lJDuTXMZL3EA!m2 zc(*CT)~`%^XU=b*83&<2rzx9z3w^P(w<809ze3vKw}1oDrDif^8$yl2eg)Y3T~{8t z^|9b&{55<`{><7pyVK|1Y@R2N$0^`$v4xl6aUX}ArQ$^DyIH_R!fv4pBb<*f z&5^DpW}ITb6k7l z&UF(Kk>JJwjVes#u#uH&9a%CvcFN)FqOvC|vGe6UKY!1qgPrbb*#VG91pt6+vtmhe zLL!xGGnPu#sVxOz^zOw&Dhz^QdVfQH^Yj4#-{pf~*lSislb8Wmua|=`3ePXGfN3h1 z9eZ*m0MN5l^~UkF;n?i`(f8er2K~pGnMyTHv_$TAPzc16(vLkgq1Gd|>aeU3l;^azr+!9KYJZC1k0)Jqc1}zB& zy)vE0A`8L@z+S%EMiU|`FqQ*P&(83tw87`>-BOXmEqXT zcR58%X?WbSOvB?AjknLc0Dp??8QlfPW@poc41E0d3xH!Y0Nd@FWg3+FAQ&#)u}b?} zZK6Kw)VXDT`f>Jhvsw5F!l>7*0QhopKHtHyS+7~?uT=qDB*L-T%3V%1-{nCVQK?n+ uMt|bbBrYB7bQh0Ucr9Gf7w6`l{{tAk_^(dWQOp1U002ovPDHLkU;%=-j_bhy delta 494 zcmVK~yM_Wl>FU(?Ae?w%6;g z+Nq4)O3)}Y5(iWcMM%H}ae<$}-{61n(>PS^rK%7D8Y<;Oc8wD|8}EAEaM*N7$!MjS zc{}@N=Z*2@(;GarITHYSKHW~W5df!y^kS5q4pIeu{V@Z;`{z#pELQydI)CrS z!A-Fw`svSExy{rFxeM03B>*l)+3+9&z?ui$0VI*9@Rv`M^XnXd_3`8=a_ypS7Avua zF`hR7(mki=(Z#BrmdrMdwp%kUdmjB=)C9oraDV!z+9kdzmH>Qe0brt2AWu1)UC$R=W<`!>x1^y5I$ z187>AhEC1ft4XPw5VatmS~YL=k9AunIsi;a-DKm=Mz>5zpAuEkwDLcFuO{WY$YVlU zua6HH7vquvcsopO%d{=iqePuGj5Ks7bJliuE-|yJApkDNn{^gT4j`+zCRSWr=io2gMJ*Op`*A?9`E04BME?KhdpW;YA=|SdOl@ZZqcp3&*sMG k4==W_nfN!ZPsuLw7h0ps_`AmorvLx|07*qoM6N<$f=^TMR{#J2 diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_bronze_decoration_top.png b/src/main/resources/assets/galacticraft/textures/block/detailed_bronze_decoration_top.png index 97a9c8e677f087a2676886620a6de274b3d352f0..e08062162fa5da1d2a8a34e294d5a735b3819a76 100644 GIT binary patch delta 1909 zcmV-*2a5QE289xkBYy>xdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxlEfwq z{O1%o0+M(h2lJ@P4RZW67RKIrB%7+3oq@q18g)ysrvLTlFn{1->ymLkrjSFhcwBaw z3mVDZPhYk6k#*uvG3M;*9XdLg%{qT(45X z%8f9T3C0Lh{(rHUe;e?dGDfxV5fOGz%U8g~Jb9q$Mw#Cj20~~o-u&s{tL(=-h!rsC zPd6uQu-HRQ9G-4%$teKAIFDNOMX^oR_*99*+8$s?K!FV;o&wp(9EqH80zn1HSsWi= zfV}4hknBVPxJl3v*2bJj=UDcv{RkEC<0VK0H(3hEa(~W4KhY&&DW;TiDw(q&Bz+D!=9F_T1#1>(iZ7U5Frt)$ z4>{c7k8s2z9r-8~@~N)+8fvVm=2{vzX|DMeT5PH1RyuV^$#mC!4?XtOb1ws08#3JR zBaArG$bX}3))uR89}-17H6eZ~PnP%%tvrV2(|f7v4Uw)@CNG zCu16g)2CJtebp6Cg^!wzAcvek67+sHkVnqnn16lM9lM^b4ris@&vvHd$>DDXGCAYP zJKm<^*+3=@N1LO3relw1ZKQBk9?Y*A?)L^Q0Il^LP1?54HUGQFOGKZRla*#>R?YQb9(#2`U!%XxF0*Sj7`m*pw z6n{xJf*V$78+`v}!YLBuY*(vthy*4Q(WC$X6YdoTv`9f-WOC)!XT?R7KCFERQWXI8bpSQKy>{2tDBsiY0fbk;gjbq-Ajn=*5l8eRB^l(TXG(g@a34G)X-VmTtm~R> z@VeJ!$;t5+FjoL>(!?sdRwpQ48N8aFza)9NhV*=Awl7BrP7quomX;5Q>3=%bfwDaI zyG6aSp}BbXd&Jpio|l3vw*Zh`fEu*=5NKPJi5&M)kx6eO zklMC%TvEwu6WP**rYKTw+b2J-9qU^2uAvPYmoeQ*xRtkGM)g?6e+W30jS32B}0mGWziKEGYhwtM#Yf!k#^e*>#! z*E-Fve5;Wm6#{siu{d@Ce?I1hn*aa-oJmAMR4C77Qo%|bK@=>fUr+B2vtbX5@v@?# zh@gbvVKD?eir~$Qxp?$*{0s310^-$^dlJ!H63M|t#SmhM>+JS)_mD$rJ2B1BJc^pC z_p0C6?$!zbBMJb3lgpo3DgcVo1ISXD>a^+v0nq>Yu(k(9n{lQU|q4IGY@OzTrQ)(bfk_(%}Vo`)3Fs0q~(W>q0fKj#exv96{^D`ck(j z{bNgq=ieD(43uCUf7yOF2SA3U|6SO68!Y18(89Z&nJkq@ht1__TC?4~<1Y;@o6FNg ztPe5tgs(HO?*ADE)^Q9MDi^B#{zXyxWNonvK&vD-n)12Pj5Rl!pH_)hNvomXPIe>) z5>4w4)cWTgxEj_4>w?jW3{FhyVC3rSB-V#!Dxa?JBDB8LJKb4b0MO3Ne*a=vdH~H- v08DjSW4l``aghKVoJdVaiXE6nCO021#$R$ISTD4@;!0)WW1(687hLjV8(07*qo IM6N<$f<-H?!T06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0003uNklU~>S9M#Es>SNiDO zq^3zMP77?-hJQrhKOgr|H;0rXo~Drnc%@zWK{QJzl+iw{h%IhX#BL;jB3lsg8ca_g zv2wzSo5PnukL`Y2{sXL(;g&jyh?vVz3xfmr*mS%WW%NzFRud^h3IjIeE=_B7%iMAw zWjMj+fWxjles8Y9+;X3%#|LGKY)N1Notrc!{cDKr{WRUJG8UkVL~kZH`Es+)RNr3* l^ts=X62<`{Hs^yz{STB6aq#^(EBF8a002ovPDHLkV1k?6xJ&>5 delta 440 zcmV;p0Z0DT1JVPKB!2;OQb$4nuFf3k0004uNklgnzt08OJ#l0`Cn>VJWXf17Nf{f- z&=Pq7)|OZM?}Hyw>xiE)0w8<=fJ$Pp!d|H)rM071#wufFEdbE!rAq5DmCRS+P57d@ zTz9_fK~?yozJIvL$b#_sqbkJY2P&zPWTqfT&zdZ9ljhSo@PLFbv@M)tCrc#(utZK| zqR{H4mL|n8H!o+MMJ$nL3hLzvXCH0Hj@wz?i<{TCsU^yX3j8#>=?h;gtpW7kjB~{` zaCFm`Y0&_Vcj5)%Kjg2n7DO_PWGHI^bM40~lNs^gHZhtq5FXEEwuv0B-G)9N^ZwlB i`N`}x7vsAAANd9IdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y;lJuw! z{Ld-o2uNZ*4r|1_!5n`Q3scp#%-1hsOmvyXAVg+L!i>NFH_cyo*pf5O#}sl17LUs= zb3rHB$20a@$H= z?28E!T<{@;7*@=cDA7e9LyR%S97~eql20MUlu}M5a~6c8&mqU0a?Yh-&*Dt+1*;2Y zlv24$b=B8UV@);J(jcGans1@SmRfG5bC>SA@1e(@dhTV=fRxN|!;diHNF$Fjp|vT~ zO+UkoGk?uI%VBM^`qusr)@ZZF7gK9qJgi|f#%1U-K`YPr#Tgi5M_@cI1|Vo&oY_Rq z@nUXqW-}uyJi|%9xankzp#TcqAoi0EcMs-%&6@$%f8vdQ!<<>v{Rhmk8S=v02iE$^ zgzaKXqi|trWiBF|C#3xxOspsY>mP*4ygIUiWqXAis}2hv+SN@Xn)kK z+GAu%tDEDpz&aDRvoyV)urg{vOPUaRYIai)7BFTbbF*^3eM=h$wF9ayF>3DyIw)Vo zb~m;fk&A9&!VCB89v2N0Mv5>$@+D&WEv5b{lpTWhM+`5h=@sg(Hhrap)aUP19G->) z8%_7zMpJZ~>j$u`L-vt7R5VruDSu4Ewg_q_`sNA+xT9-EkZQl>f)gfE4so^ba$``P zcj=*kD~2io`iP<5s%Y=Hy+aBe`M$BFhT5$Jl8Z%A^9dNeC7L%Jo7r`&P|hgiSKs>d zF>$AU=fu2&%ATyS!G;j^*fzwhiO_dkX!D5;>b>8^=@BT$9>Ct~KV`)arGEuh6uGhF zlb?!~xu+Z*y(ipO%b~jEv6CLEcDb1@E3w@!z2SFE2R#8UYau#i29^J$QBC6JXBPij z;omL|4_T>{4DuDn?E0N&#*NUKN3S=WXNesk%(rXLM|{8D1D;~-=)adc=F$fCk(_qt zDSu5|472$M&bPQ$ff`X%0FfdT0(hLUICcSlKIVp-0004|Nkle5Jxjzu6ddo8 z{Rjz0&`xbc5Dsj#@T2h#v^o$$4#7gf!rEWpzwjRj5)dt{6hxatK@o&&tOP9-6;HCb z*$n}Ur%TjFScYLT^WNL-Io#d=;ByH8z}0Ohlnj8<7CDifS{M6C$DM~dqI_d#XnI#)4_4d4basgmr zxx)lR6f13Wqdn5)MiFzn2d2j3YwUtI{g5^e(bzO+~`oS z%ezOH&|GM2tt|rx;{GH_RAvE$f&myA);)*Y8}1dRj$>W QzyJUM07*qoM6N<$f~FOne*gdg delta 382 zcmV-^0fGMJ5r_tmBNYLKX+uL$Nkc;*aB^>EX>4Tx04R~Ot_5}he>OEtTmS$8K1oDD zR49>sQB6z3KoEV>O*bC|(o%#VV!_ah$6merKm3XQ2LFN=iHD++5<-%?X1kM8@Gv3S zwA4AheapOg^XBU1`3d7{3;_sSX+QfC0FrnS${8+~q6$Eo6^$VQAe6KGx1e@V+T<00 zyX%ok5-(ogJ_J8Je`n%3{{C=eT)4V1bUVLc?fv2CIg`N>fUK+mcybDW+D`Jb{O;wc zMHKj&sB4JAupb4W_|ZxmIh9sJXIO9u)Y6_>05#yrDU-EQ_6||t50*B0)#sS+njSF8 z{qa2VrR*A%HcFe&cNw3MJp(|n#(K51r@wz~l{V|u($0F6T++!$;7X;<`3{;$G=>ya zb|3%%&Cy+)V2k~e(y%n23;>VfEt%xF8Fz7wx z9LMpuuG_Xv)08BMG-7EX;-L;V)=Hgsc)zQvGRD9atj0pQwf4HMJkNh#FKO}C_q%IF zG?)iM8;g*t*Yoip`jO~S#TXL2&-2teoPDe#B7kXC{qUx%M2oW8+B8i`MZjqgU>OXurBg{V^nh@kI#qS`|+Q;g$CC2aCL3|=5t5XU&tW*vV`L4{OXX#9=w z@~4}o;hMACjRuj2lnLn);olCVrfpk3pCXF>0rcwG>kwc=QR@Hz002ovPDHLkV1li~ ByzKx0 literal 3087 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_dark_decoration_top.png b/src/main/resources/assets/galacticraft/textures/block/detailed_dark_decoration_top.png index 4f79ca29dc7814243ebeca43bf4df570ccbc340b..10411fe1de23875db5d4319a0ec91b180392bece 100644 GIT binary patch delta 412 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 B(cl08 diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_iron_decoration_side.png b/src/main/resources/assets/galacticraft/textures/block/detailed_iron_decoration_side.png index aea7c90b37dc216238b2b23e915cf592afab53bc..f8fa8960eaea4e4abdf0ecdfdaf852f9d748ec93 100644 GIT binary patch delta 1596 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 CEXAY% delta 334 zcmV-U0kQt?4%h{dBNYLKX+uL$Nkc;*aB^>EX>4Tx04R~Oc?5O=e>OEtTmS$84oO5o zR49>sQ8A9gFbv}z1mSFC$mDEU^ML&S3;jgUAs(6zLR1(YZcw1O4emHegei&i*X?%0 zJ5&`w2%&8q1YjITX2#zrr2xn|Z`(!ynECN|)LQ+;x~>3*VQ6J3rDa*j8fIo@o5ai^ z1Xb<(-k4H~pKu7Cf6u2q1>mcUG}Ky|`K9`8eT*^2NJLfu5D{u{nzj&Xt+svNcV;$n z-}h?(N$TUqBK$|al2(2K5 zAR<=}FI7_2Qc9bHBgXhK=-ki_`zNK-^!brQ?%PQJ{^KM7EIH?tQafp$=j(+zX8>f` gEz9Dz+5@i4FXET4IRcYx{r~^~07*qoM6N<$f@Q6iJpcdz diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_meteoric_iron_decoration_side.png b/src/main/resources/assets/galacticraft/textures/block/detailed_meteoric_iron_decoration_side.png index bf24b663624aa58b692423f3228c1ad5897d58ec..c99a941ca61a1b3e35de449730d69d5814de7169 100644 GIT binary patch delta 1784 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 V^vMP}%lQBR002ovPDHLkV1mo8^fCYd delta 454 zcmV;%0XhD*56=dWBNYLKX+uL$Nkc;*aB^>EX>4Tx04R~OlLU4Fe>OEtTmS$8g-Jv~ zR49>UQcX{TKoEVFbqQKFDSBy9Q4ea=W6%BnKS4c}9@?5zT9)#$lO=cEZqDt4Mp?EMu64Cs z{pb0UBqG6(@l_0fe;NY-C|pIT6z7xMB%P-Kyd+7K3aheg>bmQ??RE!1sW1qFx^D7a z?hOWQ+mbOs5cDIBC*y3B9Y6~QoMl@8zVrbYGMp4Vt07~pt*V;g3$6J@>mpq&E-x?K zkOMw^>5rnw%^fP`OaJ`ryqEGIv6QlJFl5qsYOQ7XLTf{&f2>NSLICUa=g|l5_N7lm zZemAk$n;M1& diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_steel_decoration_top.png b/src/main/resources/assets/galacticraft/textures/block/detailed_steel_decoration_top.png index 47efca31a1d658d4294684617601955662fb0939..bda9fa6f84687b0a76465a8b237605a1907773ee 100644 GIT binary patch delta 1473 zcmV;y1wQ)O1=S9aBYy-ldQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1aWk=!5* z{!bMt0Z9l!Ihe;xI!O5uwqd<^eRr9O$t{e~`;$aW{qwt-U;06a);N~nqxV)n7hS}p zhhSe{J@~`aBFGEnv z1(X#*m4S+Uxqr-e3_n?|Wve*?(CFdJmHLI)ae$si>c7gSfIvHO<2}J+&CgtbB}I_; zGzSeZ+3irVF}!Mv_5vW~W8IJX0x2Ce+^fW?ZB}Q16awpk7(7@(6aYsU6riM@BRSj@ z0bs_WPNF07icQcuQrjvcu=670LDyDMe3(3mViPGTSbxs3){nTLHI$gxF|%jkz>$;j z@Qea>*lOc6r|inw$Hw4kwLW&=2f9l4H~ zji_D0s7`XnrhrWbyh7+IAUBxUy^#AcZbozc9d7s&rQfadySLfHOn$m^Iyy=OL*c0CsO_xd@q0La>Vef5ooZMg)?Y-kfet5L{ zA%6qN*iK#_1}Vs5!ynaS^bThooy9UKvr2MUub>cLN#+{`t*lj+hD*XDO7FWzZ*^Lq z>OgQrsiSBlDPE#9d$!U;EpH>A-j-X}_(95jGjEZs9W}e}i|9`oa~FEqlp!64XY6Ks z#MwG~9?Z1|(XA7Qe%OfU%qlXK(I(U8z<+>f_E#E}9*zW?52Nbe8toJ_m&;r07Wl%a zDOS?R(JY#>R6h+z^mVwowD@hF2Vx$R9A~n;|JeEcXug2zmG{W&OG0URQ_M5egd?Bj zHe_G3+Mi5j&WzjpP^Q#&^G8-(#H?a7<9^n4ijQN?k2lB~e(0e&2rdb7x94L{2SsPr zfj4KvhX-VRU9YWT9v-n3louv>4!w9C4a*o=2f!Ae9A2LXb5G#YOLEiU>%{@H46=2y zHT~aFG=BjF@Nee8wX$H5Ar%66oUu4|0e?Q`hMNEY0Zd6mK~yNuWm2(<0#OW{3(2~L z#TGWgV&z&ah=o6~-|u#6VIc^XBB<|$a7FfVkGm90-jK{Bll>Zo0RS@t0C2nALv~BC4nSVVV z50{!kRYO`;9gN(ERMlxRRW&mJDJ5?ckrE^#-;FPqi}zGj6=bgV2Yf!C00_W#yEQZC zR#i`Y?f_M_>$;rtG}8Heb`!%;2TNqP+W}xzeZSx37@ow}{b1(0u0>>0==;7jbt$FeG$K z1?Mue-#dhBab_a&r{% b<@vt>Y9Q}9OAc8V00000NkvXXu0mjfh2PN6 delta 320 zcmV-G0l)s$4%r2eBa>nT69Ooavv&k`0e?0%Ok4l}0S`$;K~yM_eNsVc!!Qt>!Xlf< z4Opb76z7ya!~g$D1CCz%`cP8TTv-p?c()zl4HA%zea5?Fs%5h-{ZfE1V89KD|t znV8-frBuE|lB7~9;U}^%$)^A~4MVN_eYuc44MUyv!%9ydM1xdH0KP~R+TyIQ0>HKxZrt)hbY3*d~RBY7?Y?(jC@wWd( SqP8Od000006Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0002+NklFU^1PF+*$|2*%=H+r{f;k`}Gvmkm7N_0m;pJg{BeM zBNGa`y*_6qQ8o#Vua~m}3b(TWQoc!03VYaXfqM5SXys|!1g@lwOL%J;A+}$FY;P?L zL1RL>QY2)18Eje>WQu?#-|%CvD~J$$%XdJ4LADS46=?4uLWECegrI!`6worxfYVkW zaAFTQmLvftLdv5BzY1dtWr8Jm5Nk~WJ#oOta0(dO7?qz7DkGdgX39cUe*hDdSBg@3 R9S;Bi002ovPDHLkV1kpqi>m+t delta 502 zcmV$sAVn@XBMgk2$>e&70ph^QN-8xsHG1SC#{~CC%}YLw^IX(p+BK+E{5WleD(A z!L9G!yan*(`{mC5UJ!)s_Nm54-ya`c_xVpu`vZ-Tj}{*QxcoT;(EHlsj=7mx(w{$h zwzIznpt8ET?oPRRQ2;OvgSy=*7eKpx3LpqVKL6qHunOSu!eY(!YOW_Oo592eAT678 zQZ%}2mJaix$bYkx@E<>a0^oT5Mfdz*cl&m|&L&mH+`ltFj+d5Qb3IZ_!=OYL;%Z7+ zIy{b#=*ENxkQasH`DuR;M-iK7^g+_H)BXT}Y}o8BEjvqx07|9UpG*RRI6OQks1g}AQ#1?F?QF+qxD_W%F@07*qoM6N<$g6YBgH2?qr diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_tin_decoration_top.png b/src/main/resources/assets/galacticraft/textures/block/detailed_tin_decoration_top.png index c1c700753bbdfe07c492834661094cd8bf87151a..ad975a1b846cefb0b57c68674de68a9cac88e551 100644 GIT binary patch delta 381 zcmV-@0fPRY1DFGlB!3`dNK#Dz0D2_=0Dyx40Qvs_0D$QL0Cg|`0P0`>06Lfe02gnP zU&TfM000SaNLh0L01FZT01FZU(%pXi0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0002`Nkl$#;kp;=dLiUnp z^qs!b?{pVx+~&?dGv_~7<9s@R+w~%*v-x7V0uXu4kOHIeBpmSP;~sDn$bsHqXicDM zcR;Be_q!b6M-5L05YTK@1mq!dK0F8P2;lDa)3KqzIUxmb8z{>>p(c8t6!^SfQ3D_b zN)hl4*eVAYyLJYE7$_Bx1AHP_X@Zo95xr?818&K=5*?wq(l5YPf9?>#mR6zwW>Zw+ zW_1-sfE%6z6sQ8Y0gF|5{{CsU+HTe$9Im7_Mmd1W2_^Ujf?M)Ro%aNoQ-EB+an0li bay}itoSt6K_xioF00000NkvXXu0mjfwBDDs delta 388 zcmV-~0ek+K1D^wsB!2;OQb$4nuFf3k00045NklE8+)YyXw=Qm?|H}r z@nW%<186p{<+8Tb`kG7>I+!)XtQqbupqx1@4x@*g4spA?z^oZrOC$$CQ&j*$>U}g6 z^dS$fE-nvAk`|nuo(m}e%wgQ~^;<(ONEOJ0kO$Fz4`9t~O;rh8GrMSjBBm5RZtRsv z2&DS9)jBGd(|rQ&`P}oXC&!fMK!E^Ih@;!<%eteFA@}@lub;NwEVLvq0YF99xaSvV zI3$S@htYED>QzI&U=AbeazvSeO!kjU+0e8y03=0I5=eGao-S@Yo3^c%%rqE0qY(5P iO8uwD+*oo0MdSxUcCU_v+QxbS0000aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y=vhyYk z{m&}81SBCI%i%fG9d!8>Hpq#ceD`*yCJ77{dYmJPnEub-!~7)=B=E*@h(395<#EX+ z%(95~dit8rJ+SWh-4Co^Fdtu_%p^0No58KOwDz~W*I5*Ocz*$WJ3wj%Uk!)6_R->- zN298ZE1dNmqs1}$8C`Z>VDM*9rwOywh+q+v=s4zO1o^V8!!eSKXtS;0Y_ruC8C5_= zAUnW8Gmv3GhbD7{Dn2^w7-UAQNXK5JfC(#E0&;V}z(9!_MMA3BiO3m3^#u;Q>9AKJ zisc3(iXh5Bj(_}dn4biGGlqaG7y(H1u&@%p5GM~XVWjyhVnPUv#Ty?0@1c)*A(n(e zK46X#V7BE{Q5de=q9XxF6FX-195`~~ zY&?1A*?S-SthpR0xWK`O5MoFnM~W_T^fAO3Q_KkyNl9|@DWsTE%2{k?XEJ9wokb$& zf`y7JTzm;7mQ-?;^r^0L^)=L3Q_T$9}-BUt~$8~%nlGpYL@m_yU)#@h$h+U$h& zVC<~IiK!*2zCkhL{8%G7f2>7f&GEjm=hXioX@5S8d{wTJH7!>tmwYO+G{HJIOIa&> zn+5K*Lii|R=IL;Ig^j_<$4YD5t5W97a?@~ITMEi>aD?_|kc7f7PO0PS6y~keo4mC4 z{0*n>Ri^sA3VW}PQ>nSsQy$w8-D6dMlf64*&)}uj{CB6)!#l;LjD;Ed3v3NJZ7cPG zPk+1PvuNK!C;dvTS1G)y0`;J(^1fHpqggKZN1`b%ir9-mWvkV-GFDTD_UZ#@53mX> z2ZNOFTuF!YLDjdtifzeV@;f1=Ev+qv7a{X1t*3AU;F|v95wJ z6g^69W8=VpET#@R5f_6RL;QFr21h4MZu|jd&_IZ7+W3a+BffVAxaD$APw(lVD2h0a z0a$AR08mQxORgE#TBVe5&P}INB03xn+$hV^Imh*WzXzbTF3ZvwQ`fZskftdS-EKF0 zq3b$-t##YB0Qi|CNz*h#Ddq8a%(9IC6GAxWx~}^s3n8*BJDpC}+Q=BQ-ELp6R|w(# zeiKm$VZC0@X0!YK{(L^;I1V8ISS%Jz(+IZMwyjdid(ZMh2zCV^iXvVzhWrX4SZj$0 zK%VE;T5D~d=KzSvd+)vHL4Bw!!}2^z@4XOzqU$;-<)0n;BUV-QEzg|YZs(k*w> zwN^@rf5Z7siaGd;4}s<5IQHK2Ouhr*lcZ^CtsP1!wbmRhr=gUJqDcLsC<*|5_JZ$% zl=AU-uz~aW3_wcBvyY;PQ!mSMJRT1=n+;Q!%jIY^x?C=+)vEVHM8+5Z*X#AOgOt)Z z7&D*G*{+mwGMR8sYfVJlN|L0m>$EX>4Tx04R~OsRVWbe>OEtTmS$8#Ysd# zR49>UQNL^3Kp1^a4=QX_u9Y&zJeQ7CK~d3Ek46oA;8XWXnI0455EP zunZxDE?Ht^N+zSBWRc?tCzODH2`d6YmC)fcXSaFWaQE)}-n;K!Zf|P?|Drb>1DJpE zX!fYU0IXNH_jfkef2-R>?eA==((1Qe0M}09a6T|4O{XrDRQ8XHoe5V}%u*)Jie-G;iM~-}^Oy-o#^A|5? zI1iOD%|P%@{prvEKD>Rc>%8UvvdhAe(vi|G z3({I$o@AG#8B=Gt<807*qo IM6N<$f_g&qJOBUy diff --git a/src/main/resources/assets/galacticraft/textures/block/detailed_titanium_decoration_top.png b/src/main/resources/assets/galacticraft/textures/block/detailed_titanium_decoration_top.png index fa4eed7f39a3d59777f60b17f61527e3b174692b..3c7456fa2f9b18a9f887d61e920d0c3222f03f6e 100644 GIT binary patch delta 1490 zcmV;@1ugoV2IdZsBYy-jdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O3vrvg{}b zfd9LSS%QFwF30$&njPHb4<^xcoAl{3RX0|*lp-P@l9>AE-)8>N2SW75u>>EzxB9r~ zA|@4ry`FmZ#~4_*|BnaGe=v^|s6A;<$Dp`#md^2^?`N-u9)Bi)mjyJp!Pku?o#SZn z&7&%FkLx(+ueB0dtH0trUUWC_Ui1`UNG6$*ruu@aFpgwq$;_l^60 z8G`OyKvfac7=P%JADj86@SE0Jwi+V{;z5Z1lq}s_W+MJAM*m1 zlpyb64tl_3x5LE7aOD>52|%jH+8_A^QaUx#07n=UP*Ts4 z9BxVgn6apn=!m?s37SW`x2_S`b&>HH*Q=s@m^_KHiGP$7mUFE6BQ9tTB_?*v>{&Q) zzLd6v>zDNlrmQM+W(*iCpFwjbv>EXbX24p+D$;OGu)XeF?68Br4!JE#?H(Ja1J}U z&df&CTfwMKa%WS(CIem(x(dh*CcBH=uelkG^*3(#8*-+j`wQgIR9d(_P%FI>=AGDa z3wum0>FulDhlD}r4W2?A!rEs@yJ*p$f*k|!GJjy+RFuSG=A->kPoc^_WK`UmV{qJy z+bO`=^V}ho#htY`q>xWfTiFfh`sZGAXzVDbAUK>b!mzmUsTXMLh`)5q^CFs|uH$fi zjZ&Q>N_!9XYv?`(xk4IKgLo}3O6J{8{0N_XT6JDr3e}vV=P!ZIaY!_T!b2(R6?tSi z!++}eBnc^w2vb~R-XWR;XI#0uo3<@uYP&&GZS&Ot&FpL=;le!JHl%3QWTus$pHcGT zm^g&uXAYZFXdf~k%d}I*a!!-~kQ$l1uKak%ao#0G$bu?BSiCLGbJ*b zF$lZ_U}g|}NwK3hud%xsgBs*U@5-&qBY#`Wy8R?`OKrMsQ_{7}EbFGFX(0XN(`D1# zPP`@p%)0^GEw_0{8lx}OjK;O&IQU6=xc=s20lAkJ{pc7&)6|yM*U@eLtVn$Ge5p^gGE5Pe5y+Eigy zpfHPM6T}9A;Xn3=Nmh}7L10MG1jEvHnw*%sUhi&1GkJM^Z|1ch!!Q6KA^-qxx0|&V zK#UQ9wYF)Rnm_=q*Xw*fSH?6=tJMnMbvm6;)nc(A04XJv(R#gJ$Kw&eX0vI3+g8Dx z^W*UVFe4&n{&6HCqLfnUwQ0C sP1Ae~!%#jFfb;oWdL^}Os|3yJ6R%V0{p^W>{Qv*}07*qoM6N<$g5HGQ{Qv*} delta 402 zcmV;D0d4-~4x9#%BNYLKX+uL$Nkc;*aB^>EX>4Tx04R~Obp&<+e>OEtTmS$8Qb|NX zR49>sQoU-zP#8VJ9SUuNu?;xJ(k?D)A!{og>f#{y0_G{Y_BHwpeS#JWq0lMd4-|)r zX^2pSBpPxfI5>3p!u6V9zv;W@=6vTn=ce@hG{9j6s|0{vQRSm32H@_#Q?0jgyp~fN zz+~ji<{kr3t+&5Fe_z5V7GDgfmZgH>YQcA{Sw zK(Y>0P2aCXasU*i3_wUZAFpD37{!-Y*PHDwBh(B-NC8;*F6ZgRd08f83KT*Z#hk|g z;CYHtCh*7eiUBa;Qsg+Bd!iwb_>Go%dcraS=PBo@qMT8ma03MbfYFS8uPf`mz1y6p z{a#nj`e3EpgpH zi%CR5R5(vflHF<(K^TU2W@rCq^V6D`nnHp~VGF_MKO#FSFUjG^_l3KIr>_uR4y*hxe!p7s-V=5CvmsaZ8WaKd5|LrBgiGogzwR{m6a^#uH#B2{E|;y zN~v2ED$6q#CkhfX5mr(`cEf0x^W1SAz%@-oJ&#QirGHe;rDIzV2$;qQNvZHOb`4=0 zuIEXm&d$!G(PTVkl}cG@84d%MWNDV!4!E86he#vNTVUEchMroL^pCQqM8x zn>Ug)g?}Na&Qx+Cf~ydG=Q&T)oKjEl97vEhqR}X3vF~|kskcx_z1hXzqpCEfErW?N zbOF`@0NjBVz;qhHtgkacP``Wg>1NdLn2tqXzjX_xR`2R(Tg=5W7&~v?d0=#7k*_ba z)1N#^J@oQL&2ykpX!oG1wYu4mTPq2uvIKwFr%Od47h2@;Mr<1BJVYM{KCV)srM)|- zzzp}=`r$oBJFOXFnljQ6oo&V1e<4-G`3r$3ZDshF4yq7J8OR-jaE$m{Xgkbf^)Pqw!WZPn|^|;pw!w|^x94Lxkc4n5QQp(A3 zQWS-2{MqXNAqaw{C2Jb^_Vqg;rL@Y!Zr2ds_m(>V8*w;G^C*tj*Y8_PS(;uOB53LZ(ll{&H^|)b1*)Bj#RAyRqI#JOW@+dSzBW` h@>Q*s()awke*j9BwTAI_i0uFX002ovPDHLkV1n2C+WG(h diff --git a/src/main/resources/assets/galacticraft/textures/block/electric_compressor.png b/src/main/resources/assets/galacticraft/textures/block/electric_compressor.png index df0c605f7130a1011c088d1a4b834fbec9614059..6cd7a39c71d0d9b641057a921bd9509356627702 100644 GIT binary patch delta 587 zcmV-R0<``40`LToFn<69XF*Lt006O%3;baP00009a7bBm000tl000tl0bXTW;{X5x z1xZ9fR5(wKQaf+cP!#sPw$qZD#(6k#>myBj@7a#l?fqp1vRf>sHT*_OA^B5*JR4Flu+s% zIHYY`?WOi`bd;z6Wk#*CzxSP7Xqp$VTnfU&y}ko7B>2l&1|_%(g}~>mX2U24!QfA{ zP*9U3fuEnB!+%i}SydHTrV9&21k*GH#$eGnLNkSQ5EqL@-}T(S<2ml=a2Wc*APD>W z2LMQ+0Mxu8ACiG1@I0=70WqSmy5TSJJZWX*AYKdK|~9%0Kxj3q7w?sR*3K Zv)`I|A9X-Qnvwtj002ovPDHLkV1fqW6O{k} delta 338 zcmV-Y0j>V<1o;AxFn<9vNkl8;2{LE5;9eCc6>6$z+17th$cYwxTFMUfNfG)n;hXqy&*_q9kO9VIh6cTR}( z>GX{rnx++!Whpa9DM(~lE}!OR27tM4n>OA6U_2fZY42-mU4ICnOPHJ4$NOhlmbeFF z%wn++K8(d4MFX(bMn05BGuMxzBeE>*5^y!=KS%%&QPh*kloAp`h^I=aUrjot)oPbX>i_@%07*qoM6N<$g3kS%Hvj+t diff --git a/src/main/resources/assets/galacticraft/textures/block/electric_compressor_off.png b/src/main/resources/assets/galacticraft/textures/block/electric_compressor_off.png index 7b80e7270aa6335b67196b2472d1c50d55c857b4..7f2976b3e4dcc33a199918e223832dd60bc0f1db 100644 GIT binary patch delta 565 zcmV-50?Pg20@?(SFn<69XF*Lt006O%3;baP00009a7bBm000tl000tl0bXTW;{X5w z?@2^KR5(wKQvYkyKpf3ol5TYAmUc~>CPf%6Q^%$t2s+TAzxZ#9GAB;Qz6sTB4CdA( zO}f@?J=-R^_%5dd{XzV2e0cZn^Lh6^mymYTHA=?K^-Y##{eSOQoO1wGRTV`6Ku}7p zvN>*JP-slpre#X!2t`$#_aA^)5Wpa-G(4YcRadkN*`` zwQ_#;jVv|n`>QKqba~eGAcg~RGv{!Et#k-{$7$59av1i1v4w)3Bnk5D>};l5Y)k!W90Wc`^b{% zoSf$PGb(WpEtQOEoH90k{BRX@Yj@jQpZ11mOaZFn<9XNklC zw74K&dRVfGln`|e_Kdx|cxPF)?TN@1WdQ)dG)@3w97GaXmCPK%B`31y^AGMYj+2nG zESOoPAeU{wf2-XN0P`@7lYRlfX0su(F%I5`l+v6~yWQu_iU0rr M07*qoM6N<$f;eE2`v3p{ diff --git a/src/main/resources/assets/galacticraft/textures/block/electric_compressor_on.png b/src/main/resources/assets/galacticraft/textures/block/electric_compressor_on.png index df0c605f7130a1011c088d1a4b834fbec9614059..6cd7a39c71d0d9b641057a921bd9509356627702 100644 GIT binary patch delta 587 zcmV-R0<``40`LToFn<69XF*Lt006O%3;baP00009a7bBm000tl000tl0bXTW;{X5x z1xZ9fR5(wKQaf+cP!#sPw$qZD#(6k#>myBj@7a#l?fqp1vRf>sHT*_OA^B5*JR4Flu+s% zIHYY`?WOi`bd;z6Wk#*CzxSP7Xqp$VTnfU&y}ko7B>2l&1|_%(g}~>mX2U24!QfA{ zP*9U3fuEnB!+%i}SydHTrV9&21k*GH#$eGnLNkSQ5EqL@-}T(S<2ml=a2Wc*APD>W z2LMQ+0Mxu8ACiG1@I0=70WqSmy5TSJJZWX*AYKdK|~9%0Kxj3q7w?sR*3K Zv)`I|A9X-Qnvwtj002ovPDHLkV1fqW6O{k} delta 338 zcmV-Y0j>V<1o;AxFn<9vNkl8;2{LE5;9eCc6>6$z+17th$cYwxTFMUfNfG)n;hXqy&*_q9kO9VIh6cTR}( z>GX{rnx++!Whpa9DM(~lE}!OR27tM4n>OA6U_2fZY42-mU4ICnOPHJ4$NOhlmbeFF z%wn++K8(d4MFX(bMn05BGuMxzBeE>*5^y!=KS%%&QPh*kloAp`h^I=aUrjot)oPbX>i_@%07*qoM6N<$g3kS%Hvj+t diff --git a/src/main/resources/assets/galacticraft/textures/block/electric_furnace.png b/src/main/resources/assets/galacticraft/textures/block/electric_furnace.png index 714202a539eaf4c57b36e3c8930537d2cf0c1088..746d47ec61100a40347ed2a6aa4c818166343009 100644 GIT binary patch delta 763 zcmVY}j7=@pE=gzm2#*XWdLJBE_wzMfq5wwT} z%Sx!q4@3M6BsNG*g^*`N8S2hN77aT zA_$8CiIspW&6}GV$<6*5ZEecGU#tcVee9uQ|4S&GZ?JZs&|BF(v|HVx} zy#{!QI6(3E`{%5r2}T=37=*-8LYzb(ip|YUrg=eA*X(_GZ3!0e`~Y#5rm6Vh$3Ib8 zqdvWVS7v36=NWc)->0c8eqiv7N42OCg!#N;rIq6QKE`-FJ^Yy<@Ckj5apEY72@fAW zpxf>8YM7ywrhmKMrfC|~>rT=%p{^U!G@+_1o;*2Zy|acv1QB6lqeniz;I}`1XLWUz z)3ZKRU4sbLH6%&ObTZ}o&UJdd%ZL-S(io)`B2bn!X`Jx!-X7(mA_^m{t4UiaNtBQz z5l!PL7bV4XhC|SvLObgKVU&+pR13l=#263HQzUUrF@KrioMTa0!oVkq69BYQSnDt% zAR=fDQ5<8P<>aJKyWJu1eL9^roLI8a5V_RGI!h25oGd*t)>^do(Ascxbi^>rFyeM$826Mr(2Xb6iVQve~KtU zDTSHO3IgME^YWO#2VhwWq_qZV5KobpQ$#dQKq{~@zD)o|MP-KTZR`QUwspUz`a`)pWG>U`E*~!Y#w7C+?x;vmS6sI96SS&8SnHg z?{3U^{wowS&9_ejnr6a#TZZi`Q?hf#bZ+?WFu+_&Y8F+%!C{QGmfPE~ccUPQVUPtp tdKRNK+`eY{?9K(Q(qx6<;HTvm{s(m-a(zTBx7Gjv002ovPDHLkV1mkgZLRPx$rb$FWR5*>5lRr<}P!z>~u^bV-NCf{0 zNERX`>ewzN3v-2F=$Nm-#8+TpX5$keu^}dwPW=KcREU{?L?BWV`z5JjlPCf+*zY9{ zL2A$ReD1yHopWvHc6PR7A&M*%7El-sM*u`os5v2u8E!Bb5Pt*`Q-~t%_8(?3Oho`T zzpMf;0JQyQ8uvY2Gu2^vc?HL{Q}s~00Qk1`8EgB;Cjh`unbxb`n;7rGvPCw+bY6g8KQ90X!!X0IRVw;i zNSAI-H( zPq=yYgOdWLRZ4ymRV-Tuo$d=q=MLnOL4f1^Cpz7%xJ*?_zk_;B(rm_Q5e`lYK&Xf7 zHOcSmSl_P1iNUPbBwmt&Rx8KZg$*Qby8V#duOnUayjY8?Sg+(~uq5hYe%1g0002ov JPDHLkV1igd)pGy< diff --git a/src/main/resources/assets/galacticraft/textures/block/energy_storage_module_0.png b/src/main/resources/assets/galacticraft/textures/block/energy_storage_module_0.png index ae2933dc233ab139c3b4624d7626aff05bbc7025..c8c7b753bb9b2f9106746216907effe646071b73 100644 GIT binary patch delta 615 zcmV-t0+{{W0)PdOB!3`dNK#Dz0D2_=0Dyx40Qvs_0D$QL0Cg|`0P0`>06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0005vNkl#BX7>L- zVjlyUkj-|WQ&nBB>(#5K^2`~&fE>OJ;_s)C!3_grHkxLnUti0rs**Gg!yrwQvMk!SYuCN`zGvAM z%P$y)=_|mg>wj}mdM=z*r`o`2HIi_|oiOH=!SKO{{n*sfic zc^pUd@+Zf!lmk`O-B%AEK@^Nx6O3sYO;bZ<0C=9GFhxyM5vuDGv>TG93q7>$HHxAy zO3ytdG<`glnA(3;!jy1Ih(Gp#2V*-{lEhVYOtaJ@9*B{EIGzL1a7A9^7`fxxP^q5- zRMPhvC}0xeVS>%|0s{BP`{QxTiwqaxU6jWH``9#k=mq8%@V^c0AkcF_lJJE1;ELie zYPDJkg0Nn%d7d9gqpo2X3`6q*k2n&r4@Vrw{spPSsU{q~%@_ax002ovPDHLkV1lqJ B6QlqD delta 321 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 IM6N<$g0hC7#{d8T diff --git a/src/main/resources/assets/galacticraft/textures/block/energy_storage_module_4.png b/src/main/resources/assets/galacticraft/textures/block/energy_storage_module_4.png index 27c5739dc3d47c50cde16c89feb92203cd1e31fc..03154b7b54142e350e99a4b0b6f59180213bc824 100644 GIT binary patch delta 706 zcmV;z0zLhP1KI_UB!3`dNK#Dz0D2_=0Dyx40Qvs_0D$QL0Cg|`0P0`>06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0006!Nkl2iU5H(4`bV(3qn^EMMaSh;9gZ1&>iwe8wj5^l;2ELoM$&wocyxB`GutJMm_U~zqA*<_Wq zhLIErgaLqtTCJ8+IyvE!WHL#{re)^-C<-ZRez3tPt!Mrt)EYzVK$pOj&nz8FQo+0gF%d`p-T^c74vWM)N87ELl-~L#V<6b zgi}Jyl?FT*RZ~3A9S#S6;2XpMF=7$T(9kqo5k?_KuIVbev>IHmFM=W=1}2zHCm?XW zyj(69VHDsZyo-1cVPA=chP1(K75=?}9RyMiNIT+o5zpLa^O!m~IN&($@bHjj*{t!X oD@jtlUSl~HaU@{Rju@u#52|~sn%A;{0000007*qoM6N<$f`=qT0RR91 delta 363 zcmV-x0hIpQ1%?BVB!2;OQb$4nuFf3k0003%Nkl?s{?(lBIB?<*4 zDd7dQNTla4e1oST_yJ8`K#xRm64CCF!ne88f}rrmxg>7Z_Kxit`(&}WC$eQ#0st`d z1ArJi35l$R%p5{n5ZTr03nT0ML7b{8nOQ@zLY~>|Vlu4(Fn@Q$79owDb3``A&ijy3 z$_0~YEl>f)xY3qGXX8wvbOCtpo2J3O&F5F%dks&8^q7g7F~%5kUe_uq7wB>h&Ovm!v&l|`3T>6`^{`P@8Rzdqs)KzgUm=O12fWk`%MPY^HoR*D5ZHldU? z$hcz-xjn$#5oB38xiKbFim{Vac>9@v00=sM{3<}4Ldi+$X8C|6M31!pZZp-sA9j~k zuJWy*ZTsEf3uXr3eUP{sEw?`s2A~LGui1LN7Do@4Qqo^z%s06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0006{Nkl`$Hzh7JN>@U6*|36 zPr~2nid}=~(`kezx}l*%T!0R?V~s|``FyUZ3c&ogP#gqayWQF;J&X%%OY%Gytrv?^ z&Cr%vca|heXl_|#m)$CtcVkGMjxd|eo;*Fb94kq}O@E1jB`MPJ@dyl;1%T9SHhte) zoS&H%q5sfpf3xZ9H1ms2e@bP(uZpq=z$gHRVzC%QIyh)V(PR>h4bw>dOx=HfFa0^a z@nxNUo7w!DQ#2(EeaEqjyN_75OsSYE-@4&&X4)q6n_hjjlD%R!Kjv0muFzMsB#Tir z#*|UOaepiY6$ODuXgnTacDWxLxpy0>XDQ}2!(7tq-yVR&Y&NxR`v%fZ3<;zMgAl4= zN^95I%!>^5oXTD@**8q~0|S+CN{F%KfCrQ3`!UQ7n~;T!lj%3D}b(mM#AS!@8{Fszfty00000NkvXX Hu0mjfx`{l$ delta 368 zcmV-$0gwLe1&afaB!2;OQb$4nuFf3k0003+Nkla8i~p-9WHJngJ3xKlD53XzVq|*yE~uE=Ql)onxy~$ zbZrN~`$j^dTtjAdZk-V2tJNn4XxmOUS(Y-hhJr+v>GZ6clz#x2n{LMt;i4#ra_<{! zT?ipws3xUQh2;HKC5gtvOrmxHSZnLL#y)1V3u~>0BQZU6qAA|1BP_mLE&)UVI_V(xS+Pg#VzAi~xA=0XVysl*k{m zV-3=;;~K;d0BPoiD3_5NW8xgVZzScOzAF#_Vf(iqCB&kM#$riQmy260AoYm+*E(8l z+peFqdX-}(?d1ExC(I1MS|@R~`?eVT!XXmp_QW=ujcjyqAp|`&#{2>AytP7U&=+ diff --git a/src/main/resources/assets/galacticraft/textures/block/energy_storage_module_6.png b/src/main/resources/assets/galacticraft/textures/block/energy_storage_module_6.png index c9f8a1b8a9201314e81cfd9c66282b7eb4e42125..8a5049f2d2d635ec2b8f3fd68b108c126a29329e 100644 GIT binary patch delta 738 zcmV<80v-K}1NsG!B!3`dNK#Dz0D2_=0Dyx40Qvs_0D$QL0Cg|`0P0`>06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!00079Nkllq1V0(MJQmO3LYrDHOL8w=&_p8;aAT&f#R212=h^}i`aOJg?l@-eK z)P~TIWhsn;{eS(a+wHbJ*S0OsYe!KyJQ|EfN2X~gs#4-ti^XDsfS}($2*bc_x5bv& z+-vU1_?s=MWfEgBhyh}lIuMcqAULkw>vcz?k*cX6^WQ*m82XJyeZ6=mDR6Ar_dP(5 z$H%&>q~yk!8O#nGfmtt2tSf z4-R@zI4uCBTCElY{`mC7vI+f*p8d_HFVoC7I{hw{{W2pd5(uLJ8VZF%LTP8G8pnr+ zao@De)KzN!^<4UWI`?srewkhRlvi~%iUQYl3LAGhu0&~YRj6NUII$dy`AN?_%di*B z(%XFIX@7>kpk+mh<33zQ0nc+3x+sbQQvH4p-sQjM@~?8KM=9nx!<^HLpBJEEI2<^R zb4_VIp#;&LPK2((rP)h1`y@*}rr2|aeZjDA7<37{gqTwecrdD_wA*gC+wpwQAO?sL zi)e-h({M!)257mat8i)BxMoWPMM4a8FdiI&z+36r@!8op2z^|HcM)|$%u~_OkQmIb zBEDH*27!bF4wcuCpM;glJ!*4vvs^B3ZEf*9KWQy+B}pn43w)VJ9tSW_wm7cz569fD Uij%1U4FCWD07*qoM6N<$f>^0d_y7O^ delta 368 zcmV-$0gwLr1&afaB!2;OQb$4nuFf3k0003+NklE-EQ=6ADj7LH)9KlGQhxymp>B5w5?gCkO^mg3 zzU#VvU_7Y^B`C&iqEsCXJ9&}|z&W>EE^!#M*@bg1l^I13m81|65jm}@WNGgqq0e7l z@9}ttYXIG|Zr^|KaHTp*k}?3Q3LtIvPgrY+=DIR=i?XoRkoDg&TJHy9i~zh_vqe3} zXnM%_yJN?_0cjwFTGjC6BGQ|Vv1ZFZeT|_2h>maH3BV**9Z?cnmy260KtH7aT=!C& zrrlpUY2|YQ?dbQ1&qD|Rob#;9!E&1;V*qmR56Cu~4HFUR-FIDj6_H;9!?;WTR%L06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0007RNkl6!c>7!8uMRY@h3NZjG*pAifbtjXFqAEbrnJ3XjiTW&8W^U5U*Jp67Kv9x`fP=Kl3IO}Q8XnCeaEp28#frHgsI>v zU%%9FXn)!!^_5IMOwgy)>WfU`L4rIbC0UH30k{kRmSr&Lq9E{)8Vq{iUFJhN^E8d$ z#i>UWbwaMZT?P%~@yNFAOG@i8B@o@|gwQo`Y2lns-A`fnF#3d|A5-*m3c3Wl2pMw? z@L&{GZnvFox8r)Qj&vY~Or+{6m%d)e#0Ch!C mEEWqa$3h+sz&zVxn9^T!2d~}2q5DSw00005mlhv{r0t?U%K>1P{D3Fr+r9m$D!~W<5dqN6{(*B=49L2=33-t_XH~{AbjSz*GXn^|lGGip z|LyKP$hc;B9c&pT24bv06Lfe02gnP zU&TfM000SaNLh0L01FWS01FWTe`H^g0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0007iNklx~#}WZn01(#1$au_qT(< zciL^CB{Vmin-cuZme?|oJ{Uw$L^m|35Cfos?O45DcQhI)s)C>4%+E~bVm5c4&77r~ zFIfNwf!Ao%mkZZpfNe>h=R)c6cuzC5Li)|OiQu^#Vrf1u#3gw zN=&KQ6o$j$?K=mSV=;d+GruYFYl{9vC0-M==V?iiwzqqra0&oQwOY;hz45`mX(93l zIrEDqP6_HGNxZ~U?~aQE2R^i1)f8}P+PG#* z0E!6d(7|Z10|X8Z_YM!oe&E4H@Ginm0P|EdXowBw79qY`zzhUp4sfWn1o=r=soccM z<#MT1T3ub`I1U~ud{9>u#X=#^l{m=50hlLSEL;2s-s-Vy{Vm(G00000NkvXXu0mjf DM5I_x delta 373 zcmV-*0gC>e29N`gB!2;OQb$4nuFf3k0003>NklrH3?Y=@1;8c^%A`*v_;4o_#W(-x8TD&j0}E z+73XB4TnTV!VrS@l_E0h^#=ylwjDcpo`n!3WK;Z1r|0FQ0Dlld)9n!4*jh_uVr-oA zecz{oa#ApqK{0NmCDC}8Q9>7hbFR97xp??G1pxG~1m51Q3=&5qVOsqcIF)mr}opdPo- T)CJ2;00000NkvXXu0mjf29B=q diff --git a/src/main/resources/assets/galacticraft/textures/block/fallen_meteor.png b/src/main/resources/assets/galacticraft/textures/block/fallen_meteor.png index 0d4b15a1a5b0797e44bcb988d0b8bd1de66b38ba..6b3d7545856e8155eb3b0818fb7acbd4a8262d25 100644 GIT binary patch delta 3392 zcmV-G4Zrf87s48lBYyx1a7bBm000XU000XU0RWnu7ytkYPiaF#P*7-ZbZ>KLZ*U+< zLqi~Na&Km7Y-Iodc-oy)XH-+^7Crag^g>IBfRsybQWXdwQbLP>6pAqfylh#{fb z6;Z(vMMVS~$e@S=j*ftg6;Uh>2n?1;Gf_2w45>mM5#WQz#Kz&|EGkvK~TfD`~gdX7S-06<0ofSs5oQvjd@0AR~w zV&ec%EdXFAe}CrF0DztNnR@{MTa+Oc0iclpAQNSXL;z?z0IbheibVieFaQ*0OT;+< z*ew7sNmph_0I;_Jz|Ig0vH%DS05DOAg((08djMd_BO`bKgqZ*oM)FrY@hh$n=PCdI zc$u<1xgb(Nf#>=Hemu`nm{hXd4HK1GJ!M?;PcD?0HBc-5#WRK z{dmp}uFlRjj{U%*%WZ25jX{P*?X zzTzZ-GJjoxM+Erb!p!tcr5w+a34~(Y=8s4Gw+sLL9n&JjNn*KJDiq^U5^;`1nvC-@ zr6P$!k}1U{(*I=Q-z@tBKHoI}uxdU5dyy@uU1J0GOD7Ombim^G008p4Z^6_k2m^p< zgW=D2|L;HjN1!DDfM!XOaR2~bL?kX$%CkSm2!8+oM4*8xut6L2!5A#S1{}c!+`$X{ zU^aw8B*el(5JC!MfE;pQDXfA*D2C0j9V%ci)Ic3Hz)@(1lW-0$!d18qJ#Y{DVF;eV zD7=9Q1VP9M6Ja6Rhyh}XSR;-I7nz0lA;Cxl5{o1t$%qtDB1@4qNHJ21R3KGI9r8VL z0)IJ&Tt>Q)JIDYsg8YWOM=_LvvQa(M47EeKs5csfMxqPQWOOl_j~1Yt&~mgIJ&ZP? z=g_NY5897DL&q?{=okkx#B4Aw#=}CfI4lX1W6QB3tPHEh8n9NZ1G|a!W6!a71QLNo zzzH@4cS0ax9zjT0Oju6XNT?tjBs3A)34b>U1B6k+CnA%mOSC4s5&6UzVlpv@SV$}* z))J2sFA#f(L&P^E5{W}HC%KRUNwK6<(h|}}(r!{C=`5+6G)NjFlgZj-YqAG9lq?`C z$c5yc>d>VnA`E_*3F2Qp##d8RZb=H01_mm@+|Cqnc9PsG(F5HGhv< zLam{;Qm;{ms1r1GnmNsb7D-E`t)i9F8fX`2_i3-_bh;7Ul^#x)&{xvS=|||7=mYe3 z3=M`AgU5(xC>fg=2N-7=cNnjjOr{yriy6mMFgG#lnCF=fnQv8CDz++o6_Lscl}eQ+ zl^ZHARH>?_s@|##Rr6KLRFA1%Q-6J~MpZLYTc&xiMv2Yk#VimzG$o zNUKq+N9(;duI;CtroBbGS^I$wLB~obTqj3okIn_1=Tq5J-KPqt7EL`m^{y_eYo!~Z zyF_=tZl~^;p1xjyo=k72-g&*}`W$^P{Z##J`lt0r3|I!U3?v5I49*xl#WitnJRL8` z+woCDUBf^_rD2s}m*Iqwxqs0-qt!-@Mh}c>#$4kh<88)m#-k<%CLtzEP3leVno>=< zrYWX7Ogl`+&CJcB&DNPUn>{htGUuD;o7bD)w_sX$S}eAxwzy?UvgBH(S?;#HZiQMo zS*2K2T3xe7t(~nU*1N5{rxB;QPLocnp4Ml>u<^FZwyC!nu;thW+kdXMZMJ=3XJQv; zx5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C^>JO{deZfso3oq3?Wo(Y z?l$ge?uXo;%ru`Vo_|?0bI`-cL*P;6(LW2Hl`w1HtbR{JPl0E(=OZs;FOgTR*RZ#x zcdGYc?-xGyK60PqKI1$$-ZI`u$xr8UFki1L{Ox>G0o)(&RAZ;=|I=wN2l97;cLaHH6leTB-XXa*h z%dBOEvi`+xi?=Txl?TadvyiL>SuF~-LZ;|cS}4~l2Y<3>Wmjgu&56o6maCpC&F##y z%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47EtUS1iwkmDaPpj=$ zm#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kwJ{5_It`yrBmlc25 zDBO7E8-Isy%D(e4|2y!JHg)!SRV_x(P} zzS~s+RZZ1q)n)rh`?L2yu8FGY_?G)^U9C=SaewW{1JVQi2O|!)*SXZy9nw8iQjgXv z>qid9AHM#b?{_T?HVsvcoW|lKa720J>GuiW_Z|&8+IEb4tl4MXfXY$XCot2$^elGdkVB4a$ zdw=I+&fjVeZ|}Mgbm7uP|BL54ygSZZ^0;*JvfJeoSGZT2uR33C>U8Qn{*%*B$Ge=n zny$HAYq{=vy|sI0_vss+H_qMky?OB#|JK!>IX&II^LlUh#rO5!7TtbwC;iULyV-Xq z?ybB}ykGP{?LpZ?-G|jbTmIbG@7#ZCz<+n3^U>T#_XdT7&;F71j}JoykC~6lh7E@6 zo;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|zrTyx_>lv@x z#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ;ZAnBy zRCwAX(phffHUNNOu3AV-rftQsjktLW^3nl{xkcw>Ib)DEL123tOV&n7B*mo-tYIP z(1 z?+Bp~!ax7MJMTzD@!!9G0RTAX!#LJ;4FIs#Qc9K5#+coH4}$mJ7saN!RjbVk|M}ww z=NtfF=Q+>w#bTk9y4`N8)qe^?h#*SS^gHRWKd_h~=Uh<~lu~OgLP$yp03d`cm&?BI zqc~DZdFNT0KnS|7M~t!S^?E*^2_fG5%jF`3h@$BA^_4M3DJ{!uFMGboob}FG#5vbm z3n7d#r_*V>-CAp19JkL6ONX(FX0lvrm`6h+QCLWmIJ@qh6V01!e*lBBL{ z&iVH&N@?$X+qOkfpv&d*^z;NFL@W?4oMLf-rP`}=Vm0RVm9JLe#TAq1`U zVzCGz%=6r~Eg|G~yE&mjju;Tx4N06HkAK|V-Sxc`LU7J^yIs>X2%&FHt+m$X{{aBo WY;cd$_z0o^00009)Gc>Uwq5=^`LdiiLn+!5)wxpu}JlQBip_vQ~8E<-M1e-ydgv zYoERMJ!kKI*17~vAmcQ7uoQ$&mudEnVrUCi&%W-40ak@%snFBnkD3j81WZzQ5KhzE#g}u z)=U+qaYg)A9Gk{rW&(hJB8lw+4l7B-rXnWs!$RCdyc7T&De)_g|B3~i9D(>!Zs{4h zd~RZrfUe8Zqnp{{O0GU=+k;r7-zyx?6f$29uWyz~Y@hOGaECN~9iXLAsD$ClpY8|Q+RgF4=YDe{;ZlXp}GpJ8!GFl03fVM;Xpd-Lq)(kHo* zVn{-N(st5e(s|N7(kn8VtW9<%N0SBQ?c^r%Me<|vTM3GUv4oEVTVlOLjYPY|ki-i~ zyrh<-i{vWFJjqJQlad3H(^7aTZ7DY?rqnvA8mUuK!&0--6lpW*K@3{{8fLrtcZP`{)0Q)gslWG!XG zWpiX}WY5Ts&=8t7&4-psE2EvD-J!jgQ zfv(`8kfN|tp+n)3B1%zTF<3EM@qpqb#pxx~CH6~LONy7ASaM$pR?=4rQCg#PNU2YM zX;xW9*-JS?d9U(CNC15-G!b?ucG(RXVjF` zyw!wib!z=;^XfY4%he0iTh$+F5HuJX2^tj|-5N8Rs+s|s`I^m|_qFg^46P)sJzBk5 zbJ{xE5!zd{JG3Wt@^qSY9_o^Rb)9rq>(=Yu(!=O6^iuTp>)p_Y^{w=i^lS77 z3}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*rZL#XM z`efGt8hef*7TYE4FA`SKIZrr)}TaS=$NhPT2isZ)Bfhf7E_* zsm@Z)(uSpD4(bj}hdPH5N4jI2<3Yy}Cp9OgQ@zs@XANhzbEETwi=Ioe%Q2T1uBNVh z*EZKVH#@hrZs*+*cQ5y1_kIt58IR>2)gF&M)jbnEn>}Z|ti0BEo%cq2`+4v59`;f8 zVfi%q%=p^)uJ!HlBl(5;Rr@{h*Z1f9cLl%!z5%-e9xl^b##`1A2m*ZqcLhEQ(g|7} z^kXn4I4HO#_-Tk)NPb9fC?zyD^l0dtFxRlMum{U^mkXD7hf9XXgg1qM&qcULlt+w2 znnbRRydI?(#f|EW#zu!nH%8B{@K~{X#dwTWOi|38l{zbPR$g7DxGHtknOMnKX6(s0 zbX-K-(YO!HKxRF2Hr^+GU;GTqjkSmMobAl6U{7%zIOUv)1c!w3gvmsQ#9fI~Nlrz=6$;c zwT88(J6|n-WB%w`m$h~4pmp)GHhtv0VYX+AHW4#TBo2$L_vbX<1pjhpz}3Y2Bx^Z`;1P{p|fi2b>SI)GF7O)V@E+J$SdytFFCXyT0-e z=1|t5rw!o^z27pvZE93(ENT3Bn0I*ONXU_%CYz?Fqe@51n&D<)^VG4JV>iBY|E{ye zsHLuz)>?8L92Xvc_I=#P6$aLXUfhJ&K90sIG1;B_I$?q=?jS$#=2v>A6$&Qc&jJ4r~i`Q zr7M>`FJJ6+={@`mOuh2W$p9Z`j`G8eBSf zcF1Yy!cF&oo0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUum zrN{L@>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sj zp7DHsy69KwU-!MxeeuI@&cF4|M9z%A9kvV|^Z|Aw{+HJNjw;?kozB01}E0H}E0^=gAL>qDbG~?>Egzni+u1tSSH`0aO*q zzNxBz`46p)pp}VpxqD`koVqo$Wm)>U%eqfyYBL}1eZEQpaKGO_pO2ZDSwyIQima*{ z*P;PDpU-{YyA^=Z+$2d><`yB*0EF(gX7=-Xy>PpUK$FZlzu&J|j^o%O8gLxPkV``6 zX@FG8D4MkmBuBr=)2mnR{%~(kRWtrv&y?14bzM8JCcfq~y6+aD$s(dMTcIRGgpQM> zI`*5mBZ6dmSefFTV(K*9eOZ=uU8`z~(8Pl32Mwi@mv6K0yXqhA>ZXkZk4{JDJf~N1 qcABmg5mO@q;A#K$^C{!LugqUdBKsDA52&yJ0000;AYuvi7^z+CTO@GtbQIm2d<7%N%US*Z=_FxPrcD z#Jq|Cz<%H$3-g3evg&4DSl!VU_W*#MXYU6Bl3yGF05;4`O-%y>XE#r`d(Lj|B3Cpu zMch5y9BXFf4n(84E*dF{wbfK?4by@LCBP7=CemH!y;NYss1lr`bleF+jmL_kTdzqsc$U>ZJ2IYX$SIivI zKyf)h?l{a|0vtR9oHh&#kp}kr1GdelPWb@ANdWI9x*1|grtt6#j5(>K5=4cVvR07Q zLAkpSGc$Q1sg5fGGQ3K5`|Og{!V*IFK?Bz?`{e9p8Rm-dWAWRchZpi?z4-@PnQ+4PKKjmq(6%H?AlLI zWH-S`$~mC;782wiE%*A`4e(DL$;0NJ^1#ydZvc6#qFs%>9R7YFc; zS7Po0fb~T&dE?f%YE1_L;9`0ZtXSjtO5G7zGRuj&1EY29TeeEUD6tRqsKY2Wd;AFx zTj~6VD5=No#ey(f_-A!NMY5su<5+i2`FfN0oT~274ZDMcIw?{R>wb;qgFJSk!(pK7 z5$30!9TZ3kVTjhD_j5lH6KM(KH9V;keGYxbD8g981T9Ec_1LEzdi7Fe^o3?X;o;U} z(&aO8K_!N&pAVI4R=hrcEcj9;dzZcEndC_R^pq}-cgIwpDrL-cmQC>S2z=Dj+Q;u&mGAFKkOf-`Qf}6 zcetj4WJT1zD{o#I_i*=I>bYZdYF0KUMG<}MRBX$zy-Nv1IZjqYra5FPb*f?N?9}lo zQMwgd>UH(IuNc?~DWld~+DE4kPb*HdI3y})n7m9j8hf2#%yll(5>=2jPt`kF`a zezJ1=BmOHoSp}K#y~msdoY!s^eeM*`&=lGRGPlP<1zK!}vsg6f zHefVg8K%FnnItueu-`cP)<;&9l9!z#I}W7IV27|{L^dM7o~p`fp?t1O*71z0i{7<&hzp5? z8f!d3*Nr&tTRpRJA^^T^yzRO{T)lkAoaOByF_w`-9Y+u!&)s!H2*R62mJBtoHK=Q5 z*~Qx>P=li@x)Cq?F8zB6`t)Yw)k(2Q*GAXIml7-zq7piK-}M%fjr1zArL!;SUeIl7 z|J0t@-k)?XMfJ>p!c59c%0LRG+}6^^Qnu`M*?Wg8B~zB!77JyhJ0X_J7Fp&dme<~1 zDo8C5@2@JTB61Nc^ken&2>nhC#Y<%^WjWC)!MheSZ%L442t_wJoe=KZRh^>wd zs0{dbTNT0)I>ebLXek(Y@0|y)imA$Ya>t7WwSbQ+&u8II=ADN-2hUEH@w7>QxS5Jg z>AmbE;8bz%(Q??6aGi&3@(D=!l;e$K&DB%do~w7SQT=*WQ&Zli)X%>jDOylkxVaEI zn)XRCO`2eF_Fh**v*s7W>25XlwD{95l>9)9CML+KbmkQN20YrVV4%1>%R6_?ZczaF z6X}sQiJU~7A6FQ+u=#YJT;5#XhG}pk*o06tADr5?-}T$=28eiZkP|pONF&H<-zLKk zCtCYVO=ZO4XUWjK#?$l)4L*&?hXoI(>k34jn}0+Vh_1~fc0_mF^X?wiyhpjXaq;=Z@f4>s808{4?Q<|>uKX>;@cBx` zO0`CLM~hE==BegaZtI*-mWLH8-ML*u*_vMtok*QvpY#_ z?>s4o3&lfPT;4|IAFz;PD??>}Gq#i(fI&)}9LyYR+rwLxpXU)|+UGyLZ5@d^|6(z1 zcb>bRn;KJ=^;pMDPSE^ob^a~o62x8K5w=Ob12T_IS@IF@Bg$Z|eVDv?vxLIHY6(9* zmmur9)`xYaAeT9I6SnD)fVt6u`D+++xCN!uZsT$4aU@@OL?Q2pKmy-`L8(!n>Eoep zt+h#`aqn{SK2+FuI`%luejS%1SaCkjP57F?d52?Y_#Fqu^xgdGPpuJnLc7#R)uS@a zikG#B_ap~mOGorFH|1JKYP%{YgI+fAo!5k=C}6Ej1%1AQQbl z$3BP6E1PfE)C$9MXBp2oU9T1ByWX8|0{4KoA*VRY1}Z-H3HGQO8%6fZ%w6Ve60X@v zUG$dYP~tH8_eJBxDff%MQ?qNVlrqDFvInX?5MI z67vb!-T!^uZ|m}iF!Y5Y!opX3*|_EA@a)6hSSNbt)71FXfI#{6QQMKsGXI$y9h6&8 zx5diCp41+#-6t~_NEbS;(%*a1OGc)7%-)+N7pd5|e)s&2*op1MG*!K*N-nIp>Qb@b zS6%AwxHfy7aK2+~rP_Cif49GnpsYGpz3k_<_Hk{M!ao-1A-UbrRyE`;xllmDkZe}e z=QV~j$3pwmtae5R7e^o5B73JVcaL6PV+ncGxf8t_3DrChnH1UfnB(yr;UA>3@`Rel z_Usl>v(vs)f*`PyxzkoCzz+{(^vw-)bSHLaB+wILYh7_!+uzA^M~g-p>l=k?T71r) zv0gFVoUij9^%h)wNr7Ufa3T++cAeMXtYW)}o3Te@V|Vw16PLGcoRu44_Dzu+Xd^uU z@Dpb?&_@8UzRSGM0>J�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 j6Z-#2RL5&#YX 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 KU7+Q3@BaY*o}Kal diff --git a/src/main/resources/assets/galacticraft/textures/block/fuel_loader_controls.png b/src/main/resources/assets/galacticraft/textures/block/fuel_loader_controls.png index 04e08c7079779b238795a04f90e885acad0245f6..a418f810277f471227ddb0bd72ceea526584e099 100644 GIT binary patch delta 411 zcmV;M0c8HG1Hl83Fn<69XF*Lt006O%3;baP00009a7bBm000id000id0mpBsWB>pG zR!KxbR5(wSl0j~RKnz7m$N(Zopo>64?vZ=+I=w+}(3~YwrR=*XkTqR&M?r)_pZQg? zj-|2w*#FxegZHQ{IO%4yoNXLOMW<=RSVNRXriP#Xqu06}D2)!78jxtYgiObG*n z5r$#k_hh-^^?!5|s2$aL8~`In?WSp{ioeZ+-37d%ZGQla1h4D5x8t#GTReScf|2cL zU(lS30k_Ee;edaBF%Mh8yP&T3b-e>%j19|;@NmPr{kOVjFdnVDwWEWKwwT2WD!cG>4Sd(hW`2Uan?jgPG_1LoJjKVqKu2NYuA*?cCN3Az9P002ovPDHLk FV1gF3w^;xH delta 388 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 delta 3248 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 iJH|QWm2|kJg8l%7j69bFbWqR$0000R6-z diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/black.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/black.png index 808cfd6ad0a43034e040698443eb67832dc29d9a..97ccdb59168464254de105cc11c7fd6e8d3b6250 100644 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ1Wy;okch)?uNd+*D2T9JJXq0P z|9|mY%MA++RZP?ZEH2;55s34?w3=(d$93wA4_Xs7RY#PVS-JF{PfCETCNsp00i_>zopr0LLaZWdHyG literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|B0XIkLo9le zr%ag=bLPN-f*FiVISWk`?PLrVatkoev#*!?{paWBh)ui>Y&sq}!6ue-YF2EQoDiFE z3aD7h*U-*R<^Yew^dqO2M@k6rZfIq^nP4Kz(_O;Aa7ITbZm!sLkW&~uUHx3vIVCg! E05X>{CIA2c diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/blue.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/blue.png index cbf5ef37bf7523d0dc6361456b2c2f6961d1afdb..6e1e385f34cc94f8e8c0065d8feff31be0b249f1 100644 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJGEW!Bkch*{6~Df`tk-+H>OW6L zgZJ)N|1U51{~zouC!dzMfH|Oac30@1Z|ic{c3CtuHa0%IebvnEi$GEW5F|+?7`$TG zwUjZ(vNexy$6oE~7Wac0mIhILJ=2&MKRtkj`QsEL!^%||>(A%6-37XU!PC{xWt~$( F69B=0L|Xs= literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|B0XIkLo9le zO}^dSGNZBap#d|?4W~?}8jA!caRs(HcOQvYmvzVM++LRE*XU=*X#*``@O1TaS?83{ F1OW5fF>L?< diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/brown.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/brown.png index eb689eefdb428f90d56c519086678edad6ca8eca..942a3399f1dc8cac15056156cfc168a0a891ada5 100644 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJGEW!Bkch*{6~Df`tdGyV_@5`^ zKzQ_*|Cg8h{||PSlTS-rz>_<)vO@^x0WT^0?Ejg5()uU_wYp?Kr~5F9Z$kZ^^u z#GCm>5!YQAgXHV2f^w{jpB~7tG>GEsnZ}HT`9PbUVblBc$A^Xew*Xzh;OXk;vd$@? F2>|iuM7sb0 literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|B0XIkLo9le zeLfq;ojGuzUFVdQ&MBb@ E0GQ7)a{vGU diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/cyan.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/cyan.png index 394ea4692967b2122b42e6e7fe771ec15cca7500..1d540589507af46ace501c7d945eb674ea8cee59 100644 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJGEW!Bkch*{6~Df`tnb{h>OW70 zgVMTJ|1U51{~zouC!dzMfZ1T(oUYJ6In`#&u`&mM;6qZNv~m@Pp#cyW@)$^zGTgny zux*Z$Is2U4^KuUZ4WjsZrZF#mdLY9R3zK1A5d%Y&W|rx-kAhc$E@1F<^>bP0l+XkK DX2d^E literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|{5@S9Lo9le zzpR|Ub4Fw1Ljz`(8%~){H5Lg@;tE1XoD6TW9bn`Zx-H_%Ctq*abFf9FQp(rR&Q9h4 vkHd78Bg=gyCNLQsYREB|#nOnK#e<71*CN$V^}^a^O3`XbI-ru>8QpXqfYGdW;M!&{76ZS3j3^ HP6Y&sq}!6ue-YF2EQoDiFE z3aD7h*U-*R<^Yew^dqO2M@k6rZfIq^nP4Kz(_O;AAi7g)a>Lnqo%hGFvE*|0uAX!AqU>@+ZfLeO4!o(U!qZF0&|fA-w8%b1@}J literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|{5@S9Lo9le zeP&lC8!|H=PGsZQ(0ZxmN5O#>JqMMJ)}&3m4a{OH+cam%*!@eAXy)|%WHKwMrpBT{ tvO&+Y!+*Ac0&7AG`IhEV=*y diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/light_gray.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/light_gray.png index 151d989319a802c887bb2b15f79df7be0a4f723a..049d62700ba4751a0c54b465f5324e5c273cf840 100644 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJLQfaRkch)?uWaN!puod&z<)}o z#G%->1S5XO;{rDyJuj$gSur8_N&KS5XROa0jP67ybX0Rs+W5F;tDee|@9Dep!zKXD z&Dz`lv5n!uk>i1lTO?=vow9`~?dfxW1@o~FmF1TVI?63G|=OKI9EjU#I-=989ZJ6T-G@yGywo~>nr*I diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/lime.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/lime.png index 751fe01991c4dec9b603f3c9db9a5a47a59d778e..ea296b9c988c228f6b8709b8c01d57872a60d784 100644 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJGEW!Bkch*{6~Df`{J$xg>A&O! zhnt3t|NZCN{q^UqteMf;$d~ZQId{#YpP#}dUp!)9V`FR6Tg~6|Lh;A}AUI-hAmIvQ zi8u3&BCfkK6ZGp#Tig$3SQ{?y^%ILyTMjjyW^R|(==-kl=1f7Wu2Ujq^n8vo@ zsmLx%hrPk&E$#<1EDfUgdZsZietG~4^T#PhhC|)?jW?t@V}UMU@O1TaS?83{1OQZO BLRbI* literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|{5@S9Lo9le z?>s3^He_Z#oXEzpq4iSBkAed&dJZZbtx21B8<@pZwrS3ivHO=K(ah=j$z)biO^ro^ uWP_e(hyQE?1=fTX#+wNyvOL`-3=E|v;-YHrr(Opd&EVYcy+#gqs#>6A_u+`jFt-QPZ~g+gl7ksjW6ab Ut^dGd0dxR^r>mdKI;Vst0LGs`h5!Hn literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|{5@S9Lo9le z_XOtenbFwz(14lchEt|fjYWc!xPs6TC&Qa;2N=19Zj1Qx$=4h99Bfgkl=3ySvy(Z% u<1k(2$Z}ta2}}lu8gdL~@wK^HF)%ou5IY$v^5i4XXa-MLKbLh*2~7ZMr7PS3 diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/pink.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/pink.png index 20cd57b0b095eba78a499f95f7e4326d035a5158..235ecc521d302bba7ba125954b8cfcd0392ad186 100644 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJQcoAhkch)?uPo#}pdixnaQ-r; z_~UY0-(2L}&AzR;;qc=XSwW5lz7Ajfns$DunBQp_CM|S(qjcQK=b_!@3^jY-r=~jO zc%1$G=;5h1K$ZoO9l2P4KiTP7nvQ5mlNHO U&6uhe33LF1r>mdKI;Vst012Q%FaQ7m literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|{5@S9Lo9le z|Ag!>F=S>woXEzpq4iSBkAed&dJZZbtx21B8<@pZwrS3ivHO=K(ah=j$z)biO^ro^ uWP_e(hyQE?1=fTX#+wNyvOL`-3=EZK;-R;5baw-dX7F_Nb6Mw<&;$VMXDtQ* diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/purple.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/purple.png index bda627a05be3df1ac72f4f186867bb194a844d31..438946b96611cc3d66b14cfb3a02bb0c2341ac37 100644 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJGEW!Bkch*{6~Df`{4aOf_P^u> zhyJJY{`=3j`|HnJSu>-xkuRb0MCqDG6SGYuUp!)9V`FQZ^jNRwh2oI|Kybw1K*ANq z5^v@kMO=4f1a`U=x40k7ur!F`>zT&9_~`*G%pa#18Ll?v&i?jaq6p{$22WQ%mvv4F FO#u0aME(E( literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|{5@S9Lo9le z*KEJPWkzG;Ljz`(8%~){H5Lg@;tE1XoD6TW9bn`Zx-H_%Ctq*abFf9FQp(rR&Q9h4 ukHd78Bg=gyCNLQsYREB|#nkOp1@q>z;}YtQi1(RgAAB+My7({)=B4Mn}5v@ Q0NT#r>FVdQ&MBb@08*MfHvj+t literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|{5@S9Lo9le z=Va#WnbFwz(14lchEt|fjYWc!xPs6TC&Qa;2N=19Zj1Qx$=4h99Bfgkl=3ySvy(Z% t<1k(2$Z}ta2}}lu8gdL~@wK^H0d2h~W;dlGycK9PgQu&X%Q~loCID8MD#ZW* diff --git a/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/white.png b/src/main/resources/assets/galacticraft/textures/block/glass_fluid_pipe/white.png index 34f81b18f1e2dda3a50c9a548ddee357cd8baf68..227dc18cef77d395c377633af6a576d77330b138 100644 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJEKe85kch)?uWaN!puppDalVFj zCBNHOxp{|+Eo_}aCTbR`UvwyD`h4Py(dMMCnW1Ud#Gmi}dSQa$v7-BTGc_3m1h3aP zGnlt8X390*@Jln7_0Het{tE0*8e}Fg7dh~qV6+5tZdiU`ny?|m-$uvM252jTr>mdK II;Vst022{8`Tzg` literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|{5@S9Lo9le z|NQ^|KZ%X4?J$o(0{2qRj}IF-V;ejKxR0htGqCG;FS$kch)?uP6#ND2TK?lt1q9 zgpaLh`-2B}4kZ{|>NN2=Cn3>gEO4hcpsZrg`6W}bPB!M+^RAC+Uw_S&Vc)&)n~W4x z+n?<$E%aer@Y9Kbd-7tY!~YH#f7WEJdi|qc@C2i!0{fE&nF-8A4t!uv72ln0kDQOC T-Ix;ww4cG#)z4*}Q$iB}U_U{$ literal 159 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 literal 2806 zcmVuJ@VVD_U zC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$OrQF$}6R&?d%y_c8YA7_1Q zpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X z6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv1)yUy0P^?0*fb9UASvow z`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q{wNRKos+;6rV8ldy0Owz z(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E` zvOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G41dM~{UdP z6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4Es0sQWIt5*Tu0n&*J!lk~ zf_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+AA{TB3-ERLHar49hi4Ih z5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=natP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+e zdD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVb znL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0WMyP6Wy582WNT#4$d1qu znl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8dZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iutvy=3T65Yu+7a4Yv^%sX zb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i^lS773}6Fm1Fpe-gF!>I zp{*g$u-szvGhed; zvo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*ZvFf(^Xl-N7w{EeXveC4O zv)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx)P8cQ&Qi|OhNWW;>JChY zI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_WICNY@+|jrX%s^&6b2i>5 zeqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!ql}XcFH*PieWwLj2ZSq`7 zV9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I-?$tAVKYn8-l({mqQ$Q8{ zO!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;cwT88(J6|n-WB%w`m$h~4 zpmp)YIh_3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dlbFb#!9eY1iCsp6Bajj|H zr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syTu9enWavU5N9)I?I-1m1* z_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$mU2Q)a|9JSc+Uc4zvS-T9 z63!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;;JuhGEb?H5K#o@~7t9DmU zU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX=)z6+o0o6-+`4{y+3mqQ z%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@>;2q1Vm)$Z)P1z?N$8UY zW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHsy69KwU-!MxeeuI@&cF4| zM9z%A|NTALApigX07*qo IM6N<$g7ETon*aa+ diff --git a/src/main/resources/assets/galacticraft/textures/block/grating.png b/src/main/resources/assets/galacticraft/textures/block/grating.png deleted file mode 100644 index 4700f0c9b26aca75cfcd8f1bdb2add25520f3fbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|)_S@)hFJ7& zowQr1$w0(~UqrFlL;3#1F21Ut|MyQ23TBbY-LuDpB`sxlin@7uIbTi4^{d@8dknib zpYMNqXy-iLpMN~mtgjpM9L~^Ks?jCQaP8Loeb-K!tkgMucIx%#%XaE3pII&+_{P|2 zZbUX?$C9%)`zNJJW>ziCmAAOQxYX&oZR1Me${$}3T0Oq!w@1)v?uoSj4;{_~TYgwr rE61+r`DS9X?ab>kI@|0{HU7xYif&t@FT&IYbU1^jtDnm{r-UW|3_4=% diff --git a/src/main/resources/assets/galacticraft/textures/block/hard_venus_rock.png b/src/main/resources/assets/galacticraft/textures/block/hard_venus_rock.png index 4638cc40d7b1bce0f954f40ca79bbbc3be4f5276..bf93707a4f932d1799b2b99c45f301c61c7fc31b 100644 GIT binary patch delta 712 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 JjvixX{~HMHJ#YX3 literal 3260 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 M07*qoM6N<$f)m+}XaE2J delta 283 zcmV+$0p$MP4WEX>4Tx04R~OMFe&Me>OEtTmS$7+(|@1 zR49>sQ9G{0APk%*S=J*5pv?VGlS|N1BqH?1+lK!T5dbNr zxOEVKbzPYmpE1S&P-{Jog8(q|zVE8~g##exTuLF^Ff%iolDXMxCu0ncFbU^*`X#gK zy+?UfW#*U2BrMC~c~-aRPM8i>f~wl@-n(-m!7&|($W8n<5xKCDe^VlNd~Ydsa5>n3 zi0HvRINV#h$v>tC@Dd>rvA8$wN1@9hw*IB1>(N)lpdE*8-*a%a)|~TW=!jY?0BWtZ h)=DYuJ@VVD_U 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 ZFfgz-s{8Hf-tr&hZckS~mvv4FO#l?SXT<;j delta 268 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 Aa%B!2;OQb$4nuFf3k0004HNklO z4A{CQje!(10M*;;E7xHt4|K09#f)5fY|}38ZDX)?OI04us(+S_dY;hPx}|dt?>zt_ zLZwhs%-F`1V%lYXuhizN66wkL7h`sOfBj(0juZpyWgAm8m=~&SV@fB0oPP`CISoZ3 z(sMeUFlILusJG&%4xMuVc<&Jr&X+R)#_X0NcFxf`S01QU8yc%-X$(9npX)Fz{GNZ; z;-#4HIS}a!^nbN|H!*u;%7AL6q61Xk?~9Fc(PAwrhK2u%=H>ag(4|tL7TjhwuEVv- z!TQ2B2JiO(i1efwNHO4_wjy4K;pT$E^L|g~Tp6T$7Q!?SxiryG6%h+$bzln4%k#1D v-MBG^TM}=!gu-1XFU7q0LHDX#8Uz32>-hNjhJzOX015yANkvXXu0mjfBx}3) diff --git a/src/main/resources/assets/galacticraft/textures/block/lunaslate_copper_ore.png b/src/main/resources/assets/galacticraft/textures/block/lunaslate_copper_ore.png index ab2374d856048ee6fd098c4158feda2a3fc82272..cbe069ee63a372fa2fa70d7dc6081732e053d326 100644 GIT binary patch delta 735 zcmV<50wDd91?&Zo8Gix*005AYXf^-<00DDSM?wIu&K&6g000DMK}|sb0I`n?{9y$E z000SaNLh0L01m?d01m?e$8V@)0007kNkln3kEljkxv#~R=v^F6zCVxo6r&vW81~$vG!{U72 z>F*e@3ym#)rll#uxd+6-U^_0Y1$CqSA2qh$J^5O%}hL`;ad07>i3bbfVEqSI~#;fY}y%~n%Ul$0!Kdaef~tJR*rz~=hEmbQ1c z);8AxD5XhR<$td8W~%&btb{^Xc#Yn=b<=Zw-?bw`{GhuqS{yExAAI_nPHT_~4UmVT zh*%q?LVvj*iI`w6ci-NaNJgIT+hf_({mS`|TL)r72*N-V6X5vWE*8BuJ;@}+_nenk ziVfG#rkI{CE_^dw*Qb<35$POT08B{4353qh%;0ILihl)Al4O4cD6+h#B9&uVfSgR&}=qO*`VV4pJ`w!RJc4kioE`#&be1AmFD`zI|F)_3HL4zog(A#?z7*3EcflJbA+-R}aRcC;tEwH6$K-@gN5eN}@*4 zLJuvrnJr~!XIlbzSZ4W}WU@1x_v3k<_nD!Giwma!w&P+uS$~S-MF4tXh>jHiIvOB^ zhmI9?-bKd>9Ss1mskmA9e+KUW1H3&&p~U9VK%%oGZ~V zyWfA|{N87_{ew~=$66&3c4*1>PbZ!(5#3D;WP)n7*0pi=7t2&ygOu`qXCF%lkAwH0 z>CR12DovCBvQ3?lOUbDVw;FKfR3Stn;%K3el-p|1+T2O2+m6dxCCeLKq`ucc2rnJq z#bsUnVSb=4JBrew;^m~vS3ApkL#1y*$^asZm9n_}5f)c=go+m>w12)F?o z;Sm*GM0S2+J1$ZN^cTzAe!Kv$Hxd!gVP{hm=Ft?#iwGf*QeLB=W0g43xa_LxIvQL` fFlVEijurm_vS}1gr&+Fn<69XF*Lt006O%3;baP00009a7bBm000id000id0mpBsWB>pH zK}keGR5(vfQeA5kK@^?Y-R#F~LX%=2MDe993QAEi)>>#lMEVb;DD}zLQVbeUu_DqE zrCKYsXkNtMASft;iYWT#n?8wDEwoKG$?nWfvUNSP8`Mjf+RcSr5EN7s9KuFGcXZ^=oqv3sD`&qes z1y6+?{X2K<*5EZZw{W6pVXl%E+p2eLu`I^s^L-|jc(QFb>$-Gu@+9y`?yL65a1^lR zJ5_J%*WCOP;D6bsL#XPKU?YkH{$Od%|7J1QVHTWZU@{s2jvYCij!t<$e6S*gKU1zC zM8cEDHH6dW&cjbl9~>G^v+;K7M5$F@?@Cb`FMj#@P1E(!L;JYzy?XmG*O!ZlZe&cw z0d*J(K|sK^m7oc3fOaXRt+pRZA%q%;*81?!;PPViczRrppLerq7KA~<`&M!W~?&$QHsg@r=8BhmqJHJQQwQ_kDLf^i5 z38@#aR{yR~6@WB?9`6J-KD$(3gis=ZP9eGq!QsHj{+MWh9&&*nd_02y)qWdB273Tt iH10$)Xf}&TNXBRiZH2gyWL0A^xU+&k zvIr!hZbVVgf@@dZy6U3RonjCbKNKsv$Rb*-;%6adGe%tmH;QQ%)pP=3=Do=ni;EkF zyw!d8-gn(Vxw$Ks>FRX4Qg{HEp-oIqe)w3wUb&q)kcpXQ zga9yuzg>M2j=y&6=81zd&33E0zE-c+9SCZ z(-Tw8cB}RKm))?NuisggyuXDJ%pjuhVAXMaye5mqaAG%d;uO`SQEg|aP0 z;B0M4;g5}JH1++fm+e8{*ck)xW@UA^W$jO;R7F)ToJHHp0n3WVOta^@O1V@Ftwt%jN)epCa5g)gwHtP50;cmJY2qE~ wL(Zi=kSBjbeIwx_|GSOTo3M!jA|QS5A3(<06Lfe02gnP zU&TfM000SaNLh0L01FZT01FZU(%pXi0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!00066Nkl1N5U_2gcnl_zHrqhXG%yj*? zuIq*|H%)WBUb(JgSz9==`qJriT0yXx8}rp_Nm-O6jB~yZd_vqH*fU0p^QkP)w!K?# z)&r$0Ns{P*OMjLfD2+Hze4msbWp%y4Cq8*R>c8a~O?I}04g!DhXutPiz%Um1zSryjl;uHdi>Vs3FAW#y#xuqWI~;f%qXUhiAkQ;Q z8309*TiBv$8VF@sS`;UY5*m;V<7onG;-2SyQF;}WAR2|SwcXCbG+9j3G>H=itsn-& ztK-;D4S)DyHrqA0LLBNrNpa3aQo_I!Op*j5=+@d`O3%eD-c39>&JG*QPe%~A-ac=) zDxx6@VR7h*^C=n{#DJA9?%xhh5D*-Yq`n~DTs7@iYd9RLsyZ5t6h*;LiVuC4%cUgs k6jebS2{@Z4SswfY7sn+a delta 321 zcmV-H0lxmC1>6FVB!2;OQb$4nuFf3k0003NNklu z-~TOEL6!q?gHWp-oOqU2Ut;4g_HV=6_4-8=eeeJPw7mgf-XtW78rE7%Sw^CGyM4ph zzBh3~@U>PA#YXvDE}tLi9YC#HI|(T~&ofbE-f}Lz_d#+>1Ap+ri$dl*^ZitHKRT#f zq1AHE0Ei~$P3c3@zBg6kgKvA2Dnyg59fAii*yWr`HUKFl5koY|pJD?5A`*I@g@|^W z+C|jInv#~q*bJIZm@S`X`+}?651*pi6)Vx`&P)- zlA(L=qe=YHGCKFqve?woq1Fl@=OXd*`H&NsS7>c4WwG(PuHrc7#Ob|j);aeJ5x&h^ T`!wkv00000NkvXXu0mjfS~QgR diff --git a/src/main/resources/assets/galacticraft/textures/block/machine_fluid_input.png b/src/main/resources/assets/galacticraft/textures/block/machine_fluid_input.png index b9b5c544cc17e7a19d376c5db63423a304cfb6f0..75d9d0d92f36382e2b866cb1df22cc16e450136f 100644 GIT binary patch delta 426 zcmV;b0agBs2GRzwvjKkq32;bRa{vGizyJUazyWI3i3tDz00(qQO+^Rf1P>J!3JOAa z@Bjb-VM#hMSoNf*h@&FXl2T% zGhWWb**y%7GZRSbYX^jknWlQR(m1Ih z0%mv%75s@{n=*9udY=Lt!3=k<+_?%ZM(}8@+xcQcB!2 z?v_$YB08*;H}y~`6aZM31%QZhxm<#f6x?1Ok3ALaq_$U%cDxqYrqrwfJioT06}H;l zzq>brgAourr6K^^OvO$Em@WLMMF5yB{h(qyBSjorLf9gvB%)A2`D_;dhMh_O0;sl^ UXQ)oYp8x;=07*qoM6N<$f|5hLeEUQbA6{Fbo`4snR+?b- z z$-aHO-hX^5NhHa-)(OH^8!zuqf7m+20AOYS!B6`8mgfgiBv9C^2WgJ!A*TL; zumAu7Wl2OqR4C7lQrk|#KoC8%)}>ISMS?~!Vnm5CYT}Ff0se%)YWxRHOz_1J5dta# z1=<2z)A6CPl$sFF%T8v`nLAyc*6@qL!~q~k6bg9&y{|q1L1cerjgXMmQ&cUNYDX2s zzzlb$LYoMNE~Bqb=R;s6nBh#7GgXmC3!fken%!QUmq2!Rdm&(kJM)8pFHQ~sjJ@wq zd*b_kxwr`+m(d>Tjbw%p&Mc_EyxO+S%m7-gwrQGIXVo}IOQg1K+jU)~ln_GGmcvaI zGemzpiCpi45i@@)rS9|jJJVE3G4oTSy9nnvf|UQZa7BFbuo~5@b^zjK)Y`k#{s7$8f005(4YftLTI^IM;^#KnlGo*JCQYw0RSMU3?RmtA(0grLKw$M5!uJ%3st0) z`O!2cgdmVZ@#k=O+Yhe*LYVW$;Kp6o5!o1L=f+aXj%&gOU>bkJ3S(SiTsBq9Izi+z zTf#X9fT)de7WOJBr7TLEbNBmQ%6;Dxkyrw-tCwRMQ?mhh?}=KXRx&#P+`}}c>nvxl z=kxV;6B0|}b*&SaEjB(cmp^P7q5#Ag0gP^v-}iAmvLJ@cUOjLF*?r&lEZuv*nQne4zPgaE*~ yk@55S!x>apSce+Nsm6ZWjMkbTr4*@Zt$zXb@Wcyj-a}Xb0000aB^>EX>4U6ba`-PAZ2)IW&i+q+O1YumLn+) z{O1&N1SBDroQCL=_ZE*! zE^)>r+WTo+t~Ii5exDERZ!&LRFr+}rS`2Q#mA!uI`%A*mn|~LiPaEWN!;g+b-s^1n zH$*sAu#Zo?KfTx3dt0Z=&La$d9csBSrx_?7h?2~09wXqRn1?wMMzq-$a<uBl zhB@MZ*&fTpp>*e#%mfhVDdfs83U#o?GfNzNE5ML|0_#bXJlVh;h@5Z)K^e$d93NnS zRJj5qI}s0VBJv2nu_w^fW#zSwQUO0IUIMsDl0lYpihukGE+U7riaJ&G8Z>IsY`l2q z)q5ZOsJR>@xS+v@5MoFnM~NZ<6jDqnjXL zdiWz8@kmE5NT1@07GFY%C6!#cN_ADMuc5}8YHrk!N~XD{&9~5EOD%WgT9@v+cHcvf zJ@tICwtrcD8GpbUZPs`)HT1&88dgIXhNcM`_lyqCz!*CM<6$s>gyzASjpQ5;<_2dr zF{(ltAa!t4$!0?y6uL&Noi6Tf=04`lAl5(e#-A`}26g`fb8MPC@%DzbI&Q);8Cz92 zVrm7|*BOC`8PPMIoZ=7Bf0D{eCGqncpX!`OJAV`+yp)p7RE}2XD|<>pyoL_;J-vC+ z9Jdx`<_(rFF@}XP#uLedG;?w+U8eYz-_qwy{be>F9mZ@cnQu^ERtbns1Nu50WKHNwd-HIxQI69U`h~CC ztA3P9q~=T!5#A^OeeJ*+ZiofghwRpBmlg`pFZB{zWZa?7;8pbxZo@*-(6uy&oloAw zrcRrOV_T199_e?i`YjIaXgNX`Ov_rqZGYI-rh&3gQ@A)%T2Z&L<-FjOLt;5*o{d9ERL-9+hZ>Tpix^EHYiCcjQT&Qse1ufC!@K4LH|sj2 zH&?y*eMFX=&w~}*pWC)O;}v3_fJk>RQ&&HO{Q>R|V4II{e*oLO!+j;g&hX~g9e*oS zqg$os`=$e(9BsqZd9k4=;^-ke9q)3xE9tD6gYJUchevOjS_VgW$Z6fNNdB>uSCKwc z@*8P((bQeA{~DXQ!F`48Y9hMpF1@?D&AYo?Qa>-3-3(E{_sd<#<-W7Dt~~M&RU3Cj zy*AkIrTJRnV=xnoc>wd$zFxc2*D%t2(2b}3HkIJfY?rsCAKUkPX+G)9Z({Qz%^y+o zjr_?_!2fH>`~y{Gh08RUo9~e!6#{siu{d=Be|=z10ssI32uVaiR5;6}lFe$uKoo_) zq+^tzL~Rt5BBqOi8z0PHRsigw(FkxhrR*Jrdq-x$!tRa O0000EX>4Tx04R~O;RJO7f5VrgPXGV`a7jc# zR5*=wQ!!G*Fc92itg&-;;Yl)~r63(8yn(!cH}DGHKts)2Qj?OQfr6HdY+T3}djx^P zK3Q^xYphw_-tC^wlg;MlmncP?#E@v4768CpJB%m|Fk=jgqC`ZLV!!{yIGVl)03=Ba zV@!ZaL~>ZI&aha{fBWjSQ{i{bvJ6Bim}_WVz*>u`B>7|jh?CgaVm^TR;Mq6~3VfeJ z_Cssk&tL}TIv_g>P16Rlh17Lp_a&lWE&v7#LXMLd%#6w74iDRVlv)cM;x>R21b2SXGrfE2Z4oS{vjk brSJ!Ia?HO@5BUMj00000NkvXXu0mjfRB*;V diff --git a/src/main/resources/assets/galacticraft/textures/block/machine_item_output.png b/src/main/resources/assets/galacticraft/textures/block/machine_item_output.png index 9ae1e3bf8e3809fc85d00b43383056d5e4976033..33527e3d1c37ebdb617062f9890494d1d63b5235 100644 GIT binary patch delta 1476 zcmV;#1v~n$2G$OcBYy;XdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Ywb|Whc z{AU%j1SBC4%i(#>?BFhc#G~6C+p(RK+r$>8g;Z1th-v@*?dFd@5ZM{WL45Sy>f@q| zn6xAI_Oxx+7+5#Ij|cWQn5QpLEvcn77~FnKd;IYCr`14DUVi}JO`tOkUK5A3$I;>! zM2I%n>m#>M?^SwlYjw$arNOU7trX@6qmEfwqB+fL3;JR0huNYwvB?&2w%TH|wgM3l z$aZj04J7E$psFoU6r;n2K`mlInqxu%BNnm*HNvq9gLEjc6TdZk-cg`Xb{R*R7)ZFnJ29O{An^Ie*7mKf#ICP-0@o%$@@aM^46* zcb>iX!H+$c0tFX1_z;4G7?O}UVet|~Bua`HNw*|NA48NFV@jGcIg>c)?4%wkWz3Xa z=InFGl4DLq%cr=)#g|Z|#F8pjs;+YNHB_mwrUp$*$u!rv`4*bA*izS8>(pK6?tAFc zV^61QTYuGu_5;;mtANp9@RBY|S z!Ko$PeI1nuNy?t_;8_2Z{X5IJTq54T@v+XX*ni<5nx&Lvrn6X{uk2w#`5Hbt@9xcm z=Qy>rXP#jB7Gqc#MGhnvYi1`eUj+FsZ|Sqg{tO$m97b>%;AC;qt*U1}D@2%Nsa##!2^YIfbH{MnG(Mv{jJMf(0J6E|FHZ$fI{C=U=ocvz2TbuH-bHB3}Y~}{;ci7CM_UEO+o96i9s6MTk5o153 z*_WSg*fZU+aWCR>J@h+q8j0)Ndc077X3fJ*{Btm~G|lz8dc2K3zkJPihx$voZW+%= zM&4f6pIyY}*-iX}o43~dN~#xuf(`zE7R^8G5{ErIECFkgAr%66oUu4{0e^j9P67Y` z0S8G$K~y-)rIOD|!$1&+zos#bB_*K=Jroh+LFlE=HIO58>SrMRAhKa}W#x*lfP#oi}jQbWDKz@CKc-VtWD& zJplT)Rf;c`YYbW_E4C6^ntwoO_4)NL(Cv6s2MF?X5(1E9yISF(Z}R%KY@R?AzRy3( zNj<9sKMN3g$_t|0;m3#oc=24V!G^jvF(yEiJ3L>-%(`9NgRgB8C+TSmRc8U&`7fF0 zf{*(>?!m{uP61nMtQKJQEalBRz-~9ebP{U2RSlE?^@~>b+{%NdKP9j0EL7VEX>4Tx04R~Oz65mvf5VrgPXGV`W=TXr zR5*=wQ$cRRFc6%gSPq*UP(kzq@B?^5k@#BAz3`eIDcm@g4-_RS2WN?86?#b4u|eHS zR%4HMX6!tzRzHwhocL)HasfIBo!lV*u zrqdUUC(qsKwO0{Nf6en8L>ZWC6h#T=90sx}Bm;m>wYSB50rMrWap@I=K7|}sQ50PU zLonA7*;{BD8_5<@JB|I9h@xBo^cIAyQw?Uu+jfhO^%}eV9`A>PS3xw46b#x0^5i^k zeJ-uVe6zuPHj4;iL2kq=5b}KvqtWPr9I8k{pJh=+59;f9f5c8}eBN#z6S8EG$f@@3 zkt`RBC^Rs48MGFSF;GhN4~e-3Q3l&sOeW)CViv7S?=7_V%YGsBDTHu{RMS{E=XwSA zA%#EKPgOna@d}JF0Dz(>J$SwTLU5V(UnON(J%H!)+4o8*-#h1`eM%|(0n>`kJN~7Z R?*IS*07*qo1w^hwV1mp3w&(x= diff --git a/src/main/resources/assets/galacticraft/textures/block/machine_oxygen_input.png b/src/main/resources/assets/galacticraft/textures/block/machine_oxygen_input.png index 6197d5b9b4d943aeb81e5607b5be07e45cd9f0d6..7ec6399f44df16b007b96739bac6873370dd7ace 100644 GIT binary patch delta 318 zcmV-E0m1&L1K0wPBYy!ONklPnb9+DYE}&-bLMttc4m`k`i%ow&-dm>HDgMG7mF{o74kX73_Sik z`}K$sO7OcAXi5c<*~|l6A_v1UB_oy_3KN19q0#}A(PR#IRewI!D(Y7PFu%U|;@kwG z1_9)=9({C%P(>;Mten{E_MwuOKA#)p>Lj{8gVo!LK3g+8UNJgO+G}Gkx5*DDr^;1% zT_l_Px$Vo5|nR5*=wQ!!4%KoFcnKJ2Vrpd<=k zp-LJg@&ca1Bk1`AZ{Pt)q~sGsXOrT*v2ze8>|Ni*Vj8d3H@h=)_GG)g|0T+iW+?=1 z(*gjPYwZ!`QO`MtvaFC0<=F2(afzlM0svW-!Z{c91c?-@)qf2Z%XvS&Ru$paq9{O= zgSm#aCA{~T%At@90BM%0E#@PbkAaQjpdj=qxirtnx>6p3#r@2`Xr(# zmnZ`vr&+3`>-Qb50Gu}Ke!y&GVcN+fB^O1mPL6oCy zS}d1~fRsn?rB(~w{j$CYeF`C5B50Zx-upqpWk}%<_ElA*GpfKj2LQ0P)aLp81L@1Q t|B#erHEJFX2d#}UT6^!KbH*6_0kT8W941ksK>z>%00>D%PDHLkV1kItwz>cS diff --git a/src/main/resources/assets/galacticraft/textures/block/machine_oxygen_output.png b/src/main/resources/assets/galacticraft/textures/block/machine_oxygen_output.png index cc4cce82ea40d7b0cb83dda0506dd5623df3e019..d27a5508694720ac7eb61bab1fe4694db4c1fc20 100644 GIT binary patch delta 316 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 IM6N<$f=tqtKL7v# delta 398 zcmV;90dfA&0;dCzBYyw^b5ch_0Itp)=>Px$VM#7SYq$;pfTFN)&Lx;sCe3pBjQQf}I)A-a74g=psz6kNxkuBq z2q9o9mtryi*uttU<`bAtk&V+$LF`k=aWzeI&0q%RJ|U}xVepA;A&uKuzeJSel4Kxc zTUanN-oC!D@*}p(bL{IHM6(AA(@`ENxvEB=EAN5r769-vnM8_4vb>0fDC8uE%?6*= zK9EI;4iKMh(|_r~F3+|9xLmXsvSuJt{oRjbU)Ok#LIX31X8M%QIT&MZAu{(MD&Yr@ z#bO?9ER%ETrLysTSr1~LLWq}04TDDr;ilj|r1%f^({&GbRDp920MIn8g6H!u1eb09 sRo1rM19&_hwKv9SA3{j(8DsDV>J`o;{YjRJ00000Ne4wvM6N<$g7Vh($ diff --git a/src/main/resources/assets/galacticraft/textures/block/machine_side.png b/src/main/resources/assets/galacticraft/textures/block/machine_side.png index 7ac974738498be1335e3efffcc731f9a70cd5800..213aa787ec603dcc14f6e5831f625df9177495d4 100644 GIT binary patch delta 761 zcmV06Lfe02gnP zU&TfM000SaNLh0L01FZT01FZU(%pXi0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0007WNklL55D=QdFFVsIr-(ZzwdnKJ6{Q{v7y$>IE#g~ zLLm<#iFvWQJ|Z}Q(W@*Kg2CWWz;VofV3-`ou{_V0N<~Q$E0qn9Y&J!bB%!KhR1}K^ z-Owz{ux-1pDu1#pscPLYbhoqRd7WxiD3wdO+-fKkx^!r@n!2vpwxuYtx9xR%JK(Y+ z@9y^RcpaDs)e6dnf?BNz<~X+Jc{|+pm z3{6pL5JaO9Vx!E0{mZa}+_=VCfo9V-O*rV9rncKHY#F&@u_#d$)({$>S}n(Qx3EfN zKs8`H7Jo4MUaJiqXqqAgj~_-let!8Q$3cO1*K3}nS%0B%LGdYOSH12KB`^O670 z`CMi>!ldJwrO?ka|F5&ax8vztDw>Sb>16opiT`kL^~00vL?S}I-kUf(^l_OumyR>3 z*!NT4#qs2iH&g4`1e;E0{r!{qc(zH2DJl_B!2;OQb$4nuFf3k0004RNklf*z^7N&)=~# zo81wGzVHD6Fxmi6s^XR?w5^n~C`ykg+-$zlE3FN`2;oa9ZGX$<@nbx`O417eQdZ_b zuyGVcM4?huo)=Bixctr10DR$dLZxb@>O-o!n_%NIZ7a`n07QXOm8H8#S{s|h7rxPk zU5J9dw-7!6x4)c2k_teYrW}SS;FDY~03u>KikJxd+q6S?UEKtx?WK=tJH!Q`lmbxX zrHyxz?(V>n-GBW_+J+nq25$c!^=YCoO;e`(37wnk34nMMzCLwQmg&VR+5J?<`g|$8 zcoYI)^)hz1yWhnsfdkgxU+V4d-z6Tw1Mn~{v#bS>WtcAoP%-^5EkD0nwr3Z#ID5W# zCX*JxdhNV@B-%6pv}qo1C4l|j84fXD3T+y#n?RiZ0Tik^-Z3YxO`iY&002ovPDHLk FV1mbiz5)OM diff --git a/src/main/resources/assets/galacticraft/textures/block/mars_cobblestone.png b/src/main/resources/assets/galacticraft/textures/block/mars_cobblestone.png index e482f6851f87d5073a7c53fc9334e160536fd170..e1b4516fc7f7bca94c8514398c61bdd140837a28 100644 GIT binary patch delta 3328 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 KMNUMnLSTaXxiDt{ delta 3074 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 Q(f|Me07*qoM6N<$f`2RqRsaA1 diff --git a/src/main/resources/assets/galacticraft/textures/block/mars_copper_ore.png b/src/main/resources/assets/galacticraft/textures/block/mars_copper_ore.png index 243523a313315af34bc68c3b7d2b15fffb97ef12..3f1c3ec0088305ef602bd411b6876721a67e2fe8 100644 GIT binary patch delta 510 zcmVN>Zmt-_<5{-Ro)HN}-m7ueSVJ;q(8~VkAlYl9ZrRl8z`&4}WB{{gab1?!oU-&c9kw zvoJ=(%FLR^9FeOyGRcdrel@JZr%zWswOginV-0B4t~lc6-t5(z>nMvKwV_IP`|9FC zPf+I45uRr#+fVuzKTeSdJoRd29r6W1d`ZygnV)YHO@9DUKV zXRRQhJbbe9_`#S19-u6W7mPlqX%q)x-VWa5t$ugo%eR>|w^m-h{^|*ZvK)r4dwoBJ z28R7^@;;Y#0kJ`1v85PhF<91Q9;5Qb^pf(K%#yNC?{{SX;Mw|}wdv(FD3rV8a^k8u zU@`Ke&9!=Cj(OLvKetu=y*~eRj;XsnjYXpS-*(9t8QmWt`t8R_D1@{mAu0qhUt%F0 z7Nq-{^IiPAJ8~9J&|q*K2}d%l+%ZCBp&V58H{@XA$XWA9`~Uy|07*qoM6N<$f+zO= A^8f$< delta 674 zcmV;T0$u%>1iA%~B!2;OQb$4nuFf3k0007XNklcMijOq-LSn>3e1(@R*|3qN3IBi#6aNra#-*BQNOVC$Of<&$NRYP}XlW?5r3}oY z_uiRtF_n0B=Oo`b=R4=8Oy@co^=v^bE@Kf50HYoNTad60z<=Tr0DxFT(-`%bp%=|V z06-%J0JydwHOB>zF!W=w#thwd+~W8IfW*7GqA6gCgrPGUj?$mpzO;2zpIcrHTWHa^ z0pRldo3LM~#Os%U&Zx(zH@mtX?!ycnaLM(K7yu!q@YT)X(R<8#=GJ;TQ~Ou4m8Co- zfyX6xxbOS>M}HnA0XZFuN(oAWjj!z8qr7KH$7JntS<0^`lDg9a|@ua3_%gclC zGwp3(ws$pGdiubT56M1$GLiE4_w?t&!18Cfz;v zV!yQi|G%1<0ze3P{CF~Q_Jowk)%V&q7VD-%sYXdKbuCw@mdh4bpw$H^352f-UuD!I zH!=zMB7eW{H=PCq zLYA!{8B-c~+JclftH%IaT<#Q1Mm1gx5QS&% zt|NoeP{g=IN{M&~8X_z2L5&o}qKI&$6i#TYEFk~LqPP7JQ53mN8I&|>+<=5A5Kcna zy?k@WM66c3^K<6RxieQ=4ZW=-(-?%WR{SdA^Z!%f1PT0t>PAFrmr@vw4R6iGM1oK>mt2j@#T6kI(+YK ziKEt4=~h!soa=GQ)Y{Yc2@1CvnIXd?jcd8wl<{}cJDg6AhXn}SrO4;m6qgP)I*4%K z{H|1xYeB}d$$#?4*Q?7560hI32T2d^&tEsDM})K0RP<#-vlux8zH6a-I`C>Na1$w` z)zp|iNBlVY@MixVeQuLh5KxY1Q{oszfU+oFFuKj5QS5|iJ4DgVl)PcTdt?QfvK)r4 zt)^M7fngu+?Wfizz&A+Fx8%djHrF*o%h7p$a!UI|7IuTOPwUYe6wjW&I6s>^g>sj$ zSf>+U`^b;`#p5SWncL#qcY@5y_o!P9^+mew)pn_8xa~I3Pu(L|2x-oty@M0;CFjy% zLAtFu-NlF9QL}oS28ZiN+KXZ3j*-eU#ZcA14&?6g=e2Sn00000NkvXXu0mjfU%mR& delta 633 zcmV-<0*3vU1d;`iB!2;OQb$4nuFf3k0006^NklxY|CPO+|D7mE-z;@dE%gpX%U3I5+e8{DgL~)!QipV2!Ck#CJ(Y+_CJ<_XYTz z`ys6*YP1avIhNg%>{_0mlcifn9F122z7$I(0MrNrC(3j#AxG}IfvIa!+u-Cl0LQWc ztZuD;eDMZAn|~3e#M6H7)l6NZ1OQSK*W@YyG!|!-^2*OYYlTHCO02P*W7#hsKT+;p zz97%1#G^*IC2C}D+>t#`A3X%{ef>aY8CL-)QyEKI+0<=C34pT-r5*roU8v4^LsvuG z5B1&}vmBdk{N;YA^<0Y(XdljY_oegs2^KMxoeiP}jDJH-$HJ6o?ZeqjGCkVg7fU3A z&d9;q59w)d|J9yk*SCe&US0e)f&r5yv{N!Dda+ME_U6Z(^LR7e&qA31v$XfwPuejWn6XZfvIbZgA(sQ*?1or TF->bE00000NkvXXu0mjf8-y)a diff --git a/src/main/resources/assets/galacticraft/textures/block/mars_stone.png b/src/main/resources/assets/galacticraft/textures/block/mars_stone.png index 7290759522c8c613f73fd991d087c54c8d9c12e2..8e3a33210af9cbf7d434ba15ebc56638f0272c2f 100644 GIT binary patch delta 3112 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/mars_sub_surface_rock.png b/src/main/resources/assets/galacticraft/textures/block/mars_sub_surface_rock.png index a8d274fea57722729e3e53e71c2eabec36df7cf3..71568a2b15a1d2a457ae0ef2bc0b7154dcbde261 100644 GIT binary patch delta 3140 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/mars_surface_rock.png b/src/main/resources/assets/galacticraft/textures/block/mars_surface_rock.png index 717b7e58775bf043b8d1c5db5874d7d002692e7e..d6d27fdbb6182e48723da9f1d4589a063b2dc5a2 100644 GIT binary patch delta 3182 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 U2Zgb}DgXcg07*qoM6N<$f;0#4HUIzs delta 3023 zcmV;=3o!KZ80#01BLWIKkvbcHNQs@6cT`l@7KhKhcY2}CFcc|6@4XEmy*H`SL}8d2 zU?>9)Gc>Uwq5=^`LdiiLn+!5)wxpu}JlQBip_vQ~8E<-M1e-ydgv zYoERMJ!kKI*17~vAmcQ7uoQ$&mudEnVrUCi&%W-40ak@%snFBnkD3j81WZzQ5KhzE#g}u z)=U+qaYg)A9Gk{rW&(hJB8lw+4l7B-rXnWs!$RCdyc7T&De)_g|B3~i9D(>!Zs{4h zd~RZrfUe8Zqnp{{O0GU=+k;r7-zyx?6f$29uWyz~Y@hOGaECN~9iXLAsD$ClpY8|Q+RgF4=YDe{;ZlXp}GpJ8!GFl03fVM;Xpd-Lq)(kHo* zVn{-N(st5e(s|N7(kn8VtW9<%N0SBQ?c^r%Me<|vTM3GUv4oEVTVlOLjYPY|ki-i~ zyrh<-i{vWFJjqJQlad3H(^7aTZ7DY?rqnvA8mUuK!&0--6lpW*K@3{{8fLrtcZP`{)0Q)gslWG!XG zWpiX}WY5Ts&=8t7&4-psE2EvD-J!jgQ zfv(`8kfN|tp+n)3B1%zTF<3EM@qpqb#pxx~CH6~LONy7ASaM$pR?=4rQCg#PNU2YM zX;xW9*-JS?d9U(CNC15-G!b?ucG(RXVjF` zyw!wib!z=;^XfY4%he0iTh$+F5HuJX2^tj|-5N8Rs+s|s`I^m|_qFg^46P)sJzBk5 zbJ{xE5!zd{JG3Wt@^qSY9_o^Rb)9rq>(=Yu(!=O6^iuTp>)p_Y^{w=i^lS77 z3}6Fm1Fpe-gF!>Ip{*g$u-szvGhed;vo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*rZL#XM z`efGt8hef*7TYE4FA`SKIZrr)}TaS=$NhPT2isZ)Bfhf7E_* zsm@Z)(uSpD4(bj}hdPH5N4jI2<3Yy}Cp9OgQ@zs@XANhzbEETwi=Ioe%Q2T1uBNVh z*EZKVH#@hrZs*+*cQ5y1_kIt58IR>2)gF&M)jbnEn>}Z|ti0BEo%cq2`+4v59`;f8 zVfi%q%=p^)uJ!HlBl(5;Rr@{h*Z1f9cLl%!z5%-e9xl^b##`1A2m*ZqcLhEQ(g|7} z^kXn4I4HO#_-Tk)NPb9fC?zyD^l0dtFxRlMum{U^mkXD7hf9XXgg1qM&qcULlt+w2 znnbRRydI?(#f|EW#zu!nH%8B{@K~{X#dwTWOi|38l{zbPR$g7DxGHtknOMnKX6(s0 zbX-K-(YO!HKxRF2Hr^+GU;GTqjkSmMobAl6U{7%zIOUv)1c!w3gvmsQ#9fI~Nlrz=6$;c zwT88(J6|n-WB%w`m$h~4pmp)GHhtv0VYX+AHW4#TBo2$L_vbX<1pjhpz}3Y2Bx^Z`;1P{p|fi2b>SI)GF7O)V@E+J$SdytFFCXyT0-e z=1|t5rw!o^z27pvZE93(ENT3Bn0I*ONXU_%CYz?Fqe@51n&D<)^VG4JV>iBY|E{ye zsHLuz)>?8L92Xvc_I=#P6$aLXUfhJ&K90sIG1;B_I$?q=?jS$#=2v>A6$&Qc&jJ4r~i`Q zr7M>`FJJ6+={@`mOuh2W$p9Z`j`G8eBSf zcF1Yy!cF&oo0o6-+`4{y+3mqQ%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUum zrN{L@>;2q1Vm)$Z)P1z?N$8UYW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sj zp7DHsy69KwU-!MxeeuI@&cF4|M9z%A-Xx!Fz+V01zfm zE<(zG^>qH+!C6ST5`)3!BE49o0_`#v;kiQ=dupo1S=ylulP88&{Pnq@?S+(W5@@lrfH!?%`d)|y_Ce^iWQsjz z>@2$7DuidN002ovPDHLkV1gcN?3(}p diff --git a/src/main/resources/assets/galacticraft/textures/block/mars_tin_ore.png b/src/main/resources/assets/galacticraft/textures/block/mars_tin_ore.png index 2dd0229bf473ea4f194f9da354fafdfac86a9d0e..207f026d4e88ce5248dc6e6dbbfae95ee1a45478 100644 GIT binary patch delta 524 zcmV+n0`vWV1*HU#B!3BTNLh0L01FcU01FcV0GgZ_0005kNklN{8aL}(Xwdfm^3W~IuAgEnC30ee!h6qBNTo`SoFvX1!n9WLZG1RncRfNoLs6{f2 zA3(=H@4f!cJ!5ni?|c3}&vVYbI#<&{ltNPwz8d*O;q(8AIDbI`KfY9lAS0?)O(MHy zP016>yX}-xStfd%#rT4ByWI_Xa!hB&tZ%duF3MC=tvV{QwA%)L z^}!t{Ar8N*(%Eq}ao6m5gnY8-i(E?3jKV6z4NcXGoR;a_1j>FtzW?5(0{28@`{xlZ z3=9c~4SZJW;D1u8L0;~)KlkF%pWh^qR7IyqIzPiTJtE9DqDd!fTBO7b_^t(ZU#n{a zn@E|ghlT*m%ExbuAHI?vWUap9gX8q{-6yb#WD(!5;*Rs2B0jgNH&zp*A&m zP>ULfiAnmio9)ibu7|;;;2gj2y*JdRbA?2x=XZh)w+~E0As>}HPp`6)2f8~M^0->Ns zx@-VK%7!1>CVvy5!D+Pd@olvymuX8a-5lGjZItF;2F;+psW^?uP&Q+m%;KuzMgWA8 zoHD(A{B&0r**_E5)i(=$yZ01-{a9Z8R$M8p-oEYz(w8d1D8SC%d#sCOc%WNzdiU+@ zzkH|P+56<;$$GgSOX^)yohblczShW4Hj^FC18`@jy?>?;AT~-U34l}Pq?5W;aU(L= z+um-q#7f#_03&mY+b3*1oLcjuKi(ES)VV{b(4bh`7C(oTe^Z(NE8v4u@SM;dUhETNpTv~oLTkXmHUTYLr3i8D* z)$|BqZeSpV3Oxan8tGQfIU|=2cgAd;xmeN}o$SjVD6SMLcdvPZrdv4x5~o$)X!{u2 zE+M55vf@S^HUYrmY{vnPIU4E->IRW*GEczb>Myp;NSK#OM^*p;002ovPDHLkV1oKa BDlh;5 diff --git a/src/main/resources/assets/galacticraft/textures/block/meteoric_iron_block.png b/src/main/resources/assets/galacticraft/textures/block/meteoric_iron_block.png index cf5d7679b024df4bf663d423ef784848d0262e57..09ce42b3d85f857346dafdf86391aba0df260095 100644 GIT binary patch literal 7472 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 A=l}o! diff --git a/src/main/resources/assets/galacticraft/textures/block/meteoric_iron_decoration.png b/src/main/resources/assets/galacticraft/textures/block/meteoric_iron_decoration.png index e9d9a36497044e90d0a254b86142b7ac9d76f98a..1a5800d8e7f5f41cfdfcb71fe35ef7711cf0b7d7 100644 GIT binary patch delta 1448 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 delta 353 zcmV-n0iOQq4*3O;Ba>kS69Ooavvve^0e_Tc>f-9j9qM@Y9`@aAsZxG!ja{MC~M={CD0^Hp0?B2-!#vG4F004Ho9fp&01`uOp z-FpYH%+LFEd+)8ZQdgjjW`6+a zHU0y@^0R*o>P^LqPnX2os+dc*07iQbN?l8>5=<+NiXMBKuTdg5#(@NL_quZ{d8w;i z>I&p2F_+B2GA!+b0l+DB`}uLWBY)u%QGR`&-VRTEG1ItRNl9xudMgiZS0Is~1mnePMiL$X zEOQ+Z+p*C!ZV=~dl=v$R^Zfd*u(|qg6sr6H-_QMDwMkpt00000NkvXXu0mjfGx4Ic diff --git a/src/main/resources/assets/galacticraft/textures/block/moon_berry_bush_0.png b/src/main/resources/assets/galacticraft/textures/block/moon_berry_bush_0.png index 3b4c71bc494e2981d5fbcefcb2d0f79f7ead6514..a2a8be3607bc6bc3e1675f24e3be6a60971c3755 100644 GIT binary patch delta 236 zcmdnPG?i(BVLeN_qpu?a!^VE@KZ&di3=EtF9+AZi419+{nDKc2iWH!rWQl7;NpOBz zNqJ&XDnmhHW?qS2UTTSgiJpO;p|J^bbQMrhtEY=&h=u>#erv7<0|A%fN471!t{W~L z@>;WYPvR3+HZyr$9oL73vs2Q`c;$bdd1G3Cz}X>n&h-|)WS`5Mp6_xOUXUiTIjjC# z33Gz=xivXWfznq+7$ue%{j_#^t=q+Lz-6&owy;Qzz6hhqua`#JKJT|PIvB6&oRhlh k>;;yFWiRUkud0ga9ntj=`Tb&gH_$~4p00i_>zopr0LTegFaQ7m delta 276 zcmV+v0qg#i0=xo{F@N?+L_t(IjqQ=qYJ)Hsg};wv^RsnU{_;|u?O;D zd?2ri4`D$l#d;$`L?(G?4+g*wV+JjaC$+HWgO+CMmw#bJ%Y)hOSAPKXsxj52Bn$#<*sW&M zL5rGaM|#!ZhcTYi!VhDf-rj#vj0oDg5c5T3w)+*mYEWIr!}BA6Bbri-0&M?0I}!!~ zFCVX*Pgi=?kY^?9&CYsU$f!bF7ot}Up48&!=1~pn`S%g+*PTySs!NF{wWzwzfHc!# afNx|BYm;7|$_-lp0000pF z8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMF*7s+TY3Nh0M$uEK~y+TeUC8;LNO3T zJ#h|UBlyuqQ7aJ}!O9ydFY>}928(fL*PXZdt5V8T=lkQW-+vu%&5!ySEQd>725^18 zss}*tf2pofUeC}hjOq^;5KCMoh{l;AW&#_DB?D-^SsH}@{2XTb4uA-HT~7s~Pgn<# zjPSmOm*^8T1>_Y2=?&sh2S6{rn!X~9`kz!LUVQ~vtg2fhYVIf#auu7BvAYDiiK~gBgfFFZQG0wEJh1`cR-s;YK z_ntZT-18JbE|+6FuC8yAcC(=XDz$pj>$KE%jqAGXZ6B7()qh0t+q;&|udZ*B%{z$? z0E2#4$=|0lpHjJ+^g1oIn0O5O-484jz>nLz1RxFrPS4Mn&U^q?%jn&ij3i82e}1Vw zfL^Dij!*I!md(r4GmDAGcsSzV(8RE805WMuk8*l`rrGEbetxg3I1D(-XF1AeF%1)8 z_4YbJ#t|Ti{eMl7wf0aTqY@ca`h9Yk=Q> z|0S8Uqv=I)MB$>ybmp^KM)-3NCzaJq#Z=lzvh#Mcp?{({0^sd+LMH8SaA@MBvK*h} z@#h|K80;2Nb}SU7SODWNz%)$#T`E@-?E{HQt)9qyrm^;bX_%OX$)MlW?7n`xOvDH8 zMBH4dh$uh;EJ8m%+^e0BNt##7b&+A&_;XJ;5Bgp8_;9b^#QrwGw%-AyL2SJl{{dLD W79-KFr41zj0000SEPsy+{9y$E000SaNLh0L01mxQE&4T**Poen&%(XPa*PFI@00000NkvXXu0mjf@a&R; delta 573 zcmV-D0>b@-1KtFXEPsxC`%#ks00I?BL_t(IjeV1`Yg17a#(%fykS2MTgtvrJ1C4_q z2m#3;y4YF7shji(521D_z78!2zO5OOPQ~R7uWO+cihn}4hY)HJ3MG|isaYNg_cb+x z;B_ePlD5V(9qv6J=R4nb4orx45b7-VH@5Vox~ZEFt82a~4u5y|Ox_McJ^uIKuI(Vy zOWwX72TcOs8K=1LVv$C)sH4MeY7hEcB$tLsf1qwP@?1wu0r>07qF8>z&i)91UN`2r zb41b3Q;;?Q<&reua!KO3jxY=WytmWhAksSOjHuMA(2W5Ys)YCiigupWHD8xYlKAAO zVI#(AWnKCM#eYR|$xtPzG-YOXj-g5@NSmUar`L@sNE?5BSr`|3-I)GB@$Ji3$|Y$4 zPo6(D`A{Wzt|PLsV9dr=(-*yNj7n4P-+M)+R^|Nc6o7}1A2C1wj+K><97I|VRf501 zEX)WQ{r*6~p9KIGUgp^Oyv;>&$@$qSuNT`yoe_GNh#FLhVN>c!&Wl@ke=Vzx#%Q9n6{R`Y` z`a)V3m0FdV**TPM1(7^TTNetyL-A)t8&~qG7e1N?GSw06j}F) z(GEi04mLuat+&6irQN0X6Yt^HHF~ZiJl7FJm6*5S)209z_dkojqQm>fSk|(500000 LNkvXXu0mjf0H+zR diff --git a/src/main/resources/assets/galacticraft/textures/block/moon_berry_bush_3.png b/src/main/resources/assets/galacticraft/textures/block/moon_berry_bush_3.png index 1ad287398e9e823c858d928a35f30275b97a982a..6f44cb592f41f113737eab60ba7b7698de1011ef 100644 GIT binary patch delta 344 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 B9Jc@f delta 2932 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 delta 592 zcmV-W07nj5N^ZUMYN_($g0kB8_Alm@|K+mT9;Yg+8PbRURO@ECpq(#E$!sr43aGeK0 zB?dq+3<0=q+^GB9SCZ|JjZe`ffE``udY$E*L9+ZZ`+lzUf!w?HdTqak>Pp^mPJA`u}Vz6>VKw3wd!2}qhSDG9K`@? z?gaoL*SV>*NboF`7@g(7zv*@y4Gp}m%YLA>3^Y~Z2&O3a9wvRM*u7?J=tf@ zIF*gM-x%lLdIJERNo6G0jV_p;g?fV|M8ce8JAz$W9VDGeWi$-NQ9O>~-QuiX_0u#p zx=@L^xdQ+Y>}fCzdnYFriLRg3+>5qHZx_^Vab}SqS=L$3I#rxXKCiC-XFKl$wWm(w z%M{4_lu1=-FshBYy+|dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Ywa_lG! z{bv=k1oYyu95AM8c5s(J!Zz3qagwRJCT$1^z0Q%k&Hm@#YW~p&f;hwCgNx2teK>N& zq>EthXTRoi4=f+={=oGH^W_2ROghuK>G?XPYro68F{`344u3$V3pC8&)38t1K3e?n zXuECP;as0uOQ>}}qf6{G4eku;G-0|L70j9?I<7e#UO%F1e~hRj*km_gThwCKu|Wg` zvK1JLfdmzHC^~PjsgI01dYutBq+>6T$A}wQ0^&BHqNhlO0wHa<6A>H2;R_sg<6&=u zpq2}$D1s^jy?^rUFh2?WX4JY_%@Ke`4_B_#FT{oev@}wCtC#`;^}^8l6< zK{?VKG{9u@sUi#9+@ga3q;jJ3$uIDwp@s)bSZ#|s1EdgG2PELYdPEPvgh2sH>Nyf) zRs=uW$SXFHl7E85EXp6xK{=F!ghj-OmmpD+ zapc&EbI!X~bIFruFW!0YgO5H13LGT3;6n&8q==EUBqh4&V~8=Pq&5?qBuQ^4l}IUL zrp#Hg%RYx3bJ~Z-4y#($ayY8R@@_#ddjg&H16H90>}(_QbIqC*9=J|hh?MGP4fao-S7LSw_s24Kd9 zT*J&p)T$6vC#7Liz$ODuA>Ox;Q`Hblb$+Vc}P=XPU8Iz=|JEnI}o}oOoP7TGWluy!@nP^+B8Ml%ccMo-~eg!7N>f zmd-Lli_1}dErz)Ia)tJdFH3E`cPxYk0Fu$tvmCmCqdrcVbE2fuD zXkYX4MBIEL{Z*%#%X6w^9vw2j<#cI`Ff;7Y)?YlzuU~F+`|Yz?obLs5Cpf;9-P5f3 zkXW$5w-$NRe*+mgdD2t&EZ z`S$#BYa93BG)!lg2Ty{L5W;@ncU8H2M7X;oGdoX^oO5&K{(irq zJLkB&yQ`sQR!^+8`n!oD!ptOT?+peHBvH!ARYYW_stV{iCo>}gN=fvgIjX8knF#@Z z+04vLGn;c()o-bpMT8JXlNS9a%nYQN33@oN3tJ>fqKM4brL~s3Q;le>fatoea}KV2 zS^B@}TU&3i&2@K0#GI4XEwt<4T5B z8esmzSm@qcuh*;hR M07*qoM6N<$g6{U2a{vGU delta 366 zcmV-!0g?XQ4fh3*BNYLJX+uL$Nkc;*aB^>EX>4Tx04R~OMFe#Lf0SnG;{X5wE=fc| zR49>MlEH4nFbqSvh_2lxKR)cRZ(WgKRxJZNuvLoX5IBw~JyH7j{QmM^2M{w_tpKcW zj_B?*l4gYf<_H~@IRXFx8m&;bR!Ad&h?&u5Hb*SooiqUTT2tI=yKOhp>h)O@z@vM2 z=en(V1>o2ZydGsOe=GpHcL1%{lP|g7iKm_snRHPyMX2d))XdB*3rfahXlk9--P|1?~=zBYy-fdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y=(&Q!# z{Ld+J1SBB@$H6?Ra)TT{0vkMoKksg;VrC431rpsYc})H1?`Hne3xW^Eu>>Ezw|cqg zA|@RKdtdeH&pEJe+~)s!FL3O0Qb&bHVMaFYpQ$_h<@+8Vlq<^GjImfCWaX~ednAkD1XW_t+ zlkw!8XYalEo^we^oUnKi2@)j*3NEl_rGyY-ND(7xN^<7yKd=TDYdDzdcCuL0S&_cc*aCW;;m(;dh7Oc*=?ti#v2$hvIES6N z&Y6v%hrj|7OvP&5BqZQI$BWRAn@puEA1Gsvo%YVd9(`iBDw|dc=8G|@yqQ3^mW1Hnk zN$MjFXFlnj>8nDW%VqjX*Nn_nWu9See0;@adKh!n3M|R)ov(hbM*e;P2DX{?gyvvw z2K2To^Eld9ybE%kf!7<*^RUyw3SnSnCRp8uH+safVkOF#4$@KclI0mD|Bzm`_`<-wHDySW9_Pf-Fet z2C?G~j<-y!=eWSJH;_Hr|-+Adj&45jI{GLoLhSp)etAzQ;r?%;l zc*c<0OYXtK(>%}pkir^-2Q7K|HXkJ=e1BE~DVt9~-d5kz(jd%tQCRsL)9wNH1~j@@%2?Vl0U-i zC3Ab3taAAFrh_XX&0R3=m#KRU_%Q?9z}y*QcWq9AW7!K3JxWtFuUdJiDDUt!{lgQ@ zzc~G0h|5DFR*@kU0(hLUICTMkDv`~@<209&Mps0vIW7{?& zI?q!?GSkdd6~FTs;|~rtKt#uJKozzyQB|~J=6`ngYweTI=x+cE0000EX>4Tx04R~OaRhY%f0SnG;{X5w5J^Nq zR49>MQp<9~APn4Mf$Y>AI{np7^Wk=aWfG=`wG~oMLeJfmK7Ox10HOu}nnnNsY~N_m zGflaa#rCaQlc=FutJVMjM;-urGyy;<3!PDeXc{%WS~ArhPXH>zy4*RO^-+VY%iU8w zZ~lzLGfnxNun~wve+>+jvdky?YHiLJ2SX>pOHYwqInyg$k^>SEueYi)c%WxOs2-K5 zq1V(wI}D#wtwjyu7Bg($SgC1rmC2K~theeg*pCbP*Pbc?kngYTNoVZs^^7%*FO{g8 z6IB^l-!ldvt|^(!`NEwX`jFV;$wt+hkPQR0{mwX+U2vYDF7ylX%kf7^xOk2|RO0be iYy7GVepj61eg6QvP3};;<+LLJ0000 diff --git a/src/main/resources/assets/galacticraft/textures/block/moon_rock_brick.png b/src/main/resources/assets/galacticraft/textures/block/moon_rock_brick.png index 44ddcc8631d684b161c241ae0c7fed230420e72d..068c26b1ce5ed43cf91005b51751efd4de8f38d7 100644 GIT binary patch delta 1444 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/moon_tin_ore.png b/src/main/resources/assets/galacticraft/textures/block/moon_tin_ore.png index 73e43e81b5bbb11ed0716d23def995c712773a17..2b441aac8682568c0a557596ee4227f53b94ba2a 100644 GIT binary patch delta 681 zcmV;a0#^O?1i=N6B!3`dNK#Dz0D2_=0Dyx40Qvs_0D$QL0Cg|`0P0`>06Lfe02gnP zU&TfM000SaNLh0L01m7G01m7H+^AxM0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0006bNklzaMP#WoDan0j4ic@{TyemS(bfk6O|42ViY8Mwi6 zp%S4>)wQ~9%6~VnUuG&)aad$BO$6xC0isor$k4_7<>SrYpWmav$nIP(d5 zUFBzTi?8eIOi37S-d-c0KfH_F$?d22zBBcl3tk8WGvTRrtN{|021z7B;YOi*{p$J9 zFY5k|6BQioGGLlJZ+r)^B%FfP7Px$Hc3Q5R49>Ekil-mAPhvOiw#Md{r^gp`jHE10>)7flSOF`$PRCYu|K|lzM=|% zsM^e$^;+$@&TIiR>j0t(3mG);*z#_CQ6-l>C5X1 zYM$$SA3dtbST+SC-e~U|kE)N+44Yi`J3+^{k;#~{wH9McNk{Y{=A2g~E`)SzjRkkQ z9S4BVY07z{SFQSqUnq*Px#@kvBMR49>UQo*hRAqborg>)18|A!_o{lzuu2G&Cl1QC;r!b@xg2nDZI1DB4!xC z-j9rrh?@2BpwcLYsSC`Px(JA2$8Yu0JWc|*mz!P9w#gBvN}~a)b!JOjvH{d(-=fKG z=4$T4Y%4j;F0;Qh!)$v?T4DC2(lUniNlKSW?wA6yEvx==vXGAzSv`C5H5Yq7rWJX3 za!VP;4=B_?eP0umKa_%1+D9PE&B8L#96qz{SC5GF{zO{t;{}4l?0B2?UW)(#002ov JPDHLkV1m`XiTnTn diff --git a/src/main/resources/assets/galacticraft/textures/block/moon_turf_path_side.png b/src/main/resources/assets/galacticraft/textures/block/moon_turf_path_side.png deleted file mode 100644 index f1a6c1c1e93bfcc96cd391ec0a41764927869e11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2994 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 RuJ@VVD_U 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 JPDHLkV1iM{p49*V diff --git a/src/main/resources/assets/galacticraft/textures/block/netherite_rocket_launch_pad_side.png b/src/main/resources/assets/galacticraft/textures/block/netherite_rocket_launch_pad_side.png deleted file mode 100644 index a7d277e22fb43bbfa87bae9cd2abfd431385c5bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 345 zcmV-f0jBPx$6G=otR5*>5lF?3sFcgMAlhUogLYJ5=K85;pCdPME-@wI-O}Vg)LAP#+UJ%My z0NHoL38yFhehxQJ&o969V6FAFQmXU4xPN@;95%-IT5H|eFA9rze|_r{@T>-UVzXJ3 zB$~VB0x=DJBZ^e(U{N&Mr+vx#>zgbyh+R>VB-%G>va`C6T~Q+9sJhke4*;m?WN@fH z2M|YLV{mW|z(2>(GPqqVed98J&G~ouTzymq&K-g4^8+|{L`WF`?QCO_GN=rcQq1&x zP`{>*ad3__O&f#LzC=vJR?a@^xKaky768mPhiwkPM9R*=%MJN0Or&I{=l|-T$H>i3 r^B-L18;dtES=Q1U6TwX;gEfB&YZU#C-d@5c$ww~? zxH+=`JVzPDFTB40R0H%onrKoF5vlPg^{^eRFlvVmL_vP|mr*aFSF;)C5skYvSG0XU#FmU3vP= zl@fiG+9%1U5SmMtOllXqZgQ3>0Cd{{aaxpFdtpGgy|%?^QQZSyvJm`?@|MW~XuqZ= l$=j9;K>Ll^Hib<{(m!#wq?3l${E`3w002ovPDHLkV1fW;n-Bm1 delta 336 zcmV-W0k8i41^WfCwE=%INklh)VdccqdRJRA zC%MY+lZe=bbTCR%j-_KI4`gNEzKfG=f<1P~X6MLPODG*jpzs($5TJN}V}b9$!Ex%3 z8UWBA&rUHto3rR78{_Kw20D&-nDQ$Jtm6p1+xv$_>zY46M9nkGpo<`9Bim{{qlBN6 zTj*cZ|F3nw@Q+9>_;AAm4DXAz_V*TK@AHdG0Kn@yhpj((7RukcB%2`3rT~ET%QLFd ipehaW)v~o0M1*e-9;b|Z$A3Wp0000WFU8GbZ8()Nlj2>E@cM*00+TIL_t(o!@ZZgkKEN2 z$3OS+d+qFcY{$Ev#bE3N6D)xPCWR4*I+jwA8gGZ7+w(=;Uj!3U%gXr%!NAy8EnAq284V=^g8(*yve6aZCK6G9*aj|MpZ z!qXUINfJ%dSkhGEL%=i^DaAwkXUg(C1;7}G_x?cNOsc9m&^O!b+TU)WwN_MB!#~&V z5W<5KI_IZW%ZK($DG>t1big@}QW9$&09vb7q4xpr{eiyIC!dJ(q?F`&iuZvcJA~GX z5I`piDJ9l8v{ocZg7*$FYD00JQeiPlIZ2_B>btrOBbMFhcQG9gVDMZ6oe2^N@0xQ`RC7*BneVVoO9H5^yzos-N1WK zmSq&30%twl!(Fzwc2G(X@KeL1POTMsuIM18h`uWd@*>AMOZRXWA!5H)igV|l$9vCk zIONu?TNq>T-eZixT1%27EH5w9>-CUQvVQjtCNzW~fxviNp|nD2MF;^Y1wzOegwFct zLn%3YxJ&oY0%@9Y|9&5V;Hjsc=KA&P(_k}v{q@&8OfFu$$m;4UM~@!m#PZ|Z`u--) zI)oJDd5W>NMT@i3SSrhsBvH}NY0CV3hsmU(F$RF;<;S>l=MF_taPfD)=eg&e<5BYJ ztFQ9plTWg_xyfKK;F({aMJa_qfRt#h3BhT^WQBjK^boy=68w zHt2LZlx2x^H9tpAo;-=xn)UT{jvP5Ug+jo2Pog6ylvPc%OA4|q#TbjylF{xE=NykM zpI|&5lcWhD1Wuedv5$;I3%`d+S(a2)MP1hjAvk^dmyE|_%JBs69mZI)EQJ7a#&SYL zI4#W2^TG?~xp(g#QcAq@99mewd*3Q}|NZw{BW8xY`R1GL`0i-LXf&c}8WtB90XTQ= zH!Ssf)8G>=$4Dt9&PK?E08%UV_Vxhy^wUrI;)^d(T9aj2t6(%5A%tjQ`s3RePbN$z z6F&d^b3XXsgLZ9Gl{go5IU8A1dhbaRg_Htg8mdV}zu(9EI1ylFWreaVTLts;^St-o zd#&Pk-g$?;z2QEpZP=TP+xFbt99nCPafINf^d5;$&XSM!f!*Cbo_XdhRaNojmtVFU zeD&2=EG`{u+sn(#gb-TS#T+21h;G{2+Tz-ktL^*`Km3q1O*wPs%#=}QIz7@ki!lx% zz!*!KrUy+a-j+8*jYvAIZsD%XmDdDyswi(ptOk#DXl#Xqx6H z8@%<_TjXi9_sW$k{NwxEeEjjpeDu*rbUK}OjWdSx=U@EE`q5~FbFM{>_dY^7&kM|y z_mf2N*=K*H)9G;G!i9G6<;$0&^-VPN{{8#x?CiAT*REY_16L&pOG}Hq_S$Rh_}g#4 z&DPcyLV$CwO=s;>q?Z8G_{FDH1kO;5+qrg@Xa^ZIeYdj zMN#m>4?i#(jTmfgw#wGl)_!8Z4Eu`jw45ou(`R(cyEF;_GcvGhRQaSRYjVnoH})im6eq#{Ysjq!P=PaW0fq>Gizst zNGUPKAf%+xzZ>1*~;!ZVotpyhmNv^!t5YfBkiO zy?!6NYf02U_b8&A!1QFgJE6Q96HpE{;Dd5JKJp? zcl-AD99ukwR+v~jS{5ybW1RQcX}}s215Pv|KIx31 zX_~1nL7wMmDOG!td;L3)e44GS{{4UUG!sJ5G&Z_GYek-?{OZ)n|NG+jm$ zIY`-VRun~BngQ(WY$JpuNi>U#OYDtH`u#p35OY1Eoxi_o5<(ovvRR%{mL>lNEi!w* TpK%~100000NkvXXu0mjfiIxn4 literal 455 zcmV;&0XY7NP)Px$fk{L`R5*=ol09zYFc5{mHAG0E4NyswbncQ9WUsJMqZ{xLK82eEE`0#qKu7Q` zVnBtf`~X%cfY#bzv0FH#MLScC-n^0CdzxQQPk;VNIVR0gd>!@&0Q!CxFe%3oX02tr zZAqjY^ZEI~{(H$+mZbs9vJ`9W1qUGUjWLF<>%!pS;hxQA6Z+TJb(kro$nzZM93u}7 zm(Oc5nV_{sYkk2@hCa2{6h#5R%gZxLsW2;wg7x~OBC;^_=1JE#H$W45k1M6j;Jk*O^F05N zGXm)QJ_47^WsvPH&F6DwvsvJT4Ep}>#j^i$UDvEut4NK{1V9LJI;3;iUu_$(ueOcC z9abXcRb=6uXpAAt(h#CQqW%7WbMBN2bZe?^JG%hhNHvLWs=l}o%RY^oa zR7gwhm03$0Q547X0c^w-6SL1GE{#;P?=h3zWR#f17&jC}jDH{^qDUS@3@8QhEf1w% zrXQ`p$qYfI5Rg#%(8Fc8_uR9e^S`58D<;&HmcspwlnTA&sK-n?GBY!yC@d^2xZQ4# zcg5pb@%z0lrjQy6EEY|trDQU}MsS*EXJ>VVLfq%~MWc~YdF|H^Bcc}<7u|06 z_4T#W`hr@s*?&l-R%7v)Lp0fJHpK&n&CLqZBO@aYhvW40^y%s8_V!kmWuwsuA1AA+ zBpwt6JY;hj41e#@&-bJS=K{Cu%kJUct%J2y862jVu9 zk?exW;jk+qaejV&zQ4cU-Q7*4QrT?w@bEAk4x@8$aDPCA=p&;k5E4ZWIKEE%WFc1tWl6^Xz#yp*Y z&#fe-w0|5Jn0O+V&*wHaWbQCVr+0RC$cH0qeO)e>ONnHhDrt=ih602rNvm|QR>VNfmr_*_Oc%ajEyZuX#;13B8GfHU0ree5f4m(*=!aBA(>2~Q!14*nGAs;eRp?vetwROrtnET zkn8pJH9#x(s8XqTJRTrH>a-QlluH|pJ|6b>_X#}|3I&5fHibfg=8TSxlH2g`K$WmZ zJAb#gw?QV*Q=g0hc%Yz2pPZagHU{38 zmX>%@K^(6J8`?)aJRb}><BjE6vzKI7D;8%vrV9xn!&*)5a?t>XzIwh=^WSp- zv)L_mO|#71IF4^_#wF7%R|?;%W*I=`<>I&K=bRdo$#(#iG5}o9lN%T%0M%;w^bYB&wSO9*s6it_2=-89Yv1>kQq=BtyWMUVfKsa0>pke9-|quxwObU)=xRhG zx)hNo9CxKs;lb;1lJkS-c@znScX)W{I8MsLZ1!t1S?nw8`u+at=_$LSd;l1Rk;;KA zCgU-+C*v_M!!l{pe8C-E9YxXV>Ix;zYnmiUiL#-U_J4gJK(pB(i}m$aY|2|%*xh|w zGk);IYc+!!)oPgsCzD%RqQNB!TU%Rth)I%gewmR)(i+Ei)udOa!|`i`zfVHhf<^dirCAf0X7^?IGA z$RP0-9)EPn;lcB~3=h;zd0-w~*A2sv=4KwCK?1-qjHL&zZJmevu`PL^l@>y5Zq{+f z1I_Xv52TCZn0es+dImhS+a2Hcb9q=4U*>+GbAK@S$|KY16j%dL78wn z4T)%MwObt0@$qpKMJW%&!-o@JPmV*%2y*d>F*^Lod}-n% pd7zMcu-2wmHsby_ybJf#J%}kx>EoE002ovPDHLkV1iEgrDOmA diff --git a/src/main/resources/assets/galacticraft/textures/block/oxygen_collector.png.mcmeta b/src/main/resources/assets/galacticraft/textures/block/oxygen_collector.png.mcmeta index 01955dc7e..24f9c2fae 100644 --- a/src/main/resources/assets/galacticraft/textures/block/oxygen_collector.png.mcmeta +++ b/src/main/resources/assets/galacticraft/textures/block/oxygen_collector.png.mcmeta @@ -1,5 +1,5 @@ { "animation": { - "frametime": 0.5 + "frametime": 1 } } diff --git a/src/main/resources/assets/galacticraft/textures/block/oxygen_compressor.png b/src/main/resources/assets/galacticraft/textures/block/oxygen_compressor.png index 3e381e67d7a9f350fb77a127c0c73161f1a98f5e..a13293a864c7933a8735d7c992603233f723714d 100644 GIT binary patch delta 649 zcmV;40(SlT2CoRPvjKksW=TXrR4C6a%)xFORTKu`|D1bg?$~2zoDi2rg`lRQMJZ*~ zMHb}+*dejzJ&*&0sKOnHM#{m`Rd&??kNGZhcvfZdP^XGBq8BA%p-B5uAT>M9f5a5t3*UYrAGz zjy-!H@=)#Vujsa(pTqD~ceZ)onAzbMhtJ)gFg!`$T7x8sm^~TtJU=+tpL74UKE0^* z#nnH*{q*a>)#AtBe|h%!yOFL3sXw}X=Ny5&niBD1*{_?^B=O0q|K{Yu{LY~geSh}D z`903f z*c;II-L%R@5F3RMNzOZ3}zUjG~0g;AlUz}7gYkqICR}kwE)s? zwCNP0U#fbDG z4fPPO9^79KDebDoZrRRev$FVCQa!{E4^K9#N<>~&%5w7Ay;(|c@(`xe>E-Jc5w7Xo zz47M{ABBH){VEiJKy7QP<_%_M-uo=iyz`RM(b3)d{V{q9A;doJRaFr}jFFhxv4S-GvjKkrvPnciR49>UQ9Vx^K@=R|%pUK86nq;yMRZ27CC5@A0-^NK zz#pKb=J%vdnKDgMq)iirhz3zaRw8hO2w!*FGY0QI&RGeiShJkq6}$6Bt9fr`CpI?L zi6RjS002hC2mrHjEm7oKt#zLF1EMI)Qk1GFMh=9b&|3S}Rp5WFTCE<-Dgdp=+TULN zaNzY$n^5ost_R?+R&&PfmW#`pYW>w}JYi&^! z!QFo5`|h(4n=5ZlL@0j0?6uoX;Ola4v3t<&0=2mvH*l)eYF%FsPt!FaW`&qNI-aP@ z%lCs%dmoO7X8wO(tUCVk>S;WeX>BIGo9Ic?0cJB@7rzz`TtuFCH3@)-%9MLIT^Byw za(ed@jP4DGXKXSNinsgAkNNvpnK`}Kr>N%t&TE(XFcbg+=9}^AcN*^XzjX9~2T-Y0 z#w*RgID7z{na6xUG{ekN#zbcTh++V{&-Y*eK*|_6biqq7v$ZzxdQwWiPxEI3080ZP zNfH1`sqqA@H2|e@AotGPsZ87v2%eYy`-f)_1 z0w6@_8?UwUUa~x=C<_11=INps3`gmrD5`pqm4nq$nib2!m1Td^Fx4K*O42Ng+M#+d z-t-M09UXu9^7-l0XMt^vHb!MxjmHmvPN%aZDT=bHocA0AfiX%w*xF#hruN-V_v-3O z8+~%}X)>97{q{9UlIzUwm)4xcaikRy3tMY{{P@ny!@*#EZEbgNXF8qsdcC@? zg>O`F(8wPjCJ@nDA3i>e<94^(ajtsu_=(aKSZl3CjD2;gc-t5wB7{UpSXJfP z>iWUKq1Jjfn?+GPc{Wi>v1e2vLJX>?U5yB&5MLY}=7rnZ+(v@^NBgZ-czSkvb8~&K zf4?XT5I{lz6yfDEC-hnby!W@af5LWnesL}$Raq%gX*z!wVE`bdl_KvwGZTUK-V-S= zb=2tvEm#?>{Jxxj{CEQYHyHM}wzd&~w9!PArfHt#NwQ$((Z=TUFuYq|y*|D(A!uPB zM5QQ>V&;9S+zAPQaOtRYgG hJ-4iFhxeUp{sEbBScGJV)F=P|002ovPDHLkV1lDrHl6?g delta 429 zcmV;e0aE_12-OC#vjKkrj7da6R49>MQaew>Kn(ssIVCuVR%uiiP$dQ)op=lkKqo-3 z6p8*3#BXEgv9JLvG*jtRlthW-I}(BfgUb=s!=3H(N0LExB ziF|7^bCRSEk^k{AK~0LH6vgvgX11n?BUih<+zJC`Z6C^_l)``Q_OdjInKS48y0VXPe*ccBdUITw@Fo0U#n{j16rx8nciDYamFIahj5?jp$?1tL7ss&x`6n%q zk~kfWMq$`8MhkyEV?F^8EeJ73=t`(0_jGze-y8$=MHreh>h-xIDhNJVtF<91E^4H)(p{`~4vJd3c$8eT%aw%Kx91 z;V|nw&wr{3fJd#N_5R{goeY4vqoc$6dU=0qi`o`i$+9KPNs@HNC5lo?l&Y%it5WJ0 X%x2prl5HN-00000NkvXXu0mjft3=9o diff --git a/src/main/resources/assets/galacticraft/textures/block/oxygen_decompressor.png b/src/main/resources/assets/galacticraft/textures/block/oxygen_decompressor.png index f196edbecd75f9c4b53e0527ccc47fc783c234d8..24e89b470918ef19475b0271a773a8162f377587 100644 GIT binary patch delta 717 zcmV;;0y6!F2lEK9vjKkss!2paR5;5u(EVy0RTzNr=Y7waGdsIGlkbmOAxfkbglYv- z5p2Ob@IDK@2%!}953z_vNLvFfuEe5d~G3k1c))BPRS{g zQl=aPQZiy(6G90uy+%c;s)~P{GbtNJK_88F+7f&q zl!5ttMpXuUjFB=_?C$IlLSWT(I8{O!_~Yy)l*Z?~U*Mdwv%O195z9v3_aGU~DPuXa zTCHfOEz`Con)b$!ETQ=?{vs`A(Cnj-At{08&Y$6Q}uGu*2fw)+&` zbNZ&C2#5G$1Jh4gu9g^vW&;3G4=74vG#+4<@m7Esb<<$t5K+7{>bfGQ%zC{>ohr^b zFa;5OaEwP4%VkHOdMv_lI0QVZLfs4rp};VlDvE%rf_Q(x7>@=N!65<&WVr=)+F=Nz zQHj`XEGnpTO3n#U!#l_JR*fYigup>N<9M>7swz@+l)*D73;v&a@9{YqW?;z}RzkK! zdo$;U?;r5w@wWi{^6T$B|G6cEjB_xXttra^0%*33h;aPLznD$9n!MrY?hGumBf{SP zE{pjMkH3E_iTxRu7q2 delta 479 zcmV<50U-YK2!{u-vjKkrzDYzuR5*=wl22&o728Lk?K&>;aO#pbi;m7Yc1Q9eiq}0(kqfBoZhJmq+40&L^UbEe9$vGd{ zFffiIee`280@A$Ebsg?J8XoF{p0Z&WsIws=G;av*s4BR>Fh1!2#tyhU5(Etrn5F~W zc?bHs1YVU8K!0LDn>D7XkkX3xAJ;t9JkRX+dp4WRGyd)J5|JJ=L*2p5aGdRS`^>oC z?*U%$=#ADIA|PglNMt&UI8DdrDP^M0;4x69LYD-IO0&kI>sSsKlv4QzZj?4-Zc|Jo00000NkvXX Hu0mjf0O|J> delta 397 zcmV;80doGH1f~O!BYyw^b5ch_0Itp)=>Px$U`a$lR5*>5lkIAQFcgNL7M)#EhZb}& z3Zs7pGT3cwx4k>qMU;YCKbUFOlEL=Fn#Qg$`u;I_(3AJP$4uVdUVns;1harahy4Kn zt#_6QAxBIpMOD>!LP&}t=Un?^5rEk&Kq)n1gS=t!bYBz4{eLOZT>u2MpTh?Sn&#wY zTN^fAgfZq+AdV&PAGQeqvMi%43%1(|khZ|fY6UU3u$LD-@41MZWb6;wj`d<#m5QPwcCd)Ewd$n2tkR&Ndl3FgMWV>El*PdIg zEDOrAu=^xQ?SJ0oH|Gwt)&R$}PfC*XB7X>-47C0Nuyej<3cl};L%e1RgQh~<_BLzt zC+(u>`@S@V{r)ii6Z_s;pe35*L<>OYJTE0I0TfM>^Nkrf@RU*jY`Vz8+MI4CxqGoB r=kltm{sY^#9R)SWnDObp@AC_Y?6Hq~8AEIU0000^@R5;6hl1*l_|Mv}>cbBLcw>RHV zfSe681>oVw0|4vI2Gs$8yW77wygbrc=j!?=o}XX1yZIAQp(I~oCtT^9rw=R@XUG~ zDYfF=@dz~M#KnJy3jkD?8nu?!v-L(0SXv%G9(Saa$U_DMt+jGGot8c+0nmHLQliz0 z_l}5SX0O#!GAtP?f}Tz%RFwHN6X5`i~Zwh~U@3=cj)esR>6_vNRDQ8-1 zxcC3W2QV|jeeszp<2cfLXP%FXL5tZ?faVJ66`K1WB2ptr zvjFPIi*^$*IBxz5eVCd5XNH&K@$*+i({?Qhx8Vjrj3IL(y5hX|ICr5D(VWj;%rV@P z0CZi8_rBs1nsnIh-q>vWd-jl3lvRx}h-hLASnC+aaZ0e+_Bnqr1;qGMRTEi1@J;Cx zz*@`cbb62qu;0I9t*y9K@;jGZLMeq(ir2o+Tz7B!DiP0umuyrDLy!O0^scBse&>%_aI67uLmW(4~Xczl}f3}!hD=1La6V`w~fd; zTSym&j{`u}6Yoa@-UGPYz(-Sv~nqBVA~;caS>85Q4qFXg-Mzx72*r`miF6%+^>Xl|G} zK@|;(h!R6UR55eFND*R6iMMaR88({>u5WJm;`M9x_j_{5v^sx+B;LIFio3f#!_c$) z`-;_z3p50-uRfpvDFs4M0B--e1z@>aq1pj(bNv^`$2)3mTyDSQ;o*^+t3LsVDR!(@ zFE}1gY`2$u{O~)UB&w(g8K*VlboxlYd`Sp_u3wU;1F`Em?(g?>i;g4-fc1Jq&J&A% zz|Al-%o@kz1IvHDCzpaX!`#u7BI{Rc090oirR1l#wu<9~IDdXR?TImxx&#PXN?{zw z*-wlBwAKhQQcJ;FLqrK7JXwn|5Mn?@&~Y45QKoUi-2mwO0c#WCTpRE-0|+q^HGn{@ zwQ@W@o{0#Ft&;1a>>i}E4GV{6eFcp4u=C8lpze5JBSd15*M9t zdwW$?CAMaOlk)-hb6~0j-mqJf4IZ~y=R07*qoM6N<$f&!5n A-T(jq delta 349 zcmV-j0iynm2!;l*vjKkrJxN4CR5*=&lg&=UFc5@4O01;oTxhFuMWPRaxX|~12P#oH zr4o)w$e|pFw{{ykCu_VvGwb!;cKdb`v6NLwMBnuQgwQG{Vl&QrPtzPIL@fLL2bbu^ zA^=rY;=Rwfh$0@=>qnNW#aO*n6=~PHt`V_>(BfRfFbwAc%hi8E6JtUM-&r@2`4wNJ zJ^`F_>~^~=sQ{bJGtRk;n?=8uvQrpiFvjq(SSVMGL!U+BR`QgMOo501WKTJTy0+>+ zzKAL)tCG65lZn>me5zsw5JCW;afh1<(qx@Ml=R;WQh47YVs$HxG3Px9q1B7_>6QEW z-|$Y=oF6UmuCY}Sg~(hj#EX~p7r;1^Ub}xD&KA3_&o?pk7z5LUv(kJ!3-3Ju&NWI_ v7tcBMiL^k|Tz5Ghk9tlQX&8nq&KScl{c55RoK08D00000NkvXXu0mjfh8(0o diff --git a/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_2.png b/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_2.png index 1c679fdf72d17408e0bcb9f53efb5c4ec0faca63..7a74da1242561774a71cb80adf6aab1622657774 100644 GIT binary patch delta 611 zcmV-p0-XJd28sx0?!GgckrKtSia=6R4K#+GbJbAP&7jBr?SHg|Emy3Th_%lAKg7mKbt))u3vpn$2-!f_8w z6*WafNoI&D?g2Pmg4A^#@7{eoZZ;QO-`w!!>(}facI1+2^#p&?@%HT-?(cVuQN{U?W~dunZ5ZolI3@rj$OKLAKw>RGK` za5x;-C15ClXuW4R5Wv50!t^E4)hZ(_)a3{h^rpho3wAPrW<2=yy>?-UJjR+7C z@c+1LPHm2=l0=nKGX&&w2EYCC6aS~2^W08AQZrPHsZ1bndHDq%jgkw;X<~D+VH^h{ z;P&>GsbpJ*b0Z!>igP%EP;%kaCYH-3FW0ZwE_%9@D7CWR?@?1m8}XS7GbJs0;qLCL xs!D3jfgtBS5$DcTL7=uahmFi9tgz^N{sG`lF`_kb5R3o-002ovPDHLkV1f^CDyskh delta 353 zcmV-n0iOPf2#N-j>`0N;B6oa-W|l+HM7Ep2RLzt zVIxsNDNE{FFD7c8^Qnq8fO8Ij)|~GuNRz`1iXbVSLHGQ|L-p_dDl1lH$*=cV`w=hF zT8j{3vM^s~3h!C-0jIHrQdP7NKD_R}0mhm5v17;Ad9v8|KEK4&V+c$WrtbN57S>t- zjA(W z7vwX#?hkd-b%UU=-P*M!YcwC!EZfSaXu0NvyO=FlT0Qdjg1F&4JP;CLYz4?pb@IWb*tL-;DJsr5c{u6-Iq?Xm{ zf?+ta-CptK^B??IqKb+z6V&P)k6-APuP`&(Zpl3DNp0Km__(88v^3HHuwHMN=ZQtv z6YjV>?v-J9V%dLn%sJ!L@d&hO66@D%08~#la-N@isf8f0bP_)vccheP+6E9b=gc^c zCqF3xP;13fqU4O%iil!n&(=~hEEy_-j^l`mGK~`v4nWuSc%86wY{2sjz)~Wqfj}yy zFbs$D$r%8Tz*3K@65&JyrIZ)A2#DYwB!E&XB7(?i+joCI{ml05w^YxJvr{6V6n^{V z<5?o8wc_q1RYOEjRrD;dytp9Rj$r^d$R12CFBZ%QcOsl*s&rjPt(9py0&p0P49$W4 zFcJZ#g2@YmQk_yARV9fkxy%qSpBeoA>nHxN=6OD)6Ohyl6=TX12wYu#g-0dNnd3CE zx!lnA9T8!0cX!8>XS#DD9zhDP&t&tQ8SBJyx#ZRQHQPl?lM=ZU_WM0*N^dR%mU`r!ESB5CQOwn5R`GC{dLS(5e#1HSAFMx3-y;lD`omAL$eSV1%B1;WS1^4Rtbr#-x z0Gw-;tS0N6`-wC`+dft~pU?VE4`~?k;TmK31=D<~*PZYxKmY&$07*qoM6N<$f^OWV A-T(jq diff --git a/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_4.png b/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_4.png index 55f5cdbaca0404391eda8421772acae0c82f3faf..2f5ff13870e8a628c03759f44875da5adf8cd240 100644 GIT binary patch delta 620 zcmV-y0+aoP29pS|vjKksN=ZaPR5;6hl1*+KM-YX-s_GfekTxw!u@ehMkN`%`l9S{J zxj?RwZ4Q)`*EWnmk|RYTMb7kZWkH7CW$VM zQ$ksoB)4NN<~BvId0o*HZ0d`_J5$He?}U_Z^6D%Byz_!YqnZw>cGFja!^696S= zYR*hC;SQ!kr+zjlwNYwARSBX>E(sjcDT5Dx{Ko$&rF3k^A*dNDM$8ceE-zoxypmI9 zijmF5hH+#ZaEJT*dty!ur$(AP!CO5in^R`4k>zs9%k?X+7Cl`E-vv&-A%a()n%kV+y(7yf*GugQwL?v&f z5MnlQInFem^ygGa-xjH!c=27|0ATVYaQEMKmN*O{-^5g7e3&N8-Sh1%oO1vGV=RMe uG0v@@hznS|?$UJ~pVLJe$J|^Y1pWbXx2&B&i_%K~0000(Aab%~YxnqJjcJ1Jw;PC#a%9 z5m90Yh$?0d7)^xOG!5_G{WNU1=UiQ1^X=QW9PSUKoTz06X}Ev5_@2AF1H;gB^Uo#g zvvV{At}Z{K08JAJK>@h^dJDj6y+*YK;QHzd(h zvET3b^zm>0i>RU^B%E4}Y5GLJdPN9;*oSEnO#1kU` z)gg8R)dfe<*b>|B87;;@hyfKL&hw0lGEEbHwg%wG-+t%K#Sh?_IT^(rsg0hp3QE{IL>IScri*YFLDtO!OVY&0Hst!1d)@2DJ^iE80Q%W z%wS#?UgFeRF*BlSKtxbg^r@g!I4*^UsStx=4%z&9J%oUp;cmpBO5gX?T3MFqB(Y?q z7D~ya~?Q3ujG`O zmWA#4mSJS*afh3m8Hry7%+Db zAp|9Mt#EsLSyUy~YJii{5r0AssvuD6=~9ZEzOX{qw)_kBbT__X*!iab00002TQJL`t;LgzCE<0Pov~iIf@UoTIKU6e1<(^C$P! zjZFZI(KzQaEL0I5w%Zrho7LF8jVjWqRaGHU;(d#?HN!AW4c32~RU`(2_t$Ki$npU% zQl9|UT280agH(Xs?iFiohAo2Md)a9zrBF)oyjn%fjG-?A@E>{3Mzrt;3P8Nd?rk3r z+{{F%s)pmok)S$LppB-g%2^d!>+C&Mu>kPi15n$`Y=b#+%phDzn!(R?m?b;cB2vb! zR7y=2?yobgzRyE= zgCe5D5D-<&957OZm{Q{1yC0X^?FH92H+=Wz4TpyVxnx?MKoWnKmv6bhKd@Z(-2QvT z`s@M?f$OV}C_qYq5EOvBFLwZ})@xKd0B){7Gd$f>Yh$0Zm#|TAg0){UY{`x zBm4c1Paps0YeW?lA>*`WjN>Qz)j1&qx_(8TkHoI)cz8I_Ejp4U05+Q~InONmC2oe9 zVb&OiM^=4LE(L#UhPe|{ifmqOn5GHU6NYtby7dlG0fzu25r*L}#__6{J3saj}tyY|GUa?Id|aB@E4&&WX)1Zq2dN)gN*RakT#{{dw)MPtaDvnc=o N002ovPDHLkV1lPYBFz8* delta 352 zcmV-m0iXVw2#E%;vjKkrKuJVFR5*=&Q$cQnFc6#~R))1NB~ki-=F(sEmi+$@MQUWH zkzyPus@g;FViVLoEo0B_&a8Pl9uL3F8mdx=G4ulfAcRgZW}RW)dpLJS$*gfYePS8? zR0II3O2K=dVKK^>>~=5MY@4ZiCsU+djWJ->2%&?u4&yk^1vY=%Mu?FR!Y%8@TtDDt zsuKXLwP@S+VN?Lv?_Xi9&9EZsU5=dw5rK&C+%$q!lj$NMCHHR!$yHV3TfRQPTxSxB zyEdLK&#PPuW3-UtMvA$Uf-!oPs8n7!nkfZB2mkHc+|CHDQ0zr<8yyqFT^?)mF1z4rhB yYn_1AVx4P0krZ(5vCHLhk(`JmAIIEWBEla7E2*1xoC$IO0000xp}%vir;8BmxAh#IsOy=NSEEQS-h zzN1tj*IJpT>By7wF<|qW^Ve6*^Gux^tvO-#f|hflc|t|dX_`<`=4mFv0qE2TYm`!O zYlIndDK7yjXR;;`$gMRFhbI7PtpGd~gQ+nV!{WGP9-n{ZA|Qf$kO5jVLKR)R!xWqs){}bBvD+1=7Cis;&}H3Atl0{2q!01hGD?WnCFq> zM-{P#Tf;o)lCsdx2+f>kj;fMHmD&mflxGLO{`@2VH%GaK1Y}JKmBd_U5V*X&!o#Sg zGR`v>=NDxxmje-Se}B(h3&V3;9zhPb7qhigCYxEUR-Bxkv03zVIa6C>zu%)tS*9f( z0V1TNM2yvY7)xDf?$}kW@jS*|8}_@Ca04(f9lVerQQADc4(B00000NkvXX Hu0mjfyR9UH delta 351 zcmV-l0igbr2#5x-vjKkrKS@MER5*=&lfiDnFc3svX)K3LE(JudmCA=yy_Em|2at*! zK&oRBMOAwscI+f#Pu6B^9SOeRurI(;*a zrf&j}=NfBmlJk-I$9DV5db8@g*FihDEC8Hy095AuP(ch1Gw_n)8T{V5S+KP=B1O1L zrPN?yyv{hetc>&&dR02ot+ xWIkHw+)or5RMnK_dcB6XQo~VoT{>K)6#t{rsCz-mei;A&002ovPDHLkV1jb)rkel& diff --git a/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_8.png b/src/main/resources/assets/galacticraft/textures/block/oxygen_storage_module_8.png index 64e3b7a481bc1306b3ffe28a5e79279038f3b9d5..1a8fbf402012a90b62e540422a83fd8c034bc7cd 100644 GIT binary patch delta 618 zcmV-w0+s!S29XG`vjKksNJ&INR5;6hl0kADMG!?_W>xp}%viEU6B0&Y0*G*M9ge~Y zyz)Uh7w_Ocpa(toZB9AOGb~dH2KjvFN(7Su8~b1(GH#9QPop zqDc`^a!QCQ?g2PmhTL@>Z{L2m+-%OcxxMA9%S(2TJ4!8Bn?Qd$uCBi3;bF&eIdJ#a zHS1SrXiD5%e?$SgE|HP~aR2u`0IT&H)gFM`n?HGedZ0DqeEWvapP#tB{sVyA<(~EW z70=Hj+wD1@KK{-@$LSW{M<0ppI2`MG|VMUqu#OLc$qqCCqROYAIjPa!xc)s0cbu6DrC)%|ti=)t%CuYJmrc zfb*i1Gg%V|P4I2y7ToD8hFnh5O1Vn#u4>CY&hKL}d$C2QvG{&hh zbcyCcwf|-a%nWxYt0qJQRYi{mDhjFuFjgZFROAIACBmHuCnr^gVZh9o=aECAide&~ zVIFiz={3F>G;^9cs!A4BYAX;>jyL%2mk<1(N-4M*5|A||R1$NYLE!xS0uQ5>$~ez# z&NeKU0}*0ycX!8J3&XK3k08hKK?I?e%49RE)rynT*K8L(UCz|j*zfmfQkH3n$D!Ml zl)UJL`}^yrD)~@VP|BV-A}3W4Xm)5y5j+A_SoA&r007oKhZCPr@Bjb+07*qoM6N<$ Ef)AG<^Z)<= delta 349 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/poisonous_cavernous_vine.png.mcmeta b/src/main/resources/assets/galacticraft/textures/block/poisonous_cavernous_vine.png.mcmeta deleted file mode 100644 index 60b5d0a60..000000000 --- a/src/main/resources/assets/galacticraft/textures/block/poisonous_cavernous_vine.png.mcmeta +++ /dev/null @@ -1,6 +0,0 @@ -{ - "animation": { - "frametime": 10, - "interpolate":true - } -} diff --git a/src/main/resources/assets/galacticraft/textures/block/pumice.png b/src/main/resources/assets/galacticraft/textures/block/pumice.png index 03cd825bc03fab5d99fd88644987f19e068b81ed..9a077b0ba62fd739ece5bb765a0c8640a40fdc6c 100644 GIT binary patch delta 3402 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 delta 3020 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 b{sW?4$U>C5;nJVj00000NkvXXu0mjfU+S+a delta 376 zcmV-;0f+vi1D^wsFnV4e5Jf-8mN#A+w639ABvzC;0S(+CM?k4^ zfm|XtNkNqpq>NHP71O|Ky-*mlD=R34Vd5mpG@h|%{=6BvGoR0-OhqC90BD;QfOE$X zN|{n}*Ql@3OLu5_U1}8~`wU)wQEF8UFFBTgYV*rckB!9d3DHX4a>RF6V%Z(R6*#VWsssZVmbjg0)o9D{B<|F6acY#tF z32Uum?Ug$%`*E4NYO&Cc1|X`KdoUOPu-0BP>zCa*q1&Arw4fZGFC~p=eo`2YPTJ4nH_LEva?N)Trd)@ z$PVDeBN5qmU~Y%pNJR0a+2Q|4z*1YnN|L9jG%QQ&jc_t`9NVhbAx%F%A*xDMt)Igh zTNe<2=5yPz{kI_P@ciOGK0LuQ#HqC0OP4maKG^Ru$o?}T_aiT_ZsGzHEd!BX0ymST T#Hjs!00000NkvXXu0mjf_!OoD delta 435 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 tvbNd>uu_IZ!002ovPDHLkV1h;nBIp1B diff --git a/src/main/resources/assets/galacticraft/textures/block/scorched_venus_rock.png b/src/main/resources/assets/galacticraft/textures/block/scorched_venus_rock.png index 2b415ae0daa993714c1168ac8496596db851b3c8..d536db54595546743f6af3f02f6f4344d5067760 100644 GIT binary patch literal 18230 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 delta 3053 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 LNkvXXu0mjfc@Jwx literal 3047 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/silicon_block.png b/src/main/resources/assets/galacticraft/textures/block/silicon_block.png index 96d80f3488abb1c5bd0de02529f87175049d1e1c..a7f3fdacd9d1e4da86cbcbfe2780978e188ce737 100644 GIT binary patch literal 1624 zcmV-e2B-OnP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGxhX4Q_hXIe}@nrx21?@>hK~zXfUDjDw zRYwp7;PX>dMgbKgB7@8zC@M$*A%Kd45C#=cRB&XTF##4n0Y5e0xy8CMsfS*D`*iPJ zyQ;eSCVynCr>E!s{re3K4ULVBb#-+nt*xzh@7^`C2M-?D@bu}^nVFe|g@q3vK1@$f zTdb+6sjsiMZD?rd_l!M!_|VF&Teq%Wy?XKD#S0fMB;DQJeSLkt-Me?Msi_I{?c2AV zY;JCDX=%B0=Z*<$Z*TAH>>L;vn3$M&_wF46D>rZ6ymaYOQBhIsG`6+11#zGo6TiE< zx)4wh`>Lv{%FD~qP!pPhgA|~ojE#+rj*j;C_usg2BR4k}kg=?+tfHc#va(VD;QmVh zm+z!8V*R88fdiQAuC1-58jW>^#@;{>CdRuu(G{u4jM0V072tuj&w!tJn9aZ#T= zd-nYKbMbuf;)R^akPR%Y+@>bmguynEFgJ=hZ;Xk6Fwu`I6DD>ND9qr1Ipy&K5z);=jZh+u8_-80?<+~`q}t|SroUy!9mT3f;Vs8 zpb4@sU%o6YEv>Gu8b5#jjN2ZvaO;DMi;I|WKu4TJwX**aSl0x_C;a;O@uS1$yyhbX zYiny88yhPtE2MxXPTcH4`ThHME5b!ql9tjh&_Nb+Uf9Q@hzWm<$f&^qcXM-dYio;? z<>h5NtsCjXy1u@yv13gFD@;Dz7eO;o2?*@A)d48k(Mdqm@N{QqXM1~lcX!ul9X)S| z`|;z);o%|Y{zKrJs3^I0CzPEVF8UxC8pnczabM8Ho$r5T4C4O&K9xS%e0+R-a&mHd zdU{SEEa7;dbKeUgh_c5EvF4y?n4k#`(8A4MaDQhE&B4KeZH%U$KYyN`ot+a%sk&6J z2wYUvt>uZ}+qZA2=2vhy1}+Sfbx~pvK?jG(?CtH@Y&<$TN(m$x0R<8uM0$Xps%a}B zc|#x*;G{Idg$zNAf<_8Kz6uczu`)u(iY6rxA5|X&+Oqzm?YLsDzQT_}f)X_oX6~?& zMZ_3B^avO!_|6F^fX?JVU(z7m00eGn+yjA@x?n*Q8KDgJzT;rr_jEuHCY@csl?EKzR#X%YXPo3Xh|u9Df)E$> zD@WoP5*!Ll1V@N)VDgfvS5Jauh?Ta5!@W~cjxp$Q?@VY4v!0zGU?~CLmA?W-;QjFi zcuzokNzhnSxZ1scnC_i!s&M5TlL=D-Y7D3(lPGS&7)-|W!Qn4B77CzCGH3)|P0yil zdAzK9SkzVA@Mz%r6>(auLcnBHb(#{g$X3F4E{lfhgbT=o%iutpuy}7J20h~VBOJLg zx{_`_ePW0ScRV#bpe*qxz)2ilb0@tpUML6njw4u&=Avh(3=!(#)k{E2k0dFFcsrd{ zd;ZL6WzgKD^vPsg&ZL8WSOPL|cT;ViGhcS^D&Mbo>L{ WVEY1|8zB(@0000Px$K}keGR49>clCe(1Fcd{^BUkMnOI3_)b?DLwsk92@6F_1>75~7%0s{+Q#a1CP zA`lE^lS5Gehj5%QL_4&;eneQ1X13<8_Pm?O6vt-Vg zAdMDn)150a08(i)9s#iF&ZfJ64xMzIEc|#)Rf|xD>rLh-AxQu&`X>@QaBi|TZGO8{-6R%$wZtiB4vDS0B6e!0ItZIsuoo3cS+i= z$cSc%zot89GE3&%x>P#Pw*i3Cl{AyqcaTccdyygaCg|?*VMV{dr#UUXcce^H)xD#` l1VB^O{o#NL3gd76`Wqh!?Byw$iOT>0002ovPDHLkV1livtBn8v diff --git a/src/main/resources/assets/galacticraft/textures/block/silicon_ore.png b/src/main/resources/assets/galacticraft/textures/block/silicon_ore.png index 4f8e87e118f37f03a64fc84d03f7ea445f4137fc..28ee474167da5ba9d3ec7ea0858e4bce31ead7e8 100644 GIT binary patch delta 389 zcmV;00eb%W1E2$tB!3`dNK#Dz0D2_=0Dyx40Qvs_0D$QL0Cg|`0P0`>06Lfe02gnP zU&TfM000SaNLh0L01FZT01FZU(%pXi0000PbVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-)@KG4UX2l>h(%0ZBwbR5(v{l09w$F%U-g9w|8iO2q|8k$*^ZNED%7DJhXC-9s$LqlO4$Eaa&o2KdO`15ckgc*s z%PTVMKfe_K2Xb**qf;R*xmr*e=J5l6Oy|p$9GXyFTau0zs1?vvfJlDIE&P!20MA|l z@bk=JoCi6oZhkcYauu%Nu`)BLLVX8vYqB@$V9`~YX9f9wO9~%vyR@OV;GoYy4{T(m z$nWXKS?lipQZ>zgZ_q1*WPDr4VAM8<}(pvoM*OnN88e#ff9^Ztj`$_xqih z+GsSw-!FuaQUV~QOew_}l~R1nIU&Q{lbWT07@hW%uau?#xV>4Z-)q*_mwaB7n*$_VADp0uhN^y$G8J zV%w%oDx-VvXR{gaAf;3v4u{QVbG=?uQK&}o=H2_dkXa^|U-ur>Q%XuH)EmFo4}bo+ z+moH=&q}c)G%do$+S99xu`y+SLf0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000JJOGiWiV*pP8Ld3;fqW}N^32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rd0u&b&BfeOn5&!@KE=fc|R4C5{!Ap|cHV^>NMt1`Q zNRB=ueJIK z`3R;FNXiOGS#og9waa;A8ax7i+}7H3Rb^|A$BCFqX=Df8qxZf@m#Unl?O9v}HZWNw zZ*MVc?!Uet{(EeJ&|5qm{91*`SZjHS{Wu2cf9jlzqW|9RpDx$SWqvLXHLyx4YtGUP zaT5>)o~J6xr1obj*YnX2h^ZP87wFr4W79;zjLvN-KdVJnYe=#f zcD2T3eU*%)=F{bfgj-f-CPs3D4codfZfV(W77?tL2ev>iOf+N@zoySQOXd((E0#x%Gd=2#LthX!0~rqnWd_sik< z$g;g&02KG_a+s~fS8Q7Ax<_Q-TEw|we;h0mKVJJ@o(ez!=hIv7y5$`!LZt%i18#A} z*7@hh`h2A(-CIUf)W)jabV4`;%TSXf?A2(W#y1>2|MvO4YaJYQO`|1aFl*ai+mDaM zLRFZjfv(rdkc&x}P*~wSh9YHT|JZgW_ZFP9#8#8y_2M6o{`LC}9gdC}6k@D~F8~xo v+B}ZhT5ztlhG3Ru-?zNgJ~{`e!MXndE6r!I{2|Gr00000NkvXXu0mjfy^28R delta 411 zcmV;M0c8H88uk~EBe63^3V#82Nklj2Cr>t0TdM=eoPS~ESkM z^#FT1DZZZ~Jg5fnG?V}o&e4`R1uB4myv}r+y!G{bDZ+QVeKZ&0MdbJWE-GF=PFg*{ z0MOgo=IsW+%g1TV3E?6ZLyEAsZr;uNbeL&SUEgk_KL{h%KqaQcl%C%W-@b>XAwS|; zL}&<%OuY4<6)|uJ}=f9-Wi7K5sWg*uFkPK68pS zJ-?f`9(4hx)u*^2@#E>FOlc7r!JA+43g=iHjVS(m^=q1knV3>oDxB4=2v6bFTOSE( z_4RxSun}m0Y4s^Qjmx-*6ybThIUbh6nJEQx+-Ly*0Lq&beh_HAm(TzJ002ovPDHLk FV1oP1!0G@1 diff --git a/src/main/resources/assets/galacticraft/textures/block/solar_ore.png b/src/main/resources/assets/galacticraft/textures/block/solar_ore.png deleted file mode 100644 index eb8fcb2bc5e26bf4cd6e3737a43cd441e2b2a7ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3241 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 boD+WmqBk?Sv<+OB00000NkvXXu0mjfIC)R7 diff --git a/src/main/resources/assets/galacticraft/textures/block/solar_panel.png b/src/main/resources/assets/galacticraft/textures/block/solar_panel.png index 787316fc4959da9b6cba61b232b87dc8c1e52f9d..63bfa5238328a22a40f668abf54e80418ed55438 100644 GIT binary patch literal 4444 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 KMNUMnLSTY_G1m(K diff --git a/src/main/resources/assets/galacticraft/textures/block/steel_decoration.png b/src/main/resources/assets/galacticraft/textures/block/steel_decoration.png index 83df98c9006d6f1624970226d20e9f993749006e..fe3d7fd4eefa08ddf41cbf94ea208014e780682a 100644 GIT binary patch delta 1319 zcmV+?1=#ws1+xv1BYy+sdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1YwlH)oE z{bv=k1OY;i<>*;8JGjdqWLt9DZFkaD*Ghs5AwcIG*@5=o-wuED!r&}e@xevsj9xa{ zNJ(#kIj?ru-G|0*zw^T57vXk-)UsOMo!%a^eE4U)TUHa@On;zU7Vs)VuZ4X&{AB1$ zM7?=|$^_T44x6b83%YA*pZjRs~#iMM4=hu5#@z28RE5lk`#t*NG%tfOE= zLN*;OR=|WE8&IJvDajRD_ zXyu9;N~p0!JBLV&#^9eA(oXv z*xT!Roj13)b*pjW(u6oL{V|*ZYxZOM&A#BZD(#j4UeSelVbdroovBXe|xq z24^Oco(dstQU*5_O#*aEp>0UgadCGt_c3pvSij?qK4A_9b^il%1dT7e-LO{2ldx=z z?Wb^HYFJNSr<^G0#{e}!s~=+ytMdQqSQ85BbAKeqrQ^MKyE@Gg(E z(Y|hw9xZ%zWIXCj>+DQsXH1H-7soTo3;f*6=k}VY9wbnmV1#;<6+Y%Tt*E#_gew#D z%U%%o4DfyF$xN6SSX>n4*`GVQ!rcQWu2;+Hfg*QDGK`xxw_H8}hF66+Q-?O`kMu?; zp?}>he)YghaCFB_af_ANVs%T>@fHGjxA!|cp)fBNF4%nMN%AS*A0z@lY2!v3k27$i z8nKJ1IKj&Da0KS|z+4C{lI1a9+R+~1 zO*=vl8@hr8#@vYF6RR)7BX@HOAMA3U^?zDk>Rt!XUNR70XNCvvgU!?8vmf``&wfPi z`YFFv13aF0f0f?KDO0A5^MO)2Okc)%N7t0`Epy*=RG%POAii+rXFJJHWxKrO)h|$p z|4m)dZvS4(r%vi4CXB?-z44jk4}VtXkt{{y?POR0004nX+uL$Ns%fH z0(hLUICcSlKIVp-0002^NklwG|*5Szz0y8r+nZ#1cFbq$a zu|JdKB*XY93s0J3wGij_qI{KF{;LgPYUAo@?|wxH;V%FTHIgB6G=y ze6{O~OP)2PgF^_dwGcwB^}Z!%7}fupZ)_#IC?cYq^R{iDXJ;LLkvV4(d8L#(Ti$Yi dw|d?d*bhq5&o7V~I~xE1002ovPDHLkV1nnuZ`l9< delta 296 zcmV+@0oVSs4YCE0BNYLKX+uL$Nkc;*aB^>EX>4Tx04R~ODFk)_e>OEtTmS$7=t)FD zR49>sl0mM6FbqVeQWT>PMJn6=vvB{zgj8xtg{>^QaO4Ie>Q!vwd1HsmJkQui&KZDn zu1+l+fcyV_7X`QwU4p`i^`@vay~45P1O10zfv_ zVzHz+^R1}YUY>=of8!`3rJ?`p4P}=UXbpv+OJHF=q<1>o&(0Egx{hQ0K{h5&Calfg zduPOUONR$31kK44ny3lZ_9e91ZHS1=Ij?Iv5G-wd7D9Tb+T|JNJG5P@wY6A}ULNid u<87LbV%>2K=?ZRzAYRjfw4YMm+!k002ov22Mn-LSTY8J%D!r diff --git a/src/main/resources/assets/galacticraft/textures/block/tin_block.png b/src/main/resources/assets/galacticraft/textures/block/tin_block.png index 452c3cf04403dcaeb3edd43eeeb21e7cd5360a2e..deacf7637239a1d524fc8e3e7732e84db056e6d3 100644 GIT binary patch delta 249 zcmV@D1_i4;OghGInOacbqiQX(OJRP??nG;3f@{K z1S5oMf;}8yt^`4*5zqo(nrR$xrV%*Uq(K!IWA6g4WdYiu00000NkvXXu0mjf6fIw4 delta 230 zcmVgQLvj1CowdUw*U0ya=H8O!p^s=)Cyv1YAdyBY6}1aE#hpw-5hs&Hcwt%S7f;l zZ^nu&Pn330RV9~NnP)>K#{hQ*lo07s`j(Usp-&C~VV;YGz+Yj6T&ot5M~yl~W}vP8 z%Ztx2NgM#my8!@;ND#^*{vOab*AL@ghb0_*E$LM{!ICe(RWCxo2lM(JqHB$cY_r4V gMCXMNE#e@20O(A7ef3$(0ssI207*qoM6N<$f*~Md$N&HU diff --git a/src/main/resources/assets/galacticraft/textures/block/tin_decoration.png b/src/main/resources/assets/galacticraft/textures/block/tin_decoration.png index 7ef481149b3190bd4e30ac8250aa9bcaa9d9bd4d..388f52b6e4596cc49e148d687e169688765016ea 100644 GIT binary patch delta 340 zcmV-a0jvJu0`CHlB!3`dNK#Dz0D2_=0Dyx40Qvs_0D$QL0Cg|`0P0`>06Lfe02gnP zU&TfM000SaNLh0L01FZT01FZU(%pXi0000ObVXQnQ*UN;cVTj60B~VxZgehgWpp4k zE-@}P{Z0w!0002dNkleBVi};Pc zV~%m}48kMq&fUyzjLo?1=8GjvrZW*+)mC^mgW>3O+`nH>^SIwCq;J+MJjp?PzXfuG{s`GckGFcSEiU{TyN38x|yB%zulQD zeSUx8UT2d5cnNB5$Pxg?Z=-f2!ei}D3czf+_>1=fK)Vr5H-BrB>L)z_hW){6J{J^3 zbs5#AN;G|w3wx_XQ_^0EZ~$u6DgZ)le}7zilj>fld(Cs((0pw%ii-%y4VFMdFsaTi z7XXK2OdJ4|DaaCnQ1&`q_dq2&2qha+bERAsO!TKjMGUkAT2K&5cybBcb|d)SzOH#L z&L-QPRDr;ue?L!4I2>b6J(<$&(Ol$uQ__99UEFNB81@GRGk1d|`Ws491Q8-<9wVE_OC07*qoM6N<$f{-|h+W-In diff --git a/src/main/resources/assets/galacticraft/textures/block/tin_ladder.png b/src/main/resources/assets/galacticraft/textures/block/tin_ladder.png index b489c0aa68ef88ea35b71ecc2b9cca5e42b48819..2ff9effce0216150c4330207d639becf9bfbeb4a 100644 GIT binary patch delta 1174 zcmV;H1Zn%a1*;5@BYy*idQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Yuk|QY$ z{pS>Y1hgSI4#^TRH<;tM$c1#J?P|Nq5Ka+75<>3*cJ2TFy8B}dl4r-FF{BW@HBOu` z+aUV0wOwvH@VtJH2KyJ>!wED=CTUYD@3XY)5Bo5s1$r<6a({84xeVSeta;a?$1fSR zKG!(6v;TUpvG=y^E_1Llgl$vX67C3NhKp5+R<~eX?I$+YwI}P*XJ3GQ^~EpN3nV}w z-+`ez$k3rdHCdooj*Jb}Bw|5Yb&(Vk7V-qdqeDlfM3o{T6>LPrj&SAz>$+)OuRyew zE0`&Q1p{;Wwtu^S8NAYaFWzbdV7rICR+bmyzyU@XX?)Gh0D->aCToF@KAXD%mJC5z z%N%Wk*)Lm&Md0KXtpp&m6O$XiK5xq{vZXh#F%|F(*u9M^aKqnqo>RXInF~%aYAIn?=qGF0}9> zOIUP?OImU<`V=lwLeUaSD!F2%%2jHpT4PN$H)uvB*SJXwOVI8-12x!D!xgDvrxP{Ps*XTw2pIQ_49pBMWH7{aAYg>XftioMj03rWnNMh^ zLeP?wflURU9R!1r8=!QU*qz9|jGMDs{|h&K1vxjM`v7w28eMREfLa|lVObH|PT{Dj zCp&#M-(tp?t=PB?eAjh=(Nol8R1Ujo_Ds5G6Mt{U?Jk7FDwktq5bYz*yJ5|T3c^+8 zhjho_Mn15;iG8luLOng*rmKA9T&D*eX_x8B&nxC0Pn^Cv+y$O>!E()LZmOQ4`mA-o zZ2h5h-x$0V*4?Ij zfzOPVrx#o2Gt`k;qgP*$jYp53gdc=;zkbm0`au5lLCYIS+>NfCcfdg|3bW*Lr}`4} zHqZmxGj^Lu^|aj6h}?&0bbXF~Or!l``xiZpzSQVF8g={Ml- z0(hLUICTMkqRQcn0002cNklZx05JaD&901|Y2cU96N$ERq2TE$rLCGCB zgzw-AdUtaMr%3qv@D-6R$y6(AcIADVg)dFhR6+=a8(n<{U>Jtty(gtaUDr70$T{Pj zJ2f9~DJ8u3jN@qD0VI)9LK54yVXXyV-}lo1NifzxWKmJkJF$;kMz~H+a04&S$nS&T3 o2ZQGv+%fp$Ir!-<{C*BT0O>=hkX~s+y8r+H07*qoM6N<$f<#y;C;$Ke delta 305 zcmV-10nYxb47vr7BNYLJX+uL$Nkc;*aB^>EX>4Tx04R~O$^&%)e;hpv!2kdN@kvBM zR5*>*ld+1zFaU->#nnS_>=ikb_AMMdIvozK4&o@f_#&O%4&T6`I+fngp>I&Ap&+7; zF8Tm*F(tN0orL=!B#=LZ|097rQ4-71d@3m+pQ{2aH!EoyCOyX?N@97wUZk4!5hZb! zJ6|snpavjPfp?$(e|(?MuNDC7-0jERo}S|%Qh}R_$Ia1vDhK0XX@z{Qsuq*UjC!L{ zcD|6S09hX|46xc3wqa(0?dgDRm~2l60Bpm=3j_MyZ<_UwN)5pMU0`*rf&+ze@lPG- zC?8%J05JX;yyifmJ1Fh;jQ2TEeRXsPFTI1e{Dm82qsY174{x9000000NkvXXu0mjf D$wP)A diff --git a/src/main/resources/assets/galacticraft/textures/block/tin_ore.png b/src/main/resources/assets/galacticraft/textures/block/tin_ore.png index 9a20b2c8c4aa7d722c93594016b061fcd93566d3..ddb5629bd9fc5fb05bc4f15a2ec438b7befa18d5 100644 GIT binary patch delta 342 zcmV-c0jd721pNY#Fn<69XF*Lt006O%3;baP00009a7bBm000id000id0mpBsWB>pF z7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%hhNHvLWs=l}o!?ny*JR5(vvkueU!FbqX= z+#Z0vN62N^*jSK|5EBCoNZf>HKjT(BmGEtUJ83%RoNJ;uB!7x!SvsUDBfME=#Zl?R z5=lX0iw6Eo-7lx^1hnDnaifHQIFb;!0*>qXxX&Q$AI<>do~;$Zsykh49I3}({k)%y zH^gMq`?j2_Yo=9q^fiZ3l$S okfjO{8UX$O4nU!M_C)ubU((l_<$%}q6#xJL07*qoM6N<$g7ct}8~^|S delta 520 zcmV+j0{8v>0<8p)Fn| z-Ya_3UM2rY{s8grMGyq79wd;19>gDkkVcw_Ntf)_E}3>`aAD%&;ib!>b9!&)d-J~c zy>F%6ZsYVQrHnBEgb>CUt+ngAoaPuuDFwh7!=U_42*Gg_MSon$0Ef|9>y53=bL;D$ z-o6K*wdOL{b!)X+tJT^Irq7=~6GD`H-zTDKwYoUg2j55KayiSgyASU_dAxJw#`Tkx zKSw_gqQ&p8oo*b**4k2|(IBEUO*v1Jgou*xFj+fuR)~*p-T_#g7ywz85s@Q=kWwn8 zij0jh>g6jbC4aNc1@Ju2VOaod?>xHdUEB+%(_e?9@qRj)1wp`L2qEq~*dC4d!``6O zY&Na6^Z8swOBx?u?=FtDQi_O($XaWy4aYxpbOgZhJa6sN1pr}h(C>8n01F*OQLcTZ zQsKZD<0z$|l#~*uPykZO{~7X}rFy;Yx^5iDL}ZL%dVg^o_dkCb>v?H)6~OFUpG{z` zb-3Ne)~0{6S^P5W4Z_|aoy>A#EaP(1>14J$c`@~G17I}UWH=n=D`#aLDJAa#K)=&1 zTJZd}`mM|NiUUX~ouWhYp}9M=%4Jx(^&j^#L%u9Z7X$&r{sP1%P$po7_v-)v002ov KPDHLkU;%<1i~&ag diff --git a/src/main/resources/assets/galacticraft/textures/block/titanium_block.png b/src/main/resources/assets/galacticraft/textures/block/titanium_block.png index e0f3627e8ab6b76d73af7d398f6fa41c0a9b463d..5dc69b957c08ddc1d0888cc4f47c1e1605cdaef9 100644 GIT binary patch delta 774 zcmV+h1Nr>u7Qh-YiBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^Z)<=1ZP1_ zK>z@;j|==^1+gJX3V$GDNK#Dz0D2|>0Dy!50Qvv`0D$NK0Cg|`0P0`>06Lfe02gqa zx=}m;000JJOGiWi{{a60|De66lK=n!32;bRa{vGf6951U69E94oEQKA00(qQO+^Rc z3lkD48}%`Y{r~_1OG!jQR9M5cS4*zjFbo{il;H=Y2#TPqcYlGm=;{HzL>ImPIf^uO zBwFqwkt50aIYqRxESV;U!x7beeEwXxXUHtzo&f-)Mp!e!jaSWO7O?y2Fdo(ogBqZL zm(C|MfqMqaEEvWEj;D9X^#UvwB7!f+uduUT=f~4G$n^s12k7a1TbBvw2x9cQ4glu* z2glPptO)F^A%8|c>;Vv?L287a&LHj?)=aP>H}^WiVhxCSowIueRwFGVw|B7y_KpC_ zEFd)&4T*E^KG<`vIu^Tm)sX_J5i-jIfzk)@n$dsjd%g9=ntcd#q&6QUM*#sFq2@bO zMxX^&;K7lG)M=vwJ|q$F4F(ZsVD=-75sDEU)Ub~O+JEQ(k=0-$Iw^;!AA;{!1mcK9 zB=p!vzVJpl5r`p9L7ptb1_CFmAVr%0QNE%MxSp`dpqGx=p_+rK6a;6%YG6;@XR0FR zMzIVx4T(>>Cq$@)L#{PXAIBNUlPStnh&#@6Qe1Ay8hXOoySM?_*OVrr;>tOZJAQNe zup0sKnw4A{QYqRvUTR8x13^TK-LN=yFKE*K`%C^J0wQwTAhKS|im6yEn7OJW@mb*z z=)V8>wYahfE|Xqk`il8<`F#t@UCZ@!_WV7(eC~R}f0q#8?GYCXT>t<807*qoM6N<$ Eg2yR81poj5 delta 298 zcmV+_0oDG%8t4`wiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVX-ku3V-QI zL_t(Ijg^zV3c@fHg^$spP{AM2(Zv_g-O0gsaBy%J!O2x;U%Q1Z#H?@fg?3N%@-Gm`^D< zvqS(HGZQAVo8tz`B%&CjX%A!H1h!Sl2%b;V#yqP=`58eNnKH=>06=f*QDj{(Q5~9? wr3oS)|83A!z47^xrP+9x2+_7G5Qe7w2IYy#tLH<*iU0rr07*qoM6N<$f=*aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y=(&H!$ z{Ld-&2uMN*j>EHRZm`E+*#?r&iQ~-7nk2YnA<5k>h-v@+>gFH4AoyS$OYqTqtCx!| zV$z#nA6FamVFT;--+96K1@ra+>P$M*VH7u>(y&i|zh({e=6?b3X#uS?_?%eMu%pEv z6_v7bJYHvfd#|DQcD!A3USaUZOC2f945N-&QKEgB*CG04y_bDN9l<7Bz}aex%{mH1 zKp@+}K{b$|LxZYwfuc1!Y$!S-7Np%4NHAg{OF(WL&`~H-r9emp8xc7}xN3ntZ`|`0 z2%5Qqx*}*W(0?T#hq-h3X7paHVg#UX4+AT$3vuHCHW+F9RW~IB`rwUsfah43c_NmS zLEd2w`hv;kBSdC+Xp43MkovLChrU4S#v1M_ahjX87$BvJ(q;U35yqzAW>4F-~ww`N(do_6fu&vBu5`5h8SZ?nlm|*IO*!79w}wa zlwIcRv*eItPDSNYT;bx2lu%+x6)RO&x%w(K)L2u4rcyG^HEzC13oW+PRcoEP>)d^p z9(wF)v41vLeHp*O8VuHOXKM44#hO}0wm^Fb*!CITI8(;Zfif-|11f0TII{tq!;QI( zGaFI6f>Dd)jhhNK8SqM>Yk=Hgara>EYu=1vea9Pq!<^Zu`yZG?)9A$88`kQ!6PBH^ zqYF1oEot|43JJH5HLCgjUOmPf&W1V1_QBJtEFn5<+ye!19QPtzk()SNX^*lS21qh;cWR*l=V%t?e8k-JDzIv88=|+=j=l%)|0W!b zHwlryWDhl6R=@4Rl(9@ZLqFd8d7c5}oB;qZ#>kO#j-0bGhDs^xx;p3NM@k8Q!&(a< zgm4@O0dUUk`;Px3#@KsbmgPK8(pm!`qShKGkLuPM5iy=~CZ3^xwbpwFz+a^lR}099 zF@|`=7^5+U$wuxsNW#Q4(n@d!#i;v&Qc7qz5#ncuQVRR{;1*(OZmqpFjOILC5*beo z{H|{eV$`n&tu?zO6Mwbqi%TQTh$y94LrUr1B>=V7TI)1T$=8`BCT}@VcWL% v+Hr+!WC$VW{PEr(k44;&gV&4^&H?-Ym4(cDr_EQ200000NkvXXu0mjf_h*9J delta 352 zcmV-m0iXWO4eAAuBNYLKX+uL$Nkc;*aB^>EX>4Tx04R~OIRthAe>OEtTmS$8AW1|) zR49>slD|&EP!xwhk~^3fnqu38I3aN)qE^PNAfJwM%ZtYlpR(S>K5MhdvTxoh@D{IAt~49upJ#doZL zW^eTQ`jTeFi5#Fme;B^Ke<(4$M&vc3GEd|i2rk<|_PYeiJQ1gENpL{D?gN5ael6_s zX;!p5-R*9#6Ruhl6-!q zlp(rXk{|=r1UXO`_&Bl&Chb6QYrER+_9|JItNFM>Fs9q5J|_Icv2mT)(qU*5WY-p_ yJ-R;JY&z)=hLvLW1x4~V)E*yhD`VLWxSl@+!iDYV($s1I0000Jcln!FgI+S z=H=BH#KmCf#;`1tX+duEp6^E_DnF=7Ge4I(w=Jcln!FgI+S z=H=BH#KmCf#;`1tX+duEp6^E_DnF=7Ge4I(w=7c{Hr0yqF*tGDy(IBA((Me7`r6G}&Z?h-<^mnX;OXk;vd$@? F2>={@P=5db diff --git a/src/main/resources/assets/galacticraft/textures/block/unlit_lantern.png b/src/main/resources/assets/galacticraft/textures/block/unlit_lantern.png index d8717aa052e1bc114a32de68f1092768bdc28407..85ed08d86556e622f2684137694f0680b4d05f00 100644 GIT binary patch literal 313 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 Tl6FV~UC7|+>gTe~DWM4fMIl$5 diff --git a/src/main/resources/assets/galacticraft/textures/block/vacuum_glass_pane_top.png b/src/main/resources/assets/galacticraft/textures/block/vacuum_glass_pane_top.png deleted file mode 100644 index bbcb2467a5480474e171bb590b69b5e64f983ee5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|(mY)pLo9le z6Am!1i>duqf4j~5|HqYyhtz+*_$J*Z?r;AnxamGa5uJ@VVD_U zC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$OrQF$}6R&?d%y_c8YA7_1Q zpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X z6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv1)yUy0P^?0*fb9UASvow z`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q{wNRKos+;6rV8ldy0Owz z(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E` zvOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G41dM~{UdP z6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4Es0sQWIt5*Tu0n&*J!lk~ zf_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+AA{TB3-ERLHar49hi4Ih z5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=natP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+e zdD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVb znL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0WMyP6Wy582WNT#4$d1qu znl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8dZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iutvy=3T65Yu+7a4Yv^%sX zb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i^lS773}6Fm1Fpe-gF!>I zp{*g$u-szvGhed; zvo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*ZvFf(^Xl-N7w{EeXveC4O zv)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx)P8cQ&Qi|OhNWW;>JChY zI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_WICNY@+|jrX%s^&6b2i>5 zeqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!ql}XcFH*PieWwLj2ZSq`7 zV9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I-?$tAVKYn8-l({mqQ$Q8{ zO!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;cwT88(J6|n-WB%w`m$h~4 zpmp)YIh_3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dlbFb#!9eY1iCsp6Bajj|H zr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syTu9enWavU5N9)I?I-1m1* z_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$mU2Q)a|9JSc+Uc4zvS-T9 z63!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;;JuhGEb?H5K#o@~7t9DmU zU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX=)z6+o0o6-+`4{y+3mqQ z%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@>;2q1Vm)$Z)P1z?N$8UY zW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHsy69KwU-!MxeeuI@&cF4| zM9z%AoWORreI0a52^3FLjTDZ*Enb$c3MgHmS8aPQDA_K6br6BDtCSN^jSSoBH;2Sbj?mW&q7a?t?(0=~ZXYue!b(*OVf07*qoM6N<$f`p#{J^%m! diff --git a/src/main/resources/assets/galacticraft/textures/block/venus_aluminum_ore.png b/src/main/resources/assets/galacticraft/textures/block/venus_aluminum_ore.png index 3436876fc5197b8df257bf12612a7939f0ad3417..329ea7a1e307b46bd0aaedf3174c93c5795b363e 100644 GIT binary patch literal 18320 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/venus_copper_ore.png b/src/main/resources/assets/galacticraft/textures/block/venus_copper_ore.png index 8851db107adb5a9348bff0debe24b97b4f882703..d59f47a7a777dc552761bbee9840b568305703bb 100644 GIT binary patch literal 18295 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 SCph)~vZ;}!VXnchgZ~AR)PXku delta 3267 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 BWSsy2 diff --git a/src/main/resources/assets/galacticraft/textures/block/venus_dungeon_brick_block_1.png b/src/main/resources/assets/galacticraft/textures/block/venus_dungeon_brick_block_1.png index 892b3a86027752943f106f5be3a3546188733108..8615abb17b7f5d9fc38152a782129be5f78fd438 100644 GIT binary patch delta 3214 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 A3IG5A delta 3102 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 LNkvXXu0mjf(I5W- diff --git a/src/main/resources/assets/galacticraft/textures/block/venus_tin_ore.png b/src/main/resources/assets/galacticraft/textures/block/venus_tin_ore.png index 91e282f96eb1a3de3e63a5868c72cca224b43f61..b5aeeb3f4efac087239675408748e939cc38e90a 100644 GIT binary patch literal 18300 zcmeI3c{tSH+s8j5Yoa2R)L1HHHfuADu?*SC7D6>^fzTSbwr zP-ziTQLPZ3szgH=?6g%7A<=UfdBl>3HL2+g@8%aTkjsDRfiJ0}uvO?mf z;j(9&B&{o!7#i|PKS&GbJ$5W8O43?oQKaxoflk?T#}1zlk9;)#X5V>_#?sO5n#mh4 zuszwsDfx8*<${Y&8LL@q1TDI(zh=qn!}sr2z3GJM1`8|D+4IgP$}%V9d4RD%3}&NT zxxg)e$M2blAW&|RT#i^BHYN66KhcFJ=m<|aD`u0KV2}i$8*ohjBA~m4CnzOhy)BT& z2kfdQxOD(qp}?*U2fLpEK`CR2`*;B7I9W-av={)gj1+DFxNios>$XK20*(kkf^2pd z1-yg;2ondgF>tjID6bV4$pZuz0SN2x5G80C>X+te;eY=dTLd%pc@6d2ZbRpZgAxv^}Fo z$$4VBH-NO>R}RDUX*Pyuj~6vHb#->WG`*|ujDO^CV3Ja~v)p0A^K&5P>*&YVx85oQ ztGWgo@r}K%d^}>FzPj#&&=I$m?r5X0g(6d5WuD31HE}C)RF>$lUg~qqASr5CHC--3 z|Af-Lbx)^=Z`)PId9m#pz}4MYo_#UUORfaoPi7m$9a-gXM*(1{gjVrfQII#t{qUPQ z->E^J38S=iKoHsFgbx7hFi?QmJ<8X)F9-kzX~D`@^`u8CR;ZNoudZ0wQX%qnm*x?D zg}asd;`+kGpw*0BO4*0>6+>&T$|&!GKi8E}FSm9NjioP!RodTNtW6jDf)`A!P%I4= z;?sK|xC}4*DxAkH(oz1Hpj2YWm~4eH-_oNBkcZ(C)^cVs8pcSQNIQtVvCNP*V*x76 zWlM3)<_Cc4p|7E(M##9}JZtUei*DeGE@`bgvgMq}6Cw+l6umqx`3d9tD(xuEvpr9; z+{Io+V{!Kp#-R*h^;D*B3AOe0PPLDl*K`SVg{Z zY4kF<_`Y!5T`h&B5jfQiMaLJIT)SZRbm`MAPrYsAdsQwcs~fM9kA3)x=#eLYic^7X zd=S!^(s`#-ty8*FcF0*c#ZA}e!kFz_MVm*vO;>h_cd2*rlM+<*?9V6Jv|c)Ew?rd) zyME5u0-Gz=VV9Pv?@2<{9A0i>mY#F&@U*(u=w19f z-VxtLqM?$9?}t+qS0=9zSV39oyW&cM`Nfsbj;_3KhtNXyCG;eUCDQC2l?#;jOU67B zK52S#{YhzMxZUN~t;!I!#3IJKZtAV}-k5opx*J_&f?^P~I zn2;$ss-1cHEDEP)s^*YyGaN_O5$H(p89U9g6zWmTh#wA&Y?ByNdaERTQQf=I3izy9uu^86S-nIr8T(Qs8f1RJ#Im zPs4|Xk%8ZD{>K{UdPf(Rjz5Wye{&?Js2+2^Vas1z#GQodzwIgomkMr@O!7Ln zUvwHMDD@86j&e$OwBPQUza=LnXI*1SPD#d+j3Uce%dFH!%AKqK6g(`rT)6UT*GvB9 z+ybwH19*y?6s7Q9?wx_yve*N~2mYGS77z_6x-xyMiePZ5%chH_|XWnL)EZ&EG${Ns`Wuxrzz{BkL#O& zryo<2^OGz4FEw8o&>Wx+gteS`tbRr*)k%%{>YGJx><|uwp3i}DmIMadcz-YCpwmI#5tW{q4ps?EN4lQ+ONIUMJ{1kC2 zV5%O-2wKNO;f)B^3wB;GJ{GWF_VzIybTjEwUQ@qbR9caqq+ax)oI_m|IkN5#{yv@~ zJKB>_8&gYN9I`d=UE>o0d^i5+oxnvKLc&5ELUoSO!yQ-EBjYuE>sxTlc7rblrwrPX zDM%~S6{x9(GBy*o8}mx5SiM-M3PyH%+~AnvXyR$M8U<6%)%5nf)&8}AIP7i8Tak`^ zQVH+}u5|yiwUr|w8Otxjma3pn>6(XIZi@S$C$4;HdDOb0Wxnf<3Hw*dR8r*N^_unJ zFL5r)Yb=M1l`R5J{2f!O;jeH{EnTIn=*Wi4$4kvc&0CYvsmqi0LcCP9(PhZPCt{BK z=x54W#1>HAQ@Y7}tFuWVd6W0Nj~2q$oD_KIk$*gUp%YZNK>y-9yX}fElm+rABnR^C znutfJQ(37SYx*DOKWaX%b$am3RR7Y-rEg9Yq=%Y0KxG`e%d&T)@-ROB&B7g$3pa*t zvAqV zrdQWR+qYfs|MbtPZbWA9*r{n9B*ZArFG8h3VcF1C7%t#5qa7Vy=md9B!Kb&Qk0>9E~H>Z{&E z&tfS@K3A}>hfv$TTZ}eXEY5oK)Ntx(&*sw2wJt+9SwnfvUCSJ9 zIwV~|@AP`ldXJfmeP(sPpf8-me+BI%3`WRH?~xlhwIW%i)1z4Sg?a z>l5nF#t+5E-uBv`KJmW1Z{?Nds>-T0w;uYbA$N>y8}G01ZSj>EJl`&6)wv&XP;tur z^RqV$soX zxUa7-%vTLYV^H8o6bc1LsKQlMq3j+|roT4}?+5i}%Fl{?*D)Y52@EQoMWuN|rgiad zv^^|sIl1Y9e!RY|%ZvVFAaCY3c5I4pKRg|dgdyO62(qx?9OmWq+ejwMa4&l%-&Xe9 z0hxCGbQ0W##H8(E5J-l5N!~2^-%Wx@_@P7J!|RD9s+~)igJMH;n7|Dg-)pJ5513Zg_Wv8MR6oG`QYS=LtN<@?K zc#;NzNPuo~BWXdAZt7Z4l!hA_O4cB|X%UF3c!Hbe%p!jd|3%t>M%Xi*L*Jx{Y-v@t znARpY4d^CKRXkK(Q(Y5^Lg6<-@klMAI*N!VB2dWh((}T9k+xz`*+mHNIj_(3?Ej}j z{6^-Np^T|acIx=gODT3@&6F8ilF!er-yNRRnQ}qLGnl05Q>ZQX{TTkJFF(r1bj-|Y zM&k+7g$7HQ&Q%f-1OKUYZdyMgzlBkM-N1iGc~*a3_@Bq{btidqO88l+nO=VuVbaJf zUp#}PM`7p0e{&3H1%HkJD`Vi(HQAH;f3OEk{NDfF4*a_#^#6Sa=5m+dj`yaJh*

23AD}O#u-^;+S=MO_9pvg3b7oLTsdf_P~INh6qfzLJ0jfwej6++`^o-~F9 zjYz_(Vc@@O{%sWd$F;4qzpY`JHb(jo6GNOP5~ZmLRfVzZ)SS$`e)DvuuVZL-jbZ0I ze&%emV}5A^_jjDG6`p%$`fI5o*e~`C5Bv2kbiNxL>cly8z8f4m7isTJWnopnjRtC- z7d3scorP-4zAq$U*-HaAfqQSI`jI>x4XEsE0&}|3A=y`vnHaF+w}DQ73Y_Qo7C4(u z^X}eeO2lj{``(a!TMGYiU;0b+_)%Z~lON_*^q*7(X>kVu0pVDuF3x;FUM?;W5Y8qS7iT^oFBcaG2xpUvi!&dP zmx~JogtN)T#hDMt%f$r(!rA2F;>-u+<>CSX;cRkoapnW^a&duxa5lNPIP(E{xwt?; zIGbEtocVyfTwEX^oJ}q+&U`>#E-nxd&L$TZXFeb=7Z(T!XOoMIGarzbiwgvVv&qH9 znGeXz#RUSw+2rEl%m?J<;sOETY;tjN<^%F_ae;tvHo3Ss^8tCexIjQSn_OI+`GCA! zTp%EvO^&#P=brQ=d9xqy^kqNCS$4$egqs-X+4;TVt1vt2VkiN;W?H6XI*)#mx2#&OA9eGC*iD-# zh|r32m-r&GZu<0?($DTiELM|64!;-Q_aQj)^_eAxE}zBnR^}z7Huskmw%G@+ZQDPb z*=TC&#E=bs{5Ou+eXCD7C+7w#y_e;g!walkYId*VA3<@Rt=+ZcZ8j@CY-_isH6|t2 zHGgzmM%dwOW%?+0@bRugzGrF%`3D`mlC%BK;yrT2i7Bp=*S~(5JeG>lX>O~Grj<$A z7F5OAT(D{Tyx{64r|Xmqqw(rnYk{DUC)?HXZI%x1|BxHUK;*9Fmy^(czLc;;!Jyfj zobR>X%~(@X;aXERsw&*r!0|=#sSmFoMyRz;N}bt^lsqCPWmL|4j+Dnm z4hK82T&)bwUtFV+w2)UnD)I4`{XG?JwQUY0Xq1!f!l9`nZ{(9-?bOu?^5QSy9;EqyzxvL-mtYNMx^R&*={neKdPho?Q=n+uHW~ z+#G=cogce(9_CSZ58^1Ewn_%NdT&q0=L*X17euDtp86udQyi#!p$BHZCp}6dtX*d3 zfsTfQQ(q5{D24{T*m*D~E;}nykkag2E70c>`FV_J-9Vre2j(vb5^w2f4eLq$(AfMU z4HCEirVE>|)v<$g*aZot@y`RUz{~anEFZa?Xk^;DkV0Bpcm>lWJ+A50-;exm?2fo< zlWD2RV+zGQuS%#W?#~f<+f^OU-{Gd$cv4iquQ>BU?nXZMzjOv&2aige(pF delta 3251 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/volcanic_rock.png b/src/main/resources/assets/galacticraft/textures/block/volcanic_rock.png index 8f5e6b584056e3351faf584fab3bccc8c6323b8d..2fe2fe059818b8dda2296b506d0f2aa36d2e1471 100644 GIT binary patch literal 3448 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 diff --git a/src/main/resources/assets/galacticraft/textures/block/volcanic_rock.png.mcmeta b/src/main/resources/assets/galacticraft/textures/block/volcanic_rock.png.mcmeta deleted file mode 100644 index ffc3e5283..000000000 --- a/src/main/resources/assets/galacticraft/textures/block/volcanic_rock.png.mcmeta +++ /dev/null @@ -1,11 +0,0 @@ -{ - "animation": { - "frametime": 8, - "interpolate": true, - "frames": [ - 0, - 1, - 2 - ] - } -} diff --git a/src/main/resources/assets/galacticraft/textures/block/walkway.png b/src/main/resources/assets/galacticraft/textures/block/walkway.png index ec0acda970da4aaa051e10f1f5d001106ce9f897..ff525e366a8b48e2d68cdc11effd421834569ad8 100644 GIT binary patch delta 582 zcmV-M0=fOO1KtFXBYy%VNkl{y?Prt3`GwBa%Lp|DRz{{*?#x^`=n1S`->#c za7Yj-BrCW%HN!J8urIcM^aN#mz&RYa7B$9tY% zcGTK16-0&o{)Ji_$KNL`8F$+)%RD33keFR;&+`X4Cj@2413!NqI2_&)l$;aWyE{JS z8C4}BsI{S`RDafWWhpZ+U-#77E;-L!2=1=hyl^+4}|nvqk+z2WX0kEbif;V;JX`8TD^ zL_p37_dkw%BLeh#y1mDBa=l?pmW-#zd?j(QO9*C}b%lt)Ovyt=;9@%sAOaEm0exLU U;0^WMV*mgE07*qoM6N<$g4U=MPXGV_ delta 410 zcmV;L0cHN)1hWH>BYyw^b5ch_0Itp)=>Px$ZAnByR5*==lD$sDFcgKqqF6C@r#8<3 zbm31O_~{OFp8=SF2Lfhz1rV^o4lD&mm>>jY2*y=J!_dYgC53PCm9KSm&h@EnZf;~s zX?*FE)3<#9jQMbPO6k&Fk|adYJDyUS*Vh-uv7;dXQu-uGQh&P3@$%y8>bh2Jbi3Uw zuZ{WO^z^LMZ@1f7nx;(s8acw3zO$9fufi+(EK;xQ(m9DKpwb(_!~G)<_m7o5Ia23# zkb73lmc*`Z*T4h!w{{9@-NOW(OR># zyyz6k=oJpcdz From 2611ae73ed39200c8c373c0fc50d3f2ce8604a05 Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Mon, 2 Sep 2024 20:21:51 +1000 Subject: [PATCH 22/23] Reverted all rocket changes but left machine changes decided to leave rocket code as is because rebuilding everything from scratch was painful. just going to build ontop of the already implemented system --- .../blockstates/oxygen_sealer.json | 7 - .../blockstates/rocket_workbench.json | 2 +- .../models/item/oxygen_sealer.json | 3 - .../models/machine/circuit_fabricator.json | 0 .../models/machine/coal_generator.json | 0 .../models/machine/compressor.json | 0 .../models/machine/electric_arc_furnace.json | 2 +- .../models/machine/electric_compressor.json | 0 .../models/machine/electric_furnace.json | 0 .../models/machine/energy_storage_module.json | 0 .../models/machine/food_canner.json | 2 +- .../models/machine/fuel_loader.json | 2 +- .../machine/oxygen_bubble_distributor.json | 1 + .../models/machine/oxygen_collector.json | 7 + .../models/machine/oxygen_compressor.json | 2 +- .../models/machine/oxygen_decompressor.json | 2 +- .../models/machine/oxygen_sealer.json | 8 +- .../models/machine/oxygen_storage_module.json | 8 + .../galacticraft/models/machine/refinery.json | 8 + .../models/machine/rocket_workbench.json | 15 ++ .../galacticraft/tags/blocks/machines.json | 3 +- .../worldgen/biome/asteroid_field.json | 4 +- .../mod/data/GCDataGenerator.java | 1 - .../mod/data/model/GCModelProvider.java | 153 +++++++++++++++--- .../mod/data/tag/GCBlockTagProvider.java | 3 +- .../mod/events/GCEventHandlers.java | 11 +- .../mod/world/biome/AsteroidBiomes.java | 16 +- .../models/machine/advanced_solar_panel.json | 7 - .../models/machine/basic_solar_panel.json | 7 - .../models/machine/oxygen_collector.json | 7 - .../models/machine/oxygen_storage_module.json | 8 - .../galacticraft/models/machine/refinery.json | 17 -- 32 files changed, 198 insertions(+), 108 deletions(-) delete mode 100644 src/main/generated/assets/galacticraft/blockstates/oxygen_sealer.json delete mode 100644 src/main/generated/assets/galacticraft/models/item/oxygen_sealer.json rename src/main/{resources => generated}/assets/galacticraft/models/machine/circuit_fabricator.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/coal_generator.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/compressor.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/electric_arc_furnace.json (98%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/electric_compressor.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/electric_furnace.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/energy_storage_module.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/food_canner.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/fuel_loader.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/oxygen_bubble_distributor.json (66%) create mode 100644 src/main/generated/assets/galacticraft/models/machine/oxygen_collector.json rename src/main/{resources => generated}/assets/galacticraft/models/machine/oxygen_compressor.json (100%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/oxygen_decompressor.json (70%) rename src/main/{resources => generated}/assets/galacticraft/models/machine/oxygen_sealer.json (80%) create mode 100644 src/main/generated/assets/galacticraft/models/machine/oxygen_storage_module.json create mode 100644 src/main/generated/assets/galacticraft/models/machine/refinery.json create mode 100644 src/main/generated/assets/galacticraft/models/machine/rocket_workbench.json delete mode 100644 src/main/resources/assets/galacticraft/models/machine/advanced_solar_panel.json delete mode 100644 src/main/resources/assets/galacticraft/models/machine/basic_solar_panel.json delete mode 100644 src/main/resources/assets/galacticraft/models/machine/oxygen_collector.json delete mode 100644 src/main/resources/assets/galacticraft/models/machine/oxygen_storage_module.json delete mode 100644 src/main/resources/assets/galacticraft/models/machine/refinery.json diff --git a/src/main/generated/assets/galacticraft/blockstates/oxygen_sealer.json b/src/main/generated/assets/galacticraft/blockstates/oxygen_sealer.json deleted file mode 100644 index 02d68cc6e..000000000 --- a/src/main/generated/assets/galacticraft/blockstates/oxygen_sealer.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "galacticraft:machine/oxygen_sealer" - } - } -} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/blockstates/rocket_workbench.json b/src/main/generated/assets/galacticraft/blockstates/rocket_workbench.json index 64cb5e5f0..46a3012c9 100644 --- a/src/main/generated/assets/galacticraft/blockstates/rocket_workbench.json +++ b/src/main/generated/assets/galacticraft/blockstates/rocket_workbench.json @@ -1,7 +1,7 @@ { "variants": { "": { - "model": "galacticraft:block/rocket_workbench" + "model": "galacticraft:machine/rocket_workbench" } } } \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/item/oxygen_sealer.json b/src/main/generated/assets/galacticraft/models/item/oxygen_sealer.json deleted file mode 100644 index da43dc10a..000000000 --- a/src/main/generated/assets/galacticraft/models/item/oxygen_sealer.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "galacticraft:block/oxygen_sealer" -} \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/circuit_fabricator.json b/src/main/generated/assets/galacticraft/models/machine/circuit_fabricator.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/circuit_fabricator.json rename to src/main/generated/assets/galacticraft/models/machine/circuit_fabricator.json diff --git a/src/main/resources/assets/galacticraft/models/machine/coal_generator.json b/src/main/generated/assets/galacticraft/models/machine/coal_generator.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/coal_generator.json rename to src/main/generated/assets/galacticraft/models/machine/coal_generator.json diff --git a/src/main/resources/assets/galacticraft/models/machine/compressor.json b/src/main/generated/assets/galacticraft/models/machine/compressor.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/compressor.json rename to src/main/generated/assets/galacticraft/models/machine/compressor.json diff --git a/src/main/resources/assets/galacticraft/models/machine/electric_arc_furnace.json b/src/main/generated/assets/galacticraft/models/machine/electric_arc_furnace.json similarity index 98% rename from src/main/resources/assets/galacticraft/models/machine/electric_arc_furnace.json rename to src/main/generated/assets/galacticraft/models/machine/electric_arc_furnace.json index 859b4dbd5..20704eddf 100644 --- a/src/main/resources/assets/galacticraft/models/machine/electric_arc_furnace.json +++ b/src/main/generated/assets/galacticraft/models/machine/electric_arc_furnace.json @@ -3,4 +3,4 @@ "sprites": { "sprite": "galacticraft:block/electric_arc_furnace" } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/electric_compressor.json b/src/main/generated/assets/galacticraft/models/machine/electric_compressor.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/electric_compressor.json rename to src/main/generated/assets/galacticraft/models/machine/electric_compressor.json diff --git a/src/main/resources/assets/galacticraft/models/machine/electric_furnace.json b/src/main/generated/assets/galacticraft/models/machine/electric_furnace.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/electric_furnace.json rename to src/main/generated/assets/galacticraft/models/machine/electric_furnace.json diff --git a/src/main/resources/assets/galacticraft/models/machine/energy_storage_module.json b/src/main/generated/assets/galacticraft/models/machine/energy_storage_module.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/energy_storage_module.json rename to src/main/generated/assets/galacticraft/models/machine/energy_storage_module.json diff --git a/src/main/resources/assets/galacticraft/models/machine/food_canner.json b/src/main/generated/assets/galacticraft/models/machine/food_canner.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/food_canner.json rename to src/main/generated/assets/galacticraft/models/machine/food_canner.json index 488777b0d..75f5f54bb 100644 --- a/src/main/resources/assets/galacticraft/models/machine/food_canner.json +++ b/src/main/generated/assets/galacticraft/models/machine/food_canner.json @@ -1,8 +1,8 @@ { "machinelib:generate": "machinelib:z_axis", "sprites": { - "front": "galacticraft:block/food_canner", "back": "galacticraft:block/food_canner_back", + "front": "galacticraft:block/food_canner", "sided": true } } \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/fuel_loader.json b/src/main/generated/assets/galacticraft/models/machine/fuel_loader.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/fuel_loader.json rename to src/main/generated/assets/galacticraft/models/machine/fuel_loader.json index 8781c25ef..66e1032b0 100644 --- a/src/main/resources/assets/galacticraft/models/machine/fuel_loader.json +++ b/src/main/generated/assets/galacticraft/models/machine/fuel_loader.json @@ -1,8 +1,8 @@ { "machinelib:generate": "machinelib:z_axis", "sprites": { - "front": "galacticraft:block/fuel_loader_controls", "back": "galacticraft:block/fuel_loader_controls", + "front": "galacticraft:block/fuel_loader_controls", "sided": false } } \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/oxygen_bubble_distributor.json b/src/main/generated/assets/galacticraft/models/machine/oxygen_bubble_distributor.json similarity index 66% rename from src/main/resources/assets/galacticraft/models/machine/oxygen_bubble_distributor.json rename to src/main/generated/assets/galacticraft/models/machine/oxygen_bubble_distributor.json index 9ccde990a..9048c9436 100644 --- a/src/main/resources/assets/galacticraft/models/machine/oxygen_bubble_distributor.json +++ b/src/main/generated/assets/galacticraft/models/machine/oxygen_bubble_distributor.json @@ -1,6 +1,7 @@ { "machinelib:generate": "machinelib:single", "sprites": { + "particle": "galacticraft:block/oxygen_bubble_distributor", "sprite": "galacticraft:block/oxygen_bubble_distributor" } } \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/machine/oxygen_collector.json b/src/main/generated/assets/galacticraft/models/machine/oxygen_collector.json new file mode 100644 index 000000000..ef1623e42 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/machine/oxygen_collector.json @@ -0,0 +1,7 @@ +{ + "machinelib:generate": "machinelib:single", + "sprites": { + "particle": "galacticraft:block/oxygen_collector", + "sprite": "galacticraft:block/oxygen_collector" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/oxygen_compressor.json b/src/main/generated/assets/galacticraft/models/machine/oxygen_compressor.json similarity index 100% rename from src/main/resources/assets/galacticraft/models/machine/oxygen_compressor.json rename to src/main/generated/assets/galacticraft/models/machine/oxygen_compressor.json index fcd76c2f7..045400b25 100644 --- a/src/main/resources/assets/galacticraft/models/machine/oxygen_compressor.json +++ b/src/main/generated/assets/galacticraft/models/machine/oxygen_compressor.json @@ -1,8 +1,8 @@ { "machinelib:generate": "machinelib:z_axis", "sprites": { - "front": "galacticraft:block/oxygen_compressor", "back": "galacticraft:block/oxygen_compressor_back", + "front": "galacticraft:block/oxygen_compressor", "sided": true } } \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/oxygen_decompressor.json b/src/main/generated/assets/galacticraft/models/machine/oxygen_decompressor.json similarity index 70% rename from src/main/resources/assets/galacticraft/models/machine/oxygen_decompressor.json rename to src/main/generated/assets/galacticraft/models/machine/oxygen_decompressor.json index e6f4744bc..1ce7c8525 100644 --- a/src/main/resources/assets/galacticraft/models/machine/oxygen_decompressor.json +++ b/src/main/generated/assets/galacticraft/models/machine/oxygen_decompressor.json @@ -1,8 +1,8 @@ { "machinelib:generate": "machinelib:z_axis", "sprites": { + "back": "galacticraft:block/oxygen_decompressor_back", "front": "galacticraft:block/oxygen_decompressor", - "back": "galacticraft:block/oxygen_compressor_back", "sided": true } } \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/oxygen_sealer.json b/src/main/generated/assets/galacticraft/models/machine/oxygen_sealer.json similarity index 80% rename from src/main/resources/assets/galacticraft/models/machine/oxygen_sealer.json rename to src/main/generated/assets/galacticraft/models/machine/oxygen_sealer.json index d30644978..e4211588b 100644 --- a/src/main/resources/assets/galacticraft/models/machine/oxygen_sealer.json +++ b/src/main/generated/assets/galacticraft/models/machine/oxygen_sealer.json @@ -4,12 +4,12 @@ "top": "galacticraft:block/oxygen_sealer_top" }, "textures": { - "up": "galacticraft:block/oxygen_sealer_top", "down": "galacticraft:block/machine", + "east": "galacticraft:block/machine_side", "north": "galacticraft:block/machine_side", + "particle": "galacticraft:block/machine", "south": "galacticraft:block/machine_side", - "east": "galacticraft:block/machine_side", - "west": "galacticraft:block/machine_side", - "particle": "galacticraft:block/machine" + "up": "galacticraft:block/oxygen_sealer_top", + "west": "galacticraft:block/machine_side" } } \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/machine/oxygen_storage_module.json b/src/main/generated/assets/galacticraft/models/machine/oxygen_storage_module.json new file mode 100644 index 000000000..4ef24116e --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/machine/oxygen_storage_module.json @@ -0,0 +1,8 @@ +{ + "machinelib:generate": "machinelib:z_axis", + "sprites": { + "back": "galacticraft:block/oxygen_storage_model_8", + "front": "galacticraft:block/oxygen_storage_model_8", + "sided": false + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/machine/refinery.json b/src/main/generated/assets/galacticraft/models/machine/refinery.json new file mode 100644 index 000000000..f4e4b2da4 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/machine/refinery.json @@ -0,0 +1,8 @@ +{ + "machinelib:generate": "machinelib:z_axis", + "sprites": { + "back": "galacticraft:block/refinery_back", + "front": "galacticraft:block/refinery_front", + "sided": true + } +} \ No newline at end of file diff --git a/src/main/generated/assets/galacticraft/models/machine/rocket_workbench.json b/src/main/generated/assets/galacticraft/models/machine/rocket_workbench.json new file mode 100644 index 000000000..bb71976f3 --- /dev/null +++ b/src/main/generated/assets/galacticraft/models/machine/rocket_workbench.json @@ -0,0 +1,15 @@ +{ + "machinelib:generate": "machinelib:front_face", + "sprites": { + "sprite": "galacticraft:block/refinery_front" + }, + "textures": { + "down": "galacticraft:block/machine_side", + "east": "galacticraft:block/machine_side", + "north": "galacticraft:block/machine_side", + "particle": "galacticraft:block/machine_side", + "south": "galacticraft:block/machine_side", + "up": "galacticraft:block/machine_side", + "west": "galacticraft:block/machine_side" + } +} \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/tags/blocks/machines.json b/src/main/generated/data/galacticraft/tags/blocks/machines.json index 111b488c9..2e0a71a0b 100644 --- a/src/main/generated/data/galacticraft/tags/blocks/machines.json +++ b/src/main/generated/data/galacticraft/tags/blocks/machines.json @@ -18,6 +18,7 @@ "galacticraft:oxygen_compressor", "galacticraft:food_canner", "galacticraft:oxygen_storage_module", - "galacticraft:fuel_loader" + "galacticraft:fuel_loader", + "galacticraft:rocket_workbench" ] } \ No newline at end of file diff --git a/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json b/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json index e3d05e3e6..b24e8f59d 100644 --- a/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json +++ b/src/main/generated/data/galacticraft/worldgen/biome/asteroid_field.json @@ -13,7 +13,7 @@ "max_delay": 24000, "min_delay": 12000, "replace_current_music": false, - "sound": "galacticraft:music.music_moon" + "sound": "galacticraft:music.music_orbit" }, "sky_color": 0, "water_color": 0, @@ -57,5 +57,5 @@ "water_ambient": [], "water_creature": [] }, - "temperature": -2.0 + "temperature": 2.0 } \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java b/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java index e16468d2e..41f1fbc56 100644 --- a/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java +++ b/src/main/java/dev/galacticraft/mod/data/GCDataGenerator.java @@ -82,7 +82,6 @@ public void onInitializeDataGenerator(@NotNull FabricDataGenerator generator) { pack.addProvider(GCStructureTagProvider::new); // world generation -// pack.addProvider(BootstrapDataProvider.create("Noise", GCNoiseData::bootstrapRegistries)); pack.addProvider(BootstrapDataProvider.create("Density Functions", GCDensityFunctions::bootstrapRegistries)); pack.addProvider(BootstrapDataProvider.create("Biomes", GCBiomes::bootstrapRegistries)); pack.addProvider(BootstrapDataProvider.create("Dimension Types", GCDimensionTypes::bootstrapRegistries)); diff --git a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java index 8cf44452f..9b382910f 100644 --- a/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/model/GCModelProvider.java @@ -23,6 +23,8 @@ package dev.galacticraft.mod.data.model; import com.google.common.collect.Maps; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.content.GCBlockRegistry; import dev.galacticraft.mod.content.GCBlocks; @@ -50,6 +52,7 @@ import org.jetbrains.annotations.Contract; import java.util.List; +import java.util.function.Supplier; public class GCModelProvider extends FabricModelProvider { private static final TexturedModel.Provider DETAILED_DECORATION = TexturedModel.createDefault(GCModelProvider::detailedTexture, ModelTemplates.CUBE_BOTTOM_TOP); @@ -134,7 +137,6 @@ public void generateBlockStateModels(BlockModelGenerators generator) { generator.createTrivialCube(GCBlocks.HEAVY_SEALABLE_ALUMINUM_WIRE); createLaunchPadBlock(GCBlocks.FUELING_PAD, generator); createLaunchPadBlock(GCBlocks.ROCKET_LAUNCH_PAD, generator); - generator.createNonTemplateModelBlock(GCBlocks.ROCKET_WORKBENCH); generator.createNonTemplateModelBlock(GCBlocks.FALLEN_METEOR); // LIGHT PANELS @@ -223,25 +225,25 @@ public void generateBlockStateModels(BlockModelGenerators generator) { // generator.createNonTemplateModelBlock(GCBlocks.CRYOGENIC_CHAMBER); generator.createNonTemplateModelBlock(GCBlocks.PLAYER_TRANSPORT_TUBE); - //todo gen models (not just blockstates) - createMachineDelegate(generator, GCBlocks.CIRCUIT_FABRICATOR); - createMachineDelegate(generator, GCBlocks.COMPRESSOR); - createMachineDelegate(generator, GCBlocks.ELECTRIC_COMPRESSOR); - createMachineDelegate(generator, GCBlocks.COAL_GENERATOR); + createMachineDelegateFrontFace(generator, GCBlocks.CIRCUIT_FABRICATOR); + createMachineDelegateFrontFace(generator, GCBlocks.COMPRESSOR); + createMachineDelegateFrontFace(generator, GCBlocks.ELECTRIC_COMPRESSOR); + createMachineDelegateFrontFace(generator, GCBlocks.COAL_GENERATOR); + createMachineDelegateFrontFace(generator, GCBlocks.ROCKET_WORKBENCH, "refinery_front", "machine_side"); //Todo not sure if its supposed to be a multiblock model? createMachineDelegate(generator, GCBlocks.BASIC_SOLAR_PANEL); createMachineDelegate(generator, GCBlocks.ADVANCED_SOLAR_PANEL); - createMachineDelegate(generator, GCBlocks.ENERGY_STORAGE_MODULE); - createMachineDelegate(generator, GCBlocks.ELECTRIC_FURNACE); - createMachineDelegate(generator, GCBlocks.ELECTRIC_ARC_FURNACE); - createMachineDelegate(generator, GCBlocks.REFINERY); - createMachineDelegate(generator, GCBlocks.OXYGEN_COLLECTOR); - createMachineDelegate(generator, GCBlocks.OXYGEN_SEALER); - createMachineDelegate(generator, GCBlocks.OXYGEN_BUBBLE_DISTRIBUTOR); - createMachineDelegate(generator, GCBlocks.OXYGEN_DECOMPRESSOR); - createMachineDelegate(generator, GCBlocks.OXYGEN_COMPRESSOR); - createMachineDelegate(generator, GCBlocks.FOOD_CANNER); - createMachineDelegate(generator, GCBlocks.OXYGEN_STORAGE_MODULE); - createMachineDelegate(generator, GCBlocks.FUEL_LOADER); + createMachineDelegateFrontFace(generator, GCBlocks.ENERGY_STORAGE_MODULE, "energy_storage_module_0"); + createMachineDelegateFrontFace(generator, GCBlocks.ELECTRIC_FURNACE); + createMachineDelegateFrontFace(generator, GCBlocks.ELECTRIC_ARC_FURNACE); + createMachineDelegateZAxis(generator, GCBlocks.REFINERY, "refinery_front", "refinery_back"); + createMachineDelegateSingle(generator, GCBlocks.OXYGEN_COLLECTOR, "oxygen_collector"); + createMachineDelegateColumn(generator, GCBlocks.OXYGEN_SEALER, "oxygen_sealer", "oxygen_sealer_top", "machine", "machine_side"); //column with particle + createMachineDelegateSingle(generator, GCBlocks.OXYGEN_BUBBLE_DISTRIBUTOR, "oxygen_bubble_distributor"); + createMachineDelegateZAxis(generator, GCBlocks.OXYGEN_DECOMPRESSOR, "oxygen_decompressor", "oxygen_decompressor_back"); + createMachineDelegateZAxis(generator, GCBlocks.OXYGEN_COMPRESSOR, "oxygen_compressor", "oxygen_compressor_back"); + createMachineDelegateZAxis(generator, GCBlocks.FOOD_CANNER, "food_canner", "food_canner_back"); + createMachineDelegateZAxis(generator, GCBlocks.OXYGEN_STORAGE_MODULE, "oxygen_storage_model_8"); + createMachineDelegateZAxis(generator, GCBlocks.FUEL_LOADER, "fuel_loader_controls"); generator.createNonTemplateModelBlock(GCBlocks.CRUDE_OIL); generator.createNonTemplateModelBlock(GCBlocks.FUEL); @@ -335,10 +337,123 @@ public static ResourceLocation getMachineModelLocation(Block block) { return resourceLocation.withPrefix("machine/"); } - private static void createMachineDelegate(BlockModelGenerators generator, Block block) { //todo: look into why we need this prefix + private static void createMachineDelegateFrontFace(BlockModelGenerators generator, Block block) { + JsonObject customJson = new JsonObject(); + customJson.addProperty("machinelib:generate", "machinelib:front_face"); + + JsonObject sprites = new JsonObject(); + sprites.addProperty("sprite", getMachineModelLocation(block).toString().replace("machine", "block")); + + customJson.add("sprites", sprites); + Supplier jsonSupplier = () -> customJson; + generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); + generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); + } + + private static void createMachineDelegate(BlockModelGenerators generator, Block block) { + generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); + } + + private static void createMachineDelegateFrontFace(BlockModelGenerators generator, Block block, String id) { + JsonObject customJson = new JsonObject(); + customJson.addProperty("machinelib:generate", "machinelib:front_face"); + + JsonObject sprites = new JsonObject(); + sprites.addProperty("sprite", "galacticraft:block/" + id); + + customJson.add("sprites", sprites); + Supplier jsonSupplier = () -> customJson; + generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); + generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); + } + + private static void createMachineDelegateFrontFace(BlockModelGenerators generator, Block block, String id, String sides) { + JsonObject customJson = new JsonObject(); + customJson.addProperty("machinelib:generate", "machinelib:front_face"); + + JsonObject sprites = new JsonObject(); + sprites.addProperty("sprite", "galacticraft:block/" + id); + customJson.add("sprites", sprites); + JsonObject textures = new JsonObject(); + textures.addProperty("up", "galacticraft:block/" + sides); + textures.addProperty("down", "galacticraft:block/" + sides); + textures.addProperty("north", "galacticraft:block/" + sides); + textures.addProperty("east", "galacticraft:block/" + sides); + textures.addProperty("south", "galacticraft:block/" + sides); + textures.addProperty("west", "galacticraft:block/" + sides); + textures.addProperty("particle", "galacticraft:block/" + sides); + customJson.add("textures", textures); + Supplier jsonSupplier = () -> customJson; + generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); + generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); + } + + private static void createMachineDelegateZAxis(BlockModelGenerators generator, Block block, String id) { + JsonObject customJson = new JsonObject(); + customJson.addProperty("machinelib:generate", "machinelib:z_axis"); + + JsonObject sprites = new JsonObject(); + sprites.addProperty("front", "galacticraft:block/" + id); + sprites.addProperty("back", "galacticraft:block/" + id); + sprites.addProperty("sided", false); + + + customJson.add("sprites", sprites); + Supplier jsonSupplier = () -> customJson; + generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); + generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); + } + + private static void createMachineDelegateZAxis(BlockModelGenerators generator, Block block, String id, String id2) { + JsonObject customJson = new JsonObject(); + customJson.addProperty("machinelib:generate", "machinelib:z_axis"); + + JsonObject sprites = new JsonObject(); + sprites.addProperty("front", "galacticraft:block/" + id); + sprites.addProperty("back", "galacticraft:block/" + id2); + sprites.addProperty("sided", true); + + + customJson.add("sprites", sprites); + Supplier jsonSupplier = () -> customJson; + generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); + generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); + } + + private static void createMachineDelegateSingle(BlockModelGenerators generator, Block block, String id) { + JsonObject customJson = new JsonObject(); + customJson.addProperty("machinelib:generate", "machinelib:single"); + + JsonObject sprites = new JsonObject(); + sprites.addProperty("sprite", "galacticraft:block/" + id); + sprites.addProperty("particle", "galacticraft:block/" + id); + + customJson.add("sprites", sprites); + Supplier jsonSupplier = () -> customJson; + generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); generator.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(block, getMachineModelLocation(block))); } + private static void createMachineDelegateColumn(BlockModelGenerators generator, Block block, String id, String top, String bottom, String side) { + JsonObject customJson = new JsonObject(); + customJson.addProperty("machinelib:generate", "galacticraft:" + id); + + JsonObject sprites = new JsonObject(); + sprites.addProperty("top", "galacticraft:block/" + top); + customJson.add("sprites", sprites); + JsonObject textures = new JsonObject(); + textures.addProperty("up", "galacticraft:block/" + top); + textures.addProperty("down", "galacticraft:block/" + bottom); + textures.addProperty("north", "galacticraft:block/" + side); + textures.addProperty("east", "galacticraft:block/" + side); + textures.addProperty("south", "galacticraft:block/" + side); + textures.addProperty("west", "galacticraft:block/" + side); + textures.addProperty("particle", "galacticraft:block/" + bottom); + customJson.add("textures", textures); + Supplier jsonSupplier = () -> customJson; + generator.modelOutput.accept(getMachineModelLocation(block), jsonSupplier); + } + @Override public void generateItemModels(ItemModelGenerators generator) { // MATERIALS diff --git a/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java b/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java index 2d0797af2..43ebea907 100644 --- a/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java +++ b/src/main/java/dev/galacticraft/mod/data/tag/GCBlockTagProvider.java @@ -86,7 +86,8 @@ protected void addTags(HolderLookup.Provider provider) { GCBlocks.OXYGEN_COMPRESSOR, GCBlocks.FOOD_CANNER, GCBlocks.OXYGEN_STORAGE_MODULE, - GCBlocks.FUEL_LOADER + GCBlocks.FUEL_LOADER, + GCBlocks.ROCKET_WORKBENCH ); this.tag(BlockTags.CLIMBABLE) diff --git a/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java b/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java index 0b73c744f..289bc52bc 100644 --- a/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java +++ b/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java @@ -80,14 +80,17 @@ private static InteractionResultHolder onPlayerUseItem(Player player, { ItemStack itemStack = player.getItemInHand(hand); - if (itemStack.getItem() instanceof CannedFoodItem) + if (itemStack.isEdible()) { - return InteractionResultHolder.pass(itemStack); - } else { + if (itemStack.getItem() instanceof CannedFoodItem) + { + return InteractionResultHolder.pass(itemStack); + } else { player.displayClientMessage(Component.literal("You cannot eat this here!").withColor(Color.RED.getRGB()), true); player.playNotifySound(SoundEvents.GENERIC_EAT, player.getSoundSource(), 1.0F, 1.0F); - return InteractionResultHolder.fail(itemStack); + return InteractionResultHolder.fail(itemStack); + } } } return InteractionResultHolder.pass(player.getItemInHand(hand)); diff --git a/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java b/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java index 6005e1211..3d2a33a4b 100644 --- a/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java +++ b/src/main/java/dev/galacticraft/mod/world/biome/AsteroidBiomes.java @@ -47,15 +47,6 @@ public static void monsters(MobSpawnSettings.Builder builder, int zombieWeight, // builder.addSpawn(MobCategory.MONSTER, new MobSpawnSettings.SpawnerData(GCEntityTypes.EVOLVED_WITCH, 5, 1, 1)); } - public static void addDefaultAsteroidOres(BiomeGenerationSettings.Builder builder) { -// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_COPPER_MOON); -// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_COPPER_LARGE_MOON); -// -// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_TIN_SMALL_MOON); -// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_TIN_MIDDLE_MOON); -// builder.addFeature(GenerationStep.Decoration.UNDERGROUND_ORES, GCOrePlacedFeatures.ORE_TIN_UPPER_MOON); - } - public static Biome asteroid( HolderGetter featureGetter, HolderGetter> carverGetter ) { @@ -67,16 +58,13 @@ public static Biome asteroid( .fogColor(0) .skyColor(0) .ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS) - .backgroundMusic(Musics.createGameMusic(GCSounds.MUSIC_MOON)); - - AsteroidBiomes.addDefaultAsteroidOres(generation); -// AsteroidBiomes.addDefaultSoftDisks(generation); + .backgroundMusic(Musics.createGameMusic(GCSounds.MUSIC_ORBIT)); AsteroidBiomes.monsters(spawnBuilder, 95, 5, 100); return new Biome.BiomeBuilder() .mobSpawnSettings(spawnBuilder.build()) .hasPrecipitation(false) - .temperature(-2F) // temp is hot to prevent snow + .temperature(2.0F) .downfall(0.5F) .specialEffects(specialEffects.build()) .generationSettings(generation.build()) diff --git a/src/main/resources/assets/galacticraft/models/machine/advanced_solar_panel.json b/src/main/resources/assets/galacticraft/models/machine/advanced_solar_panel.json deleted file mode 100644 index 24138b914..000000000 --- a/src/main/resources/assets/galacticraft/models/machine/advanced_solar_panel.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "machinelib:generate": "galacticraft:solar_panel", - "sprites": { - "front": "galacticraft:block/advanced_solar_panel", - "top": "galacticraft:block/solar_panel" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/basic_solar_panel.json b/src/main/resources/assets/galacticraft/models/machine/basic_solar_panel.json deleted file mode 100644 index 79b7d82f5..000000000 --- a/src/main/resources/assets/galacticraft/models/machine/basic_solar_panel.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "machinelib:generate": "galacticraft:solar_panel", - "sprites": { - "front": "galacticraft:block/basic_solar_panel", - "top": "galacticraft:block/solar_panel" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/oxygen_collector.json b/src/main/resources/assets/galacticraft/models/machine/oxygen_collector.json deleted file mode 100644 index 305edaef6..000000000 --- a/src/main/resources/assets/galacticraft/models/machine/oxygen_collector.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "machinelib:generate": "machinelib:single", - "sprites": { - "sprite": "galacticraft:block/oxygen_collector", - "particle": "galacticraft:block/oxygen_collector" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/oxygen_storage_module.json b/src/main/resources/assets/galacticraft/models/machine/oxygen_storage_module.json deleted file mode 100644 index 439458216..000000000 --- a/src/main/resources/assets/galacticraft/models/machine/oxygen_storage_module.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "machinelib:generate": "machinelib:z_axis", - "sprites": { - "front": "galacticraft:block/oxygen_storage_module_8", - "back": "galacticraft:block/oxygen_storage_module_8", - "sided": false - } -} \ No newline at end of file diff --git a/src/main/resources/assets/galacticraft/models/machine/refinery.json b/src/main/resources/assets/galacticraft/models/machine/refinery.json deleted file mode 100644 index 3bb7f0e90..000000000 --- a/src/main/resources/assets/galacticraft/models/machine/refinery.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "machinelib:generate": "machinelib:z_axis", - "sprites": { - "front": "galacticraft:block/refinery_front", - "back": "galacticraft:block/refinery_back", - "sided": true - }, - "textures": { - "up": "galacticraft:block/machine", - "down": "galacticraft:block/machine", - "north": "galacticraft:block/refinery_front", - "south": "galacticraft:block/machine_side", - "east": "galacticraft:block/machine_side", - "west": "galacticraft:block/machine_side", - "particle": "galacticraft:block/machine" - } -} \ No newline at end of file From 8e8a2e298f67d030ed60aee7cb5595ff4ebeba9f Mon Sep 17 00:00:00 2001 From: maxryan008 <35043606+maxryan008@users.noreply.github.com> Date: Wed, 4 Sep 2024 00:01:08 +1000 Subject: [PATCH 23/23] Merged into main 1.21 branch Updated everything to work with 1.21 --- .gitattributes | 40 +- .gitignore | 443 +++++++++--------- gradle.properties | 2 +- .../assets/galacticraft/lang/en_us.json | 2 +- .../generated/data/c/tags/block/ores.json | 4 +- .../data/c/tags/{items => item}/foods.json | 2 - src/main/generated/data/c/tags/item/ores.json | 4 +- .../advancement/recipes/misc/food_canner.json | 8 +- .../galacticraft/dimension_type/asteroid.json | 6 +- .../blocks/asteroid_aluminum_ore.json | 18 +- .../loot_table/blocks/asteroid_iron_ore.json | 18 +- .../blocks/asteroid_silicon_ore.json | 18 +- .../loot_table/blocks/mars_copper_ore.json | 16 +- .../loot_table/blocks/mars_iron_ore.json | 16 +- .../loot_table/blocks/mars_tin_ore.json | 16 +- .../data/galacticraft/recipe/food_canner.json | 3 +- .../galacticraft/mod/GalacticraftClient.java | 72 +-- .../gui/screen/ingame/FoodCannerScreen.java | 8 +- .../gui/screen/ingame/OxygenSealerScreen.java | 4 +- .../render/dimension/AsteroidSkyRenderer.java | 38 +- .../mod/compat/AppleSkinEventHandler.java | 3 +- .../mod/content/ClientCannedFoodTooltip.java | 33 +- .../mod/content/GCChunkGenerator.java | 9 +- .../mod/content/GCChunkGeneratorRegistry.java | 3 +- .../entity/machine/FoodCannerBlockEntity.java | 280 +++++++---- .../machine/OxygenSealerBlockEntity.java | 6 +- .../block/machine/OxygenSealerBlock.java | 25 +- .../mod/content/entity/SmallAsteroid.java | 57 --- .../mod/content/item/CannedFoodItem.java | 136 +++--- .../mod/content/item/GCItems.java | 10 +- .../mod/events/GCEventHandlers.java | 8 +- .../mod/lookup/GCApiLookupProviders.java | 22 +- .../galacticraft/mod/machine/BlockCheck.java | 22 + .../galacticraft/mod/machine/FloodSearch.java | 22 + .../dev/galacticraft/mod/machine/Region.java | 22 + .../mod/machine/SealerGroupings.java | 22 + .../mod/machine/SealerManager.java | 22 + .../galacticraft/mod/machine/SolidCheck.java | 22 + .../mod/mixin/client/ClientTooltipMixin.java | 2 +- .../mod/mixin/client/FabricItemMixin.java | 47 +- .../mod/screen/FoodCannerMenu.java | 29 +- .../galacticraft/mod/screen/GCMenuTypes.java | 2 +- .../mod/world/dimension/GCLevelStems.java | 2 +- .../world/gen/GCNoiseGeneratorSettings.java | 6 - .../gen/custom/AsteroidChunkGenerator.java | 18 +- .../world/gen/custom/AsteroidSaveData.java | 14 +- .../gui/sprites/canned_food/background.png | Bin 0 -> 90 bytes .../sprites/canned_food/background.png.mcmeta | 10 + .../gui/sprites/canned_food/blocked_slot.png | Bin 0 -> 170 bytes .../textures/gui/sprites/canned_food/slot.png | Bin 0 -> 123 bytes 50 files changed, 891 insertions(+), 701 deletions(-) rename src/main/generated/data/c/tags/{items => item}/foods.json (80%) delete mode 100644 src/main/java/dev/galacticraft/mod/content/entity/SmallAsteroid.java create mode 100644 src/main/resources/assets/galacticraft/textures/gui/sprites/canned_food/background.png create mode 100644 src/main/resources/assets/galacticraft/textures/gui/sprites/canned_food/background.png.mcmeta create mode 100644 src/main/resources/assets/galacticraft/textures/gui/sprites/canned_food/blocked_slot.png create mode 100644 src/main/resources/assets/galacticraft/textures/gui/sprites/canned_food/slot.png diff --git a/.gitattributes b/.gitattributes index cc5dfffec..5c267e7c9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,20 +1,20 @@ -# Windows files (CRLF) -*.bat text eol=crlf - -# Text -*.properties text - -# Java -*.java text diff=java -*.gradle text diff=java -*.gradle.kts text diff=kotlin - -# Binary -*.class binary -*.dll binary -*.ear binary -*.jar binary -*.so binary -*.war binary - -**/.cache/* linguist-generated=true +# Windows files (CRLF) +*.bat text eol=crlf + +# Text +*.properties text + +# Java +*.java text diff=java +*.gradle text diff=java +*.gradle.kts text diff=kotlin + +# Binary +*.class binary +*.dll binary +*.ear binary +*.jar binary +*.so binary +*.war binary + +**/.cache/* linguist-generated=true diff --git a/.gitignore b/.gitignore index a8cf67018..c0afb43b5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,221 +1,222 @@ - -# Created by https://www.toptal.com/developers/gitignore/api/java,gradle,jetbrains+all,eclipse,visualstudiocode -# Edit at https://www.toptal.com/developers/gitignore?templates=java,gradle,jetbrains+all,eclipse,visualstudiocode - -### Eclipse ### -.metadata -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath -.recommenders - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# PyDev specific (Python IDE for Eclipse) -*.pydevproject - -# CDT-specific (C/C++ Development Tooling) -.cproject - -# CDT- autotools -.autotools - -# Java annotation processor (APT) -.factorypath - -# PDT-specific (PHP Development Tools) -.buildpath - -# sbteclipse plugin -.target - -# Tern plugin -.tern-project - -# TeXlipse plugin -.texlipse - -# STS (Spring Tool Suite) -.springBeans - -# Code Recommenders -.recommenders/ - -# Annotation Processing -.apt_generated/ -.apt_generated_test/ - -# Scala IDE specific (Scala & Java development for Eclipse) -.cache-main -.scala_dependencies -.worksheet - -# Uncomment this line if you wish to ignore the project description file. -# Typically, this file would be tracked if it contains build/dependency configurations: -#.project - -### Eclipse Patch ### -# Spring Boot Tooling -.sts4-cache/ - -### Java ### -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -### JetBrains+all ### -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/**/usage.statistics.xml -.idea/**/dictionaries -.idea/**/shelf - -# Generated files -.idea/**/contentModel.xml - -# Sensitive or high-churn files -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml -.idea/**/dbnavigator.xml - -# Gradle -.idea/**/gradle.xml -.idea/**/libraries - -# Gradle and Maven with auto-import -# When using Gradle or Maven with auto-import, you should exclude module files, -# since they will be recreated, and may cause churn. Uncomment if using -# auto-import. -# .idea/artifacts -# .idea/compiler.xml -# .idea/jarRepositories.xml -# .idea/modules.xml -# .idea/*.iml -# .idea/modules -# *.iml -# *.ipr - -# CMake -cmake-build-*/ - -# Mongo Explorer plugin -.idea/**/mongoSettings.xml - -# File-based project format -*.iws - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -# Editor-based Rest Client -.idea/httpRequests - -# Android studio 3.1+ serialized cache file -.idea/caches/build_file_checksums.ser - -### JetBrains+all Patch ### -# Ignores the whole .idea folder and all .iml files -# See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360 - -.idea/ - -# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 - -*.iml -modules.xml -.idea/misc.xml -*.ipr - -# Sonarlint plugin -.idea/sonarlint - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -### VisualStudioCode Patch ### -# Ignore all local history of files -.history - -### Gradle ### -.gradle -build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties - -### Gradle Patch ### -**/build/ - -# End of https://www.toptal.com/developers/gitignore/api/java,gradle,jetbrains+all,eclipse,visualstudiocode - -# FabricMC -run/ -remappedSrc/ -src/main/generated/.cache/ + +# Created by https://www.toptal.com/developers/gitignore/api/java,gradle,jetbrains+all,eclipse,visualstudiocode +# Edit at https://www.toptal.com/developers/gitignore?templates=java,gradle,jetbrains+all,eclipse,visualstudiocode + +### Eclipse ### +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ +.apt_generated_test/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +# Uncomment this line if you wish to ignore the project description file. +# Typically, this file would be tracked if it contains build/dependency configurations: +#.project + +### Eclipse Patch ### +# Spring Boot Tooling +.sts4-cache/ + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +### JetBrains+all ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### JetBrains+all Patch ### +# Ignores the whole .idea folder and all .iml files +# See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360 + +.idea/ + +# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 + +*.iml +modules.xml +.idea/misc.xml +*.ipr + +# Sonarlint plugin +.idea/sonarlint + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history + +### Gradle ### +.gradle +build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +### Gradle Patch ### +**/build/ + +# End of https://www.toptal.com/developers/gitignore/api/java,gradle,jetbrains+all,eclipse,visualstudiocode + +# FabricMC +run/ +remappedSrc/ +src/main/generated/.cache/ +src/main/generated/* diff --git a/gradle.properties b/gradle.properties index 430ac89dd..9bf4126dc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,5 +22,5 @@ machinelib.version=0.7.0+74 badpackets.version=0.8.1 wthit.version=12.3.0 obj.version=0.4.0 -appleskin.version=mc1.20.3-2.5.1 +appleskin.version=mc1.21-3.0.5 architectury.version=13.0.6 diff --git a/src/main/generated/assets/galacticraft/lang/en_us.json b/src/main/generated/assets/galacticraft/lang/en_us.json index bc8198983..32eafb7d1 100644 --- a/src/main/generated/assets/galacticraft/lang/en_us.json +++ b/src/main/generated/assets/galacticraft/lang/en_us.json @@ -1,6 +1,6 @@ { - "biome.galacticraft.asteroid_field": "Asteroid Field", "banner_pattern.galacticraft.rocket": "Rocket", + "biome.galacticraft.asteroid_field": "Asteroid Field", "biome.galacticraft.basaltic_mare": "Basaltic Mare", "biome.galacticraft.comet_tundra": "Comet Tundra", "biome.galacticraft.lunar_highlands": "Lunar Highlands", diff --git a/src/main/generated/data/c/tags/block/ores.json b/src/main/generated/data/c/tags/block/ores.json index f63a851d9..ec49ac103 100644 --- a/src/main/generated/data/c/tags/block/ores.json +++ b/src/main/generated/data/c/tags/block/ores.json @@ -10,11 +10,11 @@ "galacticraft:deepslate_tin_ore", "galacticraft:moon_tin_ore", "galacticraft:lunaslate_tin_ore", - "galacticraft:aluminum_ore", - "galacticraft:deepslate_aluminum_ore", "galacticraft:asteroid_aluminum_ore", "galacticraft:asteroid_iron_ore", "galacticraft:asteroid_silicon_ore", + "galacticraft:aluminum_ore", + "galacticraft:deepslate_aluminum_ore", "galacticraft:desh_ore", "galacticraft:ilmenite_ore", "galacticraft:galena_ore" diff --git a/src/main/generated/data/c/tags/items/foods.json b/src/main/generated/data/c/tags/item/foods.json similarity index 80% rename from src/main/generated/data/c/tags/items/foods.json rename to src/main/generated/data/c/tags/item/foods.json index ca81c0dba..1f9ac8577 100644 --- a/src/main/generated/data/c/tags/items/foods.json +++ b/src/main/generated/data/c/tags/item/foods.json @@ -1,7 +1,5 @@ { - "replace": false, "values": [ - "galacticraft:moon_berries", "galacticraft:cheese_curd", "galacticraft:cheese_slice", "galacticraft:burger_bun", diff --git a/src/main/generated/data/c/tags/item/ores.json b/src/main/generated/data/c/tags/item/ores.json index ec49ac103..f63a851d9 100644 --- a/src/main/generated/data/c/tags/item/ores.json +++ b/src/main/generated/data/c/tags/item/ores.json @@ -10,11 +10,11 @@ "galacticraft:deepslate_tin_ore", "galacticraft:moon_tin_ore", "galacticraft:lunaslate_tin_ore", + "galacticraft:aluminum_ore", + "galacticraft:deepslate_aluminum_ore", "galacticraft:asteroid_aluminum_ore", "galacticraft:asteroid_iron_ore", "galacticraft:asteroid_silicon_ore", - "galacticraft:aluminum_ore", - "galacticraft:deepslate_aluminum_ore", "galacticraft:desh_ore", "galacticraft:ilmenite_ore", "galacticraft:galena_ore" diff --git a/src/main/generated/data/galacticraft/advancement/recipes/misc/food_canner.json b/src/main/generated/data/galacticraft/advancement/recipes/misc/food_canner.json index ecf8d58c8..2d3d1b126 100644 --- a/src/main/generated/data/galacticraft/advancement/recipes/misc/food_canner.json +++ b/src/main/generated/data/galacticraft/advancement/recipes/misc/food_canner.json @@ -5,13 +5,7 @@ "conditions": { "items": [ { -<<<<<<<< HEAD:src/main/generated/data/galacticraft/advancement/recipes/misc/food_canner.json - "items": [ - "galacticraft:oxygen_concentrator" - ] -======== - "items": "galacticraft:tin_canister" ->>>>>>>> upstream/main:src/main/generated/data/galacticraft/advancement/recipes/food/canned_beef.json + "items": "galacticraft:oxygen_concentrator" } ] }, diff --git a/src/main/generated/data/galacticraft/dimension_type/asteroid.json b/src/main/generated/data/galacticraft/dimension_type/asteroid.json index 608a264ae..0f1792058 100644 --- a/src/main/generated/data/galacticraft/dimension_type/asteroid.json +++ b/src/main/generated/data/galacticraft/dimension_type/asteroid.json @@ -13,10 +13,8 @@ "monster_spawn_block_light_limit": 0, "monster_spawn_light_level": { "type": "minecraft:uniform", - "value": { - "max_inclusive": 7, - "min_inclusive": 0 - } + "max_inclusive": 7, + "min_inclusive": 0 }, "natural": false, "piglin_safe": false, diff --git a/src/main/generated/data/galacticraft/loot_table/blocks/asteroid_aluminum_ore.json b/src/main/generated/data/galacticraft/loot_table/blocks/asteroid_aluminum_ore.json index ccd32ffb6..8e26a078a 100644 --- a/src/main/generated/data/galacticraft/loot_table/blocks/asteroid_aluminum_ore.json +++ b/src/main/generated/data/galacticraft/loot_table/blocks/asteroid_aluminum_ore.json @@ -13,18 +13,20 @@ { "condition": "minecraft:match_tool", "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } } - } - ] + ] + } } } ], - "name": "minecraft:air" + "name": "galacticraft:asteroid_aluminum_ore" }, { "type": "minecraft:item", diff --git a/src/main/generated/data/galacticraft/loot_table/blocks/asteroid_iron_ore.json b/src/main/generated/data/galacticraft/loot_table/blocks/asteroid_iron_ore.json index 1b85b769a..2e3fc42d3 100644 --- a/src/main/generated/data/galacticraft/loot_table/blocks/asteroid_iron_ore.json +++ b/src/main/generated/data/galacticraft/loot_table/blocks/asteroid_iron_ore.json @@ -13,18 +13,20 @@ { "condition": "minecraft:match_tool", "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } } - } - ] + ] + } } } ], - "name": "minecraft:air" + "name": "galacticraft:asteroid_iron_ore" }, { "type": "minecraft:item", diff --git a/src/main/generated/data/galacticraft/loot_table/blocks/asteroid_silicon_ore.json b/src/main/generated/data/galacticraft/loot_table/blocks/asteroid_silicon_ore.json index b87844929..349d60235 100644 --- a/src/main/generated/data/galacticraft/loot_table/blocks/asteroid_silicon_ore.json +++ b/src/main/generated/data/galacticraft/loot_table/blocks/asteroid_silicon_ore.json @@ -13,18 +13,20 @@ { "condition": "minecraft:match_tool", "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } } - } - ] + ] + } } } ], - "name": "minecraft:air" + "name": "galacticraft:asteroid_silicon_ore" }, { "type": "minecraft:item", diff --git a/src/main/generated/data/galacticraft/loot_table/blocks/mars_copper_ore.json b/src/main/generated/data/galacticraft/loot_table/blocks/mars_copper_ore.json index b3afbe4ec..8d46e701e 100644 --- a/src/main/generated/data/galacticraft/loot_table/blocks/mars_copper_ore.json +++ b/src/main/generated/data/galacticraft/loot_table/blocks/mars_copper_ore.json @@ -13,14 +13,16 @@ { "condition": "minecraft:match_tool", "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } } - } - ] + ] + } } } ], diff --git a/src/main/generated/data/galacticraft/loot_table/blocks/mars_iron_ore.json b/src/main/generated/data/galacticraft/loot_table/blocks/mars_iron_ore.json index 7429ac44f..0b0ff1e1c 100644 --- a/src/main/generated/data/galacticraft/loot_table/blocks/mars_iron_ore.json +++ b/src/main/generated/data/galacticraft/loot_table/blocks/mars_iron_ore.json @@ -13,14 +13,16 @@ { "condition": "minecraft:match_tool", "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } } - } - ] + ] + } } } ], diff --git a/src/main/generated/data/galacticraft/loot_table/blocks/mars_tin_ore.json b/src/main/generated/data/galacticraft/loot_table/blocks/mars_tin_ore.json index fd7ed36c1..8ec0be6a5 100644 --- a/src/main/generated/data/galacticraft/loot_table/blocks/mars_tin_ore.json +++ b/src/main/generated/data/galacticraft/loot_table/blocks/mars_tin_ore.json @@ -13,14 +13,16 @@ { "condition": "minecraft:match_tool", "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } } - } - ] + ] + } } } ], diff --git a/src/main/generated/data/galacticraft/recipe/food_canner.json b/src/main/generated/data/galacticraft/recipe/food_canner.json index 9010619e4..2f2634f13 100644 --- a/src/main/generated/data/galacticraft/recipe/food_canner.json +++ b/src/main/generated/data/galacticraft/recipe/food_canner.json @@ -21,6 +21,7 @@ "SBS" ], "result": { - "item": "galacticraft:food_canner" + "count": 1, + "id": "galacticraft:food_canner" } } \ No newline at end of file diff --git a/src/main/java/dev/galacticraft/mod/GalacticraftClient.java b/src/main/java/dev/galacticraft/mod/GalacticraftClient.java index df47a96d6..8c03e98db 100644 --- a/src/main/java/dev/galacticraft/mod/GalacticraftClient.java +++ b/src/main/java/dev/galacticraft/mod/GalacticraftClient.java @@ -27,6 +27,7 @@ import dev.galacticraft.mod.client.GCKeyBinds; import dev.galacticraft.mod.client.gui.screen.ingame.*; import dev.galacticraft.mod.client.model.GCModelLoader; +import dev.galacticraft.mod.client.model.GCRenderTypes; import dev.galacticraft.mod.client.model.OxygenSealerSpriteProvider; import dev.galacticraft.mod.client.model.SolarPanelSpriteProvider; import dev.galacticraft.mod.client.model.types.ObjModel; @@ -49,6 +50,8 @@ import dev.galacticraft.mod.content.item.GCItems; import dev.galacticraft.mod.events.ClientEventHandler; import dev.galacticraft.mod.misc.cape.CapesLoader; +import dev.galacticraft.mod.network.c2s.OpenGcInventoryPayload; +import dev.galacticraft.mod.network.c2s.OpenRocketPayload; import dev.galacticraft.mod.particle.GCParticleTypes; import dev.galacticraft.mod.screen.GCMenuTypes; import dev.galacticraft.mod.screen.GCPlayerInventoryMenu; @@ -70,7 +73,11 @@ import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.ThrownItemRenderer; +import net.minecraft.core.component.DataComponents; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.server.packs.PackType; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.material.Fluids; import java.util.*; @@ -186,48 +193,49 @@ public void onInitializeClient() { LivingEntityFeatureRendererRegistrationCallback.EVENT.register((entityType, entityRenderer, registrationHelper, context) -> { }); + GCRenderTypes.init(); //couldn't be bothered finding a better way to get the texture of the items so overrides exists now List nameOverride = new ArrayList<>(); nameOverride.add(new String[]{"enchanted_golden_apple", "golden_apple"}); nameOverride.add(new String[]{"air", "lime_dye"}); ModelLoadingPlugin.register(GCModelLoader.INSTANCE); - GCRenderTypes.init(); - ClientTickEvents.END_CLIENT_TICK.register(client -> { - if (!colorsInitialized) - { - if (client.player != null && client.level != null) - { - CANNED_FOOD_ITEMS.forEach(cannedFoodItem -> { - Optional cannedItem = CannedFoodItem.getContents(cannedFoodItem.getDefaultInstance()).findFirst(); - if (cannedItem.isPresent()) { - String nameComponent = cannedItem.toString(); - String itemName = extractInsideBrackets(nameComponent); - assert itemName != null; - String[] parts = itemName.split(":"); - String namespace = parts[0]; - String item = parts[1]; - for (String[] element: nameOverride) - { - if (parts[1].equals(element[0])) - { - item = element[1]; - } - } - ResourceLocation textureLocation = new ResourceLocation(namespace, "textures/item/" + item + ".png"); - int avgColor = getAverageColor(textureLocation); - cannedFoodItem.setColor(avgColor); - } - }); - colorsInitialized = true; - } - } - }); + //Todo: make fix for the color of the labels based of component nbt +// ClientTickEvents.END_CLIENT_TICK.register(client -> { +// if (!colorsInitialized) +// { +// if (client.player != null && client.level != null) +// { +// CANNED_FOOD_ITEMS.forEach(cannedFoodItem -> { +// Optional cannedItem = CannedFoodItem.getContents(cannedFoodItem.getDefaultInstance()).stream().findFirst(); +// if (cannedItem.isPresent()) { +// String nameComponent = cannedItem.toString(); +// String itemName = extractInsideBrackets(nameComponent); +// assert itemName != null; +// String[] parts = itemName.split(":"); +// String namespace = parts[0]; +// String item = parts[1]; +// for (String[] element: nameOverride) +// { +// if (parts[1].equals(element[0])) +// { +// item = element[1]; +// } +// } +// ResourceLocation textureLocation = new ResourceLocation(namespace, "textures/item/" + item + ".png"); +// int avgColor = getAverageColor(textureLocation); +// cannedFoodItem.setColor(avgColor); +// } +// }); +// colorsInitialized = true; +// } +// } +// }); //For every edible food create a creative item of that canned food type for (Item item : BuiltInRegistries.ITEM) { - if (item.getFoodProperties() != null) + if (item.components().has(DataComponents.FOOD)) { if (!(item instanceof CannedFoodItem)) { diff --git a/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/FoodCannerScreen.java b/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/FoodCannerScreen.java index 6acfef48c..a619f7c57 100644 --- a/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/FoodCannerScreen.java +++ b/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/FoodCannerScreen.java @@ -22,14 +22,10 @@ package dev.galacticraft.mod.client.gui.screen.ingame; -import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import dev.galacticraft.machinelib.api.menu.MachineMenu; -import dev.galacticraft.machinelib.api.menu.sync.MenuSyncHandler; import dev.galacticraft.machinelib.client.api.screen.MachineScreen; import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.content.block.entity.machine.FoodCannerBlockEntity; -import dev.galacticraft.mod.machine.GCMachineStatuses; import dev.galacticraft.mod.screen.FoodCannerMenu; import dev.galacticraft.mod.util.DrawableUtil; import net.fabricmc.api.EnvType; @@ -37,9 +33,6 @@ import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Inventory; -import org.jetbrains.annotations.MustBeInvokedByOverriders; - -import java.util.function.Consumer; @Environment(EnvType.CLIENT) public class FoodCannerScreen extends MachineScreen { @@ -54,6 +47,7 @@ public FoodCannerScreen(FoodCannerMenu handler, Inventory inv, Component title) private void drawProgressBar(PoseStack matrices) { if (this.menu.state.isActive()) { int progress = this.menu.getProgress(); + System.out.println(progress); if (inBounds(progress, 1, 9)) { //transferring can diff --git a/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/OxygenSealerScreen.java b/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/OxygenSealerScreen.java index a924a00ee..05ccdd579 100644 --- a/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/OxygenSealerScreen.java +++ b/src/main/java/dev/galacticraft/mod/client/gui/screen/ingame/OxygenSealerScreen.java @@ -49,8 +49,8 @@ protected void renderForeground(GuiGraphics graphics, int mouseX, int mouseY, fl MachineStatus status = this.menu.state.getStatus(); graphics.drawString(this.font, Component.translatable(Translations.Ui.MACHINE_STATUS).append(status != null ? status.getText() : Component.empty()), this.leftPos + 50, this.topPos + 30, ChatFormatting.DARK_GRAY.getColor(), false); if (!status.equals(GCMachineStatuses.BLOCKED)) { - int insideArea = this.menu.machine.getInsideArea(); - int outsideArea = this.menu.machine.getOutsideArea(); + int insideArea = this.menu.be.getInsideArea(); + int outsideArea = this.menu.be.getOutsideArea(); graphics.drawString(this.font, Component.literal("INSIDE AREA: ").append(String.valueOf(insideArea)), this.leftPos + 50, this.topPos + 50, ChatFormatting.DARK_GRAY.getColor(), false); graphics.drawString(this.font, Component.literal("OUTSIDE AREA: ").append(String.valueOf(outsideArea)), this.leftPos + 50, this.topPos + 70, ChatFormatting.DARK_GRAY.getColor(), false); } diff --git a/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidSkyRenderer.java b/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidSkyRenderer.java index 6ca4ec6c6..8be3deb56 100644 --- a/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidSkyRenderer.java +++ b/src/main/java/dev/galacticraft/mod/client/render/dimension/AsteroidSkyRenderer.java @@ -51,16 +51,16 @@ public void render(WorldRenderContext context) { RenderSystem.disableBlend(); RenderSystem.depthMask(false); - final PoseStack matrices = context.matrixStack(); - final BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + PoseStack matrices = new PoseStack(); + matrices.mulPose(context.positionMatrix()); context.profiler().push("stars"); matrices.pushPose(); - matrices.mulPose(Axis.YP.rotationDegrees((context.world().getTimeOfDay(context.tickDelta()) * 360.0f) - 90F)); - matrices.mulPose(Axis.XP.rotationDegrees(context.world().getTimeOfDay(context.tickDelta()) * 360.0f)); + matrices.mulPose(Axis.YP.rotationDegrees((context.world().getTimeOfDay(context.tickCounter().getRealtimeDeltaTicks()) * 360.0f) - 90F)); + matrices.mulPose(Axis.XP.rotationDegrees((context.world().getTimeOfDay(context.tickCounter().getRealtimeDeltaTicks())) * 360.0f)); matrices.mulPose(Axis.YP.rotationDegrees(-19.0F)); - this.starManager.render(context.matrixStack(), context.projectionMatrix(), context.world(), context.tickDelta()); + this.starManager.render(matrices, context.projectionMatrix(), context.world(), context.tickCounter().getRealtimeDeltaTicks()); matrices.popPose(); context.profiler().pop(); @@ -69,19 +69,19 @@ public void render(WorldRenderContext context) { matrices.pushPose(); matrices.mulPose(Axis.YP.rotationDegrees(-90.0F)); - matrices.mulPose(Axis.XP.rotationDegrees(context.world().getTimeOfDay(context.tickDelta()) * 360.0f)); + matrices.mulPose(Axis.XP.rotationDegrees(context.world().getTimeOfDay(context.tickCounter().getRealtimeDeltaTicks()) * 360.0f)); Matrix4f matrix = matrices.last().pose(); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); float size = 6.0F; RenderSystem.setShader(GameRenderer::getPositionTexShader); RenderSystem.setShaderTexture(0, SUN_TEXTURE); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); - buffer.vertex(matrix, -size, 100.0F, -size).uv(0.0F, 0.0F).endVertex(); - buffer.vertex(matrix, size, 100.0F, -size).uv(1.0F, 0.0F).endVertex(); - buffer.vertex(matrix, size, 100.0F, size).uv(1.0F, 1.0F).endVertex(); - buffer.vertex(matrix, -size, 100.0F, size).uv(0.0F, 1.0F).endVertex(); - BufferUploader.drawWithShader(buffer.end()); + BufferBuilder buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + buffer.addVertex(matrix, -size, 100.0F, -size).setUv(0.0F, 0.0F) + .addVertex(matrix, size, 100.0F, -size).setUv(1.0F, 0.0F) + .addVertex(matrix, size, 100.0F, size).setUv(1.0F, 1.0F) + .addVertex(matrix, -size, 100.0F, size).setUv(0.0F, 1.0F); + BufferUploader.drawWithShader(buffer.buildOrThrow()); matrices.popPose(); context.profiler().pop(); @@ -94,17 +94,17 @@ public void render(WorldRenderContext context) { assert Minecraft.getInstance().player != null; float earthRotation = (float) (context.world().getSharedSpawnPos().getZ() - Minecraft.getInstance().player.getZ()) * 0.01F; matrices.scale(0.6F, 0.6F, 0.6F); - matrices.mulPose(Axis.XP.rotationDegrees((context.world().getTimeOfDay(context.tickDelta()) * 360.0F) * 0.001F)); + matrices.mulPose(Axis.XP.rotationDegrees((context.world().getTimeOfDay(context.tickCounter().getRealtimeDeltaTicks()) * 360.0F) * 0.001F)); matrices.mulPose(Axis.XP.rotationDegrees(earthRotation + 200.0F)); RenderSystem.setShaderTexture(0, EARTH_TEXTURE); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); - buffer.vertex(matrix, -size, -100.0F, size).uv(0.0F, 1.0F).endVertex(); - buffer.vertex(matrix, size, -100.0F, size).uv(1.0F, 1.0F).endVertex(); - buffer.vertex(matrix, size, -100.0F, -size).uv(1.0F, 0.0F).endVertex(); - buffer.vertex(matrix, -size, -100.0F, -size).uv(0.0F, 0.0F).endVertex(); - BufferUploader.drawWithShader(buffer.end()); + buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); + buffer.addVertex(matrix, -size, -100.0F, size).setUv(0.0F, 1.0F) + .addVertex(matrix, size, -100.0F, size).setUv(1.0F, 1.0F) + .addVertex(matrix, size, -100.0F, -size).setUv(1.0F, 0.0F) + .addVertex(matrix, -size, -100.0F, -size).setUv(0.0F, 0.0F); + BufferUploader.drawWithShader(buffer.buildOrThrow()); context.profiler().pop(); matrices.popPose(); diff --git a/src/main/java/dev/galacticraft/mod/compat/AppleSkinEventHandler.java b/src/main/java/dev/galacticraft/mod/compat/AppleSkinEventHandler.java index 12ac89939..ae4c88b23 100644 --- a/src/main/java/dev/galacticraft/mod/compat/AppleSkinEventHandler.java +++ b/src/main/java/dev/galacticraft/mod/compat/AppleSkinEventHandler.java @@ -25,7 +25,6 @@ import net.minecraft.world.food.FoodProperties; import squeek.appleskin.api.AppleSkinApi; import squeek.appleskin.api.event.FoodValuesEvent; -import squeek.appleskin.api.food.FoodValues; import static dev.galacticraft.mod.content.item.CannedFoodItem.getCanFoodProperties; import static dev.galacticraft.mod.content.item.CannedFoodItem.isCannedFoodItem; @@ -41,7 +40,7 @@ public void registerEvents() { FoodProperties foodProperties = getCanFoodProperties(foodValuesEvent.itemStack); if (foodProperties != null) { - foodValuesEvent.modifiedFoodValues = new FoodValues(foodProperties.getNutrition(), foodProperties.getSaturationModifier()); + foodValuesEvent.modifiedFoodComponent = foodProperties; } } }); diff --git a/src/main/java/dev/galacticraft/mod/content/ClientCannedFoodTooltip.java b/src/main/java/dev/galacticraft/mod/content/ClientCannedFoodTooltip.java index 429d599d2..f8365f552 100644 --- a/src/main/java/dev/galacticraft/mod/content/ClientCannedFoodTooltip.java +++ b/src/main/java/dev/galacticraft/mod/content/ClientCannedFoodTooltip.java @@ -22,6 +22,7 @@ package dev.galacticraft.mod.content; +import dev.galacticraft.mod.Constant; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.gui.Font; @@ -34,18 +35,20 @@ import net.minecraft.world.inventory.tooltip.BundleTooltip; import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.BundleContents; +import org.apache.commons.lang3.math.Fraction; @Environment(EnvType.CLIENT) public class ClientCannedFoodTooltip implements ClientTooltipComponent { - private static final ResourceLocation BACKGROUND_SPRITE = new ResourceLocation("container/bundle/background"); + private static final ResourceLocation BACKGROUND_SPRITE = ResourceLocation.withDefaultNamespace("container/bundle/background"); private static final int MARGIN_Y = 4; private static final int BORDER_WIDTH = 1; private static final int SLOT_SIZE_X = 18; private static final int SLOT_SIZE_Y = 20; - private final NonNullList items; + private final NonNullList contents; public ClientCannedFoodTooltip(CannedFoodTooltip cannedFoodTooltip) { - this.items = cannedFoodTooltip.getItems(); + this.contents = cannedFoodTooltip.getItems(); } public int getHeight() { @@ -67,10 +70,8 @@ private int backgroundHeight() { public void renderImage(Font textRenderer, int x, int y, GuiGraphics context) { int i = this.gridSizeX(); int j = this.gridSizeY(); - //creates a background panel over the items //context.blitSprite(BACKGROUND_SPRITE, x, y, this.backgroundWidth(), this.backgroundHeight()); - int weight = 1; - boolean bl = weight >= 64; + boolean bl = true; int k = 0; for(int l = 0; l < j; ++l) { @@ -84,12 +85,12 @@ public void renderImage(Font textRenderer, int x, int y, GuiGraphics context) { } private void renderSlot(int x, int y, int index, boolean shouldBlock, GuiGraphics context, Font textRenderer) { - if (index >= this.items.size()) { + if (index >= this.contents.size()) { //creates a ending slot used for bundle not items contained //this.blit(context, x, y, shouldBlock ? ClientCannedFoodTooltip.Texture.BLOCKED_SLOT : ClientCannedFoodTooltip.Texture.SLOT); } else { - ItemStack itemStack = (ItemStack)this.items.get(index); - this.blit(context, x, y, ClientCannedFoodTooltip.Texture.SLOT); + ItemStack itemStack = this.contents.get(index); + this.blit(context, x, y, Texture.SLOT); context.renderItem(itemStack, x + 1, y + 1, index); context.renderItemDecorations(textRenderer, itemStack, x + 1, y + 1); //used to highlight the item slot @@ -97,35 +98,35 @@ private void renderSlot(int x, int y, int index, boolean shouldBlock, GuiGraphic // if (index == 0) { // AbstractContainerScreen.renderSlotHighlight(context, x + 1, y + 1, 0); // } - } } - private void blit(GuiGraphics context, int x, int y, ClientCannedFoodTooltip.Texture sprite) { + private void blit(GuiGraphics context, int x, int y, Texture sprite) { context.blitSprite(sprite.sprite, x, y, 0, sprite.w, sprite.h); } private int gridSizeX() { - return Math.max(2, (int)Math.ceil(Math.sqrt((double)this.items.size() + 1.0))); + return Math.max(2, (int)Math.ceil(Math.sqrt((double)this.contents.size() + 1.0))); } private int gridSizeY() { - return (int)Math.ceil(((double)this.items.size() + 1.0) / (double)this.gridSizeX()); + return (int)Math.ceil(((double)this.contents.size() + 1.0) / (double)this.gridSizeX()); } @Environment(EnvType.CLIENT) private static enum Texture { - BLOCKED_SLOT(new ResourceLocation("container/bundle/blocked_slot"), 18, 20), - SLOT(new ResourceLocation("container/bundle/slot"), 18, 20); + BLOCKED_SLOT(ResourceLocation.withDefaultNamespace("container/bundle/blocked_slot"), 18, 20), + SLOT(ResourceLocation.withDefaultNamespace("container/bundle/slot"), 18, 20); public final ResourceLocation sprite; public final int w; public final int h; - private Texture(ResourceLocation resourceLocation, int j, int k) { + private Texture(final ResourceLocation resourceLocation, final int j, final int k) { this.sprite = resourceLocation; this.w = j; this.h = k; } + } } diff --git a/src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java b/src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java index 21caff80a..40b47d9ec 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java +++ b/src/main/java/dev/galacticraft/mod/content/GCChunkGenerator.java @@ -23,14 +23,11 @@ package dev.galacticraft.mod.content; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.world.gen.custom.AsteroidChunkGenerator; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.core.registries.Registries; -import net.minecraft.data.worldgen.BootstapContext; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.chunk.ChunkGenerator; @@ -38,9 +35,9 @@ public class GCChunkGenerator { public static final GCChunkGeneratorRegistry CHUNK_GENERATOR = new GCChunkGeneratorRegistry(); - public static final Codec ASTEROID = CHUNK_GENERATOR.register("asteroid_chunk_generator", AsteroidChunkGenerator.CODEC); + public static final MapCodec ASTEROID = CHUNK_GENERATOR.register("asteroid_chunk_generator", AsteroidChunkGenerator.CODEC); - public static Codec register(String id, Codec codec) { + public static MapCodec register(String id, MapCodec codec) { return Registry.register(BuiltInRegistries.CHUNK_GENERATOR, Constant.id(id), codec); } diff --git a/src/main/java/dev/galacticraft/mod/content/GCChunkGeneratorRegistry.java b/src/main/java/dev/galacticraft/mod/content/GCChunkGeneratorRegistry.java index bbd57ce8f..e4a830249 100644 --- a/src/main/java/dev/galacticraft/mod/content/GCChunkGeneratorRegistry.java +++ b/src/main/java/dev/galacticraft/mod/content/GCChunkGeneratorRegistry.java @@ -23,10 +23,11 @@ package dev.galacticraft.mod.content; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.level.chunk.ChunkGenerator; -public class GCChunkGeneratorRegistry extends GCRegistry> { +public class GCChunkGeneratorRegistry extends GCRegistry> { public GCChunkGeneratorRegistry() { super(BuiltInRegistries.CHUNK_GENERATOR); } diff --git a/src/main/java/dev/galacticraft/mod/content/block/entity/machine/FoodCannerBlockEntity.java b/src/main/java/dev/galacticraft/mod/content/block/entity/machine/FoodCannerBlockEntity.java index 3c5bb843f..aae4a87bb 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/entity/machine/FoodCannerBlockEntity.java +++ b/src/main/java/dev/galacticraft/mod/content/block/entity/machine/FoodCannerBlockEntity.java @@ -22,30 +22,36 @@ package dev.galacticraft.mod.content.block.entity.machine; -import com.mojang.brigadier.exceptions.CommandSyntaxException; +import dev.galacticraft.api.component.GCDataComponents; import dev.galacticraft.api.gas.Gases; import dev.galacticraft.machinelib.api.block.entity.MachineBlockEntity; +import dev.galacticraft.machinelib.api.filter.ResourceFilters; import dev.galacticraft.machinelib.api.machine.MachineStatus; import dev.galacticraft.machinelib.api.machine.MachineStatuses; import dev.galacticraft.machinelib.api.menu.MachineMenu; +import dev.galacticraft.machinelib.api.storage.MachineEnergyStorage; +import dev.galacticraft.machinelib.api.storage.MachineFluidStorage; +import dev.galacticraft.machinelib.api.storage.MachineItemStorage; +import dev.galacticraft.machinelib.api.storage.StorageSpec; import dev.galacticraft.machinelib.api.storage.slot.FluidResourceSlot; import dev.galacticraft.machinelib.api.storage.slot.ItemResourceSlot; -import dev.galacticraft.machinelib.impl.compat.vanilla.StorageSlot; +import dev.galacticraft.machinelib.api.transfer.TransferType; import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.Galacticraft; -import dev.galacticraft.mod.content.GCMachineTypes; +import dev.galacticraft.mod.content.GCBlockEntityTypes; import dev.galacticraft.mod.content.item.CannedFoodItem; import dev.galacticraft.mod.content.item.GCItems; import dev.galacticraft.mod.machine.GCMachineStatuses; -import dev.galacticraft.mod.screen.CoalGeneratorMenu; +import dev.galacticraft.mod.network.s2c.BubbleUpdatePayload; import dev.galacticraft.mod.screen.FoodCannerMenu; -import dev.galacticraft.mod.util.FluidUtil; -import net.fabricmc.fabric.api.transfer.v1.fluid.FluidStorage; -import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant; -import net.fabricmc.fabric.api.transfer.v1.storage.Storage; -import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; +import dev.galacticraft.mod.screen.GCMenuTypes; +import dev.galacticraft.mod.screen.OxygenBubbleDistributorMenu; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponentPatch; +import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.*; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.profiling.ProfilerFiller; @@ -54,6 +60,7 @@ import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraft.world.item.component.CustomData; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -62,7 +69,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; -import java.util.stream.Stream; import static dev.galacticraft.mod.content.item.CannedFoodItem.*; @@ -101,16 +107,87 @@ public class FoodCannerBlockEntity extends MachineBlockEntity { private ItemStack storage; + private static final StorageSpec SPEC = StorageSpec.of( + MachineItemStorage.spec( + ItemResourceSlot.builder(TransferType.TRANSFER) + .pos(8, 67) + .filter(ResourceFilters.CAN_EXTRACT_ENERGY), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(62, 13) + .filter(ResourceFilters.ofResource(GCItems.EMPTY_CANNED_FOOD)), + ItemResourceSlot.builder(TransferType.STORAGE) + .pos(62, 40) + .capacity(1) + .filter(ResourceFilters.ofResource(GCItems.EMPTY_CANNED_FOOD)), + ItemResourceSlot.builder(TransferType.OUTPUT) + .pos(62, 67), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(98, 13) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(116, 13) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(134, 13) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(152, 13) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(98, 31) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(116, 31) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(134, 31) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(152, 31) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(98, 49) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(116, 49) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(134, 49) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(152, 49) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(98, 67) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(116, 67) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(134, 67) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)), + ItemResourceSlot.builder(TransferType.INPUT) + .pos(152, 67) + .filter((item, tag) -> item != null && item.components().has(DataComponents.FOOD) && !(item instanceof CannedFoodItem)) + ), + MachineEnergyStorage.spec( + Galacticraft.CONFIG.machineEnergyStorageSize(), + Galacticraft.CONFIG.oxygenCollectorEnergyConsumptionRate() * 2, + 0 + ) + ); public FoodCannerBlockEntity(BlockPos pos, BlockState state) { - super(GCMachineTypes.FOOD_CANNER, pos, state); + super(GCBlockEntityTypes.FOOD_CANNER, pos, state, SPEC); this.storage = GCItems.CANNED_FOOD.getDefaultInstance(); } @Override protected void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull ProfilerFiller profiler) { super.tickConstant(world, pos, state, profiler); - this.chargeFromStack(CHARGE_SLOT); + profiler.push("extract_resources"); + this.chargeFromSlot(CHARGE_SLOT); + profiler.pop(); } @Override @@ -133,7 +210,7 @@ protected void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @ if (getProgress() == 1 && !transferring_can) { this.transferring_can = true; - this.itemStorage().getSlot(INPUT_SLOT).extractOne(); + this.itemStorage().slot(INPUT_SLOT).extractOne(); return GCMachineStatuses.TRANSFERRING_CAN; } if (getProgress() == 10) @@ -143,12 +220,12 @@ protected void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @ if (transferring_food) { this.transferring_can = false; - this.itemStorage().getSlot(STORAGE_SLOT).insert(this.storage.getItem(), this.storage.getTag(), 1); + this.itemStorage().slot(STORAGE_SLOT).insert(this.storage.getItem(), this.storage.getComponentsPatch(), 1); } else { this.transferring_can = false; - this.itemStorage().getSlot(STORAGE_SLOT).insert(GCItems.CANNED_FOOD, 1); + this.itemStorage().slot(STORAGE_SLOT).insert(GCItems.CANNED_FOOD, 1); this.storage = GCItems.CANNED_FOOD.getDefaultInstance(); } } @@ -201,7 +278,7 @@ protected void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @ } if (getProgress() == 37) { - if (this.itemStorage().getSlot(STORAGE_SLOT).isEmpty() && transferring_food) + if (this.itemStorage().slot(STORAGE_SLOT).isEmpty() && transferring_food) { setProgress(1); return GCMachineStatuses.MISSING_EMPTY_CAN; @@ -235,7 +312,7 @@ protected void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @ } if (getProgress() == 53) { - if (this.itemStorage().getSlot(STORAGE_SLOT).isEmpty() && transferring_food) + if (this.itemStorage().slot(STORAGE_SLOT).isEmpty() && transferring_food) { setProgress(1); return GCMachineStatuses.MISSING_EMPTY_CAN; @@ -260,7 +337,7 @@ protected void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @ } if (getProgress() == 79) { - if (this.itemStorage().getSlot(STORAGE_SLOT).isEmpty() && transferring_food) + if (this.itemStorage().slot(STORAGE_SLOT).isEmpty() && transferring_food) { setProgress(1); return GCMachineStatuses.MISSING_EMPTY_CAN; @@ -303,7 +380,7 @@ protected void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @ if (getProgress() == 107) { - if (this.itemStorage().getSlot(STORAGE_SLOT).isEmpty() && transferring_food) + if (this.itemStorage().slot(STORAGE_SLOT).isEmpty() && transferring_food) { setProgress(1); resetConsumedRows(); @@ -321,8 +398,8 @@ protected void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @ } if (this.itemStorage().getItem(STORAGE_SLOT) != this.storage) { - this.itemStorage().getSlot(STORAGE_SLOT).extractOne(); - this.itemStorage().getSlot(STORAGE_SLOT).insert(this.storage.getItem(), this.storage.getTag(), 1); + this.itemStorage().slot(STORAGE_SLOT).extractOne(); + this.itemStorage().slot(STORAGE_SLOT).insert(this.storage.getItem(), this.storage.getComponentsPatch(), 1); } if (getSize(this.storage) < MAX_FOOD && (row0 || row1 || row2 || row3)) { @@ -333,13 +410,13 @@ protected void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @ return MachineStatuses.OUTPUT_FULL; } transferring_can = true; - this.itemStorage().getSlot(STORAGE_SLOT).extractOne(); + this.itemStorage().slot(STORAGE_SLOT).extractOne(); return GCMachineStatuses.TRANSFERRING_CAN; } if (getProgress() == 115 && transferring_can) { transferring_can = false; - this.itemStorage().getSlot(OUTPUT_SLOT).insert(this.storage.getItem(), this.storage.getTag(), 1); + this.itemStorage().slot(OUTPUT_SLOT).insert(this.storage.getItem(), this.storage.getComponentsPatch(), 1); this.storage = GCItems.CANNED_FOOD.getDefaultInstance(); resetConsumedRows(); setProgress(1); @@ -357,15 +434,15 @@ private void resetConsumedRows() { } private boolean storageContainsFood() { - return getContents(this.storage).findAny().isPresent(); + return !getContents(this.storage).isEmpty(); } private boolean inputSlotEmpty() { - return this.itemStorage().getSlot(INPUT_SLOT).isEmpty(); + return this.itemStorage().slot(INPUT_SLOT).isEmpty(); } private boolean storageSlotEmpty() { - return this.itemStorage().getSlot(STORAGE_SLOT).isEmpty(); + return this.itemStorage().slot(STORAGE_SLOT).isEmpty(); } private boolean noEnergy() { @@ -373,69 +450,69 @@ private boolean noEnergy() { } private boolean outputFull() { - return this.itemStorage().getSlot(OUTPUT_SLOT).isFull(); + return this.itemStorage().slot(OUTPUT_SLOT).isFull(); } private void clearRow(int row) { if (row == 0) { - this.itemStorage().getSlot(FOOD_INPUT_SLOT_1).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_1).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_2).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_2).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_3).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_3).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_4).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_4).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_1).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_1).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_2).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_2).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_3).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_3).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_4).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_4).getCount()); } if (row == 1) { - this.itemStorage().getSlot(FOOD_INPUT_SLOT_5).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_5).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_6).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_6).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_7).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_7).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_8).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_8).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_5).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_5).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_6).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_6).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_7).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_7).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_8).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_8).getCount()); } if (row == 2) { - this.itemStorage().getSlot(FOOD_INPUT_SLOT_9).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_9).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_10).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_10).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_11).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_11).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_12).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_12).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_9).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_9).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_10).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_10).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_11).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_11).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_12).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_12).getCount()); } if (row == 3) { - this.itemStorage().getSlot(FOOD_INPUT_SLOT_13).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_13).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_14).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_14).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_15).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_15).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_16).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_16).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_13).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_13).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_14).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_14).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_15).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_15).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_16).extract(this.itemStorage().getItem(FOOD_INPUT_SLOT_16).getCount()); } } private void clearRow(int row, List stacks) { clearRow(row); if (row == 0) { - this.itemStorage().getSlot(FOOD_INPUT_SLOT_1).insert(stacks.get(0).getItem(), stacks.get(0).getTag(), stacks.get(0).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_2).insert(stacks.get(1).getItem(), stacks.get(1).getTag(), stacks.get(1).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_3).insert(stacks.get(2).getItem(), stacks.get(2).getTag(), stacks.get(2).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_4).insert(stacks.get(3).getItem(), stacks.get(3).getTag(), stacks.get(3).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_1).insert(stacks.get(0).getItem(), stacks.get(0).getComponentsPatch(), stacks.get(0).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_2).insert(stacks.get(1).getItem(), stacks.get(1).getComponentsPatch(), stacks.get(1).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_3).insert(stacks.get(2).getItem(), stacks.get(2).getComponentsPatch(), stacks.get(2).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_4).insert(stacks.get(3).getItem(), stacks.get(3).getComponentsPatch(), stacks.get(3).getCount()); } if (row == 1) { - this.itemStorage().getSlot(FOOD_INPUT_SLOT_5).insert(stacks.get(0).getItem(), stacks.get(0).getTag(), stacks.get(0).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_6).insert(stacks.get(1).getItem(), stacks.get(1).getTag(), stacks.get(1).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_7).insert(stacks.get(2).getItem(), stacks.get(2).getTag(), stacks.get(2).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_8).insert(stacks.get(3).getItem(), stacks.get(3).getTag(), stacks.get(3).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_5).insert(stacks.get(0).getItem(), stacks.get(0).getComponentsPatch(), stacks.get(0).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_6).insert(stacks.get(1).getItem(), stacks.get(1).getComponentsPatch(), stacks.get(1).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_7).insert(stacks.get(2).getItem(), stacks.get(2).getComponentsPatch(), stacks.get(2).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_8).insert(stacks.get(3).getItem(), stacks.get(3).getComponentsPatch(), stacks.get(3).getCount()); } if (row == 2) { - this.itemStorage().getSlot(FOOD_INPUT_SLOT_9).insert(stacks.get(0).getItem(), stacks.get(0).getTag(), stacks.get(0).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_10).insert(stacks.get(1).getItem(), stacks.get(1).getTag(), stacks.get(1).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_11).insert(stacks.get(2).getItem(), stacks.get(2).getTag(), stacks.get(2).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_12).insert(stacks.get(3).getItem(), stacks.get(3).getTag(), stacks.get(3).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_9).insert(stacks.get(0).getItem(), stacks.get(0).getComponentsPatch(), stacks.get(0).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_10).insert(stacks.get(1).getItem(), stacks.get(1).getComponentsPatch(), stacks.get(1).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_11).insert(stacks.get(2).getItem(), stacks.get(2).getComponentsPatch(), stacks.get(2).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_12).insert(stacks.get(3).getItem(), stacks.get(3).getComponentsPatch(), stacks.get(3).getCount()); } if (row == 3) { - this.itemStorage().getSlot(FOOD_INPUT_SLOT_13).insert(stacks.get(0).getItem(), stacks.get(0).getTag(), stacks.get(0).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_14).insert(stacks.get(1).getItem(), stacks.get(1).getTag(), stacks.get(1).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_15).insert(stacks.get(2).getItem(), stacks.get(2).getTag(), stacks.get(2).getCount()); - this.itemStorage().getSlot(FOOD_INPUT_SLOT_16).insert(stacks.get(3).getItem(), stacks.get(3).getTag(), stacks.get(3).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_13).insert(stacks.get(0).getItem(), stacks.get(0).getComponentsPatch(), stacks.get(0).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_14).insert(stacks.get(1).getItem(), stacks.get(1).getComponentsPatch(), stacks.get(1).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_15).insert(stacks.get(2).getItem(), stacks.get(2).getComponentsPatch(), stacks.get(2).getCount()); + this.itemStorage().slot(FOOD_INPUT_SLOT_16).insert(stacks.get(3).getItem(), stacks.get(3).getComponentsPatch(), stacks.get(3).getCount()); } } @@ -444,28 +521,28 @@ private List checkRow(int row) List stacks = new ArrayList<>(); if (row == 0) { - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_1).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_1).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_1)); }else { stacks.add(Items.AIR.getDefaultInstance()); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_2).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_2).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_2)); }else { stacks.add(Items.AIR.getDefaultInstance()); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_3).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_3).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_3)); }else { stacks.add(Items.AIR.getDefaultInstance()); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_4).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_4).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_4)); }else @@ -475,28 +552,28 @@ private List checkRow(int row) } if (row == 1) { - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_5).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_5).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_5)); }else { stacks.add(Items.AIR.getDefaultInstance()); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_6).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_6).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_6)); }else { stacks.add(Items.AIR.getDefaultInstance()); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_7).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_7).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_7)); }else { stacks.add(Items.AIR.getDefaultInstance()); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_8).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_8).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_8)); }else @@ -506,28 +583,28 @@ private List checkRow(int row) } if (row == 2) { - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_9).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_9).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_9)); }else { stacks.add(Items.AIR.getDefaultInstance()); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_10).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_10).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_10)); }else { stacks.add(Items.AIR.getDefaultInstance()); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_11).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_11).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_11)); }else { stacks.add(Items.AIR.getDefaultInstance()); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_12).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_12).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_12)); }else @@ -537,28 +614,28 @@ private List checkRow(int row) } if (row == 3) { - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_13).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_13).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_13)); }else { stacks.add(Items.AIR.getDefaultInstance()); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_14).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_14).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_14)); }else { stacks.add(Items.AIR.getDefaultInstance()); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_15).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_15).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_15)); }else { stacks.add(Items.AIR.getDefaultInstance()); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_16).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_16).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_16)); }else @@ -574,76 +651,76 @@ private List checkRowItems(int row) List stacks = new ArrayList<>(); if (row == 0) { - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_1).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_1).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_1)); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_2).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_2).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_2)); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_3).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_3).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_3)); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_4).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_4).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_4)); } } if (row == 1) { - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_5).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_5).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_5)); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_6).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_6).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_6)); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_7).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_7).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_7)); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_8).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_8).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_8)); } } if (row == 2) { - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_9).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_9).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_9)); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_10).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_10).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_10)); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_11).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_11).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_11)); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_12).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_12).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_12)); } } if (row == 3) { - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_13).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_13).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_13)); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_14).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_14).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_14)); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_15).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_15).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_15)); } - if (!this.itemStorage().getSlot(FOOD_INPUT_SLOT_16).isEmpty()) + if (!this.itemStorage().slot(FOOD_INPUT_SLOT_16).isEmpty()) { stacks.add(this.itemStorage().getItem(FOOD_INPUT_SLOT_16)); } @@ -668,33 +745,32 @@ public void setProgress(int progress) { this.progress = progress; } - @Nullable @Override - public AbstractContainerMenu createMenu(int syncId, Inventory inv, Player player) { + public @Nullable MachineMenu createMenu(int syncId, Inventory inv, Player player) { if (this.getSecurity().hasAccess(player)) return new FoodCannerMenu(syncId, (ServerPlayer) player, this); return null; } @Override - public void load(CompoundTag nbt) { - super.load(nbt); - setProgress(nbt.getInt(Constant.Nbt.PROGRESS)); - this.transferring_can = nbt.getBoolean("TRANSFERRING_CAN"); - this.transferring_food = nbt.getBoolean("TRANSFERRING_FOOD"); + public void loadAdditional(CompoundTag tag, HolderLookup.Provider lookup) { + super.loadAdditional(tag, lookup); + setProgress(tag.getInt(Constant.Nbt.PROGRESS)); + this.transferring_can = tag.getBoolean("TRANSFERRING_CAN"); + this.transferring_food = tag.getBoolean("TRANSFERRING_FOOD"); ItemStack itemStack = GCItems.CANNED_FOOD.getDefaultInstance(); - itemStack.setTag(listTagToCompoundTag(nbt.getList("STORAGE", ListTag.TAG_COMPOUND))); + itemStack.set(DataComponents.BLOCK_ENTITY_DATA, CustomData.of(listTagToCompoundTag(tag.getList("STORAGE", ListTag.TAG_COMPOUND)))); this.storage = itemStack; } @Override - public void saveAdditional(CompoundTag tag) { - super.saveAdditional(tag); + public void saveAdditional(CompoundTag tag, HolderLookup.Provider lookup) { + super.saveAdditional(tag, lookup); tag.putInt(Constant.Nbt.PROGRESS, this.progress); tag.putBoolean("TRANSFERRING_CAN", this.transferring_can); tag.putBoolean("TRANSFERRING_FOOD", this.transferring_food); - tag.put("STORAGE", compoundTagToListTag(this.storage.getTag())); + tag.put("STORAGE", compoundTagToListTag(Objects.requireNonNull(this.storage.get(DataComponents.BLOCK_ENTITY_DATA)).copyTag())); } public static CompoundTag listTagToCompoundTag(ListTag listTag) { diff --git a/src/main/java/dev/galacticraft/mod/content/block/entity/machine/OxygenSealerBlockEntity.java b/src/main/java/dev/galacticraft/mod/content/block/entity/machine/OxygenSealerBlockEntity.java index a17834bb2..89bbf4413 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/entity/machine/OxygenSealerBlockEntity.java +++ b/src/main/java/dev/galacticraft/mod/content/block/entity/machine/OxygenSealerBlockEntity.java @@ -60,6 +60,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.HashSet; +import java.util.Objects; import java.util.Set; public class OxygenSealerBlockEntity extends MachineBlockEntity { @@ -109,7 +111,7 @@ public void setLevel(Level world) { this.sealCheckTime = SEAL_CHECK_TIME; Holder> holder = world.galacticraft$getCelestialBody(); this.oxygenWorld = holder == null || holder.value().atmosphere().breathable(); - if (!world.isClientSide) ((ServerLevelAccessor) world).addSealer(this); + if (!world.isClientSide) ((ServerLevelAccessor) world).addSealer(this, Objects.requireNonNull(world.getServer()).getLevel(world.dimension())); this.outputBlocked = false; } @@ -126,7 +128,7 @@ protected void tickConstant(@NotNull ServerLevel world, @NotNull BlockPos pos, @ protected @NotNull MachineStatus tick(@NotNull ServerLevel level, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull ProfilerFiller profiler) { assert level != null; if (this.energyStorage().canExtract(Galacticraft.CONFIG.oxygenCompressorEnergyConsumptionRate())) { - if (!this.fluidStorage().getSlot(OXYGEN_TANK).isEmpty()) { + if (!this.fluidStorage().slot(OXYGEN_TANK).isEmpty()) { if (this.sealCheckTime > 0) this.sealCheckTime--; if (this.sealCheckTime == 0) { diff --git a/src/main/java/dev/galacticraft/mod/content/block/machine/OxygenSealerBlock.java b/src/main/java/dev/galacticraft/mod/content/block/machine/OxygenSealerBlock.java index 694335333..486c2d152 100644 --- a/src/main/java/dev/galacticraft/mod/content/block/machine/OxygenSealerBlock.java +++ b/src/main/java/dev/galacticraft/mod/content/block/machine/OxygenSealerBlock.java @@ -22,20 +22,41 @@ package dev.galacticraft.mod.content.block.machine; +import com.mojang.serialization.MapCodec; import dev.galacticraft.machinelib.api.block.MachineBlock; +import dev.galacticraft.machinelib.api.block.entity.MachineBlockEntity; import dev.galacticraft.mod.Constant; +import dev.galacticraft.mod.content.block.entity.machine.CoalGeneratorBlockEntity; import dev.galacticraft.mod.content.block.entity.machine.OxygenCollectorBlockEntity; import dev.galacticraft.mod.content.block.entity.machine.OxygenSealerBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.DustParticleOptions; import net.minecraft.util.RandomSource; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.joml.Vector3f; -public class OxygenSealerBlock extends MachineBlock { +public class OxygenSealerBlock extends MachineBlock { + private static final MapCodec CODEC = simpleCodec(OxygenSealerBlock::new); + + + public OxygenSealerBlock(Properties settings) { - super(settings, Constant.id(Constant.Block.OXYGEN_SEALER)); + super(settings); + } + + @Override + protected @NotNull MapCodec codec() { + return CODEC; + } + + + @Override + public @NotNull MachineBlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new OxygenSealerBlockEntity(pos, state); } @Override diff --git a/src/main/java/dev/galacticraft/mod/content/entity/SmallAsteroid.java b/src/main/java/dev/galacticraft/mod/content/entity/SmallAsteroid.java deleted file mode 100644 index b29f6fd7b..000000000 --- a/src/main/java/dev/galacticraft/mod/content/entity/SmallAsteroid.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2019-2024 Team Galacticraft - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package dev.galacticraft.mod.content.entity; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.level.Level; - -public class SmallAsteroid extends Entity { - - //private static final DataParameter SPIN_PITCH = EntityDataManager.createKey(EntitySmallAsteroid.class, DataSerializers.FLOAT); - //private static final DataParameter SPIN_YAW = EntityDataManager.createKey(EntitySmallAsteroid.class, DataSerializers.FLOAT); - //private static final DataParameter ASTEROID_TYPE = EntityDataManager.createKey(EntitySmallAsteroid.class, DataSerializers.VARINT); - public float spinPitch; - public float spinYaw; - public int type; - private boolean firstUpdate = true; - public SmallAsteroid(EntityType entityType, Level level) { - super(entityType, level); - } - - @Override - protected void defineSynchedData() { - - } - - @Override - protected void readAdditionalSaveData(CompoundTag nbt) { - - } - - @Override - protected void addAdditionalSaveData(CompoundTag nbt) { - - } -} diff --git a/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java b/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java index 8a86c05d4..0c78aa231 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java +++ b/src/main/java/dev/galacticraft/mod/content/item/CannedFoodItem.java @@ -29,8 +29,11 @@ import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; import net.minecraft.ChatFormatting; import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.advancements.critereon.ItemContainerPredicate; import net.minecraft.client.Minecraft; import net.minecraft.core.NonNullList; +import net.minecraft.core.component.DataComponentMap; +import net.minecraft.core.component.DataComponents; import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; @@ -47,6 +50,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.ItemContainerContents; import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -74,20 +78,19 @@ public class CannedFoodItem extends Item implements FabricItemStack { if (!level.isClientSide) { int consumingItems = getItemsToBeConsumed(itemStack); - assert itemStack.getTag() != null; - CompoundTag copyTag = itemStack.getTag().copy(); + DataComponentMap components = itemStack.getComponents(); super.finishUsingItem(itemStack, level, livingEntity); if (livingEntity instanceof ServerPlayer serverPlayer) { CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, itemStack); serverPlayer.awardStat(Stats.ITEM_USED.get(this)); } ItemStack can = new ItemStack(CANNED_FOOD); - can.setTag(copyTag.copy()); + can.applyComponents(components); for (int i = 0; i < consumingItems; i++) { removeOne(can); } if (itemStack.isEmpty()) { - if (getContents(can).findAny().isEmpty()) + if (getContents(can).isEmpty()) { can = new ItemStack(EMPTY_CANNED_FOOD); } @@ -97,7 +100,7 @@ public class CannedFoodItem extends Item implements FabricItemStack { if (livingEntity instanceof Player player) { if (!player.getAbilities().instabuild) { - if (getContents(can).findAny().isEmpty()) + if (getContents(can).isEmpty()) { can = new ItemStack(EMPTY_CANNED_FOOD); } @@ -133,12 +136,12 @@ public static void registerCan(ItemStack cannedFoodType) @Override public @NotNull Component getName(ItemStack stack) { - if (getContents(stack).findAny().isEmpty()) + if (getContents(stack).isEmpty()) { return Component.translatable(Translations.Items.EMPTY_CANNED_FOOD); }else { - String result = getContents(stack) + String result = getContents(stack).stream() .map(CannedFoodItem::getItemDisplayName) .collect(new TopNCollector<>(3)); return Component.translatable(Translations.Items.CANNED_FOOD).append(Component.literal(result)); @@ -162,10 +165,10 @@ public int getColor(int layer) { @Override public @NotNull Optional getTooltipImage(ItemStack stack) { - if (getContents(stack).findAny().isPresent()) + if (!getContents(stack).isEmpty()) { NonNullList nonNullList = NonNullList.create(); - Stream stream = getContents(stack); + Stream stream = getContents(stack).stream(); Objects.requireNonNull(nonNullList); stream.forEach(nonNullList::add); return Optional.of(new CannedFoodTooltip(nonNullList)); @@ -176,21 +179,22 @@ public int getColor(int layer) { } @Override - public void appendHoverText(ItemStack stack, @Nullable Level world, List tooltip, TooltipFlag context) { - if (getContents(stack).findAny().isPresent()) { + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag type) { + if (!getContents(stack).isEmpty()) { tooltip.add(Component.translatable(Translations.Items.TOTAL_NUTRITION).append(Component.literal(String.valueOf(getTotalNutrition(stack)))).withColor(ChatFormatting.DARK_GRAY.getColor())); } } - public static Stream getContents(ItemStack stack) { - CompoundTag compoundTag = stack.getTag(); - if (compoundTag == null) { - return Stream.empty(); + public static List getContents(ItemStack stack) { + DataComponentMap components = stack.getComponents(); + if (components.isEmpty()) { + return List.of(); } else { - ListTag listTag = compoundTag.getList("Items", ListTag.TAG_COMPOUND); - Stream stream = listTag.stream(); - Objects.requireNonNull(CompoundTag.class); - return stream.map(CompoundTag.class::cast).map(ItemStack::of); + ItemContainerContents contents = components.get(DataComponents.CONTAINER); + if (contents == null) { + return List.of(); + } + return contents.stream().toList(); } } @@ -199,65 +203,56 @@ public static boolean isCannedFoodItem(ItemStack stack) { } private static void removeOne(ItemStack stack) { - CompoundTag compoundTag = stack.getOrCreateTag(); - if (compoundTag.contains("Items")) - { - ListTag listTag = compoundTag.getList("Items", 10); - if (!listTag.isEmpty()) + ItemContainerContents itemContainerContents = stack.get(DataComponents.CONTAINER); + + assert itemContainerContents != null; + List items = new ArrayList<>(itemContainerContents.stream().toList()); + if (!items.isEmpty()) { - Tag tag = listTag.get(0); - if (tag instanceof CompoundTag tagCompound) { - ItemStack itemStack = ItemStack.of(tagCompound); - int itemCount = itemStack.getCount(); - if (itemCount != 1) - { - itemStack.shrink(1); - CompoundTag compoundNew = new CompoundTag(); - itemStack.save(compoundNew); - listTag.set(0, compoundNew); - }else - { - listTag.remove(0); - } - } - if (listTag.isEmpty()) { - stack.removeTagKey("Items"); + ItemStack itemStack = items.getFirst(); + int itemCount = itemStack.getCount(); + if (itemCount != 1) + { + itemStack.shrink(1); + items.set(0, itemStack); + }else + { + items.removeFirst(); } + stack.set(DataComponents.CONTAINER, ItemContainerContents.fromItems(items)); } - } } public static void add(ItemStack cannedFood, ItemStack stack) { if (!stack.isEmpty() && stack.getItem().canFitInsideContainerItems()) { - CompoundTag compoundTag = cannedFood.getOrCreateTag(); - if (!compoundTag.contains("Items")) { - compoundTag.put("Items", new ListTag()); + if (!cannedFood.has(DataComponents.CONTAINER)) { + cannedFood.set(DataComponents.CONTAINER, ItemContainerContents.EMPTY); } + ItemContainerContents cannedFoodContainer = cannedFood.get(DataComponents.CONTAINER); + assert cannedFoodContainer != null; + List cannedFoodItems = new ArrayList<>(cannedFoodContainer.stream().toList()); - //the max that the canned food item can hold + //the max food items that the canned food item can hold int k = Math.min(stack.getCount(), MAX_FOOD); if (k != 0) { - ListTag listTag = compoundTag.getList("Items", 10); ItemStack itemStack2 = stack.copyWithCount(k); - CompoundTag compoundTag3 = new CompoundTag(); - itemStack2.save(compoundTag3); int iter = -1; - for (int i = 0; i < listTag.size(); i++) { - if (listTag.getCompound(i).get("id").getAsString().equals(compoundTag3.get("id").getAsString())) + for (int i = 0; i < cannedFoodItems.size(); i++) { + if (cannedFoodItems.get(i).getItem().toString().equals(itemStack2.getItem().toString())) { iter = i; } } if (iter == -1) { - listTag.add(0, compoundTag3); + cannedFoodItems.add(itemStack2); }else { - itemStack2.setCount(listTag.getCompound(iter).getInt("Count") + 1); - itemStack2.save(compoundTag3); - listTag.set(iter, compoundTag3); + itemStack2.setCount(cannedFoodItems.get(iter).getCount() + 1); + cannedFoodItems.set(iter, itemStack2); } + cannedFood.set(DataComponents.CONTAINER, ItemContainerContents.fromItems(cannedFoodItems)); } } } @@ -299,7 +294,7 @@ public static List addToCan(List items, ItemStack can) public static int getSize(ItemStack can) { int size = 0; - List contents = getContents(can).toList(); + List contents = getContents(can); if (!contents.isEmpty()) { //can has something inside it @@ -387,17 +382,19 @@ public static FoodProperties getCanFoodProperties(ItemStack stack) { float canSaturation = 0f; if (nutritionRequired != 0) { - Stream stream = getContents(stack); - for (ItemStack foodItem : stream.toList()) + List stream = getContents(stack); + for (ItemStack foodItem : stream) { + FoodProperties foodProperties = foodItem.get(DataComponents.FOOD); + assert foodProperties != null; int itemCount = foodItem.getCount(); for (int i = 0; i < itemCount; i++) { - canNutrition += Objects.requireNonNull(foodItem.getFoodComponent()).getNutrition(); - canSaturation += foodItem.getFoodComponent().getSaturationModifier(); + canNutrition += foodProperties.nutrition(); + canSaturation += foodProperties.saturation(); if (canNutrition >= nutritionRequired) { - return new FoodProperties.Builder().nutrition(canNutrition).saturationMod(canSaturation).build(); + return new FoodProperties.Builder().nutrition(canNutrition).saturationModifier(canSaturation).build(); } } } @@ -406,7 +403,7 @@ public static FoodProperties getCanFoodProperties(ItemStack stack) { return null; }else { - return new FoodProperties.Builder().nutrition(canNutrition).saturationMod(canSaturation).build(); + return new FoodProperties.Builder().nutrition(canNutrition).saturationModifier(canSaturation).build(); } } return null; @@ -414,13 +411,15 @@ public static FoodProperties getCanFoodProperties(ItemStack stack) { public static int getTotalNutrition(ItemStack stack) { int canNutrition = 0; - Stream stream = getContents(stack); - for (ItemStack foodItem : stream.toList()) + List stream = getContents(stack); + for (ItemStack foodItem : stream) { + FoodProperties foodProperties = foodItem.get(DataComponents.FOOD); + assert foodProperties != null; int itemCount = foodItem.getCount(); for (int i = 0; i < itemCount; i++) { - canNutrition += Objects.requireNonNull(foodItem.getFoodComponent()).getNutrition(); + canNutrition += foodProperties.nutrition(); } } return canNutrition; @@ -436,14 +435,15 @@ public static int getItemsToBeConsumed(ItemStack stack) { int itemsToBeConsumed = 0; if (nutritionRequired != 0) { - Stream stream = getContents(stack); - for (ItemStack foodItem : stream.toList()) + List stream = getContents(stack); + for (ItemStack foodItem : stream) { + FoodProperties foodProperties = foodItem.get(DataComponents.FOOD); int itemCount = foodItem.getCount(); for (int i = 0; i < itemCount; i++) { itemsToBeConsumed += 1; - canNutrition += Objects.requireNonNull(foodItem.getFoodComponent()).getNutrition(); + canNutrition += foodProperties.nutrition(); if (canNutrition >= nutritionRequired) { return itemsToBeConsumed; diff --git a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java index 99061ff40..c81938102 100644 --- a/src/main/java/dev/galacticraft/mod/content/item/GCItems.java +++ b/src/main/java/dev/galacticraft/mod/content/item/GCItems.java @@ -28,12 +28,7 @@ import dev.galacticraft.mod.content.GCFluids; import dev.galacticraft.mod.content.GCRegistry; import dev.galacticraft.mod.content.GCRocketParts; -import dev.galacticraft.mod.util.TextureUtils; import dev.galacticraft.mod.util.Translations; -import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin; -import net.fabricmc.fabric.api.item.v1.FabricItemSettings; -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.model.ModelManager; import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; @@ -43,13 +38,10 @@ import net.minecraft.world.item.*; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.DispenserBlock; -import org.intellij.lang.annotations.Identifier; import java.util.ArrayList; import java.util.List; -import static dev.galacticraft.mod.Constant.MOD_ID; - @SuppressWarnings("unused") public class GCItems { public static final GCRegistry ITEMS = new GCRegistry<>(BuiltInRegistries.ITEM); @@ -457,7 +449,7 @@ public class GCItems { public static final Item TIER_3_ROCKET_SCHEMATIC = new SchematicItem(new Item.Properties()); public static final Item ASTRO_MINER_SCHEMATIC = new SchematicItem(new Item.Properties()); - public static final CannedFoodItem CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(new FoodProperties.Builder().nutrition(0).saturationMod(0).build()).stacksTo(1)); + public static final CannedFoodItem CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(new FoodProperties.Builder().nutrition(0).saturationModifier(0).build()).stacksTo(1)); public static final CannedFoodItem EMPTY_CANNED_FOOD = new CannedFoodItem(new Item.Properties().food(null).stacksTo(64)); public static Item registerItem(String id, Item item) { diff --git a/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java b/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java index 5fae769ff..f0cda4d33 100644 --- a/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java +++ b/src/main/java/dev/galacticraft/mod/events/GCEventHandlers.java @@ -42,6 +42,7 @@ import net.minecraft.core.Direction; import net.minecraft.core.GlobalPos; import net.minecraft.core.Holder; +import net.minecraft.core.component.DataComponents; import net.minecraft.network.chat.Component; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; @@ -52,6 +53,7 @@ import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BedBlock; @@ -73,12 +75,14 @@ public static void init() { } private static InteractionResultHolder onPlayerUseItem(Player player, Level world, InteractionHand hand) { - boolean oxygenWorld = CelestialBody.getByDimension(world).map(body -> body.atmosphere().breathable()).orElse(true); + Holder> body = world.galacticraft$getCelestialBody(); + boolean oxygenWorld = body.value().atmosphere().breathable(); + if (!oxygenWorld) { ItemStack itemStack = player.getItemInHand(hand); - if (itemStack.isEdible()) + if (itemStack.getComponents().has(DataComponents.FOOD)) { if (itemStack.getItem() instanceof CannedFoodItem) { diff --git a/src/main/java/dev/galacticraft/mod/lookup/GCApiLookupProviders.java b/src/main/java/dev/galacticraft/mod/lookup/GCApiLookupProviders.java index bb8485de7..40f47f1ef 100644 --- a/src/main/java/dev/galacticraft/mod/lookup/GCApiLookupProviders.java +++ b/src/main/java/dev/galacticraft/mod/lookup/GCApiLookupProviders.java @@ -28,10 +28,12 @@ import dev.galacticraft.mod.api.pipe.Pipe; import dev.galacticraft.mod.api.wire.Wire; import dev.galacticraft.mod.content.GCBlockEntityTypes; +import dev.galacticraft.mod.content.GCBlocks; import dev.galacticraft.mod.content.item.GCItems; import dev.galacticraft.mod.content.item.OxygenTankItem; import net.fabricmc.fabric.api.transfer.v1.fluid.FluidStorage; import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; import team.reborn.energy.api.EnergyStorage; @@ -54,26 +56,8 @@ public class GCApiLookupProviders { GCBlockEntityTypes.OXYGEN_SEALER, GCBlockEntityTypes.OXYGEN_BUBBLE_DISTRIBUTOR, GCBlockEntityTypes.ENERGY_STORAGE_MODULE, + GCBlockEntityTypes.FOOD_CANNER, GCBlockEntityTypes.OXYGEN_STORAGE_MODULE - }; - private static final Block[] MACHINE_BLOCKS = new Block[]{ - GCBlocks.COAL_GENERATOR, - GCBlocks.BASIC_SOLAR_PANEL, - GCBlocks.ADVANCED_SOLAR_PANEL, - GCBlocks.CIRCUIT_FABRICATOR, - GCBlocks.COMPRESSOR, - GCBlocks.ELECTRIC_COMPRESSOR, - GCBlocks.ELECTRIC_FURNACE, - GCBlocks.ELECTRIC_ARC_FURNACE, - GCBlocks.REFINERY, - GCBlocks.OXYGEN_COLLECTOR, - GCBlocks.OXYGEN_COMPRESSOR, - GCBlocks.FOOD_CANNER, - GCBlocks.OXYGEN_DECOMPRESSOR, - GCBlocks.OXYGEN_SEALER, - GCBlocks.OXYGEN_BUBBLE_DISTRIBUTOR, - GCBlocks.ENERGY_STORAGE_MODULE, - GCBlocks.OXYGEN_STORAGE_MODULE }; @SuppressWarnings("rawtypes") private static final BlockEntityType[] WIRE_TYPES = new BlockEntityType[]{ diff --git a/src/main/java/dev/galacticraft/mod/machine/BlockCheck.java b/src/main/java/dev/galacticraft/mod/machine/BlockCheck.java index c6bf93187..940096edd 100644 --- a/src/main/java/dev/galacticraft/mod/machine/BlockCheck.java +++ b/src/main/java/dev/galacticraft/mod/machine/BlockCheck.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.machine; import net.minecraft.core.BlockPos; diff --git a/src/main/java/dev/galacticraft/mod/machine/FloodSearch.java b/src/main/java/dev/galacticraft/mod/machine/FloodSearch.java index 1856f7f4d..e40f1519b 100644 --- a/src/main/java/dev/galacticraft/mod/machine/FloodSearch.java +++ b/src/main/java/dev/galacticraft/mod/machine/FloodSearch.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.machine; import net.minecraft.core.BlockPos; diff --git a/src/main/java/dev/galacticraft/mod/machine/Region.java b/src/main/java/dev/galacticraft/mod/machine/Region.java index 487a28b92..bb892df1f 100644 --- a/src/main/java/dev/galacticraft/mod/machine/Region.java +++ b/src/main/java/dev/galacticraft/mod/machine/Region.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.machine; import net.minecraft.core.BlockPos; diff --git a/src/main/java/dev/galacticraft/mod/machine/SealerGroupings.java b/src/main/java/dev/galacticraft/mod/machine/SealerGroupings.java index bdf97b0a6..9a19f1925 100644 --- a/src/main/java/dev/galacticraft/mod/machine/SealerGroupings.java +++ b/src/main/java/dev/galacticraft/mod/machine/SealerGroupings.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.machine; import dev.galacticraft.mod.content.block.entity.machine.OxygenSealerBlockEntity; diff --git a/src/main/java/dev/galacticraft/mod/machine/SealerManager.java b/src/main/java/dev/galacticraft/mod/machine/SealerManager.java index 08a5938c6..df97e5bfa 100644 --- a/src/main/java/dev/galacticraft/mod/machine/SealerManager.java +++ b/src/main/java/dev/galacticraft/mod/machine/SealerManager.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.machine; import dev.galacticraft.mod.content.block.entity.machine.OxygenSealerBlockEntity; import net.minecraft.core.BlockPos; diff --git a/src/main/java/dev/galacticraft/mod/machine/SolidCheck.java b/src/main/java/dev/galacticraft/mod/machine/SolidCheck.java index a4ee39305..1bcab56ae 100644 --- a/src/main/java/dev/galacticraft/mod/machine/SolidCheck.java +++ b/src/main/java/dev/galacticraft/mod/machine/SolidCheck.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2019-2024 Team Galacticraft + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package dev.galacticraft.mod.machine; import net.minecraft.core.BlockPos; diff --git a/src/main/java/dev/galacticraft/mod/mixin/client/ClientTooltipMixin.java b/src/main/java/dev/galacticraft/mod/mixin/client/ClientTooltipMixin.java index 16dfe1818..ca4a106da 100644 --- a/src/main/java/dev/galacticraft/mod/mixin/client/ClientTooltipMixin.java +++ b/src/main/java/dev/galacticraft/mod/mixin/client/ClientTooltipMixin.java @@ -36,7 +36,7 @@ public interface ClientTooltipMixin { @Overwrite static ClientTooltipComponent create(TooltipComponent data) { if (data instanceof BundleTooltip) { - return new ClientBundleTooltip((BundleTooltip)data); + return new ClientBundleTooltip(((BundleTooltip)data).contents()); } else if (data instanceof CannedFoodTooltip){ return new ClientCannedFoodTooltip((CannedFoodTooltip)data); } else { diff --git a/src/main/java/dev/galacticraft/mod/mixin/client/FabricItemMixin.java b/src/main/java/dev/galacticraft/mod/mixin/client/FabricItemMixin.java index b9777ba07..e7504c568 100644 --- a/src/main/java/dev/galacticraft/mod/mixin/client/FabricItemMixin.java +++ b/src/main/java/dev/galacticraft/mod/mixin/client/FabricItemMixin.java @@ -22,28 +22,57 @@ package dev.galacticraft.mod.mixin.client; +import dev.galacticraft.mod.content.item.CannedFoodItem; import net.fabricmc.fabric.api.item.v1.FabricItem; +import net.minecraft.core.component.DataComponentHolder; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.core.component.DataComponents; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.lang.reflect.Field; import static dev.galacticraft.mod.content.item.CannedFoodItem.getCanFoodProperties; import static dev.galacticraft.mod.content.item.CannedFoodItem.isCannedFoodItem; -@Mixin(FabricItem.class) +@Mixin(DataComponentHolder.class) public interface FabricItemMixin { - @Overwrite - default @Nullable FoodProperties getFoodComponent(ItemStack stack) { - if (isCannedFoodItem(stack)) - { - return getCanFoodProperties(stack); - }else - { - return ((Item) this).getFoodProperties(); + @Inject(method = "get", at = @At("HEAD"), cancellable = true) + private void get(DataComponentType type, CallbackInfoReturnable cir) { + DataComponentHolder holder = (DataComponentHolder) (Object) this; + ItemStack stack = getItemStack(holder); + if (isCannedFoodItem(stack)) { + //data component holder has parent of canned food item + if (type.equals(DataComponents.FOOD)) + { + FoodProperties foodProperties = getCanFoodProperties(stack); + cir.setReturnValue((T) foodProperties); + } + } + } + + private ItemStack getItemStack(DataComponentHolder holder) { + if (holder instanceof ItemStack) { + return (ItemStack) holder; } + + try { + Field itemStackField = holder.getClass().getDeclaredField("itemStack"); + itemStackField.setAccessible(true); + return (ItemStack) itemStackField.get(holder); + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + + return ItemStack.EMPTY; } } diff --git a/src/main/java/dev/galacticraft/mod/screen/FoodCannerMenu.java b/src/main/java/dev/galacticraft/mod/screen/FoodCannerMenu.java index 47211baeb..f31b15afc 100644 --- a/src/main/java/dev/galacticraft/mod/screen/FoodCannerMenu.java +++ b/src/main/java/dev/galacticraft/mod/screen/FoodCannerMenu.java @@ -23,17 +23,13 @@ package dev.galacticraft.mod.screen; import dev.galacticraft.machinelib.api.menu.MachineMenu; -import dev.galacticraft.machinelib.api.menu.sync.MenuSyncHandler; -import dev.galacticraft.mod.content.GCMachineTypes; -import dev.galacticraft.mod.content.block.entity.machine.CoalGeneratorBlockEntity; +import dev.galacticraft.machinelib.api.menu.MenuData; import dev.galacticraft.mod.content.block.entity.machine.FoodCannerBlockEntity; -import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Inventory; import org.jetbrains.annotations.NotNull; -import java.util.function.Consumer; - public class FoodCannerMenu extends MachineMenu { private int progress; @@ -43,22 +39,23 @@ public class FoodCannerMenu extends MachineMenu { private int forthRowConsumed; public FoodCannerMenu(int syncId, @NotNull ServerPlayer player, @NotNull FoodCannerBlockEntity machine) { - super(syncId, player, machine); + super(GCMenuTypes.FOOD_CANNER, syncId, player, machine); } - public FoodCannerMenu(int syncId, @NotNull Inventory inventory, @NotNull FriendlyByteBuf buf) { - super(syncId, inventory, buf, 8, 89, GCMachineTypes.FOOD_CANNER); + public FoodCannerMenu(int syncId, Inventory inventory, BlockPos pos) { + super(GCMenuTypes.FOOD_CANNER, syncId, inventory, pos, 8, 89); } @Override - public void registerSyncHandlers(Consumer consumer) { - super.registerSyncHandlers(consumer); + public void registerData(@NotNull MenuData data){ + super.registerData(data); + + data.registerInt(this.be::getProgress, this::setProgress); + data.registerInt(this.be::getFirstRowConsumed, this::setFirstRowConsumed); + data.registerInt(this.be::getSecondRowConsumed, this::setSecondRowConsumed); + data.registerInt(this.be::getThirdRowConsumed, this::setThirdRowConsumed); + data.registerInt(this.be::getForthRowConsumed, this::setForthRowConsumed); - consumer.accept(MenuSyncHandler.simple(this.machine::getProgress, this::setProgress)); - consumer.accept(MenuSyncHandler.simple(this.machine::getFirstRowConsumed, this::setFirstRowConsumed)); - consumer.accept(MenuSyncHandler.simple(this.machine::getSecondRowConsumed, this::setSecondRowConsumed)); - consumer.accept(MenuSyncHandler.simple(this.machine::getThirdRowConsumed, this::setThirdRowConsumed)); - consumer.accept(MenuSyncHandler.simple(this.machine::getForthRowConsumed, this::setForthRowConsumed)); } diff --git a/src/main/java/dev/galacticraft/mod/screen/GCMenuTypes.java b/src/main/java/dev/galacticraft/mod/screen/GCMenuTypes.java index 5e8365ce7..862b38be7 100644 --- a/src/main/java/dev/galacticraft/mod/screen/GCMenuTypes.java +++ b/src/main/java/dev/galacticraft/mod/screen/GCMenuTypes.java @@ -55,7 +55,7 @@ public class GCMenuTypes { public static final MenuType> OXYGEN_COMPRESSOR = SynchronizedMenuType.createSimple(MachineMenu::new); public static final MenuType> OXYGEN_DECOMPRESSOR = SynchronizedMenuType.createSimple(MachineMenu::new); - public static final MenuType FOOD_CANNER = SynchronizedMenuType.createSimple(MachineMenu::new); + public static final MenuType FOOD_CANNER = SynchronizedMenuType.create(FoodCannerMenu::new); public static final MenuType> OXYGEN_SEALER = SynchronizedMenuType.createSimple(MachineMenu::new); diff --git a/src/main/java/dev/galacticraft/mod/world/dimension/GCLevelStems.java b/src/main/java/dev/galacticraft/mod/world/dimension/GCLevelStems.java index 14cb68a8e..aa054d632 100644 --- a/src/main/java/dev/galacticraft/mod/world/dimension/GCLevelStems.java +++ b/src/main/java/dev/galacticraft/mod/world/dimension/GCLevelStems.java @@ -54,7 +54,7 @@ public static void bootstrapRegistries(@NotNull BootstrapContext cont // the returned reference may be null // context.register(MOON, new LevelStem(typeLookup.getOrThrow(GCDimensionTypes.MOON), new NoiseBasedChunkGenerator(MultiNoiseBiomeSource.createFromPreset(biomeNoiseLookup.getOrThrow(GCMultiNoiseBiomeSourceParameterLists.MOON)), noiseLookup.getOrThrow(GCNoiseGeneratorSettings.MOON)))); context.register(VENUS, new LevelStem(typeLookup.getOrThrow(GCDimensionTypes.VENUS), new NoiseBasedChunkGenerator(MultiNoiseBiomeSource.createFromPreset(biomeNoiseLookup.getOrThrow(GCMultiNoiseBiomeSourceParameterLists.VENUS)), noiseLookup.getOrThrow(GCNoiseGeneratorSettings.VENUS)))); - context.register(ASTEROID, new LevelStem(typeLookup.getOrThrow(GCDimensionTypes.ASTEROID), new AsteroidChunkGenerator(MultiNoiseBiomeSource.createFromPreset(biomeNoiseLookup.getOrThrow(GCMultiNoiseBiomeSourceParameterLists.ASTEROID)), ResourceKey.create(Registries.DIMENSION, new ResourceLocation("galacticraft", "asteroid")), 1000))); + context.register(ASTEROID, new LevelStem(typeLookup.getOrThrow(GCDimensionTypes.ASTEROID), new AsteroidChunkGenerator(MultiNoiseBiomeSource.createFromPreset(biomeNoiseLookup.getOrThrow(GCMultiNoiseBiomeSourceParameterLists.ASTEROID)), ResourceKey.create(Registries.DIMENSION, Constant.id("asteroid")), 1000))); } @Contract(value = "_ -> new", pure = true) diff --git a/src/main/java/dev/galacticraft/mod/world/gen/GCNoiseGeneratorSettings.java b/src/main/java/dev/galacticraft/mod/world/gen/GCNoiseGeneratorSettings.java index 0d92f951f..a2f527fd7 100644 --- a/src/main/java/dev/galacticraft/mod/world/gen/GCNoiseGeneratorSettings.java +++ b/src/main/java/dev/galacticraft/mod/world/gen/GCNoiseGeneratorSettings.java @@ -22,21 +22,15 @@ package dev.galacticraft.mod.world.gen; -import com.mojang.serialization.Codec; import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.content.GCBlocks; -import dev.galacticraft.mod.world.gen.custom.AsteroidChunkGenerator; -import dev.galacticraft.mod.world.gen.surfacebuilder.MoonSurfaceRules; -import dev.galacticraft.mod.world.gen.surfacebuilder.VenusSurfaceRules; import dev.galacticraft.mod.world.gen.surfacerule.VenusSurfaceRules; import net.minecraft.core.HolderGetter; import net.minecraft.core.registries.Registries; import net.minecraft.data.worldgen.BootstrapContext; import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.OverworldBiomeBuilder; import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.*; import net.minecraft.world.level.levelgen.synth.NormalNoise; import org.jetbrains.annotations.Contract; diff --git a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java index 6b94e0446..1654f8aec 100644 --- a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java +++ b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidChunkGenerator.java @@ -23,6 +23,7 @@ package dev.galacticraft.mod.world.gen.custom; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import dev.galacticraft.api.perlin.NoiseModule; import dev.galacticraft.api.perlin.generator.Billowed; @@ -50,13 +51,15 @@ import net.minecraft.world.level.levelgen.*; import net.minecraft.world.level.levelgen.blending.Blender; import net.minecraft.world.level.storage.*; +import org.jetbrains.annotations.NotNull; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.util.*; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import static dev.galacticraft.impl.internal.fabric.GalacticraftAPI.currentWorldSaveDirectory; import static dev.galacticraft.mod.world.gen.custom.AsteroidSaveData.saveDataID; @@ -133,7 +136,7 @@ public class AsteroidChunkGenerator extends ChunkGenerator { private int largeAsteroidsLastChunkZ; private final MapGenAbandonedBase dungeonGenerator = new MapGenAbandonedBase(); - public static final Codec CODEC = RecordCodecBuilder.create(instance -> + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( BiomeSource.CODEC.fieldOf("biomeSource").forGetter(generator -> generator.biomeSource), ServerLevel.RESOURCE_KEY_CODEC.fieldOf("dimensionKey").forGetter(generator -> generator.dimensionKey), @@ -496,7 +499,7 @@ private final int getTerrainHeightAt(int x, int z, float[] yModArray, int xMin, } @Override - protected Codec codec() { + protected @NotNull MapCodec codec() { return CODEC; } @@ -674,14 +677,13 @@ public int getGenDepth() { } @Override - public CompletableFuture fillFromNoise(Executor executor, Blender blender, RandomState randomState, StructureManager structureManager, ChunkAccess chunkAccess) { - + public CompletableFuture fillFromNoise(Blender blender, RandomState noiseConfig, StructureManager structureAccessor, ChunkAccess chunk) { CompletableFuture future = new CompletableFuture<>(); - executor.execute(() -> { + Minecraft.getInstance().submit(() -> { try { - // Example asynchronous operation (replace with your actual logic) - ChunkAccess result = generateChunkData(blender, randomState, structureManager, chunkAccess); + // This operation will now run on Minecraft's main thread + ChunkAccess result = generateChunkData(blender, noiseConfig, structureAccessor, chunk); future.complete(result); } catch (Exception e) { future.completeExceptionally(e); diff --git a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidSaveData.java b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidSaveData.java index e7a314a08..7c03b9390 100644 --- a/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidSaveData.java +++ b/src/main/java/dev/galacticraft/mod/world/gen/custom/AsteroidSaveData.java @@ -25,6 +25,7 @@ import dev.galacticraft.mod.Constant; import dev.galacticraft.mod.data.GCDataGenerator; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; +import net.minecraft.core.HolderLookup; import net.minecraft.data.CachedOutput; import net.minecraft.data.DataProvider; import net.minecraft.nbt.CompoundTag; @@ -59,15 +60,14 @@ public void readFromNBT(CompoundTag nbt) this.datacompound = nbt.getCompound("asteroids"); } - @Override - public CompoundTag save(CompoundTag nbt) - { - nbt.put("asteroids", this.datacompound); - return nbt; - } - public static AsteroidSaveData load(CompoundTag compound) { String value = compound.getString("someValue"); return new AsteroidSaveData(value); } + + @Override + public CompoundTag save(CompoundTag nbt, HolderLookup.Provider registryLookup) { + nbt.put("asteroids", this.datacompound); + return nbt; + } } diff --git a/src/main/resources/assets/galacticraft/textures/gui/sprites/canned_food/background.png b/src/main/resources/assets/galacticraft/textures/gui/sprites/canned_food/background.png new file mode 100644 index 0000000000000000000000000000000000000000..427b020e22ae92a04fe2756965ee97deba6467c2 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)T#p?)*4^DLaf7`ND8ldQ k;uunKD_P>mga1Il$Tf}muS@*Q%RngxPgg&ebxsLQ0ROQYu>b%7 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/gui/sprites/canned_food/background.png.mcmeta b/src/main/resources/assets/galacticraft/textures/gui/sprites/canned_food/background.png.mcmeta new file mode 100644 index 000000000..2d596bf66 --- /dev/null +++ b/src/main/resources/assets/galacticraft/textures/gui/sprites/canned_food/background.png.mcmeta @@ -0,0 +1,10 @@ +{ + "gui": { + "scaling": { + "type": "nine_slice", + "width": 32, + "height": 32, + "border": 4 + } + } +} diff --git a/src/main/resources/assets/galacticraft/textures/gui/sprites/canned_food/blocked_slot.png b/src/main/resources/assets/galacticraft/textures/gui/sprites/canned_food/blocked_slot.png new file mode 100644 index 0000000000000000000000000000000000000000..31f79622c950be21936b0bd13160394843ef1778 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9S!VDyfb{13uDgFST5LX~=Zf@S)-TnXn|BQ@` zIcxVR0fiV#g8YIR9G=}s19Ch)T^vIy;&S^MIT;i`>(il8N&UMQA;Q9An*`K`-^H%AV`L~lyRaX^ev$d6O Q0vgKT>FVdQ&MBb@05B6hc>n+a literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/galacticraft/textures/gui/sprites/canned_food/slot.png b/src/main/resources/assets/galacticraft/textures/gui/sprites/canned_food/slot.png new file mode 100644 index 0000000000000000000000000000000000000000..ac45847e437b62dd0a24c3cd1e708b6748cc05dc GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9S#0(_={%pMoq<8{+LR^8gxw(0FclZDQ|3xop zwgUN#B|(0{3=Yq3qyagyo-U3d9J0wAtW7L!YeH9t