diff --git a/gradle.properties b/gradle.properties index 90bb373..272e750 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,4 +14,4 @@ org.gradle.jvmargs=-Xmx1G # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api - fabric_version=0.13.1+build.370-1.16 + fabric_version=0.16.2+build.385-1.16.1 diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreNetherSulphor.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreNetherSulphor.java index 17dfad3..99ff453 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreNetherSulphor.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreNetherSulphor.java @@ -4,7 +4,7 @@ import java.util.Arrays; import java.util.List; import java.util.Random; -import de.jottyfan.minecraft.quickiefabric.items.Items; +import de.jottyfan.minecraft.quickiefabric.items.QuickieItems; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.block.BlockState; import net.minecraft.block.Material; @@ -25,7 +25,7 @@ public class BlockOreNetherSulphor extends OreBlock { @Override public List getDroppedStacks(BlockState state, Builder builder) { - return Arrays.asList(new ItemStack[] { new ItemStack(Items.SULPHOR) }); + return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SULPHOR) }); } @Override diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreSalpeter.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreSalpeter.java index 9bb874b..61b7bb2 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreSalpeter.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreSalpeter.java @@ -4,7 +4,7 @@ import java.util.Arrays; import java.util.List; import java.util.Random; -import de.jottyfan.minecraft.quickiefabric.items.Items; +import de.jottyfan.minecraft.quickiefabric.items.QuickieItems; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.block.BlockState; import net.minecraft.block.Material; @@ -25,7 +25,7 @@ public class BlockOreSalpeter extends OreBlock { @Override public List getDroppedStacks(BlockState state, Builder builder) { - return Arrays.asList(new ItemStack[] { new ItemStack(Items.SALPETER) }); + return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SALPETER) }); } @Override diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreSandSalpeter.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreSandSalpeter.java index 1a8e2c5..7962d7a 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreSandSalpeter.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreSandSalpeter.java @@ -4,7 +4,7 @@ import java.util.Arrays; import java.util.List; import java.util.Random; -import de.jottyfan.minecraft.quickiefabric.items.Items; +import de.jottyfan.minecraft.quickiefabric.items.QuickieItems; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; @@ -26,7 +26,7 @@ public class BlockOreSandSalpeter extends OreBlock { @Override public List getDroppedStacks(BlockState state, Builder builder) { - return Arrays.asList(new ItemStack[] { new ItemStack(Items.SALPETER), new ItemStack(Blocks.SAND) }); + return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SALPETER), new ItemStack(Blocks.SAND) }); } @Override diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreSulphor.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreSulphor.java index 15bee04..97990f0 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreSulphor.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockOreSulphor.java @@ -4,7 +4,7 @@ import java.util.Arrays; import java.util.List; import java.util.Random; -import de.jottyfan.minecraft.quickiefabric.items.Items; +import de.jottyfan.minecraft.quickiefabric.items.QuickieItems; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.block.BlockState; import net.minecraft.block.Material; @@ -25,7 +25,7 @@ public class BlockOreSulphor extends OreBlock { @Override public List getDroppedStacks(BlockState state, Builder builder) { - return Arrays.asList(new ItemStack[] { new ItemStack(Items.SULPHOR) }); + return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SULPHOR) }); } @Override diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockSandSalpeter.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockSandSalpeter.java index 6177232..e84f573 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockSandSalpeter.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/blocks/BlockSandSalpeter.java @@ -3,7 +3,7 @@ package de.jottyfan.minecraft.quickiefabric.blocks; import java.util.Arrays; import java.util.List; -import de.jottyfan.minecraft.quickiefabric.items.Items; +import de.jottyfan.minecraft.quickiefabric.items.QuickieItems; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; @@ -25,6 +25,6 @@ public class BlockSandSalpeter extends GravelBlock { @Override public List getDroppedStacks(BlockState state, Builder builder) { - return Arrays.asList(new ItemStack[] { new ItemStack(Items.SALPETER), new ItemStack(Blocks.SAND) }); + return Arrays.asList(new ItemStack[] { new ItemStack(QuickieItems.SALPETER), new ItemStack(Blocks.SAND) }); } } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/event/BlockBreakMixin.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/event/BlockBreakMixin.java deleted file mode 100644 index bdb2a8b..0000000 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/event/BlockBreakMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package de.jottyfan.minecraft.quickiefabric.event; - -import org.spongepowered.asm.mixin.Mixin; -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 org.spongepowered.asm.mixin.injection.callback.LocalCapture; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -/** - * - * @author jotty - * - */ -@Mixin(Block.class) -public class BlockBreakMixin { -// @Inject(method = "injectBlockBreakCallback", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/Block;onBreak(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Lnet/minecraft/entity/player/PlayerEntity;)V"), cancellable = true) - @Inject(method = "injectBlockBreakCallback", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/Block;onBroken(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;)V"), cancellable = true) - private void interactOnBreak(final World world, final BlockPos blockPos, final BlockState blockState, final CallbackInfo info) { - ActionResult result = BreakBlockCallback.EVENT.invoker().injectBlockBreakCallback(world, blockPos, blockState); - if (result == ActionResult.FAIL) { - info.cancel(); - } - } -} diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/event/BreakBlockCallback.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/event/BreakBlockCallback.java index 811b22b..0297053 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/event/BreakBlockCallback.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/event/BreakBlockCallback.java @@ -15,9 +15,9 @@ import net.minecraft.world.World; */ public interface BreakBlockCallback { Event EVENT = EventFactory.createArrayBacked(BreakBlockCallback.class, - (listeners) -> (world, blockPos, blockState) -> { + (listeners) -> (world, blockPos, blockState, playerEntity) -> { for (BreakBlockCallback listener : listeners) { - ActionResult result = listener.injectBlockBreakCallback(world, blockPos, blockState); + ActionResult result = listener.injectBlockBreakCallback(world, blockPos, blockState, playerEntity); if (result != ActionResult.PASS) { return result; } @@ -25,5 +25,5 @@ public interface BreakBlockCallback { return ActionResult.PASS; }); - ActionResult injectBlockBreakCallback(World world, BlockPos blockPos, BlockState blockState); + ActionResult injectBlockBreakCallback(World world, BlockPos blockPos, BlockState blockState, PlayerEntity playerEntity); } 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 4349c7f..18dd4e9 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java @@ -7,11 +7,12 @@ import org.apache.logging.log4j.Logger; import de.jottyfan.minecraft.quickiefabric.blocks.QuickieBlocks; import de.jottyfan.minecraft.quickiefabric.event.BreakBlockCallback; -import de.jottyfan.minecraft.quickiefabric.items.Items; -import de.jottyfan.minecraft.quickiefabric.tools.Tools; +import de.jottyfan.minecraft.quickiefabric.items.QuickieItems; +import de.jottyfan.minecraft.quickiefabric.tools.QuickieTools; import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; @@ -37,13 +38,13 @@ public class RegistryManager { private static final String QUICKIEFABRIC = "quickiefabric"; - public static final ItemGroup QUICKIEFABRIC_GROUP = FabricItemGroupBuilder.create(new Identifier(QUICKIEFABRIC, "all")).icon(() -> new ItemStack(Items.SPEEDPOWDER)).appendItems(stacks -> { - stacks.add(new ItemStack(Items.SALPETER)); - stacks.add(new ItemStack(Items.SULPHOR)); - stacks.add(new ItemStack(Items.SPEEDPOWDER)); - stacks.add(new ItemStack(Items.LEVELUP)); - stacks.add(new ItemStack(Items.PENCIL)); - stacks.add(new ItemStack(Tools.SPEEDPOWDERAXE)); + public static final ItemGroup QUICKIEFABRIC_GROUP = FabricItemGroupBuilder.create(new Identifier(QUICKIEFABRIC, "all")).icon(() -> new ItemStack(QuickieItems.SPEEDPOWDER)).appendItems(stacks -> { + stacks.add(new ItemStack(QuickieItems.SALPETER)); + stacks.add(new ItemStack(QuickieItems.SULPHOR)); + stacks.add(new ItemStack(QuickieItems.SPEEDPOWDER)); + stacks.add(new ItemStack(QuickieItems.LEVELUP)); + stacks.add(new ItemStack(QuickieItems.PENCIL)); + stacks.add(new ItemStack(QuickieTools.SPEEDPOWDERAXE)); stacks.add(new ItemStack(QuickieBlocks.ORE_NETHER_SULPHOR)); stacks.add(new ItemStack(QuickieBlocks.ORE_SALPETER)); stacks.add(new ItemStack(QuickieBlocks.ORE_SAND_SALPETER)); @@ -71,25 +72,36 @@ public class RegistryManager { public static final void registerItems() { LOGGER.debug("registering quickiefabric items"); - registerItem(Items.SPEEDPOWDER, "speedpowder"); - registerItem(Items.LEVELUP, "levelup"); - registerItem(Items.PENCIL, "pencil"); - registerItem(Items.SALPETER, "salpeter"); - registerItem(Items.SULPHOR, "sulphor"); + registerItem(QuickieItems.SPEEDPOWDER, "speedpowder"); + registerItem(QuickieItems.LEVELUP, "levelup"); + registerItem(QuickieItems.PENCIL, "pencil"); + registerItem(QuickieItems.SALPETER, "salpeter"); + registerItem(QuickieItems.SULPHOR, "sulphor"); } public static final void registerTools() { LOGGER.debug("registering quickiefabric tools"); - registerItem(Tools.SPEEDPOWDERAXE, "speedpowderaxe"); + registerItem(QuickieTools.SPEEDPOWDERAXE, "speedpowderaxe"); } public static final void registerEvents() { LOGGER.debug("registering quickiefabric events"); - BreakBlockCallback.EVENT.register((world, blockPos, blockState) -> { + BreakBlockCallback.EVENT.register((world, blockPos, blockState, playerEntity) -> { // TODO: add code to break the corresponding surroundings also if hand hold the right tool // return ActionResult.PASS; // if the breaking replaces another event, but this does not appear for the speedpowder tools - LOGGER.info("broke block %s at %s", blockState.getBlock().getName(), blockPos.toString()); + LOGGER.info("{} broke block {} at {}", playerEntity.getName().asString(), blockState.getBlock().getTranslationKey(), blockPos.toString()); + BlockState blockStateDown = world.getBlockState(blockPos); + + if (!blockStateDown.isAir()) { // TODO: because we will only break the same blocks, that check becomes obsolete later + ItemStack itemStack = new ItemStack(blockStateDown.getBlock().asItem()); + // spawn entity in world + Block.dropStack(world, blockPos.down(), itemStack); + world.setBlockState(blockPos.down(), Blocks.AIR.getDefaultState()); + + LOGGER.info("also broke block {} at {}", playerEntity.getName().asString(), blockState.getBlock().getTranslationKey(), blockPos.down().toString()); + } + return ActionResult.SUCCESS; }); } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/Items.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/QuickieItems.java similarity index 93% rename from src/main/java/de/jottyfan/minecraft/quickiefabric/items/Items.java rename to src/main/java/de/jottyfan/minecraft/quickiefabric/items/QuickieItems.java index 2d8cc16..ccb54e0 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/Items.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/QuickieItems.java @@ -5,7 +5,7 @@ package de.jottyfan.minecraft.quickiefabric.items; * @author jotty * */ -public class Items { +public class QuickieItems { public static final ItemSpeedpowder SPEEDPOWDER = new ItemSpeedpowder(); public static final ItemLevelup LEVELUP = new ItemLevelup(); public static final ItemPencil PENCIL = new ItemPencil(); diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/mixin/BlockBreakMixin.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/mixin/BlockBreakMixin.java new file mode 100644 index 0000000..c38ca66 --- /dev/null +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/mixin/BlockBreakMixin.java @@ -0,0 +1,31 @@ +package de.jottyfan.minecraft.quickiefabric.mixin; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import de.jottyfan.minecraft.quickiefabric.event.BreakBlockCallback; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.ActionResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +@Mixin(Block.class) +public class BlockBreakMixin { + + @Inject(at = @At("HEAD"), method = "onBreak(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Lnet/minecraft/entity/player/PlayerEntity;)V") + private void onBreak(final World world, final BlockPos blockPos, final BlockState blockState, final PlayerEntity playerEntity, final CallbackInfo info) { + ActionResult result = BreakBlockCallback.EVENT.invoker().injectBlockBreakCallback(world, blockPos, blockState, playerEntity); + if (result == ActionResult.FAIL) { + info.cancel(); + } + } +} diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/tools/Tools.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/tools/QuickieTools.java similarity index 85% rename from src/main/java/de/jottyfan/minecraft/quickiefabric/tools/Tools.java rename to src/main/java/de/jottyfan/minecraft/quickiefabric/tools/QuickieTools.java index af7d4d5..9634855 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/tools/Tools.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/tools/QuickieTools.java @@ -5,6 +5,6 @@ package de.jottyfan.minecraft.quickiefabric.tools; * @author jotty * */ -public class Tools { +public class QuickieTools { public static final ToolSpeedpowderAxe SPEEDPOWDERAXE = new ToolSpeedpowderAxe(); } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 8776446..c41960f 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -23,7 +23,7 @@ ] }, "mixins": [ - // "quickiefabric.mixins.json" + "modid.mixins.json" ], "depends": { "fabricloader": ">=0.7.4", diff --git a/src/main/resources/quickiefabric.mixins.json b/src/main/resources/modid.mixins.json similarity index 75% rename from src/main/resources/quickiefabric.mixins.json rename to src/main/resources/modid.mixins.json index 73f07bc..449e147 100644 --- a/src/main/resources/quickiefabric.mixins.json +++ b/src/main/resources/modid.mixins.json @@ -1,7 +1,7 @@ { "required": true, "minVersion": "0.8", - "package": "de.jottyfan.minecraft.quickiefabric.event", + "package": "de.jottyfan.minecraft.quickiefabric.mixin", "compatibilityLevel": "JAVA_8", "mixins": [ "BlockBreakMixin"