From 17d8dcce82564e468a225e6fc77c67df98705ce1 Mon Sep 17 00:00:00 2001 From: Mrbysco Date: Tue, 12 Mar 2024 18:00:23 +0100 Subject: [PATCH] Long Range Breaker and Vertical Digger --- .../9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e | 5 +-- .../recipes/long_range_breaker.json | 19 ++++++++++++ .../data/BlockRecipeGenerator.java | 11 +++++-- .../mod/config/CommonConfig.java | 8 +++++ .../mod/inventory/gui/GuiMiner.java | 20 +++++------- .../mod/items/ItemWingsOfTheBats.java | 2 +- .../mod/tile/TileEntityLongRangeBreaker.java | 2 +- .../mod/tile/TileEntityVerticalDigger.java | 31 ++++++++----------- .../actuallyadditions/mod/util/WorldUtil.java | 6 +++- .../assets/actuallyadditions/lang/en_us.json | 4 +-- 10 files changed, 69 insertions(+), 39 deletions(-) create mode 100644 src/generated/resources/data/actuallyadditions/recipes/long_range_breaker.json diff --git a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e index c28dadfbf..7ac628fa0 100644 --- a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e +++ b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e @@ -1,4 +1,4 @@ -// 1.20.4 2024-03-12T17:11:30.554907 Recipes +// 1.20.4 2024-03-12T17:59:34.1573737 Recipes 4d3128b37a7153882a9324cda49b5069207561c5 data/actuallyadditions/recipes/atomic_reconstructor.json b0367f5012651764931e8b8fd0c5bcca4e8614c0 data/actuallyadditions/recipes/battery_box.json dba5d4a1a79489d5766fad32f912ab1a64618854 data/actuallyadditions/recipes/bio_reactor.json @@ -53,10 +53,11 @@ ff81da8a0f6632779414c0512100696a11771814 data/actuallyadditions/recipes/hopping_ 2c37821d291542d4821842501e07bfad38181553 data/actuallyadditions/recipes/lava_factory_casing.json 76f9eb2b859198eec4c50d992c3715633d5109a8 data/actuallyadditions/recipes/lava_factory_controller.json 1e3936f80be1540cd3d6ed570c1ed6381227db7d data/actuallyadditions/recipes/leaf_generator.json +11a57ce2eea04fed226a817a3995acd406bb2efb data/actuallyadditions/recipes/long_range_breaker.json 73696fd4e851f440a9850485fc9ad03fc63442a9 data/actuallyadditions/recipes/oil_generator.json afbee3f7074b7aa88d4bc8941d820d02b827da4b data/actuallyadditions/recipes/phantom_booster.json f0a9c8a0de8fb884cd207c34c4a10e7a4a021153 data/actuallyadditions/recipes/phantom_energyface.json -472521d8bb5db8f9165ac642c3309d2d2b48f8e6 data/actuallyadditions/recipes/phantom_itemface.json +c7b65084e855bd7f083819ed9339320577510c6f data/actuallyadditions/recipes/phantom_itemface.json 6d3aa070e0fccbb126c80323423c9482259dd6de data/actuallyadditions/recipes/phantom_liquiface.json 253e31ad471e2a8e20bfbe077826a8fac35fcc84 data/actuallyadditions/recipes/phantom_redstoneface.json 8c78ebb9351b98ffe368391a391b90385c0b8b7f data/actuallyadditions/recipes/placer.json diff --git a/src/generated/resources/data/actuallyadditions/recipes/long_range_breaker.json b/src/generated/resources/data/actuallyadditions/recipes/long_range_breaker.json new file mode 100644 index 000000000..31d3a8e34 --- /dev/null +++ b/src/generated/resources/data/actuallyadditions/recipes/long_range_breaker.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": { + "item": "actuallyadditions:breaker" + }, + "V": { + "item": "actuallyadditions:void_crystal" + } + }, + "pattern": [ + "AAA", + " V " + ], + "result": { + "item": "actuallyadditions:long_range_breaker" + } +} \ No newline at end of file diff --git a/src/main/java/de/ellpeck/actuallyadditions/data/BlockRecipeGenerator.java b/src/main/java/de/ellpeck/actuallyadditions/data/BlockRecipeGenerator.java index ea23fb7d9..f30c6bbc2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/data/BlockRecipeGenerator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/data/BlockRecipeGenerator.java @@ -416,9 +416,9 @@ public class BlockRecipeGenerator extends RecipeProvider { // Phantom Itemface Recipe.shaped(ActuallyBlocks.PHANTOM_ITEMFACE.getItem()) - .pattern(" C ", "DED", " A ") + .pattern(" C ", "MEM", " A ") .define('C', Tags.Items.CHESTS_WOODEN) - .define('D', ActuallyItems.EMPOWERED_DIAMATINE_CRYSTAL) + .define('M', Items.PHANTOM_MEMBRANE) .define('E', ActuallyBlocks.ENDER_CASING.get()) .define('A', ActuallyItems.ADVANCED_COIL.get()) .save(recipeOutput); @@ -479,6 +479,13 @@ public class BlockRecipeGenerator extends RecipeProvider { .define('E', ActuallyItems.ENORI_CRYSTAL) .define('C', ActuallyBlocks.IRON_CASING.get()) .save(recipeOutput); + + // Long-Range Breaker + Recipe.shaped(ActuallyBlocks.LONG_RANGE_BREAKER.getItem()) + .pattern("AAA", " V ") + .define('A', ActuallyBlocks.BREAKER.get()) + .define('V', ActuallyItems.VOID_CRYSTAL) + .save(recipeOutput); } public static class Recipe { diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/CommonConfig.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/CommonConfig.java index f0abae4e8..c7b626cb9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/CommonConfig.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/CommonConfig.java @@ -45,6 +45,8 @@ public class CommonConfig { public static ModConfigSpec.IntValue LEAF_GENERATOR_COOLDOWN; public static ModConfigSpec.IntValue LEAF_GENERATOR_CF_PER_LEAF; public static ModConfigSpec.IntValue LEAF_GENERATOR_AREA; + public static ModConfigSpec.ConfigValue> MINER_EXTRA_WHITELIST; + public static ModConfigSpec.ConfigValue> MINER_BLACKLIST; public static void build() { BUILDER.comment("Machine Settings").push("machineSettings"); @@ -57,6 +59,12 @@ public class CommonConfig { LEAF_GENERATOR_COOLDOWN = BUILDER.comment("The cooldown between two generation cycles of the Leaf Generator, in ticks").defineInRange("leafGeneratorCooldown", 5, 1, Integer.MAX_VALUE); LEAF_GENERATOR_CF_PER_LEAF = BUILDER.comment("The Leaf Generator's Energy Production in CF/Leaf").defineInRange("leafGeneratorCPPerLeaf", 300, 1, Integer.MAX_VALUE); LEAF_GENERATOR_AREA = BUILDER.comment("The size of the Leaf Generator's harvesting area. Default is 7x7x7, must be an odd number.").defineInRange("leafGeneratorArea", 7, 1, Integer.MAX_VALUE); + MINER_EXTRA_WHITELIST = BUILDER + .comment("By default, the Vertical Digger mines everything that is in the 'forge:ores' block/item tags. If there is one that it can't mine, but should be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option only applies if the miner is in Ores Only Mode.") + .defineListAllowEmpty("Vertical Digger Extra Whitelist", new ArrayList<>(), (o) -> o instanceof String); + MINER_BLACKLIST = BUILDER + .comment("By default, the Vertical Digger mines everything that is in the 'forge:ores' block/item tags. If there is one that it can mine, but shouldn't be able to, put its REGISTRY NAME here. These are the actual registered Item Names, the ones you use, for example, when using the /give Command. This Config Option will apply in both modes.") + .defineListAllowEmpty("Vertical Digger Blacklist", new ArrayList<>(), (o) -> o instanceof String); BUILDER.pop(); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java index f8001e623..26d363c19 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/gui/GuiMiner.java @@ -12,9 +12,11 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui; import com.mojang.blaze3d.systems.RenderSystem; import de.ellpeck.actuallyadditions.mod.inventory.ContainerMiner; +import de.ellpeck.actuallyadditions.mod.network.PacketHandlerHelper; import de.ellpeck.actuallyadditions.mod.tile.TileEntityVerticalDigger; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Button; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; @@ -39,13 +41,12 @@ public class GuiMiner extends AAScreen { public void init() { super.init(); -// Button buttonMode = new Button(this.leftPos + this.imageWidth / 2 - 51, this.topPos + 75, 50, 20, "Mode", button -> { -// }); -// this.addButton(buttonMode); -// -// Button buttonReset = new Button(this.leftPos + this.imageWidth / 2 + 1, this.topPos + 75, 50, 20, "Reset", button -> { -// }); -// this.addButton(buttonReset); + this.addRenderableWidget(Button.builder(Component.literal("Mode"), $ -> { + PacketHandlerHelper.sendButtonPacket(this.miner, 0); + }).bounds(this.leftPos + this.imageWidth / 2 - 51, this.topPos + 75, 50, 20).build()); + this.addRenderableWidget(Button.builder(Component.literal("Reset"), $ -> { + PacketHandlerHelper.sendButtonPacket(this.miner, 1); + }).bounds(this.leftPos + this.imageWidth / 2 + 1, this.topPos + 75, 50, 20).build()); } @Override public void renderBg(GuiGraphics guiGraphics, float f, int x, int y) { @@ -60,9 +61,4 @@ public class GuiMiner extends AAScreen { : "Mining Everything"; guiGraphics.drawString(font, mining, this.leftPos + this.imageWidth / 2 - this.font.width(mining) / 2, this.topPos + 8, 0x404040, false); } - -// @Override -// public void actionPerformed(Button button) { -// PacketHandlerHelper.sendButtonPacket(this.miner, button.id); -// } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java index f19e046e2..f1db3bca6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemWingsOfTheBats.java @@ -90,7 +90,7 @@ public class ItemWingsOfTheBats extends ItemBase { if (event.getEntity().level() != null && !event.getEntity().level().isClientSide && source instanceof Player) { //Drop Wings from Bats - if (ConfigBoolValues.DO_BAT_DROPS.isEnabled() && event.getEntity() instanceof Bat) { + if (ConfigBoolValues.DO_BAT_DROPS.isEnabled() && event.getEntity() instanceof Bat) { //TODO: Change to CommonConfig int looting = event.getLootingLevel(); Iterable equip = source.getHandSlots(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLongRangeBreaker.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLongRangeBreaker.java index f12fc68c5..7848d2dfc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLongRangeBreaker.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLongRangeBreaker.java @@ -145,7 +145,7 @@ public class TileEntityLongRangeBreaker extends TileEntityInventoryBase implemen @Override public Component getDisplayName() { - return Component.empty(); + return Component.translatable("container.actuallyadditions.directionalBreaker"); } @Nullable diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityVerticalDigger.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityVerticalDigger.java index ca0406e85..95ddcd9c6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityVerticalDigger.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityVerticalDigger.java @@ -11,7 +11,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.blocks.ActuallyBlocks; -import de.ellpeck.actuallyadditions.mod.config.values.ConfigStringListValues; +import de.ellpeck.actuallyadditions.mod.config.CommonConfig; import de.ellpeck.actuallyadditions.mod.inventory.ContainerMiner; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.util.AssetUtil; @@ -37,6 +37,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; +import net.neoforged.neoforge.common.Tags; import net.neoforged.neoforge.common.TierSortingRegistry; import net.neoforged.neoforge.common.util.FakePlayerFactory; import net.neoforged.neoforge.energy.IEnergyStorage; @@ -145,7 +146,7 @@ public class TileEntityVerticalDigger extends TileEntityInventoryBase implements ItemStack stack = block.getCloneItemStack(state, new BlockHitResult(new Vec3(0, 0, 0), Direction.DOWN, pos, false), this.level, pos, FakePlayerFactory.getMinecraft((ServerLevel) this.level)); if (!state.isAir()) { //block.getHarvestLevel(state) <= DrillItem.HARVEST_LEVEL - if (TierSortingRegistry.isCorrectTierForDrops(Tiers.NETHERITE, state) && state.getDestroySpeed(this.level, pos) >= 0F && !(block instanceof IFluidBlock) && this.isMinable(block, stack)) { + if (TierSortingRegistry.isCorrectTierForDrops(Tiers.NETHERITE, state) && state.getDestroySpeed(this.level, pos) >= 0F && !(block instanceof IFluidBlock) && this.isMinable(state, stack)) { List drops = Block.getDrops(state, (ServerLevel) this.level, pos, this.level.getBlockEntity(pos)); float chance = WorldUtil.fireFakeHarvestEventsForDropChance(this, drops, this.level, pos); @@ -170,26 +171,20 @@ public class TileEntityVerticalDigger extends TileEntityInventoryBase implements return false; } - private boolean isMinable(Block block, ItemStack stack) { - if (block != null) { + private boolean isMinable(BlockState state, ItemStack stack) { + Block block = state.getBlock(); + if (!state.isEmpty()) { if (!this.isBlacklisted(block)) { if (!this.onlyMineOres) { return true; } else { - if (StackUtil.isValid(stack)) { - // TODO: [port] come back and see if there is a tag for this - - // int[] ids = OreDictionary.getOreIDs(stack); - // for (int id : ids) { - // String name = OreDictionary.getOreName(id); - // if (name.startsWith("ore") || name.startsWith("denseore")) { - // return true; - // } - // } - + if (!stack.isEmpty()) { + if (stack.is(Tags.Items.ORES) || state.is(Tags.Blocks.ORES)) { // Check both the block and item tags + return true; + } String reg = BuiltInRegistries.BLOCK.getKey(block).toString(); if (!reg.isEmpty()) { - for (String string : ConfigStringListValues.MINER_EXTRA_WHITELIST.getValue()) { + for (String string : CommonConfig.Machines.MINER_EXTRA_WHITELIST.get()) { if (reg.equals(string)) { return true; } @@ -210,7 +205,7 @@ public class TileEntityVerticalDigger extends TileEntityInventoryBase implements private boolean isBlacklisted(Block block) { String reg = BuiltInRegistries.BLOCK.getKey(block).toString(); if (!reg.isEmpty()) { - for (String string : ConfigStringListValues.MINER_BLACKLIST.getValue()) { + for (String string : CommonConfig.Machines.MINER_BLACKLIST.get()) { if (reg.equals(string)) { return true; } @@ -253,7 +248,7 @@ public class TileEntityVerticalDigger extends TileEntityInventoryBase implements @Override public Component getDisplayName() { - return Component.empty(); + return Component.translatable("container.actuallyadditions.vertical_digger"); } @Nullable diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 7337efdf0..2ee624349 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -37,6 +37,8 @@ import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.common.util.FakePlayer; import net.neoforged.neoforge.common.util.FakePlayerFactory; import net.neoforged.neoforge.energy.IEnergyStorage; +import net.neoforged.neoforge.event.EventHooks; +import net.neoforged.neoforge.event.entity.player.PlayerEvent; import net.neoforged.neoforge.event.level.BlockEvent.BreakEvent; import net.neoforged.neoforge.fluids.FluidStack; import net.neoforged.neoforge.fluids.capability.IFluidHandler; @@ -259,7 +261,9 @@ public final class WorldUtil { BlockState state = level.getBlockState(pos); BreakEvent event = new BreakEvent(level, pos, state, fake); - if (!NeoForge.EVENT_BUS.post(event).isCanceled()) { + NeoForge.EVENT_BUS.post(event); + if (!event.isCanceled()) { + return EventHooks.doPlayerHarvestCheck(fake, state, true) ? 1F : 0F; //return ForgeEventFactory.fireBlockHarvesting(drops, world, pos, state, 0, 1, false, fake); //TODO what?! } } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_us.json b/src/main/resources/assets/actuallyadditions/lang/en_us.json index 6562d8f07..9dae8059e 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_us.json +++ b/src/main/resources/assets/actuallyadditions/lang/en_us.json @@ -171,7 +171,7 @@ "block.actuallyadditions.coffee_machine": "Coffee Maker", "block.actuallyadditions.xp_solidifier": "Experience Solidifier", "block.actuallyadditions.leaf_generator": "Leaf-Eating Generator", - "block.actuallyadditions.long_range_breaker": "Long-Range Breaker (wip)", + "block.actuallyadditions.long_range_breaker": "Long-Range Breaker", "block.actuallyadditions.ranged_collector": "Ranged Collector", "block.actuallyadditions.laser_relay": "Energy Laser Relay (wip)", "block.actuallyadditions.laser_relay_advanced": "Advanced Energy Laser Relay (wip)", @@ -193,7 +193,7 @@ "block.actuallyadditions.empowered_emeradic_crystal_block": "Empowered Emeradic Crystal Block", "block.actuallyadditions.empowered_void_crystal_block": "Empowered Void Crystal Block", "block.actuallyadditions.empowered_enori_crystal_block": "Empowered Enori Crystal Block", - "block.actuallyadditions.vertical_digger": "Vertical Digger (wip)", + "block.actuallyadditions.vertical_digger": "Vertical Digger", "block.actuallyadditions.firework_box": "Firework Box", "block.actuallyadditions.black_quartz_wall": "Black Quartz Wall", "block.actuallyadditions.black_quartz_stair": "Black Quartz Stairs",