diff --git a/gradle.properties b/gradle.properties index 06dd847..3c5dbac 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ yarn_mappings=1.20.3-pre2+build.5 loader_version=0.14.24 # Mod Properties - mod_version = 1.20.3.3 + mod_version = 1.20.3.4 maven_group = de.jottyfan.minecraft archives_base_name = quickiefabric diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/QuickieFabricClient.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/QuickieFabricClient.java index f8b1859..e55b3a4 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/QuickieFabricClient.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/QuickieFabricClient.java @@ -22,7 +22,8 @@ public class QuickieFabricClient implements ClientModInitializer { public void onInitializeClient() { HandledScreens.register(RegistryManager.BACKPACK_SCREEN_HANDLER, BackpackScreen::new); HandledScreens.register(RegistryManager.BLOCKSTACKER_SCREEN_HANDLER, BlockStackerScreen::new); - // make cotton plant block transparent + // make cotton plant block and sulforpad transparent BlockRenderLayerMap.INSTANCE.putBlock(QuickieBlocks.COTTONPLANT, RenderLayer.getCutout()); + BlockRenderLayerMap.INSTANCE.putBlock(QuickieBlocks.SULFORPAD, RenderLayer.getCutout()); } } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockSulforpad.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockSulforpad.java new file mode 100644 index 0000000..a1eb241 --- /dev/null +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockSulforpad.java @@ -0,0 +1,87 @@ +package de.jottyfan.minecraft.quickiefabric.blocks; + +import java.util.Arrays; +import java.util.List; + +import com.mojang.serialization.MapCodec; + +import de.jottyfan.minecraft.quickiefabric.items.QuickieItems; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.CropBlock; +import net.minecraft.block.ShapeContext; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemConvertible; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContextParameterSet.Builder; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.ItemScatterer; +import net.minecraft.util.collection.DefaultedList; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.BlockView; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class BlockSulforpad extends CropBlock { + + public BlockSulforpad(AbstractBlock.Settings settings) { + super(settings.nonOpaque().blockVision(Blocks::never).solidBlock(Blocks::never)); + } + + protected BlockSulforpad() { + super(FabricBlockSettings.create()); + } + + @Override + public List getDroppedStacks(BlockState state, Builder builder) { + return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SULPHOR, 2) }); + } + + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + return Block.createCuboidShape(1.0, 0.0, 1.0, 15.0, 1.5, 15.0); + } + + @Override + protected boolean canPlantOnTop(BlockState floor, BlockView world, BlockPos pos) { + return floor.getBlock().equals(Blocks.LAVA) || floor.getBlock().equals(Blocks.LAVA_CAULDRON); + } + + @Override + protected ItemConvertible getSeedsItem() { + return QuickieItems.SULPHOR; + } + + private void spawnHarvested(World world, BlockPos pos, BlockState state) { + DefaultedList list = DefaultedList.of(); + getDroppedStacks(state, null).forEach(itemStack -> { + list.add(itemStack); + }); + ItemScatterer.spawn(world, pos, list); + } + + @Override + public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, + BlockHitResult hitResult) { + if (!world.isClient && isMature(state)) { + spawnHarvested(world, pos, state); + world.setBlockState(pos, state.with(AGE, 0)); + } + return super.onUse(state, world, pos, player, hand, hitResult); + } + + @Override + public MapCodec getCodec() { + return BlockSulforpad.createCodec(BlockSulforpad::new); + } +} diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/QuickieBlocks.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/QuickieBlocks.java index edee31c..5fea876 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/QuickieBlocks.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/QuickieBlocks.java @@ -36,4 +36,5 @@ public class QuickieBlocks { public static final BlockSpreader BLOCKSPREADER = new BlockSpreader(); public static final BlockSpeedpowder BLOCKSPEEDPOWDER = new BlockSpeedpowder(); public static final BlockQuickiepowder BLOCKQUICKIEPOWDER = new BlockQuickiepowder(); + public static final BlockSulforpad SULFORPAD = new BlockSulforpad(); } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/init/FeaturesManager.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/init/FeaturesManager.java index e3280a7..02e077e 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/init/FeaturesManager.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/init/FeaturesManager.java @@ -40,7 +40,7 @@ public class FeaturesManager { return RegistryKey.of(RegistryKeys.CONFIGURED_FEATURE, new Identifier(RegistryManager.QUICKIEFABRIC, name)); } - private static final RegistryKey genPf(String name) { + private static final RegistryKey genPf(String name) { return RegistryKey.of(RegistryKeys.PLACED_FEATURE, new Identifier(RegistryManager.QUICKIEFABRIC, name)); } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java index 34a3714..488801c 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java @@ -141,7 +141,7 @@ public class RegistryManager { stacks.add(new ItemStack(QuickieBlocks.BLOCKSTACKERNORTH)); stacks.add(new ItemStack(QuickieBlocks.BLOCKSTACKERSOUTH)); stacks.add(new ItemStack(QuickieBlocks.BLOCKSPREADER)); - }).build()); + }).build()); } private static final void registerBlock(Block block, String name) { @@ -222,6 +222,7 @@ public class RegistryManager { registerBlock(QuickieBlocks.BLOCKSTACKERNORTH, "blockstackernorth"); registerBlock(QuickieBlocks.BLOCKSTACKERSOUTH, "blockstackersouth"); registerBlock(QuickieBlocks.BLOCKSPREADER, "blockspreader"); + registerBlock(QuickieBlocks.SULFORPAD, "sulforpad"); } public static final void registerItems() { diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemSulphor.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemSulphor.java index fcd2511..07ab369 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemSulphor.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemSulphor.java @@ -1,7 +1,14 @@ package de.jottyfan.minecraft.quickiefabric.items; +import de.jottyfan.minecraft.quickiefabric.blocks.QuickieBlocks; import net.fabricmc.fabric.api.item.v1.FabricItemSettings; +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; import net.minecraft.item.Item; +import net.minecraft.item.ItemUsageContext; +import net.minecraft.util.ActionResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; /** * @@ -13,4 +20,18 @@ public class ItemSulphor extends Item { public ItemSulphor() { super(new FabricItemSettings()); } + + @Override + public ActionResult useOnBlock(ItemUsageContext context) { + World world = context.getWorld(); + BlockPos pos = context.getBlockPos(); + Block block = world.getBlockState(pos).getBlock(); + if (Blocks.LAVA_CAULDRON.equals(block)) { + if (world.getBlockState(pos.up()).isAir()) { + world.setBlockState(pos.up(), QuickieBlocks.SULFORPAD.getDefaultState()); + context.getStack().decrement(1); + } + } + return ActionResult.PASS; + } } diff --git a/src/main/resources/assets/quickiefabric/blockstates/sulforpad.json b/src/main/resources/assets/quickiefabric/blockstates/sulforpad.json new file mode 100644 index 0000000..9fcb5d0 --- /dev/null +++ b/src/main/resources/assets/quickiefabric/blockstates/sulforpad.json @@ -0,0 +1,12 @@ +{ + "variants": { + "age=0": { "model": "quickiefabric:block/sulforpad0" }, + "age=1": { "model": "quickiefabric:block/sulforpad0" }, + "age=2": { "model": "quickiefabric:block/sulforpad0" }, + "age=3": { "model": "quickiefabric:block/sulforpad0" }, + "age=4": { "model": "quickiefabric:block/sulforpad1" }, + "age=5": { "model": "quickiefabric:block/sulforpad1" }, + "age=6": { "model": "quickiefabric:block/sulforpad1" }, + "age=7": { "model": "quickiefabric:block/sulforpad2" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiefabric/lang/de_de.json b/src/main/resources/assets/quickiefabric/lang/de_de.json index 68ceab1..c97b395 100644 --- a/src/main/resources/assets/quickiefabric/lang/de_de.json +++ b/src/main/resources/assets/quickiefabric/lang/de_de.json @@ -79,6 +79,7 @@ "block.quickiefabric.blockstackernorth": "Nordstapler", "block.quickiefabric.blockstackersouth": "Südstapler", "block.quickiefabric.blockspreader": "Blockverteiler", + "block.quickiefabric.sulforpad": "Schwefelablagerung", "container.quickiefabric.backpack": "Rucksack", "container.quickiefabric.blockstacker": "Blockstapler", "msg.buildingplan.start": "beginne Konstruktionsaufnahme bei %s,%s,%s", diff --git a/src/main/resources/assets/quickiefabric/lang/en_us.json b/src/main/resources/assets/quickiefabric/lang/en_us.json index 28be357..c23f338 100644 --- a/src/main/resources/assets/quickiefabric/lang/en_us.json +++ b/src/main/resources/assets/quickiefabric/lang/en_us.json @@ -79,6 +79,7 @@ "block.quickiefabric.blockstackernorth": "north stacker", "block.quickiefabric.blockstackersouth": "south stacker", "block.quickiefabric.blockspreader": "block spreader", + "block.quickiefabric.sulforpad": "sulphur deposition", "container.quickiefabric.backpack": "backpack", "container.quickiefabric.blockstacker": "block stacker", "msg.buildingplan.start": "started recording of construction at %s,%s,%s", diff --git a/src/main/resources/assets/quickiefabric/models/block/sulforpad0.json b/src/main/resources/assets/quickiefabric/models/block/sulforpad0.json new file mode 100644 index 0000000..8c54013 --- /dev/null +++ b/src/main/resources/assets/quickiefabric/models/block/sulforpad0.json @@ -0,0 +1,16 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "quickiefabric:block/sulforpad0", + "texture": "quickiefabric:block/sulforpad0" + }, + "elements": [ + { "from": [ 0, 0.25, 0 ], + "to": [ 16, 0.25, 16 ], + "faces": { + "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/main/resources/assets/quickiefabric/models/block/sulforpad1.json b/src/main/resources/assets/quickiefabric/models/block/sulforpad1.json new file mode 100644 index 0000000..952db6d --- /dev/null +++ b/src/main/resources/assets/quickiefabric/models/block/sulforpad1.json @@ -0,0 +1,16 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "quickiefabric:block/sulforpad1", + "texture": "quickiefabric:block/sulforpad1" + }, + "elements": [ + { "from": [ 0, 0.25, 0 ], + "to": [ 16, 0.25, 16 ], + "faces": { + "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/main/resources/assets/quickiefabric/models/block/sulforpad2.json b/src/main/resources/assets/quickiefabric/models/block/sulforpad2.json new file mode 100644 index 0000000..1d8992c --- /dev/null +++ b/src/main/resources/assets/quickiefabric/models/block/sulforpad2.json @@ -0,0 +1,16 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "quickiefabric:block/sulforpad2", + "texture": "quickiefabric:block/sulforpad2" + }, + "elements": [ + { "from": [ 0, 0.25, 0 ], + "to": [ 16, 0.25, 16 ], + "faces": { + "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture" } + } + } + ] +} diff --git a/src/main/resources/assets/quickiefabric/models/item/sulphorpad.json b/src/main/resources/assets/quickiefabric/models/item/sulphorpad.json new file mode 100644 index 0000000..d95f4ed --- /dev/null +++ b/src/main/resources/assets/quickiefabric/models/item/sulphorpad.json @@ -0,0 +1,6 @@ +{ + "parent": "item/coal", + "textures": { + "layer0": "quickiefabric:item/sulphorpad2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiefabric/textures/block/sulforpad0.png b/src/main/resources/assets/quickiefabric/textures/block/sulforpad0.png new file mode 100644 index 0000000..4ff980f Binary files /dev/null and b/src/main/resources/assets/quickiefabric/textures/block/sulforpad0.png differ diff --git a/src/main/resources/assets/quickiefabric/textures/block/sulforpad1.png b/src/main/resources/assets/quickiefabric/textures/block/sulforpad1.png new file mode 100644 index 0000000..da3163a Binary files /dev/null and b/src/main/resources/assets/quickiefabric/textures/block/sulforpad1.png differ diff --git a/src/main/resources/assets/quickiefabric/textures/block/sulforpad2.png b/src/main/resources/assets/quickiefabric/textures/block/sulforpad2.png new file mode 100644 index 0000000..29bbb3c Binary files /dev/null and b/src/main/resources/assets/quickiefabric/textures/block/sulforpad2.png differ