From e998d88621cdeffa90a4154a048526a57a23cf34 Mon Sep 17 00:00:00 2001 From: TBPig <147127248+TBPig@users.noreply.github.com> Date: Sun, 19 Jul 2026 12:05:06 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=96=B9=E5=9D=97=E7=A0=B4=E5=9D=8F?= =?UTF-8?q?=E5=99=A8=E5=B4=A9=E6=BA=83=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle/libs.versions.toml | 20 +-- gradle/scripts/dependencies.gradle | 5 +- .../pigsplus/anvil/BlockBreakerBehavior.java | 2 +- .../pigsplus/block/BlockBreakerBlock.java | 142 ++++++++++-------- 4 files changed, 89 insertions(+), 80 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fc2ddd26..2aae2cf1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,10 +1,10 @@ [versions] minecraft = "1.21.1" neoForge = "21.1.219" -ageratum = "0.0.1+build.102" -anvillib = "2.0.0+snapshot.473" -anvilcraft = "1.6.0+snapshot.2000" -jei = "19.21.0.247" +ageratum = "0.0.1+build.106" +anvillib = "2.0.0+snapshot.490" +anvilcraft = "1.6.0+snapshot.2068" +jei = "19.32.0.358" jade = "15.3.4+neoforge" modDevGradle = "2.0.140" lombok = "8.7.1" @@ -15,23 +15,11 @@ jeiCommonApi = { group = "mezz.jei", name = "jei-1.21.1-common-api", version.ref jeiForgeApi = { group = "mezz.jei", name = "jei-1.21.1-neoforge-api", version.ref = "jei" } jeiForgeImpl = { group = "mezz.jei", name = "jei-1.21.1-neoforge", version.ref = "jei" } jade = { group = "maven.modrinth", name = "jade", version.ref = "jade" } -anvillib-codec = { group = "dev.anvilcraft.lib", name = "anvillib-codec-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-config = { group = "dev.anvilcraft.lib", name = "anvillib-config-neoforge-1.21.1", version.ref = "anvillib" } anvillib-recipe = { group = "dev.anvilcraft.lib", name = "anvillib-recipe-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-registrum = { group = "dev.anvilcraft.lib", name = "anvillib-registrum-neoforge-1.21.1", version.ref = "anvillib" } anvillib-moveableEntityBlock = { group = "dev.anvilcraft.lib", name = "anvillib-moveable-entity-block-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-multiblock = { group = "dev.anvilcraft.lib", name = "anvillib-multiblock-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-network = { group = "dev.anvilcraft.lib", name = "anvillib-network-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-integration = { group = "dev.anvilcraft.lib", name = "anvillib-integration-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-util = { group = "dev.anvilcraft.lib", name = "anvillib-util-neoforge-1.21.1", version.ref = "anvillib" } -anvillib-wheel = { group = "dev.anvilcraft.lib", name = "anvillib-wheel-neoforge-1.21.1", version.ref = "anvillib" } anvillib = { group = "dev.anvilcraft.lib", name = "anvillib-neoforge-1.21.1", version.ref = "anvillib" } ageratum = { group = "dev.anvilcraft.resource", name = "ageratum-neoforge-1.21.1", version.ref = "ageratum" } -[bundles] -anvillib = [ "anvillib-codec", "anvillib-config", "anvillib-recipe", "anvillib-registrum", "anvillib-moveableEntityBlock", "anvillib-multiblock", "anvillib-network", "anvillib-integration", "anvillib-util", "anvillib-wheel" ] - - [plugins] modDevGradle = { id = "net.neoforged.moddev", version.ref = "modDevGradle" } lombok = { id = "io.freefair.lombok", version.ref = "lombok" } diff --git a/gradle/scripts/dependencies.gradle b/gradle/scripts/dependencies.gradle index ce063587..770d6c3e 100644 --- a/gradle/scripts/dependencies.gradle +++ b/gradle/scripts/dependencies.gradle @@ -1,12 +1,11 @@ dependencies { // Anvil Lib - runtimeOnly(libs.anvillib) - compileOnly(libs.bundles.anvillib) + api(libs.anvillib) interfaceInjectionData(libs.anvillib.recipe) interfaceInjectionData(libs.anvillib.moveableEntityBlock) // Ageratum 藿香 - implementation(libs.ageratum) + api(libs.ageratum) // AnvilCraft implementation(libs.anvilcraft) { transitive = false } diff --git a/src/main/java/dev/anvilcraft/pigsplus/anvil/BlockBreakerBehavior.java b/src/main/java/dev/anvilcraft/pigsplus/anvil/BlockBreakerBehavior.java index 3862168e..5055ef04 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/anvil/BlockBreakerBehavior.java +++ b/src/main/java/dev/anvilcraft/pigsplus/anvil/BlockBreakerBehavior.java @@ -18,7 +18,7 @@ public boolean handle(Level level, BlockPos hitBlockPos, BlockState hitBlockStat BlockBreakerBlock block = (BlockBreakerBlock) hitBlockState.getBlock(); int distance = Math.min((int) event.getFallDistance() + 2, 5); level.setBlock(hitBlockPos, hitBlockState.setValue(BlockPlacerBlock.TRIGGERED, true), 2); - block.devourBlock( + block.breakBlock( serverLevel, hitBlockPos, hitBlockState.getValue(BlockDevourerBlock.FACING), diff --git a/src/main/java/dev/anvilcraft/pigsplus/block/BlockBreakerBlock.java b/src/main/java/dev/anvilcraft/pigsplus/block/BlockBreakerBlock.java index 0bea0bf1..d44c77df 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/block/BlockBreakerBlock.java +++ b/src/main/java/dev/anvilcraft/pigsplus/block/BlockBreakerBlock.java @@ -1,24 +1,27 @@ package dev.anvilcraft.pigsplus.block; +import dev.dubhe.anvilcraft.api.entity.fakeplayer.AnvilCraftFakePlayers; import dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil; import dev.dubhe.anvilcraft.block.BlockDevourerBlock; -import dev.dubhe.anvilcraft.block.EmberAnvilBlock; -import dev.dubhe.anvilcraft.block.RoyalAnvilBlock; -import dev.dubhe.anvilcraft.block.TranscendenceAnvilBlock; import dev.dubhe.anvilcraft.util.AnvilUtil; +import dev.dubhe.anvilcraft.util.BlockMiningEffect; import dev.dubhe.anvilcraft.util.BreakBlockUtil; +import dev.dubhe.anvilcraft.util.DevourUtil; +import dev.dubhe.anvilcraft.util.PistonMoveGuard; import dev.dubhe.anvilcraft.util.TriggerUtil; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.DoublePlantBlock; import net.minecraft.world.level.block.entity.LecternBlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import net.neoforged.neoforge.capabilities.Capabilities; import net.neoforged.neoforge.items.IItemHandler; @@ -28,13 +31,6 @@ import javax.annotation.ParametersAreNonnullByDefault; import java.util.List; -import static dev.dubhe.anvilcraft.api.entity.fakeplayer.AnvilCraftFakePlayers.anvilcraftBlockPlacer; -import static dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil.dropAllToPos; -import static dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil.exportContentsToItemHandlers; -import static dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil.getTargetItemHandlerList; -import static dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil.isEmptyContainer; -import static dev.dubhe.anvilcraft.util.MultiPartBlockUtil.getChainableMainPartPos; - @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class BlockBreakerBlock extends BlockDevourerBlock { @@ -45,85 +41,111 @@ public class BlockBreakerBlock extends BlockDevourerBlock { public static final VoxelShape UP_SHAPE = Block.box(0, 0, 0, 16, 8, 16); public static final VoxelShape DOWN_SHAPE = Block.box(0, 8, 0, 16, 16, 16); - /** - * @param properties 方块属性 - */ + @Override + public VoxelShape getShape( + BlockState state, + BlockGetter level, + BlockPos pos, + CollisionContext context + ) { + return switch (state.getValue(FACING)) { + case DOWN -> DOWN_SHAPE; + case UP -> UP_SHAPE; + case NORTH -> NORTH_SHAPE; + case SOUTH -> SOUTH_SHAPE; + case WEST -> WEST_SHAPE; + case EAST -> EAST_SHAPE; + }; + } + public BlockBreakerBlock(Properties properties) { super(properties); } - @SuppressWarnings( - { - "unreachable", - "unused" - } - ) - public void devourBlock( + @Override + public void devourBlock(ServerLevel level, BlockPos devourerPos, Direction devourerDirection, int range) { + } + + public void breakBlock( ServerLevel level, BlockPos breakerPos, Direction breakerDirection, int distance, @Nullable Block anvil ) { + BlockPos outputPos = breakerPos.relative(breakerDirection.getOpposite()); + final List outputItemHandlerList = ItemHandlerUtil.getTargetItemHandlerList(outputPos, breakerDirection, level); + BlockPos breakBlockPos = breakerPos.relative(breakerDirection, distance); if (level.isOutsideBuildHeight(breakBlockPos)) return; - BlockState breakerBlockState = level.getBlockState(breakBlockPos); - if (breakerBlockState.isAir()) return; - if (breakerBlockState.getBlock().defaultDestroyTime() < 0) return; + BlockMiningEffect miningEffect = BlockMiningEffect.fromAnvil(anvil).orElse(BlockMiningEffect.NORMAL); - breakBlockPos = getChainableMainPartPos(level, breakBlockPos); - breakerBlockState = level.getBlockState(breakBlockPos); + devourSingleBlockInternalLogic(level, miningEffect, breakBlockPos, outputItemHandlerList, outputPos); + } + + private static void devourSingleBlockInternalLogic( + ServerLevel level, + BlockMiningEffect miningEffect, + BlockPos breakBlockPos, + @Nullable List itemHandlerList, + BlockPos outputPos + ) { + if (PistonMoveGuard.isReserved(level, breakBlockPos)) return; - // 后面这些基本都是为了破坏方块以及正确存储容器内掉落物,ctrl+c/v过来的,我也看不懂就是了 - IItemHandler source = level.getCapability(Capabilities.ItemHandler.BLOCK, breakBlockPos, null); - BlockPos outputPos = breakerPos.relative(breakerDirection.getOpposite()); Vec3 center = outputPos.getCenter(); AABB aabb = new AABB(center.add(-0.125, -0.125, -0.125), center.add(0.125, 0.125, 0.125)); - boolean dropOriginalPlace = !level.noCollision(aabb); - boolean skipContentTransfer = source == null; - final List itemHandlerList = getTargetItemHandlerList(outputPos, breakerDirection, level); - boolean insertEnabled = !itemHandlerList.isEmpty(); - List dropList = switch (anvil) { - case RoyalAnvilBlock ignore -> BreakBlockUtil.dropSilkTouch(level, breakBlockPos); - case EmberAnvilBlock ignore -> BreakBlockUtil.dropSmelt(level, breakBlockPos); - case TranscendenceAnvilBlock ignore -> BreakBlockUtil.dropFortune5(level, breakBlockPos); - case null, default -> BreakBlockUtil.drop(level, breakBlockPos); - }; - for (ItemStack itemStack : dropList) { - skipContentTransfer |= ItemHandlerUtil.isEmptyContainer(itemStack); - if (insertEnabled) { - for (IItemHandler target : itemHandlerList) { - itemStack = ItemHandlerHelper.insertItemStacked(target, itemStack, false); + + BlockState breakBlockState = level.getBlockState(breakBlockPos); + if (!DevourUtil.shouldDevour(breakBlockState)) return; + + List dropList = BreakBlockUtil.drop(level, breakBlockPos, miningEffect); + final boolean insertEnabled = itemHandlerList != null && !itemHandlerList.isEmpty(); + final boolean dropOriginalPlace = !level.noCollision(aabb); + + if (miningEffect.isDisintegration()) { + BreakBlockUtil.dropExperience(level, breakBlockPos, breakBlockState, miningEffect); + } else { + IItemHandler source = level.getCapability(Capabilities.ItemHandler.BLOCK, breakBlockPos, null); + boolean skipContentTransfer = source == null; + for (ItemStack itemStack : dropList) { + skipContentTransfer |= ItemHandlerUtil.isEmptyContainer(itemStack); + if (insertEnabled) { + for (IItemHandler target : itemHandlerList) { + itemStack = ItemHandlerHelper.insertItemStacked(target, itemStack, false); + } + } + if (itemStack.isEmpty() && ItemHandlerUtil.isEmptyContainer(source)) continue; + if (dropOriginalPlace) { + Block.popResource(level, breakBlockPos, itemStack); + } else { + AnvilUtil.dropItems(List.of(itemStack), level, center); } } - if (itemStack.isEmpty() && isEmptyContainer(source)) continue; - if (dropOriginalPlace) { - Block.popResource(level, breakBlockPos, itemStack); - } else { - AnvilUtil.dropItems(List.of(itemStack), level, center); + if (!skipContentTransfer) { + if (insertEnabled) ItemHandlerUtil.exportContentsToItemHandlers(source, itemHandlerList); + if (!dropOriginalPlace) ItemHandlerUtil.dropAllToPos(source, level, center); } } - if (!skipContentTransfer) { - if (insertEnabled) exportContentsToItemHandlers(source, itemHandlerList); - if (!dropOriginalPlace) dropAllToPos(source, level, center); - } if (level.getBlockEntity(breakBlockPos) instanceof LecternBlockEntity lectern) { transferLecternContents(level, itemHandlerList, center, lectern, insertEnabled, dropOriginalPlace); } - if (!(breakerBlockState.getBlock() instanceof DoublePlantBlock)) { - breakerBlockState.getBlock().playerWillDestroy(level, breakBlockPos, breakerBlockState, anvilcraftBlockPlacer.getPlayer()); + if (!(breakBlockState.getBlock() instanceof DoublePlantBlock)) { + breakBlockState.getBlock().playerWillDestroy( + level, + breakBlockPos, + breakBlockState, + AnvilCraftFakePlayers.anvilcraftBlockPlacer.getPlayer() + ); } - level.destroyBlock(breakBlockPos, false); - TriggerUtil.devourerDevourBlock(level, breakBlockPos, breakerBlockState.getBlock()); + TriggerUtil.devourerDevourBlock(level, breakBlockPos, breakBlockState.getBlock()); } /** - * 特判讲台的转移 - * 虽然溜槽/漏斗无法与讲台交互 - * 但吞噬器这类直接破坏的 - * 应该正常转移走才正常点(?) + * 转移讲台内容 + * + *

虽然溜槽/漏斗无法与讲台交互,但吞噬器这类直接破坏的应该转移走才正常点

*/ private static void transferLecternContents( ServerLevel level, From 74bd9c6fd0335e3281db667a578ffb1a185df2e3 Mon Sep 17 00:00:00 2001 From: TBPig <147127248+TBPig@users.noreply.github.com> Date: Sun, 19 Jul 2026 12:08:29 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=89=8B=E5=86=8C?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{101_resdtone_conduit.md => 101_redstone_conduit.md} | 0 .../{101_resdtone_conduit.md => 101_redstone_conduit.md} | 0 .../ageratum/zh_cn/100_anvilcraft_pigsplus/102_auto_chicken.md | 2 +- .../ageratum/zh_cn/100_anvilcraft_pigsplus/102_auto_machine.md | 2 +- .../ageratum/zh_cn/100_anvilcraft_pigsplus/102_void_catalyst.md | 2 +- .../zh_cn/100_anvilcraft_pigsplus/109_experience_interface.md | 2 +- .../zh_cn/100_anvilcraft_pigsplus/201_sculk_extractor.md | 2 +- .../100_anvilcraft_pigsplus/311_electric_enchanting_table.md | 2 +- 8 files changed, 6 insertions(+), 6 deletions(-) rename src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/{101_resdtone_conduit.md => 101_redstone_conduit.md} (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/{101_resdtone_conduit.md => 101_redstone_conduit.md} (100%) diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_resdtone_conduit.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_redstone_conduit.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_resdtone_conduit.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_redstone_conduit.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_resdtone_conduit.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_redstone_conduit.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_resdtone_conduit.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_redstone_conduit.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_auto_chicken.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_auto_chicken.md index fe5e86e9..a346456b 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_auto_chicken.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_auto_chicken.md @@ -17,7 +17,7 @@ items: -树脂块内,需抓有一只鸡 +树脂块内,需装有一只鸡 # 特性 diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_auto_machine.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_auto_machine.md index a43224c7..5823ef96 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_auto_machine.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_auto_machine.md @@ -27,5 +27,5 @@ items: # 特性 - 工作耗能16kW -- 收到红石信号时,进行一次工作 +- 接收到红石信号时,进行一次工作 - 将产物存放至所朝方向容器,或喷射出来 \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_void_catalyst.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_void_catalyst.md index ad15d720..a76f5e48 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_void_catalyst.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_void_catalyst.md @@ -18,5 +18,5 @@ items: # 功能 -- 接受到随机刻,或被铁砧砸击时工作 +- 接收到随机刻,或被铁砧砸击时工作 - 立刻使周围的 衰变 diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/109_experience_interface.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/109_experience_interface.md index c14c910a..fe95519a 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/109_experience_interface.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/109_experience_interface.md @@ -10,6 +10,6 @@ items: -- 必须依附方块放置,如果方块可以存储液态经验才能工作 +- 必须依附在可以存储液态经验的方块上才能工作 - 如果玩家等级高于指定等级,会抽取玩家经验,转为液体经验存储,反之亦然 - 检测范围5x5x5 diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/201_sculk_extractor.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/201_sculk_extractor.md index 7a06236d..1c9523e9 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/201_sculk_extractor.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/201_sculk_extractor.md @@ -20,7 +20,7 @@ items: # 功能 -- 吞噬距离7以内相连接的幽匿类方块,根据数量生成经验 +- 吞噬7格范围内相连接的幽匿类方块,根据数量生成经验 - 提供的经验更多(50倍) - 可以参与连接,但不会被吞噬,也不产出经验 diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/311_electric_enchanting_table.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/311_electric_enchanting_table.md index 23b3b6e2..4b8c2d2d 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/311_electric_enchanting_table.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/311_electric_enchanting_table.md @@ -25,4 +25,4 @@ items: 3. 在检测范围内的中放置附魔书 4. 将物品放入,吸收足量液态经验后,将附魔书的附魔复制一份赋予物品 5. 检测范围内的每个为减免 5% 经验需求[乘算叠加] -6. 附魔机制类似于,附魔无视附魔冲突和附魔等等级上限,且如果物品已拥有同等级附魔,则升一级 +6. 附魔机制类似于,附魔无视附魔冲突和附魔等级上限,且如果物品已拥有同等级附魔,则升一级 From 4d6202abe79d4e2954a275fb4ebe8c8e05771e56 Mon Sep 17 00:00:00 2001 From: TBPig <147127248+TBPig@users.noreply.github.com> Date: Sun, 19 Jul 2026 12:14:13 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0workflow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 2 +- .github/workflows/pull_request.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5548be9f..efcbc840 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,4 +71,4 @@ jobs: uses: Anvil-Dev/dedicated-server-launch-test@1.21.1-neoforge with: mod: build/libs/${{ steps.properties.outputs.mod_id }}-neoforge-${{ steps.version.outputs.version }}.jar - extra-mods: patchouli:1.21-87-neoforge anvilcraft:1.21.1-1.5.0 + extra-mods: anvilcraft:1.6.0+snapshot.2068 diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index dfdfdf19..897aeeea 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -62,4 +62,4 @@ jobs: uses: Anvil-Dev/dedicated-server-launch-test@1.21.1-neoforge with: mod: build/libs/${{ steps.properties.outputs.mod_id }}-neoforge-${{ steps.version.outputs.version }}.jar - extra-mods: patchouli:1.21-87-neoforge anvilcraft:1.21.1-1.5.0 + extra-mods: anvilcraft:1.6.0+snapshot.2068 From 0bce45662b4451ba9d8d66799b057fbced586eb5 Mon Sep 17 00:00:00 2001 From: TBPig <147127248+TBPig@users.noreply.github.com> Date: Sun, 19 Jul 2026 12:46:11 +0800 Subject: [PATCH 4/8] - Resolved #49 --- .../pigsplus/block/BlockBreakerBlock.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/dev/anvilcraft/pigsplus/block/BlockBreakerBlock.java b/src/main/java/dev/anvilcraft/pigsplus/block/BlockBreakerBlock.java index d44c77df..51a65711 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/block/BlockBreakerBlock.java +++ b/src/main/java/dev/anvilcraft/pigsplus/block/BlockBreakerBlock.java @@ -1,5 +1,6 @@ package dev.anvilcraft.pigsplus.block; +import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.api.entity.fakeplayer.AnvilCraftFakePlayers; import dev.dubhe.anvilcraft.api.itemhandler.ItemHandlerUtil; import dev.dubhe.anvilcraft.block.BlockDevourerBlock; @@ -74,6 +75,21 @@ public void breakBlock( @Nullable Block anvil ) { BlockPos outputPos = breakerPos.relative(breakerDirection.getOpposite()); + + // 因为实现方式不一样,DistanceMax - 1 才和放置器相同 + int i = 0; + do { + if ( + level.getBlockState(outputPos).is(this) + && level.getBlockState(outputPos).getValue(BlockDevourerBlock.FACING).equals(breakerDirection) + ) { + i++; + outputPos = outputPos.relative(breakerDirection.getOpposite()); + } else { + break; + } + } while (i < AnvilCraft.CONFIG.blockPlacerRecursiveRetrievalDistanceMax - 1); + final List outputItemHandlerList = ItemHandlerUtil.getTargetItemHandlerList(outputPos, breakerDirection, level); BlockPos breakBlockPos = breakerPos.relative(breakerDirection, distance); From ac4813a3713af80922ff737c0b4a4e9b1c76aa45 Mon Sep 17 00:00:00 2001 From: TBPig <147127248+TBPig@users.noreply.github.com> Date: Sun, 19 Jul 2026 14:34:58 +0800 Subject: [PATCH 5/8] - Resolved #50 --- .../anvilcraft_pigsplus/lang/en_ud.json | 2 + .../anvilcraft_pigsplus/lang/en_us.json | 2 + .../smithing/menger_sponge_holy_staff.json | 32 +++++ .../loot_table/blocks/fake_menger_sponge.json | 21 +++ .../smithing/menger_sponge_holy_staff.json | 16 +++ .../minecraft/tags/block/mineable/hoe.json | 3 +- .../pigsplus/block/FakeMengerSpongeBlock.java | 34 +++++ .../anvilcraft/pigsplus/init/AddonBlocks.java | 9 ++ .../anvilcraft/pigsplus/init/AddonItems.java | 19 +++ .../item/MengerSpongeHolyStaffItem.java | 56 ++++++++ .../pigsplus/item/MengerSpongeStaffItem.java | 17 ++- .../blockstates/fake_menger_sponge.json | 7 + .../anvilcraft_pigsplus/lang/zh_cn.json | 130 +++++++++--------- .../models/block/fake_menger_sponge.json | 3 + .../models/item/menger_sponge_holy_staff.json | 7 + .../item/menger_sponge_holy_staff.png | Bin 0 -> 1105 bytes 16 files changed, 288 insertions(+), 70 deletions(-) create mode 100644 src/generated/resources/data/anvilcraft_pigsplus/advancement/recipes/tools/smithing/menger_sponge_holy_staff.json create mode 100644 src/generated/resources/data/anvilcraft_pigsplus/loot_table/blocks/fake_menger_sponge.json create mode 100644 src/generated/resources/data/anvilcraft_pigsplus/recipe/smithing/menger_sponge_holy_staff.json create mode 100644 src/main/java/dev/anvilcraft/pigsplus/block/FakeMengerSpongeBlock.java create mode 100644 src/main/java/dev/anvilcraft/pigsplus/item/MengerSpongeHolyStaffItem.java create mode 100644 src/main/resources/assets/anvilcraft_pigsplus/blockstates/fake_menger_sponge.json create mode 100644 src/main/resources/assets/anvilcraft_pigsplus/models/block/fake_menger_sponge.json create mode 100644 src/main/resources/assets/anvilcraft_pigsplus/models/item/menger_sponge_holy_staff.json create mode 100644 src/main/resources/assets/anvilcraft_pigsplus/textures/item/menger_sponge_holy_staff.png diff --git a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json index 5e24d619..fab4d854 100644 --- a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json +++ b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json @@ -42,6 +42,7 @@ "block.anvilcraft_pigsplus.enchanted_generator": "ɹoʇɐɹǝuǝ⅁ ʇuǝɯʇuɐɥɔuƎ", "block.anvilcraft_pigsplus.enchanted_generator.placement_too_close_to_another": "ɹoʇɐɹǝuǝᵷ pǝʇuɐɥɔuǝ ɹǝɥʇouɐ oʇ ǝsoꞁɔ oo⟘", "block.anvilcraft_pigsplus.experience_interface": "ǝɔɐɟɹǝʇuI ǝɔuǝᴉɹǝdxƎ", + "block.anvilcraft_pigsplus.fake_menger_sponge": "ǝᵷuodS ɹǝᵷuǝW ǝʞɐℲ", "block.anvilcraft_pigsplus.pig_anvil": "ꞁᴉʌuⱯ ᵷᴉԀ", "block.anvilcraft_pigsplus.redstone_conduit_block": "ʞɔoꞁᗺ ʇᴉnpuoƆ ǝuoʇspǝᴚ", "block.anvilcraft_pigsplus.sculk_extractor": "ɹoʇɔɐɹʇxƎ ʞꞁnɔS", @@ -53,6 +54,7 @@ "item.anvilcraft_pigsplus.echo_geode": "ǝpoǝ⅁ oɥɔƎ", "item.anvilcraft_pigsplus.ender_component": "ʇuǝuodɯoƆ ɹǝpuƎ", "item.anvilcraft_pigsplus.karakuri_component": "ʇuǝuodɯoƆ ᴉɹnʞɐɹɐꞰ", + "item.anvilcraft_pigsplus.menger_sponge_holy_staff": "ɟɟɐʇS ʎꞁoH ǝᵷuodS ɹǝᵷuǝW", "item.anvilcraft_pigsplus.menger_sponge_staff": "ɟɟɐʇS ǝᵷuodS ɹǝᵷuǝW", "item.anvilcraft_pigsplus.portable_wireless_charger": "ɹǝᵷɹɐɥƆ ssǝꞁǝɹᴉM ǝꞁqɐʇɹoԀ", "item.anvilcraft_pigsplus.spiritual_component": "ʇuǝuodɯoƆ ꞁɐnʇᴉɹᴉdS", diff --git a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json index f5230f15..4bd82784 100644 --- a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json +++ b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json @@ -42,6 +42,7 @@ "block.anvilcraft_pigsplus.enchanted_generator": "Enchantment Generator", "block.anvilcraft_pigsplus.enchanted_generator.placement_too_close_to_another": "Too close to another enchanted generator", "block.anvilcraft_pigsplus.experience_interface": "Experience Interface", + "block.anvilcraft_pigsplus.fake_menger_sponge": "Fake Menger Sponge", "block.anvilcraft_pigsplus.pig_anvil": "Pig Anvil", "block.anvilcraft_pigsplus.redstone_conduit_block": "Redstone Conduit Block", "block.anvilcraft_pigsplus.sculk_extractor": "Sculk Extractor", @@ -53,6 +54,7 @@ "item.anvilcraft_pigsplus.echo_geode": "Echo Geode", "item.anvilcraft_pigsplus.ender_component": "Ender Component", "item.anvilcraft_pigsplus.karakuri_component": "Karakuri Component", + "item.anvilcraft_pigsplus.menger_sponge_holy_staff": "Menger Sponge Holy Staff", "item.anvilcraft_pigsplus.menger_sponge_staff": "Menger Sponge Staff", "item.anvilcraft_pigsplus.portable_wireless_charger": "Portable Wireless Charger", "item.anvilcraft_pigsplus.spiritual_component": "Spiritual Component", diff --git a/src/generated/resources/data/anvilcraft_pigsplus/advancement/recipes/tools/smithing/menger_sponge_holy_staff.json b/src/generated/resources/data/anvilcraft_pigsplus/advancement/recipes/tools/smithing/menger_sponge_holy_staff.json new file mode 100644 index 00000000..fd5dc3fd --- /dev/null +++ b/src/generated/resources/data/anvilcraft_pigsplus/advancement/recipes/tools/smithing/menger_sponge_holy_staff.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft_pigsplus:smithing/menger_sponge_holy_staff" + }, + "trigger": "minecraft:recipe_unlocked" + }, + "hasitem": { + "conditions": { + "items": [ + { + "items": "anvilcraft:royal_steel_ingot" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "requirements": [ + [ + "has_the_recipe", + "hasitem" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft_pigsplus:smithing/menger_sponge_holy_staff" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft_pigsplus/loot_table/blocks/fake_menger_sponge.json b/src/generated/resources/data/anvilcraft_pigsplus/loot_table/blocks/fake_menger_sponge.json new file mode 100644 index 00000000..929de523 --- /dev/null +++ b/src/generated/resources/data/anvilcraft_pigsplus/loot_table/blocks/fake_menger_sponge.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:air" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft_pigsplus:blocks/fake_menger_sponge" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft_pigsplus/recipe/smithing/menger_sponge_holy_staff.json b/src/generated/resources/data/anvilcraft_pigsplus/recipe/smithing/menger_sponge_holy_staff.json new file mode 100644 index 00000000..52b1e743 --- /dev/null +++ b/src/generated/resources/data/anvilcraft_pigsplus/recipe/smithing/menger_sponge_holy_staff.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:smithing_transform", + "addition": { + "item": "anvilcraft:transcendium_ingot" + }, + "base": { + "item": "anvilcraft_pigsplus:menger_sponge_staff" + }, + "result": { + "count": 1, + "id": "anvilcraft_pigsplus:menger_sponge_holy_staff" + }, + "template": { + "item": "anvilcraft:transcendium_upgrade_smithing_template" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/hoe.json b/src/generated/resources/data/minecraft/tags/block/mineable/hoe.json index 2ee645b3..d4959b9b 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/hoe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/hoe.json @@ -1,5 +1,6 @@ { "values": [ - "anvilcraft_pigsplus:sculk_extractor" + "anvilcraft_pigsplus:sculk_extractor", + "anvilcraft_pigsplus:fake_menger_sponge" ] } \ No newline at end of file diff --git a/src/main/java/dev/anvilcraft/pigsplus/block/FakeMengerSpongeBlock.java b/src/main/java/dev/anvilcraft/pigsplus/block/FakeMengerSpongeBlock.java new file mode 100644 index 00000000..09643ff1 --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/block/FakeMengerSpongeBlock.java @@ -0,0 +1,34 @@ +package dev.anvilcraft.pigsplus.block; + +import dev.dubhe.anvilcraft.block.MengerSpongeBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.HitResult; + +public class FakeMengerSpongeBlock extends MengerSpongeBlock { + public FakeMengerSpongeBlock(Properties properties) { + super(properties); + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + level.scheduleTick(pos, this, 200); + } + + @Override + protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + level.destroyBlock(pos, false); + } + + @Override + public ItemStack getCloneItemStack(BlockState state, HitResult target, LevelReader level, BlockPos pos, Player player) { + return ItemStack.EMPTY; + } +} diff --git a/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java b/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java index 1108afac..2247f5f9 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java +++ b/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java @@ -13,6 +13,7 @@ import dev.anvilcraft.pigsplus.block.ElectricEnchantingTableBlock; import dev.anvilcraft.pigsplus.block.EnchantedGeneratorBlock; import dev.anvilcraft.pigsplus.block.ExperienceInterfaceBlock; +import dev.anvilcraft.pigsplus.block.FakeMengerSpongeBlock; import dev.anvilcraft.pigsplus.block.PigAnvilBlock; import dev.anvilcraft.pigsplus.block.RedstoneConduitBlock; import dev.anvilcraft.pigsplus.block.SculkExtractorBlock; @@ -405,6 +406,14 @@ public class AddonBlocks { .save(provider)) .register(); + public static final BlockEntry FAKE_MENGER_SPONGE = REGISTRATE + .block("fake_menger_sponge", FakeMengerSpongeBlock::new) + .initialProperties(() -> Blocks.SPONGE) + .properties(p -> p.noOcclusion().isValidSpawn(Blocks::never)) + .blockstate(DataGenUtil::noExtraModelOrState) + .tag(BlockTags.MINEABLE_WITH_HOE) + .register(); + public static void register() { } } \ No newline at end of file diff --git a/src/main/java/dev/anvilcraft/pigsplus/init/AddonItems.java b/src/main/java/dev/anvilcraft/pigsplus/init/AddonItems.java index 31ffc02e..bb39a500 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/init/AddonItems.java +++ b/src/main/java/dev/anvilcraft/pigsplus/init/AddonItems.java @@ -2,7 +2,9 @@ import dev.anvilcraft.lib.v2.registrum.util.entry.ItemEntry; +import dev.anvilcraft.pigsplus.AnvilCraftPigsPlus; import dev.anvilcraft.pigsplus.item.KarakuriComponentItem; +import dev.anvilcraft.pigsplus.item.MengerSpongeHolyStaffItem; import dev.anvilcraft.pigsplus.item.MengerSpongeStaffItem; import dev.anvilcraft.pigsplus.item.PortableWirelessChargerItem; import dev.dubhe.anvilcraft.data.AnvilCraftDatagen; @@ -13,8 +15,10 @@ import net.minecraft.data.recipes.RecipeCategory; import net.minecraft.data.recipes.ShapedRecipeBuilder; import net.minecraft.data.recipes.ShapelessRecipeBuilder; +import net.minecraft.data.recipes.SmithingTransformRecipeBuilder; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.Ingredient; import static dev.anvilcraft.pigsplus.AnvilCraftPigsPlus.REGISTRATE; @@ -84,6 +88,21 @@ public class AddonItems { .save(provider)) .register(); + public static final ItemEntry MENGER_SPONGE_HOLY_STAFF = REGISTRATE + .item("menger_sponge_holy_staff", MengerSpongeHolyStaffItem::new) + .properties((properties) -> properties.stacksTo(1)) + .model(DataGenUtil::noExtraModelOrState) + .recipe((ctx, provider) -> SmithingTransformRecipeBuilder.smithing( + Ingredient.of(ModItems.TRANSCENDIUM_UPGRADE_SMITHING_TEMPLATE), + Ingredient.of(AddonItems.MENGER_SPONGE_STAFF), + Ingredient.of(ModItems.TRANSCENDIUM_INGOT), + RecipeCategory.TOOLS, + ctx.get() + ) + .unlocks("hasitem", AnvilCraftDatagen.has(ModItems.ROYAL_STEEL_INGOT)) + .save(provider, AnvilCraftPigsPlus.of("smithing/menger_sponge_holy_staff"))) + .register(); + public static void register() { } } \ No newline at end of file diff --git a/src/main/java/dev/anvilcraft/pigsplus/item/MengerSpongeHolyStaffItem.java b/src/main/java/dev/anvilcraft/pigsplus/item/MengerSpongeHolyStaffItem.java new file mode 100644 index 00000000..9ca524fb --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/item/MengerSpongeHolyStaffItem.java @@ -0,0 +1,56 @@ +package dev.anvilcraft.pigsplus.item; + +import dev.anvilcraft.pigsplus.init.AddonBlocks; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.item.context.UseOnContext; +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.CollisionContext; + +public class MengerSpongeHolyStaffItem extends MengerSpongeStaffItem { + public MengerSpongeHolyStaffItem(Properties properties) { + super(properties); + } + + @Override + public InteractionResult useOn(UseOnContext context) { + Player player = context.getPlayer(); + Level level = context.getLevel(); + if (player == null) return InteractionResult.PASS; + if (player.isShiftKeyDown()) return super.useOn(context); + + BlockPos pos = context.getClickedPos(); + boolean useOnCauldron = removeFluidInCauldron(level, pos); + + if (!useOnCauldron) { + removeFluidBreadthFirstSearch(level, pos); + spawnFakeMengerSponge(context); + } + + player.getCooldowns().addCooldown(this, 2); + return InteractionResult.sidedSuccess(level.isClientSide()); + + } + + public static void spawnFakeMengerSponge(UseOnContext context) { + Player player = context.getPlayer(); + Level level = context.getLevel(); + CollisionContext collisioncontext = player == null ? CollisionContext.empty() : CollisionContext.of(player); + BlockPlaceContext placeContext = new BlockPlaceContext(context); + BlockPos placePos = placeContext.getClickedPos(); + BlockState existingState = level.getBlockState(placePos); + BlockState state = AddonBlocks.FAKE_MENGER_SPONGE.get().defaultBlockState(); + + if ( + existingState.canBeReplaced() + && level.isUnobstructed(state, placePos, collisioncontext) + && level.getWorldBorder().isWithinBounds(placePos) + ) { + level.setBlock(placePos, state, Block.UPDATE_ALL_IMMEDIATE); + } + } +} diff --git a/src/main/java/dev/anvilcraft/pigsplus/item/MengerSpongeStaffItem.java b/src/main/java/dev/anvilcraft/pigsplus/item/MengerSpongeStaffItem.java index dae5235a..b8425cce 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/item/MengerSpongeStaffItem.java +++ b/src/main/java/dev/anvilcraft/pigsplus/item/MengerSpongeStaffItem.java @@ -42,30 +42,37 @@ public InteractionResult useOn(UseOnContext context) { if (player.isShiftKeyDown()) return super.useOn(context); BlockPos pos = context.getClickedPos(); - removeFluidBreadthFirstSearch(level, pos); - removeFluidInCauldron(level, pos); + boolean useOnCauldron = removeFluidInCauldron(level, pos); + + if (!useOnCauldron) { + removeFluidBreadthFirstSearch(level, pos); + } + player.getCooldowns().addCooldown(this, 4); return InteractionResult.sidedSuccess(level.isClientSide()); } - static public void removeFluidInCauldron(Level level, BlockPos pos) { + public static boolean removeFluidInCauldron(Level level, BlockPos pos) { BlockState state = level.getBlockState(pos); if (state.getBlock() instanceof AbstractCauldronBlock abstractCauldronBlock && !(abstractCauldronBlock instanceof ObsidianCauldron)) { level.setBlockAndUpdate(pos, Blocks.CAULDRON.defaultBlockState()); + return true; } if (state.getBlock() instanceof FishTankBlock) { BlockEntity be = level.getBlockEntity(pos); - if (!(be instanceof FishTankBlockEntity fishTank)) return; + if (!(be instanceof FishTankBlockEntity fishTank)) return false; fishTank.getFluidHandler().drain(1000, IFluidHandler.FluidAction.EXECUTE); + return true; } + return false; } // 与门格海绵方块一致 - static public void removeFluidBreadthFirstSearch(Level level, BlockPos pos) { + public static void removeFluidBreadthFirstSearch(Level level, BlockPos pos) { BlockPos.breadthFirstTraversal( pos, 6, diff --git a/src/main/resources/assets/anvilcraft_pigsplus/blockstates/fake_menger_sponge.json b/src/main/resources/assets/anvilcraft_pigsplus/blockstates/fake_menger_sponge.json new file mode 100644 index 00000000..99c20da6 --- /dev/null +++ b/src/main/resources/assets/anvilcraft_pigsplus/blockstates/fake_menger_sponge.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "anvilcraft_pigsplus:block/fake_menger_sponge" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json b/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json index 16725468..7f82dc96 100644 --- a/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json +++ b/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json @@ -1,65 +1,67 @@ { - "anvilcraft_pigsplus.configuration.auto_machine_cooldown": "自动机器的冷却时间", - "anvilcraft_pigsplus.configuration.auto_machine_cooldown.tooltip": "自动机器的冷却时间(tick)", - "anvilcraft_pigsplus.configuration.electric_enchanting_table": "电力附魔台", - "anvilcraft_pigsplus.configuration.electric_enchanting_table.button": "电力附魔台", - "anvilcraft_pigsplus.configuration.electric_enchanting_table.decrease_rate": "Decrease Rate", - "anvilcraft_pigsplus.configuration.electric_enchanting_table.decrease_rate.tooltip": "XP节约率", - "anvilcraft_pigsplus.configuration.electric_enchanting_table.fluid_comsume_speed": "Fluid Comsume Speed", - "anvilcraft_pigsplus.configuration.electric_enchanting_table.fluid_comsume_speed.tooltip": "吸收经验流体的速度", - "anvilcraft_pigsplus.configuration.electric_enchanting_table.power": "Power", - "anvilcraft_pigsplus.configuration.electric_enchanting_table.tooltip": "电力附魔台", - "anvilcraft_pigsplus.configuration.enchanted_generator": "附魔发电机", - "anvilcraft_pigsplus.configuration.enchanted_generator.button": "附魔发电机", - "anvilcraft_pigsplus.configuration.enchanted_generator.max_common_power": "Max Common Power", - "anvilcraft_pigsplus.configuration.enchanted_generator.max_common_power.tooltip": "常规附魔发电机的最大能量", - "anvilcraft_pigsplus.configuration.enchanted_generator.max_overclocking_power": "Max Overclocking Power", - "anvilcraft_pigsplus.configuration.enchanted_generator.max_overclocking_power.tooltip": "超频附魔发电机的最大能量", - "anvilcraft_pigsplus.configuration.enchanted_generator.min_consume_cooldown": "Min Consume Cooldown", - "anvilcraft_pigsplus.configuration.enchanted_generator.min_consume_cooldown.tooltip": "最小消耗附魔书间隔", - "anvilcraft_pigsplus.configuration.enchanted_generator.overclocking_amplification": "Overclocking Amplification", - "anvilcraft_pigsplus.configuration.enchanted_generator.overclocking_amplification.tooltip": "超频增幅", - "anvilcraft_pigsplus.configuration.enchanted_generator.power_per_level": "Power Per Level", - "anvilcraft_pigsplus.configuration.enchanted_generator.power_per_level.tooltip": "每个附魔等级提供的能量", - "anvilcraft_pigsplus.configuration.enchanted_generator.tooltip": "附魔发电机", - "anvilcraft_pigsplus.configuration.portable_wireless_charger_energy_conversion": "Portable Wireless Charger Energy Conversion (kW)", - "anvilcraft_pigsplus.configuration.portable_wireless_charger_energy_conversion.tooltip": "便携无线充电器的能量转换量", - "anvilcraft_pigsplus.configuration.section.anvilcraft_pigsplus.server.toml": "铁砧工艺:猪+ 服务端配置", - "anvilcraft_pigsplus.configuration.section.anvilcraft_pigsplus.server.toml.title": "铁砧工艺:猪+ 服务端配置", - "anvilcraft_pigsplus.configuration.title": "铁砧工艺:猪+ 配置", - "block.anvilcraft_pigsplus.adjustable_power_converter": "可调式能量转换器", - "block.anvilcraft_pigsplus.auto_chicken": "叮砧鸡", - "block.anvilcraft_pigsplus.auto_jewel_crafting_table": "自动珠宝加工台", - "block.anvilcraft_pigsplus.auto_royal_grindstone": "自动皇家砂轮", - "block.anvilcraft_pigsplus.auto_royal_smithing_table": "自动皇家锻造台", - "block.anvilcraft_pigsplus.block_breaker": "方块破坏器", - "block.anvilcraft_pigsplus.budding_echo_shard": "回响母岩", - "block.anvilcraft_pigsplus.chain_smithing_table": "连锁锻造台", - "block.anvilcraft_pigsplus.chaotic_raw_ore_block": "混沌粗矿块", - "block.anvilcraft_pigsplus.deepslate_chaotic_ore": "深层混沌矿石", - "block.anvilcraft_pigsplus.echo_cluster": "回响晶簇", - "block.anvilcraft_pigsplus.electric_enchanting_table": "电力附魔台", - "block.anvilcraft_pigsplus.enchanted_generator": "附魔发电机", - "block.anvilcraft_pigsplus.enchanted_generator.placement_too_close_to_another": "距离其他附魔发电机太近了", - "block.anvilcraft_pigsplus.experience_interface": "经验接口", - "block.anvilcraft_pigsplus.pig_anvil": "猪砧", - "block.anvilcraft_pigsplus.redstone_conduit_block": "红石传导块", - "block.anvilcraft_pigsplus.sculk_extractor": "幽匿萃取体", - "block.anvilcraft_pigsplus.void_catalyst": "虚空催化体", - "block.anvilcraft_pigsplus.weak_resin_block": "虚弱树脂块", - "config.jade.plugin_anvilcraft_pigsplus.electric_enchanting_table": "电力附魔台", - "config.jade.plugin_anvilcraft_pigsplus.enchanted_generator": "附魔发电机", - "item.anvilcraft_pigsplus.chaotic_raw_ore": "混沌粗矿", - "item.anvilcraft_pigsplus.echo_geode": "回响晶洞", - "item.anvilcraft_pigsplus.ender_component": "末影部件", - "item.anvilcraft_pigsplus.karakuri_component": "机巧部件", - "item.anvilcraft_pigsplus.menger_sponge_staff": "门格海绵杖", - "item.anvilcraft_pigsplus.portable_wireless_charger": "便携无线充电器", - "item.anvilcraft_pigsplus.spiritual_component": "灵媒部件", - "itemGroup.anvilcraft_pigsplus.addon_items": "铁砧工艺:猪+", - "jei.anvilcraft.pigsplus.info.ender_component": "将机巧部件丢入末地传送门,有%.0f%%概率获得", - "jei.anvilcraft.pigsplus.info.spiritual_component": "携带附魔的机巧部件被摧毁时,每条附魔提供%.0f%%的概率,生成最多一个灵媒部件", - "tooltip.anvilcraft_pigsplus.enchanted_generator.decrease_rate": "XP减免: %s", - "tooltip.anvilcraft_pigsplus.menger_sponge_staff": "清除一大片液体", - "tooltip.anvilcraft_pigsplus.portable_wireless_charger": "放在背包里,消耗 %d kW 以生产 %d FE/t" -} + "anvilcraft_pigsplus.configuration.auto_machine_cooldown": "自动机器的冷却时间", + "anvilcraft_pigsplus.configuration.auto_machine_cooldown.tooltip": "自动机器的冷却时间(tick)", + "anvilcraft_pigsplus.configuration.electric_enchanting_table": "电力附魔台", + "anvilcraft_pigsplus.configuration.electric_enchanting_table.button": "电力附魔台", + "anvilcraft_pigsplus.configuration.electric_enchanting_table.decrease_rate": "Decrease Rate", + "anvilcraft_pigsplus.configuration.electric_enchanting_table.decrease_rate.tooltip": "XP节约率", + "anvilcraft_pigsplus.configuration.electric_enchanting_table.fluid_comsume_speed": "Fluid Comsume Speed", + "anvilcraft_pigsplus.configuration.electric_enchanting_table.fluid_comsume_speed.tooltip": "吸收经验流体的速度", + "anvilcraft_pigsplus.configuration.electric_enchanting_table.power": "Power", + "anvilcraft_pigsplus.configuration.electric_enchanting_table.tooltip": "电力附魔台", + "anvilcraft_pigsplus.configuration.enchanted_generator": "附魔发电机", + "anvilcraft_pigsplus.configuration.enchanted_generator.button": "附魔发电机", + "anvilcraft_pigsplus.configuration.enchanted_generator.max_common_power": "Max Common Power", + "anvilcraft_pigsplus.configuration.enchanted_generator.max_common_power.tooltip": "常规附魔发电机的最大能量", + "anvilcraft_pigsplus.configuration.enchanted_generator.max_overclocking_power": "Max Overclocking Power", + "anvilcraft_pigsplus.configuration.enchanted_generator.max_overclocking_power.tooltip": "超频附魔发电机的最大能量", + "anvilcraft_pigsplus.configuration.enchanted_generator.min_consume_cooldown": "Min Consume Cooldown", + "anvilcraft_pigsplus.configuration.enchanted_generator.min_consume_cooldown.tooltip": "最小消耗附魔书间隔", + "anvilcraft_pigsplus.configuration.enchanted_generator.overclocking_amplification": "Overclocking Amplification", + "anvilcraft_pigsplus.configuration.enchanted_generator.overclocking_amplification.tooltip": "超频增幅", + "anvilcraft_pigsplus.configuration.enchanted_generator.power_per_level": "Power Per Level", + "anvilcraft_pigsplus.configuration.enchanted_generator.power_per_level.tooltip": "每个附魔等级提供的能量", + "anvilcraft_pigsplus.configuration.enchanted_generator.tooltip": "附魔发电机", + "anvilcraft_pigsplus.configuration.portable_wireless_charger_energy_conversion": "Portable Wireless Charger Energy Conversion (kW)", + "anvilcraft_pigsplus.configuration.portable_wireless_charger_energy_conversion.tooltip": "便携无线充电器的能量转换量", + "anvilcraft_pigsplus.configuration.section.anvilcraft_pigsplus.server.toml": "铁砧工艺:猪+ 服务端配置", + "anvilcraft_pigsplus.configuration.section.anvilcraft_pigsplus.server.toml.title": "铁砧工艺:猪+ 服务端配置", + "anvilcraft_pigsplus.configuration.title": "铁砧工艺:猪+ 配置", + "block.anvilcraft_pigsplus.adjustable_power_converter": "可调式能量转换器", + "block.anvilcraft_pigsplus.auto_chicken": "叮砧鸡", + "block.anvilcraft_pigsplus.auto_jewel_crafting_table": "自动珠宝加工台", + "block.anvilcraft_pigsplus.auto_royal_grindstone": "自动皇家砂轮", + "block.anvilcraft_pigsplus.auto_royal_smithing_table": "自动皇家锻造台", + "block.anvilcraft_pigsplus.block_breaker": "方块破坏器", + "block.anvilcraft_pigsplus.budding_echo_shard": "回响母岩", + "block.anvilcraft_pigsplus.chain_smithing_table": "连锁锻造台", + "block.anvilcraft_pigsplus.chaotic_raw_ore_block": "混沌粗矿块", + "block.anvilcraft_pigsplus.deepslate_chaotic_ore": "深层混沌矿石", + "block.anvilcraft_pigsplus.echo_cluster": "回响晶簇", + "block.anvilcraft_pigsplus.electric_enchanting_table": "电力附魔台", + "block.anvilcraft_pigsplus.enchanted_generator": "附魔发电机", + "block.anvilcraft_pigsplus.enchanted_generator.placement_too_close_to_another": "距离其他附魔发电机太近了", + "block.anvilcraft_pigsplus.experience_interface": "经验接口", + "block.anvilcraft_pigsplus.fake_menger_sponge": "假门格海绵", + "block.anvilcraft_pigsplus.pig_anvil": "猪砧", + "block.anvilcraft_pigsplus.redstone_conduit_block": "红石传导块", + "block.anvilcraft_pigsplus.sculk_extractor": "幽匿萃取体", + "block.anvilcraft_pigsplus.void_catalyst": "虚空催化体", + "block.anvilcraft_pigsplus.weak_resin_block": "虚弱树脂块", + "config.jade.plugin_anvilcraft_pigsplus.electric_enchanting_table": "电力附魔台", + "config.jade.plugin_anvilcraft_pigsplus.enchanted_generator": "附魔发电机", + "item.anvilcraft_pigsplus.chaotic_raw_ore": "混沌粗矿", + "item.anvilcraft_pigsplus.echo_geode": "回响晶洞", + "item.anvilcraft_pigsplus.ender_component": "末影部件", + "item.anvilcraft_pigsplus.karakuri_component": "机巧部件", + "item.anvilcraft_pigsplus.menger_sponge_holy_staff": "门格海绵神杖", + "item.anvilcraft_pigsplus.menger_sponge_staff": "门格海绵杖", + "item.anvilcraft_pigsplus.portable_wireless_charger": "便携无线充电器", + "item.anvilcraft_pigsplus.spiritual_component": "灵媒部件", + "itemGroup.anvilcraft_pigsplus.addon_items": "铁砧工艺:猪+", + "jei.anvilcraft.pigsplus.info.ender_component": "将机巧部件丢入末地传送门,有%.0f%%概率获得", + "jei.anvilcraft.pigsplus.info.spiritual_component": "携带附魔的机巧部件被摧毁时,每条附魔提供%.0f%%的概率,生成最多一个灵媒部件", + "tooltip.anvilcraft_pigsplus.enchanted_generator.decrease_rate": "XP减免: %s", + "tooltip.anvilcraft_pigsplus.menger_sponge_staff": "清除一大片液体", + "tooltip.anvilcraft_pigsplus.portable_wireless_charger": "放在背包里,消耗 %d kW 以生产 %d FE/t" +} \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft_pigsplus/models/block/fake_menger_sponge.json b/src/main/resources/assets/anvilcraft_pigsplus/models/block/fake_menger_sponge.json new file mode 100644 index 00000000..e1bb846c --- /dev/null +++ b/src/main/resources/assets/anvilcraft_pigsplus/models/block/fake_menger_sponge.json @@ -0,0 +1,3 @@ +{ + "parent": "anvilcraft:block/menger_sponge" +} \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft_pigsplus/models/item/menger_sponge_holy_staff.json b/src/main/resources/assets/anvilcraft_pigsplus/models/item/menger_sponge_holy_staff.json new file mode 100644 index 00000000..7192e827 --- /dev/null +++ b/src/main/resources/assets/anvilcraft_pigsplus/models/item/menger_sponge_holy_staff.json @@ -0,0 +1,7 @@ +{ + "parent": "anvilcraft_pigsplus:item/menger_sponge_staff", + "textures": { + "0": "anvilcraft_pigsplus:item/menger_sponge_holy_staff", + "particle": "anvilcraft_pigsplus:item/menger_sponge_holy_staff" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft_pigsplus/textures/item/menger_sponge_holy_staff.png b/src/main/resources/assets/anvilcraft_pigsplus/textures/item/menger_sponge_holy_staff.png new file mode 100644 index 0000000000000000000000000000000000000000..7dd0e01bd6856aee129f96b206429d5f7179fc37 GIT binary patch literal 1105 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85kt5f-vLOjMoi74egmB5hW46K32*3xq68y`AMmI6}bgK)eHls47YguJQ{>uF6ifOi{PD zbs{}UK3djZt>nqvW6s4qD1-ZCERRDRmN*N_31y=g{ z<>lpi<;HsXMd|v6mX?v90`zGE;%B09k2gXakl<5wp<;IRwdJb`TMuUx6%m z$bf#rQZ^H7%`}wWp5jz>|oOBk#&M8;Uefub*ram*2p4o;5~r z?Yz#JWo1H56J9N=-@xfSea4K;?V+`?Cl_e=G5`(yJ(E{T+KFKY!@To<84@xo;-sYJ zO}Ba<^Yrv?`}9SLg{G>u(Gk-as*M}&i?85&(edL=8n^YyOFu8wYfR%?&HU^ARY8uO z7DmgCOf*zwaFdVQB&~jYQBskPmQ2hB5fx$4wB_YM7w%Ng*4cOGu!->*zxR`TLLQuH zUVAo%_vYhZhJw}*bLNW%ZF+_FVhW3{Cch8@@)WP~9_T%HdRyo5TvKO==A3VSaf@K%RA%*?_hnMvD&$UO zJdxJ#kt?2+B^EPB+1h_Y!DjDe%eQY`7N(cVxFUOU>V(u?(TA>{-E<~S@A%ZT(2Bi` zz`)y6F+1IUbKvKd8=9VcS+H9*XTR>I)$g42G`3Q>gSj) ph&lBs_jzz{)9ba{UCs8Nj?Ynj;hY_zHy4zzJzf1=);T3K0RTBQx2*sG literal 0 HcmV?d00001 From 05289d4b9834d10634fcce0f9261cf8049c719c2 Mon Sep 17 00:00:00 2001 From: TBPig <147127248+TBPig@users.noreply.github.com> Date: Mon, 20 Jul 2026 08:50:52 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=B2=BE=E5=AF=86?= =?UTF-8?q?=E7=A3=81=E6=9E=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../anvilcraft_pigsplus/lang/en_ud.json | 14 +- .../anvilcraft_pigsplus/lang/en_us.json | 14 +- .../models/item/precision_magnetic_pivot.json | 3 + .../precision_magnetic_pivot.json | 32 +++ .../blocks/precision_magnetic_pivot.json | 21 ++ .../recipe/precision_magnetic_pivot.json | 24 +++ .../tags/block/mineable/pickaxe.json | 1 + .../tags/block/needs_stone_tool.json | 5 + .../block/PecisionMagneticPivotBlock.java | 92 +++++++++ .../PecisionMagneticPivotBlockEntity.java | 134 +++++++++++++ .../pigsplus/data/lang/LangHandler.java | 14 +- .../pigsplus/init/AddonBlockEntities.java | 6 + .../anvilcraft/pigsplus/init/AddonBlocks.java | 21 ++ .../integration/jade/AddonJadePlugin.java | 5 + .../PecisionMagneticPivotProvider.java | 82 ++++++++ .../mixin/PistonStructureResolverMixin.java | 41 ++++ .../resources/anvilcraft_pigsplus.mixins.json | 3 +- .../blockstates/precision_magnetic_pivot.json | 7 + .../anvilcraft_pigsplus/lang/zh_cn.json | 14 +- .../block/precision_magnetic_pivot.json | 185 ++++++++++++++++++ .../block/precision_magnetic_pivot_bar.png | Bin 0 -> 127 bytes .../block/precision_magnetic_pivot_bottom.png | Bin 0 -> 110 bytes ...precision_magnetic_pivot_copper_string.png | Bin 0 -> 139 bytes .../block/precision_magnetic_pivot_magnet.png | Bin 0 -> 124 bytes 24 files changed, 713 insertions(+), 5 deletions(-) create mode 100644 src/generated/resources/assets/anvilcraft_pigsplus/models/item/precision_magnetic_pivot.json create mode 100644 src/generated/resources/data/anvilcraft_pigsplus/advancement/recipes/building_blocks/precision_magnetic_pivot.json create mode 100644 src/generated/resources/data/anvilcraft_pigsplus/loot_table/blocks/precision_magnetic_pivot.json create mode 100644 src/generated/resources/data/anvilcraft_pigsplus/recipe/precision_magnetic_pivot.json create mode 100644 src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json create mode 100644 src/main/java/dev/anvilcraft/pigsplus/block/PecisionMagneticPivotBlock.java create mode 100644 src/main/java/dev/anvilcraft/pigsplus/block/entity/PecisionMagneticPivotBlockEntity.java create mode 100644 src/main/java/dev/anvilcraft/pigsplus/integration/jade/provider/PecisionMagneticPivotProvider.java create mode 100644 src/main/java/dev/anvilcraft/pigsplus/mixin/PistonStructureResolverMixin.java create mode 100644 src/main/resources/assets/anvilcraft_pigsplus/blockstates/precision_magnetic_pivot.json create mode 100644 src/main/resources/assets/anvilcraft_pigsplus/models/block/precision_magnetic_pivot.json create mode 100644 src/main/resources/assets/anvilcraft_pigsplus/textures/block/precision_magnetic_pivot_bar.png create mode 100644 src/main/resources/assets/anvilcraft_pigsplus/textures/block/precision_magnetic_pivot_bottom.png create mode 100644 src/main/resources/assets/anvilcraft_pigsplus/textures/block/precision_magnetic_pivot_copper_string.png create mode 100644 src/main/resources/assets/anvilcraft_pigsplus/textures/block/precision_magnetic_pivot_magnet.png diff --git a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json index fab4d854..a053fd34 100644 --- a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json +++ b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json @@ -44,12 +44,14 @@ "block.anvilcraft_pigsplus.experience_interface": "ǝɔɐɟɹǝʇuI ǝɔuǝᴉɹǝdxƎ", "block.anvilcraft_pigsplus.fake_menger_sponge": "ǝᵷuodS ɹǝᵷuǝW ǝʞɐℲ", "block.anvilcraft_pigsplus.pig_anvil": "ꞁᴉʌuⱯ ᵷᴉԀ", + "block.anvilcraft_pigsplus.precision_magnetic_pivot": "ʇoʌᴉԀ ɔᴉʇǝuᵷɐW uoᴉsᴉɔǝɹԀ", "block.anvilcraft_pigsplus.redstone_conduit_block": "ʞɔoꞁᗺ ʇᴉnpuoƆ ǝuoʇspǝᴚ", "block.anvilcraft_pigsplus.sculk_extractor": "ɹoʇɔɐɹʇxƎ ʞꞁnɔS", "block.anvilcraft_pigsplus.void_catalyst": "ʇsʎꞁɐʇɐƆ pᴉoɅ", "block.anvilcraft_pigsplus.weak_resin_block": "uᴉsǝᴚ ʞɐǝM ɟo ʞɔoꞁᗺ", "config.jade.plugin_anvilcraft_pigsplus.electric_enchanting_table": "ǝꞁqɐ⟘ ᵷuᴉʇuɐɥɔuƎ ɔᴉɹʇɔǝꞁƎ", "config.jade.plugin_anvilcraft_pigsplus.enchanted_generator": "ɹoʇɐɹǝuǝ⅁ pǝʇuɐɥɔuƎ", + "config.jade.plugin_anvilcraft_pigsplus.precision_magnetic_pivot": "ʇoʌᴉԀ ɔᴉʇǝuᵷɐW uoᴉsᴉɔǝɹԀ", "item.anvilcraft_pigsplus.chaotic_raw_ore": "ǝɹO ʍɐᴚ ɔᴉʇoɐɥƆ", "item.anvilcraft_pigsplus.echo_geode": "ǝpoǝ⅁ oɥɔƎ", "item.anvilcraft_pigsplus.ender_component": "ʇuǝuodɯoƆ ɹǝpuƎ", @@ -63,5 +65,15 @@ "jei.anvilcraft.pigsplus.info.spiritual_component": "˙ʇuǝuodɯoƆ ɯnᴉpǝW ǝuo ʇsoɯ ʇɐ ǝʇɐɹǝuǝᵷ oʇ ǝɔuɐɥɔ %%%.0f ɐ sǝpᴉʌoɹd ʇuǝɯʇuɐɥɔuǝ ɥɔɐǝ 'pǝʎoɹʇsǝp sᴉ ʇuǝuodɯoƆ ᴉɹnʞɐɹɐꞰ ɐ uǝɥM", "tooltip.anvilcraft_pigsplus.enchanted_generator.decrease_rate": "%s :ǝʇɐɹ ǝsɐǝɹɔǝp ԀX", "tooltip.anvilcraft_pigsplus.menger_sponge_staff": "pᴉnbᴉꞁ ɟo ʇunoɯɐ ǝᵷɹɐꞁ ɐ ǝʌoɯǝᴚ", - "tooltip.anvilcraft_pigsplus.portable_wireless_charger": "ʇ/ƎℲ %d sǝʇɐɹǝuǝᵷ puɐ Mʞ %d sǝɯnsuoɔ ʇᴉ 'ʞɔɐdʞɔɐq uǝɥM" + "tooltip.anvilcraft_pigsplus.portable_wireless_charger": "ʇ/ƎℲ %d sǝʇɐɹǝuǝᵷ puɐ Mʞ %d sǝɯnsuoɔ ʇᴉ 'ʞɔɐdʞɔɐq uǝɥM", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise": "%s :uoᴉʇɐʇoᴚ", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise.clockwise": "ǝsᴉʍʞɔoꞁƆ", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise.counter_clockwise": "ǝsᴉʍʞɔoꞁɔ-ɹǝʇunoƆ", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise.none": "ǝuoN", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.friction_count": "%s :ʇunoƆ uoᴉʇɔᴉɹℲ", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.pre_direction": "%s :uoᴉʇɔǝɹᴉᗡ snoᴉʌǝɹԀ", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.pre_direction.none": "ǝuoN", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time": "%s :snʇɐʇS", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time.stopped": "pǝddoʇS", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time.working": "ᵷuᴉʞɹoM" } \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json index 4bd82784..ee4ff680 100644 --- a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json +++ b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json @@ -44,12 +44,14 @@ "block.anvilcraft_pigsplus.experience_interface": "Experience Interface", "block.anvilcraft_pigsplus.fake_menger_sponge": "Fake Menger Sponge", "block.anvilcraft_pigsplus.pig_anvil": "Pig Anvil", + "block.anvilcraft_pigsplus.precision_magnetic_pivot": "Precision Magnetic Pivot", "block.anvilcraft_pigsplus.redstone_conduit_block": "Redstone Conduit Block", "block.anvilcraft_pigsplus.sculk_extractor": "Sculk Extractor", "block.anvilcraft_pigsplus.void_catalyst": "Void Catalyst", "block.anvilcraft_pigsplus.weak_resin_block": "Block of Weak Resin", "config.jade.plugin_anvilcraft_pigsplus.electric_enchanting_table": "Electric Enchanting Table", "config.jade.plugin_anvilcraft_pigsplus.enchanted_generator": "Enchanted Generator", + "config.jade.plugin_anvilcraft_pigsplus.precision_magnetic_pivot": "Precision Magnetic Pivot", "item.anvilcraft_pigsplus.chaotic_raw_ore": "Chaotic Raw Ore", "item.anvilcraft_pigsplus.echo_geode": "Echo Geode", "item.anvilcraft_pigsplus.ender_component": "Ender Component", @@ -63,5 +65,15 @@ "jei.anvilcraft.pigsplus.info.spiritual_component": "When a Karakuri Component is destroyed, each enchantment provides a %.0f%% chance to generate at most one Medium Component.", "tooltip.anvilcraft_pigsplus.enchanted_generator.decrease_rate": "XP decrease rate: %s", "tooltip.anvilcraft_pigsplus.menger_sponge_staff": "Remove a large amount of liquid", - "tooltip.anvilcraft_pigsplus.portable_wireless_charger": "When backpack, it consumes %d kW and generates %d FE/t" + "tooltip.anvilcraft_pigsplus.portable_wireless_charger": "When backpack, it consumes %d kW and generates %d FE/t", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise": "Rotation: %s", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise.clockwise": "Clockwise", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise.counter_clockwise": "Counter-clockwise", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise.none": "None", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.friction_count": "Friction Count: %s", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.pre_direction": "Previous Direction: %s", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.pre_direction.none": "None", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time": "Status: %s", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time.stopped": "Stopped", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time.working": "Working" } \ No newline at end of file diff --git a/src/generated/resources/assets/anvilcraft_pigsplus/models/item/precision_magnetic_pivot.json b/src/generated/resources/assets/anvilcraft_pigsplus/models/item/precision_magnetic_pivot.json new file mode 100644 index 00000000..f1da04ac --- /dev/null +++ b/src/generated/resources/assets/anvilcraft_pigsplus/models/item/precision_magnetic_pivot.json @@ -0,0 +1,3 @@ +{ + "parent": "anvilcraft_pigsplus:block/precision_magnetic_pivot" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft_pigsplus/advancement/recipes/building_blocks/precision_magnetic_pivot.json b/src/generated/resources/data/anvilcraft_pigsplus/advancement/recipes/building_blocks/precision_magnetic_pivot.json new file mode 100644 index 00000000..526cf0c2 --- /dev/null +++ b/src/generated/resources/data/anvilcraft_pigsplus/advancement/recipes/building_blocks/precision_magnetic_pivot.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_karakuri_component": { + "conditions": { + "items": [ + { + "items": "anvilcraft_pigsplus:karakuri_component" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft_pigsplus:precision_magnetic_pivot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_karakuri_component" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft_pigsplus:precision_magnetic_pivot" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft_pigsplus/loot_table/blocks/precision_magnetic_pivot.json b/src/generated/resources/data/anvilcraft_pigsplus/loot_table/blocks/precision_magnetic_pivot.json new file mode 100644 index 00000000..6c8691e4 --- /dev/null +++ b/src/generated/resources/data/anvilcraft_pigsplus/loot_table/blocks/precision_magnetic_pivot.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "anvilcraft_pigsplus:precision_magnetic_pivot" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "anvilcraft_pigsplus:blocks/precision_magnetic_pivot" +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft_pigsplus/recipe/precision_magnetic_pivot.json b/src/generated/resources/data/anvilcraft_pigsplus/recipe/precision_magnetic_pivot.json new file mode 100644 index 00000000..d20115e9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft_pigsplus/recipe/precision_magnetic_pivot.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "A": { + "item": "anvilcraft_pigsplus:karakuri_component" + }, + "C": { + "item": "minecraft:iron_bars" + }, + "M": { + "item": "anvilcraft:magnet_block" + } + }, + "pattern": [ + " A ", + "CMC", + "CAC" + ], + "result": { + "count": 1, + "id": "anvilcraft_pigsplus:precision_magnetic_pivot" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index 71c65f38..60da6527 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -3,6 +3,7 @@ "anvilcraft_pigsplus:auto_chicken", "anvilcraft_pigsplus:redstone_conduit_block", "anvilcraft_pigsplus:block_breaker", + "anvilcraft_pigsplus:precision_magnetic_pivot", "anvilcraft_pigsplus:chain_smithing_table", "anvilcraft_pigsplus:auto_jewel_crafting_table", "anvilcraft_pigsplus:auto_royal_smithing_table", diff --git a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json new file mode 100644 index 00000000..358fbf41 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -0,0 +1,5 @@ +{ + "values": [ + "anvilcraft_pigsplus:precision_magnetic_pivot" + ] +} \ No newline at end of file diff --git a/src/main/java/dev/anvilcraft/pigsplus/block/PecisionMagneticPivotBlock.java b/src/main/java/dev/anvilcraft/pigsplus/block/PecisionMagneticPivotBlock.java new file mode 100644 index 00000000..10757363 --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/block/PecisionMagneticPivotBlock.java @@ -0,0 +1,92 @@ +package dev.anvilcraft.pigsplus.block; + +import com.mojang.serialization.MapCodec; +import dev.anvilcraft.pigsplus.block.entity.PecisionMagneticPivotBlockEntity; +import dev.anvilcraft.pigsplus.init.AddonBlockEntities; +import dev.dubhe.anvilcraft.api.hammer.IHammerRemovable; +import dev.dubhe.anvilcraft.block.better.BetterBaseEntityBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; + +import java.util.Objects; + +public class PecisionMagneticPivotBlock extends BetterBaseEntityBlock implements IHammerRemovable { + public static final BooleanProperty LIT = BlockStateProperties.LIT; + + public static VoxelShape SHAPE = Shapes.or( + Block.box(0, 0, 0, 16, 2, 16), + Block.box(3, 0, 3, 13, 13, 13), + Block.box(4, 0, 4, 12, 16, 12) + ); + + public PecisionMagneticPivotBlock(Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(LIT, false)); + } + + @Override + @Nullable + public BlockState getStateForPlacement(BlockPlaceContext context) { + return Objects.requireNonNull(super.getStateForPlacement(context)).setValue(LIT, false); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); + builder.add(LIT); + } + + @Override + protected MapCodec codec() { + return simpleCodec(PecisionMagneticPivotBlock::new); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + public VoxelShape getShape( + BlockState state, + BlockGetter level, + BlockPos pos, + CollisionContext context + ) { + return SHAPE; + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new PecisionMagneticPivotBlockEntity(AddonBlockEntities.PRECISION_MAGNETIC_PIVOT.get(), pos, state); + } + + @Override + public @Nullable BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { + if (level.isClientSide) { + return null; + } + return createTickerHelper( + type, AddonBlockEntities.PRECISION_MAGNETIC_PIVOT.get(), + (level1, pos, state1, blockEntity) -> blockEntity.tick((ServerLevel) level1, pos) + ); + } +} diff --git a/src/main/java/dev/anvilcraft/pigsplus/block/entity/PecisionMagneticPivotBlockEntity.java b/src/main/java/dev/anvilcraft/pigsplus/block/entity/PecisionMagneticPivotBlockEntity.java new file mode 100644 index 00000000..e1e3cfb5 --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/block/entity/PecisionMagneticPivotBlockEntity.java @@ -0,0 +1,134 @@ +package dev.anvilcraft.pigsplus.block.entity; + +import dev.anvilcraft.pigsplus.block.PecisionMagneticPivotBlock; +import dev.anvilcraft.pigsplus.init.AddonBlocks; +import dev.dubhe.anvilcraft.api.chargecollector.ChargeCollectorManager; +import dev.dubhe.anvilcraft.util.MagnetUtil; +import lombok.Getter; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.Level; +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; + +import java.util.List; + +public class PecisionMagneticPivotBlockEntity extends BlockEntity { + public static final int MAX_TIME = 40; + + @Getter + private int time = 0; + @Getter + private int frictionCount = 0; + @Getter + private int clockwise = 0; + private @Nullable Direction preDirection; + + public PecisionMagneticPivotBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { + super(type, pos, blockState); + } + + @Override + protected void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) { + super.loadAdditional(tag, provider); + this.time = tag.getInt("Time"); + this.frictionCount = tag.getInt("PushCount"); + this.clockwise = tag.getInt("Clockwise"); + String dir = tag.getString("PreDirection"); + this.preDirection = "null".equals(dir) ? null : Direction.byName(dir); + } + + @Override + protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) { + super.saveAdditional(tag, provider); + tag.putInt("Time", this.time); + tag.putInt("PushCount", this.frictionCount); + tag.putInt("Clockwise", this.clockwise); + tag.putString("PreDirection", this.preDirection != null ? this.preDirection.getName() : "null"); + } + + public @Nullable Direction getPreDirection() { + return this.preDirection; + } + + public static void onPistonMoveBlocks(Level level, List blocks, Direction pushDirection) { + for (BlockPos pos : blocks) { + if (!MagnetUtil.hasMagnetism(level, pos.below())) continue; + for (int i = 0; i < 4; i++) { + Direction dir = Direction.from2DDataValue(i); + BlockPos neighborPos = pos.relative(dir); + if (!level.getBlockState(neighborPos).is(AddonBlocks.PRECISION_MAGNETIC_PIVOT.get())) continue; + if (level.getBlockEntity(neighborPos) instanceof PecisionMagneticPivotBlockEntity be) { + be.onAdjacentMagnetPushed(dir.getOpposite(), pushDirection); + } + } + } + } + + public void onAdjacentMagnetPushed(Direction sourceDirection, Direction pushDirection) { + if (this.level == null || this.level.isClientSide()) return; + if (!pushDirection.getAxis().isHorizontal()) return; + if (!sourceDirection.getAxis().isHorizontal()) return; + if (pushDirection.getAxis() == sourceDirection.getAxis()) return; + + this.friction(pushDirection); + preDirection = pushDirection; + setChanged(); + + ChargeCollectorManager.charge(Math.pow(2, frictionCount), level, this.getBlockPos()); + + if (frictionCount == 4) { + ChargeCollectorManager.charge(64, level, this.getBlockPos()); + frictionCount = 0; + time = MAX_TIME; + level.setBlockAndUpdate( + this.getBlockPos(), + AddonBlocks.PRECISION_MAGNETIC_PIVOT.getDefaultState().setValue(PecisionMagneticPivotBlock.LIT, true) + ); + } + } + + private void friction(Direction pushDirection) { + if (preDirection == null) return; + + if (pushDirection == preDirection.getClockWise()) { + if (clockwise != -1) { + frictionCount++; + } else { + frictionCount = 0; + } + clockwise = 1; + + } else if (pushDirection == preDirection.getCounterClockWise()) { + if (clockwise != 1) { + frictionCount++; + } else { + frictionCount = 0; + } + clockwise = -1; + + } else if (pushDirection != preDirection) { + frictionCount = 0; + clockwise = 0; + } + } + + public void tick(ServerLevel serverLevel, BlockPos pos) { + if (this.time > 0) { + this.time--; + } + if (time == 0) { + if (serverLevel.getBlockState(pos).is(AddonBlocks.PRECISION_MAGNETIC_PIVOT)) { + serverLevel.setBlockAndUpdate( + pos, + AddonBlocks.PRECISION_MAGNETIC_PIVOT.getDefaultState().setValue(PecisionMagneticPivotBlock.LIT, false) + ); + } + } + } +} diff --git a/src/main/java/dev/anvilcraft/pigsplus/data/lang/LangHandler.java b/src/main/java/dev/anvilcraft/pigsplus/data/lang/LangHandler.java index d29c90c1..4274fa91 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/data/lang/LangHandler.java +++ b/src/main/java/dev/anvilcraft/pigsplus/data/lang/LangHandler.java @@ -20,10 +20,22 @@ public static void init(RegistrumLangProvider provider) { ); provider.add("tooltip.anvilcraft_pigsplus.enchanted_generator.decrease_rate", "XP decrease rate: %s"); - provider.add("tooltip.anvilcraft_pigsplus.portable_wireless_charger", "When backpack, it consumes %d kW and generates %d FE/t"); provider.add("tooltip.anvilcraft_pigsplus.menger_sponge_staff", "Remove a large amount of liquid"); + provider.add("tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time", "Status: %s"); + provider.add("tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time.working", "Working"); + provider.add("tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time.stopped", "Stopped"); + provider.add("tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.friction_count", "Friction Count: %s"); + provider.add("tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise", "Rotation: %s"); + provider.add("tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise.clockwise", "Clockwise"); + provider.add("tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise.counter_clockwise", "Counter-clockwise"); + provider.add("tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise.none", "None"); + provider.add("tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.pre_direction", "Previous Direction: %s"); + provider.add("tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.pre_direction.none", "None"); + + provider.add("tooltip.anvilcraft_pigsplus.portable_wireless_charger", "When backpack, it consumes %d kW and generates %d FE/t"); provider.add("config.jade.plugin_anvilcraft_pigsplus.electric_enchanting_table", "Electric Enchanting Table"); provider.add("config.jade.plugin_anvilcraft_pigsplus.enchanted_generator", "Enchanted Generator"); + provider.add("config.jade.plugin_anvilcraft_pigsplus.precision_magnetic_pivot", "Precision Magnetic Pivot"); } } diff --git a/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlockEntities.java b/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlockEntities.java index 51a70792..aa00c6cd 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlockEntities.java +++ b/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlockEntities.java @@ -8,6 +8,7 @@ import dev.anvilcraft.pigsplus.block.entity.ElectricEnchantingTableBlockEntity; import dev.anvilcraft.pigsplus.block.entity.EnchantedGeneratorBlockEntity; import dev.anvilcraft.pigsplus.block.entity.ExperienceInterfaceBlockEntity; +import dev.anvilcraft.pigsplus.block.entity.PecisionMagneticPivotBlockEntity; import dev.anvilcraft.pigsplus.block.entity.SculkExtractorBlockEntity; import dev.anvilcraft.pigsplus.client.renderer.blockentity.AdjustablePowerConverterRenderer; import dev.anvilcraft.pigsplus.client.renderer.blockentity.ElectricEnchantingTableRenderer; @@ -59,6 +60,11 @@ public class AddonBlockEntities { .validBlock(AddonBlocks.EXPERIENCE_INTERFACE) .register(); + public static final BlockEntityEntry PRECISION_MAGNETIC_PIVOT = + REGISTRATE.blockEntity("precision_magnetic_pivot", PecisionMagneticPivotBlockEntity::new) + .validBlock(AddonBlocks.PRECISION_MAGNETIC_PIVOT) + .register(); + public static void register() { } } \ No newline at end of file diff --git a/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java b/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java index 2247f5f9..e17782e4 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java +++ b/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java @@ -14,6 +14,7 @@ import dev.anvilcraft.pigsplus.block.EnchantedGeneratorBlock; import dev.anvilcraft.pigsplus.block.ExperienceInterfaceBlock; import dev.anvilcraft.pigsplus.block.FakeMengerSpongeBlock; +import dev.anvilcraft.pigsplus.block.PecisionMagneticPivotBlock; import dev.anvilcraft.pigsplus.block.PigAnvilBlock; import dev.anvilcraft.pigsplus.block.RedstoneConduitBlock; import dev.anvilcraft.pigsplus.block.SculkExtractorBlock; @@ -133,6 +134,26 @@ public class AddonBlocks { .save(provider)) .register(); + public static final BlockEntry PRECISION_MAGNETIC_PIVOT = REGISTRATE + .block("precision_magnetic_pivot", PecisionMagneticPivotBlock::new) + .initialProperties(() -> Blocks.IRON_BLOCK) + .blockstate(DataGenUtil::noExtraModelOrState) + .simpleItem() + .tag(BlockTags.MINEABLE_WITH_PICKAXE, BlockTags.NEEDS_STONE_TOOL) + .recipe((ctx, provider) -> ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, ctx.get()) + .pattern(" A ") + .pattern("CMC") + .pattern("CAC") + .define('A', AddonItems.KARAKURI_COMPONENT) + .define('C', Blocks.COPPER_BLOCK) + .define('M', Blocks.IRON_BLOCK) + .unlockedBy( + AnvilCraftDatagen.hasItem(AddonItems.KARAKURI_COMPONENT), + AnvilCraftDatagen.has(AddonItems.KARAKURI_COMPONENT) + ) + .save(provider)) + .register(); + public static final BlockEntry CHAIN_SMITHING_TABLE_BLOCK = REGISTRATE .block("chain_smithing_table", ChainSmithingTableBlock::new) .lang("Chain Smithing Table") diff --git a/src/main/java/dev/anvilcraft/pigsplus/integration/jade/AddonJadePlugin.java b/src/main/java/dev/anvilcraft/pigsplus/integration/jade/AddonJadePlugin.java index c7d0868a..377c89b4 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/integration/jade/AddonJadePlugin.java +++ b/src/main/java/dev/anvilcraft/pigsplus/integration/jade/AddonJadePlugin.java @@ -1,8 +1,11 @@ package dev.anvilcraft.pigsplus.integration.jade; import dev.anvilcraft.pigsplus.block.ElectricEnchantingTableBlock; +import dev.anvilcraft.pigsplus.block.PecisionMagneticPivotBlock; import dev.anvilcraft.pigsplus.block.entity.ElectricEnchantingTableBlockEntity; +import dev.anvilcraft.pigsplus.block.entity.PecisionMagneticPivotBlockEntity; import dev.anvilcraft.pigsplus.integration.jade.provider.ElectricEnchantingTableProvider; +import dev.anvilcraft.pigsplus.integration.jade.provider.PecisionMagneticPivotProvider; import snownee.jade.api.IWailaClientRegistration; import snownee.jade.api.IWailaCommonRegistration; import snownee.jade.api.IWailaPlugin; @@ -15,11 +18,13 @@ public class AddonJadePlugin implements IWailaPlugin { public void register(IWailaCommonRegistration registration) { // registration.registerItemStorage(CrabTrapStorageProvider.INSTANCE, CrabTrapBlockEntity.class); registration.registerBlockDataProvider(ElectricEnchantingTableProvider.INSTANCE, ElectricEnchantingTableBlockEntity.class); + registration.registerBlockDataProvider(PecisionMagneticPivotProvider.INSTANCE, PecisionMagneticPivotBlockEntity.class); } @Override public void registerClient(IWailaClientRegistration registration) { // registration.registerItemStorageClient(CrabTrapStorageProvider.INSTANCE); registration.registerBlockComponent(ElectricEnchantingTableProvider.INSTANCE, ElectricEnchantingTableBlock.class); + registration.registerBlockComponent(PecisionMagneticPivotProvider.INSTANCE, PecisionMagneticPivotBlock.class); } } diff --git a/src/main/java/dev/anvilcraft/pigsplus/integration/jade/provider/PecisionMagneticPivotProvider.java b/src/main/java/dev/anvilcraft/pigsplus/integration/jade/provider/PecisionMagneticPivotProvider.java new file mode 100644 index 00000000..941f21df --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/integration/jade/provider/PecisionMagneticPivotProvider.java @@ -0,0 +1,82 @@ +package dev.anvilcraft.pigsplus.integration.jade.provider; + +import dev.anvilcraft.pigsplus.AnvilCraftPigsPlus; +import dev.anvilcraft.pigsplus.block.entity.PecisionMagneticPivotBlockEntity; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import snownee.jade.api.BlockAccessor; +import snownee.jade.api.IBlockComponentProvider; +import snownee.jade.api.IServerDataProvider; +import snownee.jade.api.ITooltip; +import snownee.jade.api.config.IPluginConfig; + +public enum PecisionMagneticPivotProvider implements IBlockComponentProvider, IServerDataProvider { + INSTANCE; + + @Override + public void appendTooltip(ITooltip tooltip, BlockAccessor accessor, IPluginConfig config) { + CompoundTag serverData = accessor.getServerData(); + + int time = serverData.getInt("time"); + if (time > 0) { + tooltip.add(Component.translatable( + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time", + Component.translatable("tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time.working") + )); + } else { + tooltip.add(Component.translatable( + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time", + Component.translatable("tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time.stopped") + )); + } + + tooltip.add(Component.translatable( + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.friction_count", + serverData.getInt("frictionCount") + )); + + int clockwise = serverData.getInt("clockwise"); + String clockKey; + if (clockwise == 1) { + clockKey = "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise.clockwise"; + } else if (clockwise == -1) { + clockKey = "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise.counter_clockwise"; + } else { + clockKey = "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise.none"; + } + tooltip.add(Component.translatable( + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise", + Component.translatable(clockKey) + )); + + if (serverData.contains("preDirection")) { + tooltip.add(Component.translatable( + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.pre_direction", + serverData.getString("preDirection") + )); + } else { + tooltip.add(Component.translatable( + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.pre_direction", + Component.translatable("tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.pre_direction.none") + )); + } + } + + @Override + public void appendServerData(CompoundTag tag, BlockAccessor accessor) { + if (accessor.getBlockEntity() instanceof PecisionMagneticPivotBlockEntity entity) { + tag.putInt("time", entity.getTime()); + tag.putInt("frictionCount", entity.getFrictionCount()); + tag.putInt("clockwise", entity.getClockwise()); + if (entity.getPreDirection() != null) { + tag.putString("preDirection", entity.getPreDirection().getName()); + } + } + } + + @Override + public ResourceLocation getUid() { + return AnvilCraftPigsPlus.of("precision_magnetic_pivot"); + } +} diff --git a/src/main/java/dev/anvilcraft/pigsplus/mixin/PistonStructureResolverMixin.java b/src/main/java/dev/anvilcraft/pigsplus/mixin/PistonStructureResolverMixin.java new file mode 100644 index 00000000..5da4aaf3 --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/mixin/PistonStructureResolverMixin.java @@ -0,0 +1,41 @@ +package dev.anvilcraft.pigsplus.mixin; + +import dev.anvilcraft.pigsplus.block.entity.PecisionMagneticPivotBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.piston.PistonStructureResolver; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.ArrayList; +import java.util.List; + +@Mixin(PistonStructureResolver.class) +abstract class PistonStructureResolverMixin { + + @Shadow + @Final + private List toPush; + + @Shadow + @Final + private Level level; + + @Shadow + @Final + private Direction pushDirection; + + @Inject(method = "resolve", at = @At("RETURN")) + private void onPistonResolve(CallbackInfoReturnable cir) { + if (level.isClientSide()) return; + if (!cir.getReturnValue()) return; + + List toPushBlocks = new ArrayList<>(toPush); + PecisionMagneticPivotBlockEntity.onPistonMoveBlocks(level, toPushBlocks, pushDirection); + } +} diff --git a/src/main/resources/anvilcraft_pigsplus.mixins.json b/src/main/resources/anvilcraft_pigsplus.mixins.json index 0d8b9e78..3e552d02 100644 --- a/src/main/resources/anvilcraft_pigsplus.mixins.json +++ b/src/main/resources/anvilcraft_pigsplus.mixins.json @@ -4,7 +4,8 @@ "package": "dev.anvilcraft.pigsplus.mixin", "compatibilityLevel": "JAVA_21", "mixins": [ - "EntityMixin" + "EntityMixin", + "PistonStructureResolverMixin" ], "client": [ ], diff --git a/src/main/resources/assets/anvilcraft_pigsplus/blockstates/precision_magnetic_pivot.json b/src/main/resources/assets/anvilcraft_pigsplus/blockstates/precision_magnetic_pivot.json new file mode 100644 index 00000000..785e5238 --- /dev/null +++ b/src/main/resources/assets/anvilcraft_pigsplus/blockstates/precision_magnetic_pivot.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "anvilcraft_pigsplus:block/precision_magnetic_pivot" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json b/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json index 7f82dc96..b4933a39 100644 --- a/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json +++ b/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json @@ -44,12 +44,14 @@ "block.anvilcraft_pigsplus.experience_interface": "经验接口", "block.anvilcraft_pigsplus.fake_menger_sponge": "假门格海绵", "block.anvilcraft_pigsplus.pig_anvil": "猪砧", + "block.anvilcraft_pigsplus.precision_magnetic_pivot": "精密磁枢", "block.anvilcraft_pigsplus.redstone_conduit_block": "红石传导块", "block.anvilcraft_pigsplus.sculk_extractor": "幽匿萃取体", "block.anvilcraft_pigsplus.void_catalyst": "虚空催化体", "block.anvilcraft_pigsplus.weak_resin_block": "虚弱树脂块", "config.jade.plugin_anvilcraft_pigsplus.electric_enchanting_table": "电力附魔台", "config.jade.plugin_anvilcraft_pigsplus.enchanted_generator": "附魔发电机", + "config.jade.plugin_anvilcraft_pigsplus.precision_magnetic_pivot": "精密磁枢", "item.anvilcraft_pigsplus.chaotic_raw_ore": "混沌粗矿", "item.anvilcraft_pigsplus.echo_geode": "回响晶洞", "item.anvilcraft_pigsplus.ender_component": "末影部件", @@ -63,5 +65,15 @@ "jei.anvilcraft.pigsplus.info.spiritual_component": "携带附魔的机巧部件被摧毁时,每条附魔提供%.0f%%的概率,生成最多一个灵媒部件", "tooltip.anvilcraft_pigsplus.enchanted_generator.decrease_rate": "XP减免: %s", "tooltip.anvilcraft_pigsplus.menger_sponge_staff": "清除一大片液体", - "tooltip.anvilcraft_pigsplus.portable_wireless_charger": "放在背包里,消耗 %d kW 以生产 %d FE/t" + "tooltip.anvilcraft_pigsplus.portable_wireless_charger": "放在背包里,消耗 %d kW 以生产 %d FE/t", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise": "旋转方向: %s", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise.clockwise": "顺时针", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise.counter_clockwise": "逆时针", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.clockwise.none": "无方向", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.pre_direction": "前次方向: %s", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.pre_direction.none": "无", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.friction_count": "摩擦次数: %s", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time": "状态: %s", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time.stopped": "停止工作", + "tooltip.anvilcraft_pigsplus.precision_magnetic_pivot.time.working": "工作中" } \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft_pigsplus/models/block/precision_magnetic_pivot.json b/src/main/resources/assets/anvilcraft_pigsplus/models/block/precision_magnetic_pivot.json new file mode 100644 index 00000000..2ec8f23f --- /dev/null +++ b/src/main/resources/assets/anvilcraft_pigsplus/models/block/precision_magnetic_pivot.json @@ -0,0 +1,185 @@ +{ + "format_version": "1.9.0", + "credit": "Made with Blockbench by TBpig", + "parent": "minecraft:block/cube", + "textures": { + "0": "anvilcraft_pigsplus:block/precision_magnetic_pivot_bottom", + "1": "anvilcraft_pigsplus:block/precision_magnetic_pivot_copper_string", + "2": "anvilcraft_pigsplus:block/precision_magnetic_pivot_magnet", + "3": "anvilcraft_pigsplus:block/precision_magnetic_pivot_bar", + "particle": "anvilcraft_pigsplus:block/precision_magnetic_pivot_bottom" + }, + "elements": [ + { + "from": [4, 1, 4], + "to": [12, 16, 12], + "rotation": {"angle": 0, "axis": "y", "origin": [4, 1, 4]}, + "faces": { + "north": {"uv": [0, 0, 8, 15], "texture": "#2"}, + "east": {"uv": [0, 0, 8, 15], "texture": "#2"}, + "south": {"uv": [0, 0, 8, 15], "texture": "#2"}, + "west": {"uv": [0, 0, 8, 15], "texture": "#2"}, + "up": {"uv": [8, 0, 16, 8], "texture": "#2", "cullface": "up"}, + "down": {"uv": [0, 0, 8, 8], "texture": "#2"} + } + }, + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "north": {"uv": [0, 0, 16, 2], "texture": "#0", "cullface": "north"}, + "east": {"uv": [0, 0, 16, 2], "texture": "#0", "cullface": "east"}, + "south": {"uv": [0, 0, 16, 2], "texture": "#0", "cullface": "south"}, + "west": {"uv": [0, 0, 16, 2], "texture": "#0", "cullface": "west"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#0", "cullface": "down"} + } + }, + { + "from": [3, 2, 3], + "to": [13, 3, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 2, 3]}, + "faces": { + "north": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "east": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "up": {"uv": [0, 1, 10, 11], "texture": "#1"}, + "down": {"uv": [0, 1, 10, 11], "texture": "#1"} + } + }, + { + "from": [3, 6, 3], + "to": [13, 7, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 6, 3]}, + "faces": { + "north": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "east": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "up": {"uv": [0, 1, 10, 11], "texture": "#1"}, + "down": {"uv": [0, 1, 10, 11], "texture": "#1"} + } + }, + { + "from": [3, 4, 3], + "to": [13, 5, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 4, 3]}, + "faces": { + "north": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "east": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "up": {"uv": [0, 1, 10, 11], "texture": "#1"}, + "down": {"uv": [0, 1, 10, 11], "texture": "#1"} + } + }, + { + "from": [3, 8, 3], + "to": [13, 9, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 8, 3]}, + "faces": { + "north": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "east": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "up": {"uv": [0, 1, 10, 11], "texture": "#1"}, + "down": {"uv": [0, 1, 10, 11], "texture": "#1"} + } + }, + { + "from": [3, 10, 3], + "to": [13, 11, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 10, 3]}, + "faces": { + "north": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "east": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "up": {"uv": [0, 1, 10, 11], "texture": "#1"}, + "down": {"uv": [0, 1, 10, 11], "texture": "#1"} + } + }, + { + "from": [3, 12, 3], + "to": [13, 13, 13], + "rotation": {"angle": 0, "axis": "y", "origin": [3, 12, 3]}, + "faces": { + "north": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "east": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 10, 1], "texture": "#1"}, + "up": {"uv": [0, 1, 10, 11], "texture": "#1"}, + "down": {"uv": [0, 1, 10, 11], "texture": "#1"} + } + }, + { + "from": [7, 1, 2], + "to": [9, 10, 4], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 1, 2]}, + "faces": { + "north": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "up": {"uv": [2, 10, 0, 8], "texture": "#3"}, + "down": {"uv": [2, 8, 0, 10], "texture": "#3"} + } + }, + { + "from": [2, 1, 7], + "to": [4, 10, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [2, 1, 9]}, + "faces": { + "north": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "up": {"uv": [2, 10, 0, 8], "rotation": 270, "texture": "#3"}, + "down": {"uv": [2, 8, 0, 10], "rotation": 90, "texture": "#3"} + } + }, + { + "from": [7, 1, 12], + "to": [9, 10, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 1, 14]}, + "faces": { + "north": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "up": {"uv": [2, 10, 0, 8], "rotation": 180, "texture": "#3"}, + "down": {"uv": [2, 8, 0, 10], "rotation": 180, "texture": "#3"} + } + }, + { + "from": [12, 1, 7], + "to": [14, 10, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [14, 1, 7]}, + "faces": { + "north": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "east": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "south": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "west": {"uv": [0, 0, 2, 8], "texture": "#3"}, + "up": {"uv": [2, 10, 0, 8], "rotation": 90, "texture": "#3"}, + "down": {"uv": [2, 8, 0, 10], "rotation": 270, "texture": "#3"} + } + } + ], + "groups": [ + 0, + 1, + { + "name": "group", + "origin": [3, 2, 3], + "color": 0, + "children": [2, 3, 4, 5, 6, 7] + }, + { + "name": "group", + "origin": [8, 8, 8], + "color": 0, + "children": [8, 9, 10, 11] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft_pigsplus/textures/block/precision_magnetic_pivot_bar.png b/src/main/resources/assets/anvilcraft_pigsplus/textures/block/precision_magnetic_pivot_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..a06365a079e8ee81bfe763dd49594328bc511a17 GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`CY~;iAr*7pT-wOXpuod?(EXIx zfq$w7A`?U>P1(m7r=D2kqSgOdCBWYVWs@`&a7E$9T+XO^oNFd4C^n{d0K%t0>Dw^C%9_D%Kr9BmV!7 ieI0TG$Y2AR#mvyE!?D6Q&Danq!r*TymVlRDj9(5ia~}Ze`Tzgj=J$_)3^tHvW(Lh17Ds<2 R-Z?-K22WQ%mvv4FO#oT&A+Z1e literal 0 HcmV?d00001 From 5abaa18517c5bf5567dd6da94dd393ecc545828c Mon Sep 17 00:00:00 2001 From: TBPig <147127248+TBPig@users.noreply.github.com> Date: Mon, 20 Jul 2026 11:04:26 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=B2=BE=E5=AF=86?= =?UTF-8?q?=E7=A3=81=E6=9E=A2=EF=BC=8C=E6=B7=BB=E5=8A=A0=E7=B2=BE=E5=AF=86?= =?UTF-8?q?=E7=94=B5=E7=A3=81=E5=8A=A0=E5=B7=A5=E9=85=8D=E6=96=B9=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=89=8B=E5=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../anvilcraft_pigsplus/lang/en_ud.json | 4 + .../anvilcraft_pigsplus/lang/en_us.json | 4 + .../circuit_board.json | 21 ++ .../karakuri_component.json | 21 ++ .../magnet.json | 21 ++ .../magnetoelectric_core.json | 21 ++ .../precision_magnetic_pivot.json | 21 ++ .../processor.json | 21 ++ ...parator_with_precision_magnetic_pivot.json | 21 ++ .../circuit_board.json | 21 ++ .../karakuri_component.json | 17 ++ .../magnet.json | 18 ++ .../magnetoelectric_core.json | 22 ++ .../precision_magnetic_pivot.json | 20 ++ .../processor.json | 21 ++ ...parator_with_precision_magnetic_pivot.json | 83 ++++++ .../recipe/circuit_board.json | 15 +- .../recipe/precision_magnetic_pivot.json | 9 +- .../pigsplus/AnvilCraftPigsPlus.java | 2 + .../client/AnvilCraftPigsPlusClient.java | 20 ++ .../client/markdown/package-info.java | 3 + ...ctromagneticProcessingRecipeComponent.java | 89 ++++++ .../client/markdown/recipe/package-info.java | 3 + .../pigsplus/data/lang/JeiLang.java | 4 + ...cisionElectromagneticProcessingLoader.java | 55 ++++ .../recipe/ProceduralProcessRecipeLoader.java | 50 ++++ .../pigsplus/data/recipe/RecipeHandler.java | 2 + .../data/recipe/VanillaRecipesLoader.java | 11 +- .../anvilcraft/pigsplus/init/AddonBlocks.java | 3 +- .../pigsplus/init/AddonRecipeTypes.java | 39 +++ .../integration/jei/AddonJeiPlugin.java | 30 ++ ...sionElectromagneticProcessingCategory.java | 254 +++++++++++++++++ .../jei/category/package-info.java | 3 + ...cisionElectromagneticProcessingRecipe.java | 265 ++++++++++++++++++ .../pigsplus/recipe/package-info.java | 3 + .../101_precision_magnetic_pivot.md | 44 +++ .../101_precision_magnetic_pivot.md | 44 +++ .../anvilcraft_pigsplus/lang/zh_cn.json | 4 + 38 files changed, 1293 insertions(+), 16 deletions(-) create mode 100644 src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/circuit_board.json create mode 100644 src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/karakuri_component.json create mode 100644 src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/magnet.json create mode 100644 src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/magnetoelectric_core.json create mode 100644 src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/precision_magnetic_pivot.json create mode 100644 src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/processor.json create mode 100644 src/generated/resources/data/anvilcraft/advancement/recipes/procedural_process/spacetime_supercomputer_from_advanced_comparator_with_precision_magnetic_pivot.json create mode 100644 src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/circuit_board.json create mode 100644 src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/karakuri_component.json create mode 100644 src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/magnet.json create mode 100644 src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/magnetoelectric_core.json create mode 100644 src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/precision_magnetic_pivot.json create mode 100644 src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/processor.json create mode 100644 src/generated/resources/data/anvilcraft/recipe/procedural_process/spacetime_supercomputer_from_advanced_comparator_with_precision_magnetic_pivot.json create mode 100644 src/main/java/dev/anvilcraft/pigsplus/client/markdown/package-info.java create mode 100644 src/main/java/dev/anvilcraft/pigsplus/client/markdown/recipe/MDPrecisionElectromagneticProcessingRecipeComponent.java create mode 100644 src/main/java/dev/anvilcraft/pigsplus/client/markdown/recipe/package-info.java create mode 100644 src/main/java/dev/anvilcraft/pigsplus/data/recipe/PrecisionElectromagneticProcessingLoader.java create mode 100644 src/main/java/dev/anvilcraft/pigsplus/data/recipe/ProceduralProcessRecipeLoader.java create mode 100644 src/main/java/dev/anvilcraft/pigsplus/init/AddonRecipeTypes.java create mode 100644 src/main/java/dev/anvilcraft/pigsplus/integration/jei/category/PrecisionElectromagneticProcessingCategory.java create mode 100644 src/main/java/dev/anvilcraft/pigsplus/integration/jei/category/package-info.java create mode 100644 src/main/java/dev/anvilcraft/pigsplus/recipe/PrecisionElectromagneticProcessingRecipe.java create mode 100644 src/main/java/dev/anvilcraft/pigsplus/recipe/package-info.java create mode 100644 src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_precision_magnetic_pivot.md create mode 100644 src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_precision_magnetic_pivot.md diff --git a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json index a053fd34..7b55f720 100644 --- a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json +++ b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json @@ -52,6 +52,10 @@ "config.jade.plugin_anvilcraft_pigsplus.electric_enchanting_table": "ǝꞁqɐ⟘ ᵷuᴉʇuɐɥɔuƎ ɔᴉɹʇɔǝꞁƎ", "config.jade.plugin_anvilcraft_pigsplus.enchanted_generator": "ɹoʇɐɹǝuǝ⅁ pǝʇuɐɥɔuƎ", "config.jade.plugin_anvilcraft_pigsplus.precision_magnetic_pivot": "ʇoʌᴉԀ ɔᴉʇǝuᵷɐW uoᴉsᴉɔǝɹԀ", + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing": "ᵷuᴉssǝɔoɹԀ ɔᴉʇǝuᵷɐɯoɹʇɔǝꞁƎ uoᴉsᴉɔǝɹԀ", + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.consume_fluid": "%2$s ɟo ᗺɯ %1$d :ǝɯnsuoƆ", + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.need_activated": "pǝʇɐʌᴉʇɔɐ ǝq oʇ spǝǝN", + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.produce_fluid": "%2$s ɟo ᗺɯ %1$d :ǝɔnpoɹԀ", "item.anvilcraft_pigsplus.chaotic_raw_ore": "ǝɹO ʍɐᴚ ɔᴉʇoɐɥƆ", "item.anvilcraft_pigsplus.echo_geode": "ǝpoǝ⅁ oɥɔƎ", "item.anvilcraft_pigsplus.ender_component": "ʇuǝuodɯoƆ ɹǝpuƎ", diff --git a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json index ee4ff680..9db8ceae 100644 --- a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json +++ b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json @@ -52,6 +52,10 @@ "config.jade.plugin_anvilcraft_pigsplus.electric_enchanting_table": "Electric Enchanting Table", "config.jade.plugin_anvilcraft_pigsplus.enchanted_generator": "Enchanted Generator", "config.jade.plugin_anvilcraft_pigsplus.precision_magnetic_pivot": "Precision Magnetic Pivot", + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing": "Precision Electromagnetic Processing", + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.consume_fluid": "Consume: %1$d mB of %2$s", + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.need_activated": "Needs to be activated", + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.produce_fluid": "Produce: %1$d mB of %2$s", "item.anvilcraft_pigsplus.chaotic_raw_ore": "Chaotic Raw Ore", "item.anvilcraft_pigsplus.echo_geode": "Echo Geode", "item.anvilcraft_pigsplus.ender_component": "Ender Component", diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/circuit_board.json b/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/circuit_board.json new file mode 100644 index 00000000..110a87ae --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/circuit_board.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:precision_electromagnetic_processing/circuit_board" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:precision_electromagnetic_processing/circuit_board" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/karakuri_component.json b/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/karakuri_component.json new file mode 100644 index 00000000..cc29021d --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/karakuri_component.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:precision_electromagnetic_processing/karakuri_component" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:precision_electromagnetic_processing/karakuri_component" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/magnet.json b/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/magnet.json new file mode 100644 index 00000000..7594f441 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/magnet.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:precision_electromagnetic_processing/magnet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:precision_electromagnetic_processing/magnet" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/magnetoelectric_core.json b/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/magnetoelectric_core.json new file mode 100644 index 00000000..ddeddcdf --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/magnetoelectric_core.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:precision_electromagnetic_processing/magnetoelectric_core" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:precision_electromagnetic_processing/magnetoelectric_core" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/precision_magnetic_pivot.json b/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/precision_magnetic_pivot.json new file mode 100644 index 00000000..bb5e62bb --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/precision_magnetic_pivot.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:precision_electromagnetic_processing/precision_magnetic_pivot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:precision_electromagnetic_processing/precision_magnetic_pivot" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/processor.json b/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/processor.json new file mode 100644 index 00000000..c271b6b9 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/precision_electromagnetic_processing/processor.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:precision_electromagnetic_processing/processor" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:precision_electromagnetic_processing/processor" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/procedural_process/spacetime_supercomputer_from_advanced_comparator_with_precision_magnetic_pivot.json b/src/generated/resources/data/anvilcraft/advancement/recipes/procedural_process/spacetime_supercomputer_from_advanced_comparator_with_precision_magnetic_pivot.json new file mode 100644 index 00000000..d19dd154 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/procedural_process/spacetime_supercomputer_from_advanced_comparator_with_precision_magnetic_pivot.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:procedural_process/spacetime_supercomputer_from_advanced_comparator_with_precision_magnetic_pivot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:procedural_process/spacetime_supercomputer_from_advanced_comparator_with_precision_magnetic_pivot" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/circuit_board.json b/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/circuit_board.json new file mode 100644 index 00000000..6e03b742 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/circuit_board.json @@ -0,0 +1,21 @@ +{ + "type": "anvilcraft_pigsplus:precision_electromagnetic_processing", + "ingredients": [ + { + "count": 2, + "items": "anvilcraft:copper_nugget" + }, + { + "items": "minecraft:redstone" + }, + { + "items": "anvilcraft:hardend_resin" + } + ], + "results": [ + { + "count": 8, + "id": "anvilcraft:circuit_board" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/karakuri_component.json b/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/karakuri_component.json new file mode 100644 index 00000000..422b41d4 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/karakuri_component.json @@ -0,0 +1,17 @@ +{ + "type": "anvilcraft_pigsplus:precision_electromagnetic_processing", + "ingredients": [ + { + "items": "#c:ingots/brass" + }, + { + "count": 3, + "items": "minecraft:redstone" + } + ], + "results": [ + { + "id": "anvilcraft_pigsplus:karakuri_component" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/magnet.json b/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/magnet.json new file mode 100644 index 00000000..5f2a2ded --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/magnet.json @@ -0,0 +1,18 @@ +{ + "type": "anvilcraft_pigsplus:precision_electromagnetic_processing", + "ingredients": [ + { + "items": "minecraft:ender_pearl" + }, + { + "count": 2, + "items": "#c:ingots/magnet" + } + ], + "results": [ + { + "count": 2, + "id": "anvilcraft:magnet" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/magnetoelectric_core.json b/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/magnetoelectric_core.json new file mode 100644 index 00000000..99067c1c --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/magnetoelectric_core.json @@ -0,0 +1,22 @@ +{ + "type": "anvilcraft_pigsplus:precision_electromagnetic_processing", + "ingredients": [ + { + "count": 2, + "items": "#c:ingots/copper" + }, + { + "count": 2, + "items": "#c:glass_blocks" + }, + { + "count": 3, + "items": "#c:ingots/magnet" + } + ], + "results": [ + { + "id": "anvilcraft:magnetoelectric_core" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/precision_magnetic_pivot.json b/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/precision_magnetic_pivot.json new file mode 100644 index 00000000..7d3ee33a --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/precision_magnetic_pivot.json @@ -0,0 +1,20 @@ +{ + "type": "anvilcraft_pigsplus:precision_electromagnetic_processing", + "ingredients": [ + { + "count": 3, + "items": "#c:ingots/copper" + }, + { + "items": "minecraft:iron_block" + }, + { + "items": "anvilcraft_pigsplus:karakuri_component" + } + ], + "results": [ + { + "id": "anvilcraft_pigsplus:precision_magnetic_pivot" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/processor.json b/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/processor.json new file mode 100644 index 00000000..6edd50cd --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/precision_electromagnetic_processing/processor.json @@ -0,0 +1,21 @@ +{ + "type": "anvilcraft_pigsplus:precision_electromagnetic_processing", + "ingredients": [ + { + "count": 3, + "items": "anvilcraft:copper_nugget" + }, + { + "items": "minecraft:quartz" + }, + { + "items": "anvilcraft:hardend_resin" + } + ], + "results": [ + { + "count": 2, + "id": "anvilcraft:processor" + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/procedural_process/spacetime_supercomputer_from_advanced_comparator_with_precision_magnetic_pivot.json b/src/generated/resources/data/anvilcraft/recipe/procedural_process/spacetime_supercomputer_from_advanced_comparator_with_precision_magnetic_pivot.json new file mode 100644 index 00000000..c11951a1 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/procedural_process/spacetime_supercomputer_from_advanced_comparator_with_precision_magnetic_pivot.json @@ -0,0 +1,83 @@ +{ + "type": "anvilcraft:procedural_process", + "displayed_model": "anvilcraft:block/spacetime_supercomputer_wip", + "icon": { + "count": 1, + "id": "anvilcraft:spacetime_supercomputer" + }, + "initial_block": { + "blocks": "anvilcraft:advanced_comparator" + }, + "loop": 1, + "result_block": { + "block": "anvilcraft:spacetime_supercomputer" + }, + "steps": [ + { + "content": { + "type": "anvilcraft:block_processing", + "inputs": [ + { + "blocks": "anvilcraft:advanced_comparator" + }, + { + "blocks": "anvilcraft_pigsplus:precision_magnetic_pivot", + "properties": [ + { + "lit": "true" + } + ] + } + ], + "result": { + "block": "anvilcraft:wip_block" + } + }, + "index": 0 + }, + { + "content": { + "type": "anvilcraft:block_processing", + "inputs": [ + { + "blocks": "anvilcraft:wip_block" + }, + { + "blocks": "anvilcraft:neutron_irradiator", + "properties": [ + { + "type": "time" + } + ] + } + ], + "result": { + "block": "anvilcraft:wip_block" + } + }, + "index": 1 + }, + { + "content": { + "type": "anvilcraft:block_processing", + "inputs": [ + { + "blocks": "anvilcraft:wip_block" + }, + { + "blocks": "anvilcraft:neutron_irradiator", + "properties": [ + { + "type": "space" + } + ] + } + ], + "result": { + "block": "anvilcraft:wip_block" + } + }, + "index": 2 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft_pigsplus/recipe/circuit_board.json b/src/generated/resources/data/anvilcraft_pigsplus/recipe/circuit_board.json index 7ff24853..ff8805b7 100644 --- a/src/generated/resources/data/anvilcraft_pigsplus/recipe/circuit_board.json +++ b/src/generated/resources/data/anvilcraft_pigsplus/recipe/circuit_board.json @@ -1,16 +1,17 @@ { - "type": "minecraft:crafting_shapeless", + "type": "minecraft:crafting_shaped", "category": "misc", - "ingredients": [ - { + "key": { + "R": { "item": "anvilcraft:hardend_resin" }, - { - "item": "anvilcraft:hardend_resin" - }, - { + "W": { "item": "anvilcraft_pigsplus:karakuri_component" } + }, + "pattern": [ + "W", + "R" ], "result": { "count": 16, diff --git a/src/generated/resources/data/anvilcraft_pigsplus/recipe/precision_magnetic_pivot.json b/src/generated/resources/data/anvilcraft_pigsplus/recipe/precision_magnetic_pivot.json index d20115e9..03ac6fc2 100644 --- a/src/generated/resources/data/anvilcraft_pigsplus/recipe/precision_magnetic_pivot.json +++ b/src/generated/resources/data/anvilcraft_pigsplus/recipe/precision_magnetic_pivot.json @@ -6,16 +6,19 @@ "item": "anvilcraft_pigsplus:karakuri_component" }, "C": { - "item": "minecraft:iron_bars" + "item": "minecraft:copper_block" }, "M": { - "item": "anvilcraft:magnet_block" + "item": "minecraft:iron_block" + }, + "P": { + "item": "anvilcraft:processor" } }, "pattern": [ " A ", "CMC", - "CAC" + "CPC" ], "result": { "count": 1, diff --git a/src/main/java/dev/anvilcraft/pigsplus/AnvilCraftPigsPlus.java b/src/main/java/dev/anvilcraft/pigsplus/AnvilCraftPigsPlus.java index 757049bd..116d88ff 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/AnvilCraftPigsPlus.java +++ b/src/main/java/dev/anvilcraft/pigsplus/AnvilCraftPigsPlus.java @@ -12,6 +12,7 @@ import dev.anvilcraft.pigsplus.init.AddonItems; import dev.anvilcraft.pigsplus.init.AddonMenuTypes; import dev.anvilcraft.pigsplus.init.AddonParticleTypes; +import dev.anvilcraft.pigsplus.init.AddonRecipeTypes; import net.minecraft.resources.ResourceLocation; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; @@ -34,6 +35,7 @@ public AnvilCraftPigsPlus(IEventBus modEventBus, ModContainer modContainer) { AddonMenuTypes.register(); AddonParticleTypes.register(modEventBus); AddonBlockEntities.register(); + AddonRecipeTypes.register(modEventBus); ModDatagen.init(); modEventBus.addListener(AnvilCraftPigsPlus::registerPayload); diff --git a/src/main/java/dev/anvilcraft/pigsplus/client/AnvilCraftPigsPlusClient.java b/src/main/java/dev/anvilcraft/pigsplus/client/AnvilCraftPigsPlusClient.java index da1b9baa..a06a4a13 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/client/AnvilCraftPigsPlusClient.java +++ b/src/main/java/dev/anvilcraft/pigsplus/client/AnvilCraftPigsPlusClient.java @@ -1,18 +1,38 @@ package dev.anvilcraft.pigsplus.client; import dev.anvilcraft.pigsplus.AnvilCraftPigsPlus; +import dev.anvilcraft.pigsplus.client.markdown.recipe.MDPrecisionElectromagneticProcessingRecipeComponent; import dev.anvilcraft.pigsplus.client.particle.ExpParticle; import dev.anvilcraft.pigsplus.init.AddonParticleTypes; +import dev.anvilcraft.pigsplus.init.AddonRecipeTypes; +import dev.anvilcraft.resource.ageratum.client.feat.markdown.component.extend.MDRecipeComponent; +import dev.anvilcraft.resource.ageratum.client.registries.AgeratumRegistries; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; import net.neoforged.fml.common.Mod; import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; +@SuppressWarnings("unused") @Mod(value = AnvilCraftPigsPlus.MOD_ID, dist = Dist.CLIENT) public class AnvilCraftPigsPlusClient { + public static final DeferredRegister> + RECIPE_COMPONENT_FACTORIES = DeferredRegister.create( + AgeratumRegistries.RECIPE_COMPONENT_FACTORY_REGISTRY_KEY, AnvilCraftPigsPlus.MOD_ID); + + public static final DeferredHolder, MDRecipeComponent.RecipeComponentFactory> + PRECISION_ELECTROMAGNETIC_PROCESSING = RECIPE_COMPONENT_FACTORIES.register( + "precision_electromagnetic_processing", () -> MDRecipeComponent.RecipeComponentFactory.create( + AddonRecipeTypes.PRECISION_ELECTROMAGNETIC_PROCESSING_TYPE.get(), + MDPrecisionElectromagneticProcessingRecipeComponent::new + ) + ); + public AnvilCraftPigsPlusClient(IEventBus modBus, ModContainer container) { modBus.addListener(RegisterParticleProvidersEvent.class, event -> event.registerSpriteSet(AddonParticleTypes.EXP.get(), ExpParticle.Provider::new)); + RECIPE_COMPONENT_FACTORIES.register(modBus); } } diff --git a/src/main/java/dev/anvilcraft/pigsplus/client/markdown/package-info.java b/src/main/java/dev/anvilcraft/pigsplus/client/markdown/package-info.java new file mode 100644 index 00000000..c84e08c3 --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/client/markdown/package-info.java @@ -0,0 +1,3 @@ +@net.minecraft.MethodsReturnNonnullByDefault +@javax.annotation.ParametersAreNonnullByDefault +package dev.anvilcraft.pigsplus.client.markdown; diff --git a/src/main/java/dev/anvilcraft/pigsplus/client/markdown/recipe/MDPrecisionElectromagneticProcessingRecipeComponent.java b/src/main/java/dev/anvilcraft/pigsplus/client/markdown/recipe/MDPrecisionElectromagneticProcessingRecipeComponent.java new file mode 100644 index 00000000..fce50c20 --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/client/markdown/recipe/MDPrecisionElectromagneticProcessingRecipeComponent.java @@ -0,0 +1,89 @@ +package dev.anvilcraft.pigsplus.client.markdown.recipe; + +import dev.anvilcraft.lib.v2.util.predicate.ChanceItemStack; +import dev.anvilcraft.lib.v2.util.predicate.ItemIngredientPredicate; +import dev.anvilcraft.pigsplus.init.AddonBlocks; +import dev.anvilcraft.pigsplus.recipe.PrecisionElectromagneticProcessingRecipe; +import dev.anvilcraft.resource.ageratum.client.feat.markdown.MDRenderContext; +import dev.dubhe.anvilcraft.client.markdown.recipe.anvil.MDBaseAnvilRecipeComponent; +import dev.dubhe.anvilcraft.util.AgeratumUtil; +import dev.dubhe.anvilcraft.util.CauldronUtil; +import lombok.Getter; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.List; + +public class MDPrecisionElectromagneticProcessingRecipeComponent extends MDBaseAnvilRecipeComponent { + public static final int INFO_X = 12; + public static final int INFO_Y = 106; + @Getter + private final List ingredients; + + @Getter + private final List resultItems; + + @Getter + private final List inputBlockStates; + + @Getter + private final PrecisionElectromagneticProcessingRecipe recipe; + + public MDPrecisionElectromagneticProcessingRecipeComponent(PrecisionElectromagneticProcessingRecipe recipe, boolean enableAlignCenter) { + super(enableAlignCenter); + ingredients = recipe.getInputItems(); + resultItems = recipe.getResultItems(); + inputBlockStates = List.of( + getInputCauldron(recipe), + AddonBlocks.PRECISION_MAGNETIC_PIVOT.getDefaultState() + ); + this.recipe = recipe; + } + + protected BlockState getOutputBlockState() { + if (resultItems.isEmpty()) { + return getResultCauldron(recipe); + } + return super.getOutputBlockState(); + } + + @Override + protected void renderRecipe(MDRenderContext context, float mouseX, float mouseY) { + super.renderRecipe(context, mouseX, mouseY); + GuiGraphics graphics = context.graphics(); + + if (recipe.isConsumeFluid()) { + Component text = Component.translatable( + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.consume_fluid", + recipe.getHasCauldron().consume(), + recipe.getHasCauldron().getFluidCauldron().getName() + ); + AgeratumUtil.renderText(graphics, text, INFO_X, INFO_Y); + } else if (recipe.isProduceFluid()) { + Component text = Component.translatable( + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.produce_fluid", + recipe.getHasCauldron().produce(), + recipe.getHasCauldron().getTransformCauldron().getName() + ); + AgeratumUtil.renderText(graphics, text, INFO_X, INFO_Y); + } + } + + public static BlockState getInputCauldron(PrecisionElectromagneticProcessingRecipe recipe) { + Block material = recipe.getHasCauldron().getFluidCauldron(); + return CauldronUtil.fullState(material); + } + + public static BlockState getResultCauldron(PrecisionElectromagneticProcessingRecipe recipe) { + Block result = recipe.getHasCauldron().getTransformCauldron(); + if (recipe.isConsumeFluid()) { + return CauldronUtil.getStateFromContentAndLevel(result, CauldronUtil.maxLevel(result) - 1); + } else if (recipe.isProduceFluid()) { + return CauldronUtil.getStateFromContentAndLevel(result, 1); + } else { + return CauldronUtil.fullState(result); + } + } +} diff --git a/src/main/java/dev/anvilcraft/pigsplus/client/markdown/recipe/package-info.java b/src/main/java/dev/anvilcraft/pigsplus/client/markdown/recipe/package-info.java new file mode 100644 index 00000000..790a6189 --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/client/markdown/recipe/package-info.java @@ -0,0 +1,3 @@ +@net.minecraft.MethodsReturnNonnullByDefault +@javax.annotation.ParametersAreNonnullByDefault +package dev.anvilcraft.pigsplus.client.markdown.recipe; diff --git a/src/main/java/dev/anvilcraft/pigsplus/data/lang/JeiLang.java b/src/main/java/dev/anvilcraft/pigsplus/data/lang/JeiLang.java index 485ea833..ee0c1bc8 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/data/lang/JeiLang.java +++ b/src/main/java/dev/anvilcraft/pigsplus/data/lang/JeiLang.java @@ -16,5 +16,9 @@ public static void init(RegistrumLangProvider provider) { "Throw a Karakuri Component into the End portal, there is a %.0f%% chance to obtain a Ender Component." ); + provider.add("gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing", "Precision Electromagnetic Processing"); + provider.add("gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.consume_fluid", "Consume: %1$d mB of %2$s"); + provider.add("gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.produce_fluid", "Produce: %1$d mB of %2$s"); + provider.add("gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.need_activated", "Needs to be activated"); } } diff --git a/src/main/java/dev/anvilcraft/pigsplus/data/recipe/PrecisionElectromagneticProcessingLoader.java b/src/main/java/dev/anvilcraft/pigsplus/data/recipe/PrecisionElectromagneticProcessingLoader.java new file mode 100644 index 00000000..9a915906 --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/data/recipe/PrecisionElectromagneticProcessingLoader.java @@ -0,0 +1,55 @@ +package dev.anvilcraft.pigsplus.data.recipe; + +import dev.anvilcraft.lib.v2.registrum.providers.RegistrumRecipeProvider; +import dev.anvilcraft.pigsplus.init.AddonBlocks; +import dev.anvilcraft.pigsplus.init.AddonItems; +import dev.anvilcraft.pigsplus.recipe.PrecisionElectromagneticProcessingRecipe; +import dev.dubhe.anvilcraft.init.block.ModBlocks; +import dev.dubhe.anvilcraft.init.item.ModItemTags; +import dev.dubhe.anvilcraft.init.item.ModItems; +import net.minecraft.world.item.Items; +import net.neoforged.neoforge.common.Tags; + +public class PrecisionElectromagneticProcessingLoader { + public static void init(RegistrumRecipeProvider provider) { + PrecisionElectromagneticProcessingRecipe.builder() + .requires(ModItemTags.BRASS_INGOTS) + .requires(Items.REDSTONE, 3) + .result(AddonItems.KARAKURI_COMPONENT) + .save(provider); + + PrecisionElectromagneticProcessingRecipe.builder() + .requires(ModItems.COPPER_NUGGET, 3) + .requires(Items.QUARTZ) + .requires(ModItems.HARDEND_RESIN) + .result(ModItems.PROCESSOR, 2) + .save(provider); + + PrecisionElectromagneticProcessingRecipe.builder() + .requires(ModItems.COPPER_NUGGET, 2) + .requires(Items.REDSTONE) + .requires(ModItems.HARDEND_RESIN) + .result(ModItems.CIRCUIT_BOARD, 8) + .save(provider); + + PrecisionElectromagneticProcessingRecipe.builder() + .requires(Tags.Items.INGOTS_COPPER, 3) + .requires(Items.IRON_BLOCK) + .requires(AddonItems.KARAKURI_COMPONENT) + .result(AddonBlocks.PRECISION_MAGNETIC_PIVOT) + .save(provider); + + PrecisionElectromagneticProcessingRecipe.builder() + .requires(Tags.Items.INGOTS_COPPER, 2) + .requires(Tags.Items.GLASS_BLOCKS, 2) + .requires(ModItemTags.MAGNET_INGOTS, 3) + .result(ModBlocks.MAGNETO_ELECTRIC_CORE_BLOCK) + .save(provider); + + PrecisionElectromagneticProcessingRecipe.builder() + .requires(Items.ENDER_PEARL) + .requires(ModItemTags.MAGNET_INGOTS, 2) + .result(ModItems.MAGNET, 2) + .save(provider); + } +} diff --git a/src/main/java/dev/anvilcraft/pigsplus/data/recipe/ProceduralProcessRecipeLoader.java b/src/main/java/dev/anvilcraft/pigsplus/data/recipe/ProceduralProcessRecipeLoader.java new file mode 100644 index 00000000..8a3f91ca --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/data/recipe/ProceduralProcessRecipeLoader.java @@ -0,0 +1,50 @@ +package dev.anvilcraft.pigsplus.data.recipe; + +import dev.anvilcraft.lib.v2.registrum.providers.RegistrumRecipeProvider; +import dev.anvilcraft.lib.v2.util.predicate.BlockStatePredicate; +import dev.anvilcraft.pigsplus.block.PecisionMagneticPivotBlock; +import dev.anvilcraft.pigsplus.init.AddonBlocks; +import dev.dubhe.anvilcraft.AnvilCraft; +import dev.dubhe.anvilcraft.block.state.IrradiatorType; +import dev.dubhe.anvilcraft.init.block.ModBlocks; +import dev.dubhe.anvilcraft.recipe.anvil.procedural.ProceduralProcessRecipeBuilder; +import dev.dubhe.anvilcraft.recipe.anvil.wrap.BlockProcessingRecipe; +import net.minecraft.world.level.block.Block; +import org.jetbrains.annotations.NotNull; + +public class ProceduralProcessRecipeLoader { + public static void init(RegistrumRecipeProvider provider) { + // 时空超算 + ProceduralProcessRecipeBuilder.of(ModBlocks.ADVANCED_COMPARATOR.get()) + .addStep( + fakePrecisionElectromagneticProcessing(ModBlocks.ADVANCED_COMPARATOR.get()) + .result(ModBlocks.WIP_BLOCK.get()) + .buildRecipe() + ) + .addStep( + BlockProcessingRecipe.builder() + .fakeNeutronIrradiation(ModBlocks.WIP_BLOCK.get(), IrradiatorType.TIME) + .result(ModBlocks.WIP_BLOCK.get()) + .buildRecipe() + ) + .addStep( + BlockProcessingRecipe.builder() + .fakeNeutronIrradiation(ModBlocks.WIP_BLOCK.get(), IrradiatorType.SPACE) + .result(ModBlocks.WIP_BLOCK.get()) + .buildRecipe() + ) + .result(ModBlocks.SPACETIME_SUPERCOMPUTER) + .icon(ModBlocks.SPACETIME_SUPERCOMPUTER.asStack()) + .displayedModel(AnvilCraft.of("block/spacetime_supercomputer_wip")) + .save(provider, "spacetime_supercomputer_from_advanced_comparator_with_precision_magnetic_pivot"); + } + + public static BlockProcessingRecipe.@NotNull Builder fakePrecisionElectromagneticProcessing(Block input) { + return BlockProcessingRecipe.builder() + .input(BlockStatePredicate.builder().of(input).build()) + .input(BlockStatePredicate.builder() + .of(AddonBlocks.PRECISION_MAGNETIC_PIVOT.get()) + .with(PecisionMagneticPivotBlock.LIT, true) + .build()); + } +} diff --git a/src/main/java/dev/anvilcraft/pigsplus/data/recipe/RecipeHandler.java b/src/main/java/dev/anvilcraft/pigsplus/data/recipe/RecipeHandler.java index 30c27e09..ee80e7dc 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/data/recipe/RecipeHandler.java +++ b/src/main/java/dev/anvilcraft/pigsplus/data/recipe/RecipeHandler.java @@ -20,6 +20,8 @@ public static void init(RegistrumRecipeProvider provider) { VanillaRecipesLoader.init(provider); SuperHeatingRecipeLoader.init(provider); MultipleToOneSmithingRecipeLoader.init(provider); + PrecisionElectromagneticProcessingLoader.init(provider); + ProceduralProcessRecipeLoader.init(provider); MineralFountainRecipe.builder() diff --git a/src/main/java/dev/anvilcraft/pigsplus/data/recipe/VanillaRecipesLoader.java b/src/main/java/dev/anvilcraft/pigsplus/data/recipe/VanillaRecipesLoader.java index f2bdf6a2..9a55b621 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/data/recipe/VanillaRecipesLoader.java +++ b/src/main/java/dev/anvilcraft/pigsplus/data/recipe/VanillaRecipesLoader.java @@ -6,14 +6,15 @@ import dev.dubhe.anvilcraft.data.AnvilCraftDatagen; import dev.dubhe.anvilcraft.init.item.ModItems; import net.minecraft.data.recipes.RecipeCategory; -import net.minecraft.data.recipes.ShapelessRecipeBuilder; +import net.minecraft.data.recipes.ShapedRecipeBuilder; public class VanillaRecipesLoader { public static void init(RegistrumRecipeProvider provider) { - ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ModItems.CIRCUIT_BOARD, 16) - .requires(ModItems.HARDEND_RESIN) - .requires(ModItems.HARDEND_RESIN) - .requires(AddonItems.KARAKURI_COMPONENT) + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ModItems.CIRCUIT_BOARD, 16) + .pattern("W") + .pattern("R") + .define('W', AddonItems.KARAKURI_COMPONENT) + .define('R', ModItems.HARDEND_RESIN) .unlockedBy("hasitem", AnvilCraftDatagen.has(AddonItems.KARAKURI_COMPONENT)) .save(provider, AnvilCraftPigsPlus.of("circuit_board")); } diff --git a/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java b/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java index e17782e4..10504045 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java +++ b/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java @@ -143,10 +143,11 @@ public class AddonBlocks { .recipe((ctx, provider) -> ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, ctx.get()) .pattern(" A ") .pattern("CMC") - .pattern("CAC") + .pattern("CPC") .define('A', AddonItems.KARAKURI_COMPONENT) .define('C', Blocks.COPPER_BLOCK) .define('M', Blocks.IRON_BLOCK) + .define('P', ModItems.PROCESSOR) .unlockedBy( AnvilCraftDatagen.hasItem(AddonItems.KARAKURI_COMPONENT), AnvilCraftDatagen.has(AddonItems.KARAKURI_COMPONENT) diff --git a/src/main/java/dev/anvilcraft/pigsplus/init/AddonRecipeTypes.java b/src/main/java/dev/anvilcraft/pigsplus/init/AddonRecipeTypes.java new file mode 100644 index 00000000..668bcbaa --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/init/AddonRecipeTypes.java @@ -0,0 +1,39 @@ +package dev.anvilcraft.pigsplus.init; + +import dev.anvilcraft.pigsplus.AnvilCraftPigsPlus; +import dev.anvilcraft.pigsplus.recipe.PrecisionElectromagneticProcessingRecipe; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; + +public class AddonRecipeTypes { + private static final DeferredRegister> RECIPE_TYPES = + DeferredRegister.create(Registries.RECIPE_TYPE, AnvilCraftPigsPlus.MOD_ID); + private static final DeferredRegister> RECIPE_SERIALIZERS = + DeferredRegister.create(Registries.RECIPE_SERIALIZER, AnvilCraftPigsPlus.MOD_ID); + + public static final DeferredHolder, RecipeType> PRECISION_ELECTROMAGNETIC_PROCESSING_TYPE = + registerType("precision_electromagnetic_processing"); + public static final DeferredHolder, RecipeSerializer> PRECISION_ELECTROMAGNETIC_PROCESSING_SERIALIZER = + RECIPE_SERIALIZERS.register("precision_electromagnetic_processing", PrecisionElectromagneticProcessingRecipe.Serializer::new); + + private static > DeferredHolder, RecipeType> registerType(String name) { + return RECIPE_TYPES.register( + name, () -> new RecipeType<>() { + @Override + public String toString() { + return AnvilCraftPigsPlus.of(name).toString(); + } + } + ); + } + + public static void register(IEventBus bus) { + RECIPE_TYPES.register(bus); + RECIPE_SERIALIZERS.register(bus); + } +} diff --git a/src/main/java/dev/anvilcraft/pigsplus/integration/jei/AddonJeiPlugin.java b/src/main/java/dev/anvilcraft/pigsplus/integration/jei/AddonJeiPlugin.java index 228a437b..8aab74a2 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/integration/jei/AddonJeiPlugin.java +++ b/src/main/java/dev/anvilcraft/pigsplus/integration/jei/AddonJeiPlugin.java @@ -2,11 +2,19 @@ import dev.anvilcraft.pigsplus.AnvilCraftPigsPlus; import dev.anvilcraft.pigsplus.init.AddonItems; +import dev.anvilcraft.pigsplus.integration.jei.category.PrecisionElectromagneticProcessingCategory; +import dev.anvilcraft.pigsplus.recipe.PrecisionElectromagneticProcessingRecipe; import mezz.jei.api.IModPlugin; import mezz.jei.api.JeiPlugin; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.helpers.IJeiHelpers; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.registration.IRecipeCatalystRegistration; +import mezz.jei.api.registration.IRecipeCategoryRegistration; import mezz.jei.api.registration.IRecipeRegistration; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.crafting.RecipeHolder; import static dev.anvilcraft.pigsplus.item.KarakuriComponentItem.PROBABILITY; import static dev.anvilcraft.pigsplus.util.EnderComponentConversionUtil.ConversionChance; @@ -14,11 +22,22 @@ @JeiPlugin public class AddonJeiPlugin implements IModPlugin { + public static final RecipeType> PRECISION_ELECTROMAGNETIC_PROCESSING = + createRecipeHolderType("precision_electromagnetic_processing"); + @Override public ResourceLocation getPluginUid() { return AnvilCraftPigsPlus.of("jei_plugin"); } + @Override + public void registerCategories(IRecipeCategoryRegistration registration) { + IJeiHelpers jeiHelpers = registration.getJeiHelpers(); + IGuiHelper guiHelper = jeiHelpers.getGuiHelper(); + + registration.addRecipeCategories(new PrecisionElectromagneticProcessingCategory(guiHelper)); + } + @Override public void registerRecipes(IRecipeRegistration registration) { registration.addItemStackInfo( @@ -30,5 +49,16 @@ public void registerRecipes(IRecipeRegistration registration) { AddonItems.ENDER_COMPONENT.asStack(), Component.translatable("jei.anvilcraft.pigsplus.info.ender_component", ConversionChance * 100) ); + + PrecisionElectromagneticProcessingCategory.registerRecipes(registration); + } + + @Override + public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { + PrecisionElectromagneticProcessingCategory.registerRecipeCatalysts(registration); + } + + private static > RecipeType> createRecipeHolderType(String name) { + return RecipeType.createRecipeHolderType(AnvilCraftPigsPlus.of(name)); } } diff --git a/src/main/java/dev/anvilcraft/pigsplus/integration/jei/category/PrecisionElectromagneticProcessingCategory.java b/src/main/java/dev/anvilcraft/pigsplus/integration/jei/category/PrecisionElectromagneticProcessingCategory.java new file mode 100644 index 00000000..a530a667 --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/integration/jei/category/PrecisionElectromagneticProcessingCategory.java @@ -0,0 +1,254 @@ +package dev.anvilcraft.pigsplus.integration.jei.category; + +import com.mojang.blaze3d.vertex.PoseStack; +import dev.anvilcraft.pigsplus.init.AddonBlocks; +import dev.anvilcraft.pigsplus.init.AddonRecipeTypes; +import dev.anvilcraft.pigsplus.integration.jei.AddonJeiPlugin; +import dev.anvilcraft.pigsplus.recipe.PrecisionElectromagneticProcessingRecipe; +import dev.dubhe.anvilcraft.client.support.RenderSupport; +import dev.dubhe.anvilcraft.init.block.ModBlocks; +import dev.dubhe.anvilcraft.integration.jei.AnvilCraftJeiPlugin; +import dev.dubhe.anvilcraft.integration.jei.drawable.DrawableBlockStateIcon; +import dev.dubhe.anvilcraft.integration.jei.util.JeiRecipeUtil; +import dev.dubhe.anvilcraft.integration.jei.util.JeiRenderHelper; +import dev.dubhe.anvilcraft.integration.jei.util.JeiSlotUtil; +import dev.dubhe.anvilcraft.util.CauldronUtil; +import mezz.jei.api.gui.ITickTimer; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.builder.ITooltipBuilder; +import mezz.jei.api.gui.drawable.IDrawable; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.helpers.IGuiHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.RecipeType; +import mezz.jei.api.recipe.category.IRecipeCategory; +import mezz.jei.api.registration.IRecipeCatalystRegistration; +import mezz.jei.api.registration.IRecipeRegistration; +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.RecipeHolder; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; + +public class PrecisionElectromagneticProcessingCategory implements IRecipeCategory> { + public static final int WIDTH = 162; + public static final int HEIGHT = 64; + + private final IDrawable slotDefault; + private final IDrawable slotProbability; + private final Component title; + private final ITickTimer timer; + private final IDrawable arrowIn; + private final IDrawable arrowOut; + + public PrecisionElectromagneticProcessingCategory(IGuiHelper helper) { + slotDefault = JeiRenderHelper.getSlotDefault(helper); + slotProbability = JeiRenderHelper.getSlotProbability(helper); + title = Component.translatable("gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing"); + timer = helper.createTickTimer(30, 60, true); + arrowIn = JeiRenderHelper.getArrowInput(helper); + arrowOut = JeiRenderHelper.getArrowOutput(helper); + } + + @Override + public RecipeType> getRecipeType() { + return AddonJeiPlugin.PRECISION_ELECTROMAGNETIC_PROCESSING; + } + + @Override + public Component getTitle() { + return title; + } + + @Override + public int getWidth() { + return WIDTH; + } + + @Override + public int getHeight() { + return HEIGHT; + } + + @Override + public @Nullable IDrawable getIcon() { + return new DrawableBlockStateIcon( + Blocks.CAULDRON.defaultBlockState(), + AddonBlocks.PRECISION_MAGNETIC_PIVOT.getDefaultState() + ); + } + + @Override + public void setRecipe( + IRecipeLayoutBuilder builder, RecipeHolder recipeHolder, IFocusGroup focuses) { + PrecisionElectromagneticProcessingRecipe recipe = recipeHolder.value(); + JeiSlotUtil.addInputSlots(builder, recipe.getInputItems()); + if (!recipe.getResultItems().isEmpty()) { + JeiSlotUtil.addOutputSlots(builder, recipe.getResultItems()); + } + } + + @Override + public void draw( + RecipeHolder recipeHolder, + IRecipeSlotsView recipeSlotsView, + GuiGraphics guiGraphics, + double mouseX, + double mouseY + ) { + PrecisionElectromagneticProcessingRecipe recipe = recipeHolder.value(); + float anvilYOffset = JeiRenderHelper.getAnvilAnimationOffset(timer); + RenderSupport.renderBlock( + guiGraphics, + Blocks.ANVIL.defaultBlockState(), + 81, + 12 + anvilYOffset, + 20, + 12, + RenderSupport.SINGLE_BLOCK + ); + Block material = recipe.getHasCauldron().getFluidCauldron(); + RenderSupport.renderBlock( + guiGraphics, + CauldronUtil.fullState(material), + 81, + 30, + 10, + 12, + RenderSupport.SINGLE_BLOCK + ); + + RenderSupport.renderBlock( + guiGraphics, + AddonBlocks.PRECISION_MAGNETIC_PIVOT.getDefaultState(), + 81, + 40, + 0, + 12, + RenderSupport.SINGLE_BLOCK + ); + + if (!recipe.getInputItems().isEmpty()) { + arrowIn.draw(guiGraphics, 54, 20); + } + arrowOut.draw(guiGraphics, 92, 19); + + JeiSlotUtil.drawInputSlots(guiGraphics, slotDefault, recipe.getInputItems().size()); + if (!recipe.getResultItems().isEmpty()) { + if (JeiRecipeUtil.isChance(recipe.getResultItems())) { + JeiSlotUtil.drawOutputSlots(guiGraphics, slotProbability, recipe.getResultItems().size()); + } else { + JeiSlotUtil.drawOutputSlots(guiGraphics, slotDefault, recipe.getResultItems().size()); + } + if (recipe.isConsumeFluid()) { + PoseStack pose = guiGraphics.pose(); + pose.pushPose(); + pose.scale(0.8f, 0.8f, 1.0f); + guiGraphics.drawString( + Minecraft.getInstance().font, + Component.translatable( + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.consume_fluid", + recipe.getHasCauldron().consume(), + material.getName() + ), + 0, + 70, + 0xFF000000, + false + ); + pose.popPose(); + } else if (recipe.isProduceFluid()) { + PoseStack pose = guiGraphics.pose(); + pose.pushPose(); + pose.scale(0.8f, 0.8f, 1.0f); + guiGraphics.drawString( + Minecraft.getInstance().font, + Component.translatable( + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.produce_fluid", + recipe.getHasCauldron().produce(), + recipe.getHasCauldron().getTransformCauldron().getName() + ), + 0, + 70, + 0xFF000000, + false + ); + pose.popPose(); + } + } else { + Block result = recipe.getHasCauldron().getTransformCauldron(); + BlockState cauldronState; + if (recipe.isConsumeFluid()) { + cauldronState = CauldronUtil.getStateFromContentAndLevel(result, CauldronUtil.maxLevel(result) - 1); + } else if (recipe.isProduceFluid()) { + cauldronState = CauldronUtil.getStateFromContentAndLevel(result, 1); + } else { + cauldronState = recipe.getHasCauldron().getTransformCauldron().defaultBlockState(); + } + RenderSupport.renderBlock(guiGraphics, cauldronState, 133, 30, 0, 12, RenderSupport.SINGLE_BLOCK); + } + } + + @Override + public void getTooltip( + ITooltipBuilder tooltip, + RecipeHolder recipeHolder, + IRecipeSlotsView recipeSlotsView, + double mouseX, + double mouseY + ) { + PrecisionElectromagneticProcessingRecipe recipe = recipeHolder.value(); + if (mouseX >= 72 && mouseX <= 90) { + if (mouseY >= 24 && mouseY <= 43) { + Component text; + if (recipe.isProduceFluid()) { + text = Blocks.CAULDRON.getName(); + } else { + text = recipe.getHasCauldron().getFluidCauldron().getName(); + } + tooltip.add(text); + } + if (mouseY >= 34 && mouseY <= 53) { + tooltip.add(AddonBlocks.PRECISION_MAGNETIC_PIVOT.get().getName()); + tooltip.add(Component.translatable("gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.need_activated") + .withStyle(ChatFormatting.RED)); + } + } + if (mouseX >= 124 && mouseX <= 140) { + if (mouseY >= 24 && mouseY <= 42) { + Component text; + if (recipe.getResultItems().isEmpty()) { + if (recipe.isConsumeFluid() && CauldronUtil.maxLevel(recipe.getHasCauldron().getTransformCauldron()) <= 1) { + text = Blocks.CAULDRON.getName(); + } else { + text = recipe.getHasCauldron().getTransformCauldron().getName(); + } + tooltip.add(text); + } + } + } + } + + public static void registerRecipes(IRecipeRegistration registration) { + registration.addRecipes( + AddonJeiPlugin.PRECISION_ELECTROMAGNETIC_PROCESSING, + JeiRecipeUtil.getRecipeHoldersFromType(AddonRecipeTypes.PRECISION_ELECTROMAGNETIC_PROCESSING_TYPE.get()) + ); + } + + public static void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { + AnvilCraftJeiPlugin.addAnvilProcessingCatalysts(registration, AnvilCraftJeiPlugin.TIME_WARP); + registration.addRecipeCatalyst(new ItemStack(Items.CAULDRON), AnvilCraftJeiPlugin.TIME_WARP); + registration.addRecipeCatalyst(new ItemStack(ModBlocks.FISH_TANK), AnvilCraftJeiPlugin.TIME_WARP); + registration.addRecipeCatalyst( + new ItemStack(AddonBlocks.PRECISION_MAGNETIC_PIVOT.get()), + AddonJeiPlugin.PRECISION_ELECTROMAGNETIC_PROCESSING + ); + } +} diff --git a/src/main/java/dev/anvilcraft/pigsplus/integration/jei/category/package-info.java b/src/main/java/dev/anvilcraft/pigsplus/integration/jei/category/package-info.java new file mode 100644 index 00000000..d5bcecb1 --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/integration/jei/category/package-info.java @@ -0,0 +1,3 @@ +@net.minecraft.MethodsReturnNonnullByDefault +@javax.annotation.ParametersAreNonnullByDefault +package dev.anvilcraft.pigsplus.integration.jei.category; \ No newline at end of file diff --git a/src/main/java/dev/anvilcraft/pigsplus/recipe/PrecisionElectromagneticProcessingRecipe.java b/src/main/java/dev/anvilcraft/pigsplus/recipe/PrecisionElectromagneticProcessingRecipe.java new file mode 100644 index 00000000..27c1410f --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/recipe/PrecisionElectromagneticProcessingRecipe.java @@ -0,0 +1,265 @@ +package dev.anvilcraft.pigsplus.recipe; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import dev.anvilcraft.lib.v2.util.predicate.BlockStatePredicate; +import dev.anvilcraft.lib.v2.util.predicate.ChanceItemStack; +import dev.anvilcraft.lib.v2.util.predicate.ItemIngredientPredicate; +import dev.anvilcraft.pigsplus.block.PecisionMagneticPivotBlock; +import dev.anvilcraft.pigsplus.init.AddonBlocks; +import dev.anvilcraft.pigsplus.init.AddonRecipeTypes; +import dev.dubhe.anvilcraft.recipe.anvil.predicate.block.HasCauldron; +import dev.dubhe.anvilcraft.recipe.anvil.util.WrapUtils; +import dev.dubhe.anvilcraft.recipe.anvil.wrap.AbstractProcessRecipe; +import dev.dubhe.anvilcraft.recipe.component.HasCauldronSimple; +import lombok.Getter; +import net.minecraft.core.Vec3i; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.phys.Vec3; + +import java.util.List; + +/** + * 精密电磁加工配方 + * + *

该配方用于在铁砧下落时产生精密电磁加工效果,需要在铁砧下方放置激活的精密磁枢作为触发条件

+ */ +@SuppressWarnings("unused") +@Getter +public class PrecisionElectromagneticProcessingRecipe extends AbstractProcessRecipe { + /** + * 构造一个精密电磁加工配方 + * + * @param itemIngredients 物品原料列表 + * @param results 结果物品列表 + * @param hasCauldron 炼药锅条件 + */ + public PrecisionElectromagneticProcessingRecipe( + List itemIngredients, + List results, + HasCauldronSimple hasCauldron + ) { + super( + new Property() + .setItemInputOffset(new Vec3(0.0, -0.375, 0.0)) + .setItemInputRange(new Vec3(0.75, 0.75, 0.75)) + .setInputItems(itemIngredients) + .setItemOutputOffset(new Vec3(0.0, -0.75, 0.0)) + .setResultItems(results) + .setCauldronOffset(new Vec3i(0, -1, 0)) + .setHasCauldron(hasCauldron) + .setBlockInputOffset(new Vec3i(0, -2, 0)) + .setInputBlocks( + BlockStatePredicate.builder() + .of(AddonBlocks.PRECISION_MAGNETIC_PIVOT.get()) + .with(PecisionMagneticPivotBlock.LIT, true) + .build() + ) + ); + } + + @Override + public RecipeSerializer getSerializer() { + return AddonRecipeTypes.PRECISION_ELECTROMAGNETIC_PROCESSING_SERIALIZER.get(); + } + + @Override + public RecipeType getType() { + return AddonRecipeTypes.PRECISION_ELECTROMAGNETIC_PROCESSING_TYPE.get(); + } + + /** + * 创建一个构建器实例 + * + * @return 构建器实例 + */ + public static Builder builder() { + return new Builder(); + } + + /** + * 是否消耗流体 + * + * @return 如果消耗流体返回true,否则返回false + */ + public boolean isConsumeFluid() { + HasCauldronSimple hasCauldron = this.getHasCauldron(); + return HasCauldron.isNotEmpty(hasCauldron.fluid()) && this.getHasCauldron().consume() > 0; + } + + /** + * 是否产生流体 + * + * @return 如果产生流体返回true,否则返回false + */ + public boolean isProduceFluid() { + HasCauldronSimple hasCauldron = this.getHasCauldron(); + return HasCauldron.isNotEmpty(hasCauldron.transform()) && this.getHasCauldron().produce() > 0; + } + + /** + * 精密电磁加工配方序列化器 + */ + public static class Serializer implements RecipeSerializer { + /** + * 编解码器 + */ + private static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + ItemIngredientPredicate.CODEC.listOf() + .optionalFieldOf("ingredients", List.of()) + .forGetter(PrecisionElectromagneticProcessingRecipe::getInputItems), + ChanceItemStack.CODEC.listOf() + .optionalFieldOf("results", List.of()) + .forGetter(PrecisionElectromagneticProcessingRecipe::getResultItems), + HasCauldronSimple.CODEC + .forGetter(PrecisionElectromagneticProcessingRecipe::getHasCauldron) + ).apply(instance, PrecisionElectromagneticProcessingRecipe::new)); + + /** + * 流编解码器 + */ + private static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ItemIngredientPredicate.STREAM_CODEC.apply(ByteBufCodecs.list()), + PrecisionElectromagneticProcessingRecipe::getInputItems, + ChanceItemStack.STREAM_CODEC.apply(ByteBufCodecs.list()), + PrecisionElectromagneticProcessingRecipe::getResultItems, + HasCauldronSimple.STREAM_CODEC, + PrecisionElectromagneticProcessingRecipe::getHasCauldron, + PrecisionElectromagneticProcessingRecipe::new + ); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + } + + /** + * 精密电磁加工配方构建器 + */ + public static class Builder extends SimpleAbstractBuilder { + /** + * 炼药锅条件构建器 + */ + HasCauldronSimple.Builder hasCauldron = HasCauldronSimple.empty(); + + /** + * 设置流体 + * + * @param fluid 流体ID + * @return 构建器实例 + */ + public Builder fluid(ResourceLocation fluid) { + this.hasCauldron.fluid(fluid); + return this; + } + + /** + * 设置炼药锅方块 + * + * @param cauldron 炼药锅方块 + * @return 构建器实例 + */ + public Builder fluid(Block cauldron) { + return this.fluid(WrapUtils.cauldron2Fluid(cauldron)); + } + + /** + * 设置转换后的流体 + * + * @param transform 转换后的流体ID + * @return 构建器实例 + */ + public Builder transform(ResourceLocation transform) { + this.hasCauldron.transform(transform); + return this; + } + + /** + * 设置转换后的炼药锅方块 + * + * @param cauldron 转换后的炼药锅方块 + * @return 构建器实例 + */ + public Builder transform(Block cauldron) { + return this.transform(WrapUtils.cauldron2Fluid(cauldron)); + } + + /** + * 设置消耗量 + * + * @param consume 消耗量 + * @return 构建器实例 + */ + public Builder consume(int consume) { + this.hasCauldron.consume(consume); + return this; + } + + /** + * 设置产生量 + * + * @param produce 产生量 + * @return 构建器实例 + */ + public Builder produce(int produce) { + this.hasCauldron.produce(produce); + return this; + } + + /** + * 设置需要点燃锅 + * + * @return 构建器实例 + */ + public Builder ignite() { + this.hasCauldron.ignite(); + return this; + } + + @Override + protected PrecisionElectromagneticProcessingRecipe of( + List itemIngredients, + List results + ) { + return new PrecisionElectromagneticProcessingRecipe( + itemIngredients, + results, + this.hasCauldron.build() + ); + } + + @Override + public void validate(ResourceLocation id) { + HasCauldronSimple hasCauldronSimple = this.hasCauldron.build(); + if (itemIngredients.isEmpty() + && ( + hasCauldronSimple.fluid().equals(HasCauldron.EMPTY) + || hasCauldronSimple.fluid().equals(HasCauldron.NULL) + )) { + throw new IllegalArgumentException("Recipe input must not be empty, RecipeId: " + id); + } + } + + @Override + public String getType() { + return "precision_electromagnetic_processing"; + } + + @Override + protected Builder getThis() { + return this; + } + } +} diff --git a/src/main/java/dev/anvilcraft/pigsplus/recipe/package-info.java b/src/main/java/dev/anvilcraft/pigsplus/recipe/package-info.java new file mode 100644 index 00000000..e5e1b4e8 --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/recipe/package-info.java @@ -0,0 +1,3 @@ +@net.minecraft.MethodsReturnNonnullByDefault +@javax.annotation.ParametersAreNonnullByDefault +package dev.anvilcraft.pigsplus.recipe; \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_precision_magnetic_pivot.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_precision_magnetic_pivot.md new file mode 100644 index 00000000..7452d67d --- /dev/null +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_precision_magnetic_pivot.md @@ -0,0 +1,44 @@ +--- +navigation: + title: "§2Precision Magnetic Pivot" + icon: "anvilcraft_pigsplus:precision_magnetic_pivot" +items: + - anvilcraft_pigsplus:precision_magnetic_pivot +--- + +# + +> A poor imitation of Factorio's electromagnetic plant — but it does imitate the electromagnetic plant + + + +# Operation + +- Uses a special activation method: rub (Magnet Blocks) around the four sides of +- Rub the four sides **horizontally** in clockwise or counterclockwise order to enter a 2-second working state +- If the rubbing order is incorrect, the sequence resets + +# Charge + +- Rubbing the 1st, 2nd, 3rd, and 4th sides generates 2, 4, 8, and 16 charges respectively +- Completing a full rubbing cycle generates an additional 64 charges +- Charges can be collected using + +# Recipes + +An activated can perform *Precision Electromagnetic Processing* + + + + + + + + + + + + + + + diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_precision_magnetic_pivot.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_precision_magnetic_pivot.md new file mode 100644 index 00000000..45ac1d69 --- /dev/null +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_precision_magnetic_pivot.md @@ -0,0 +1,44 @@ +--- +navigation: + title: "§2精密磁枢" + icon: "anvilcraft_pigsplus:precision_magnetic_pivot" +items: + - anvilcraft_pigsplus:precision_magnetic_pivot +--- + +# + +> 对《factorio》电磁工厂的拙劣模仿,但模仿的是电磁工厂 + + + +# 工作 + +- 采用特殊方式启动:使用(磁铁方块)绕的四周进行摩擦 +- 按顺时针或逆时针顺序,**水平摩擦**四个面后,进入持续 2s 的工作状态 +- 如果摩擦顺序不对,会重新结算 + +# 电荷 + +- 摩擦到第1、2、3、4个面时,分别产生2、4、8、16个电荷 +- 如果完成一个摩擦周期,还会额外产生64个电荷 +- 可用收集这些电荷 + +# 配方 + +激活的可进行*精密电磁加工* + + + + + + + + + + + + + + + diff --git a/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json b/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json index b4933a39..d1ae1e08 100644 --- a/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json +++ b/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json @@ -63,6 +63,10 @@ "itemGroup.anvilcraft_pigsplus.addon_items": "铁砧工艺:猪+", "jei.anvilcraft.pigsplus.info.ender_component": "将机巧部件丢入末地传送门,有%.0f%%概率获得", "jei.anvilcraft.pigsplus.info.spiritual_component": "携带附魔的机巧部件被摧毁时,每条附魔提供%.0f%%的概率,生成最多一个灵媒部件", + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing": "精密电磁加工", + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.consume_fluid": "消耗:%1$d mB 的 %2$s", + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.produce_fluid": "产出:%1$d mB 的 %2$s", + "gui.anvilcraft_pigsplus.category.precision_electromagnetic_processing.need_activated": "需要激活的", "tooltip.anvilcraft_pigsplus.enchanted_generator.decrease_rate": "XP减免: %s", "tooltip.anvilcraft_pigsplus.menger_sponge_staff": "清除一大片液体", "tooltip.anvilcraft_pigsplus.portable_wireless_charger": "放在背包里,消耗 %d kW 以生产 %d FE/t", From 11ae35826ba66488220b0ab68ac178042f405096 Mon Sep 17 00:00:00 2001 From: TBPig <147127248+TBPig@users.noreply.github.com> Date: Mon, 20 Jul 2026 11:20:00 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=89=8B=E5=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../100_karakuri_component.md | 0 .../101_block_breaker.md | 0 .../101_precision_magnetic_pivot.md | 0 .../101_redstone_conduit.md | 0 .../102_auto_chicken.md | 0 .../102_auto_machine.md | 0 .../102_void_catalyst.md | 0 .../105_power_converter.md | 0 .../109_experience_interface.md | 0 .../110_budding_echo_shard.md | 0 .../200_spiritual_component.md | 0 .../201_sculk_extractor.md | 0 .../205_enchanted_generator.md | 0 .../210_ender_component.md | 0 .../215_chaotic_raw_ore.md | 0 .../311_electric_enchanting_table.md | 0 .../100_pigsplus_automation_components/index.md | 11 +++++++++++ .../005_weak_resin_block.md | 0 .../101_chain_smithing_table.md | 0 .../202_menger_sponge_staff.md | 6 +----- .../312_menger_sponge_staff.md | 15 +++++++++++++++ .../index.md | 3 ++- .../100_karakuri_component.md | 0 .../101_block_breaker.md | 0 .../101_precision_magnetic_pivot.md | 0 .../101_redstone_conduit.md | 0 .../102_auto_chicken.md | 0 .../102_auto_machine.md | 0 .../102_void_catalyst.md | 0 .../105_power_converter.md | 0 .../109_experience_interface.md | 0 .../110_budding_echo_shard.md | 0 .../200_spiritual_component.md | 0 .../201_sculk_extractor.md | 0 .../205_enchanted_generator.md | 0 .../210_ender_component.md | 0 .../215_chaotic_raw_ore.md | 0 .../311_electric_enchanting_table.md | 0 .../100_pigsplus_automation_components/index.md | 11 +++++++++++ .../005_weak_resin_block.md | 0 .../101_chain_smithing_table.md | 0 .../202_menger_sponge_staff.md | 6 +----- .../312_menger_sponge_staff.md | 15 +++++++++++++++ .../index.md | 4 +++- 44 files changed, 59 insertions(+), 12 deletions(-) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/100_karakuri_component.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/101_block_breaker.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/101_precision_magnetic_pivot.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/101_redstone_conduit.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/102_auto_chicken.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/102_auto_machine.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/102_void_catalyst.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/105_power_converter.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/109_experience_interface.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/110_budding_echo_shard.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/200_spiritual_component.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/201_sculk_extractor.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/205_enchanted_generator.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/210_ender_component.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/215_chaotic_raw_ore.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/311_electric_enchanting_table.md (100%) create mode 100644 src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/index.md rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_building_props}/005_weak_resin_block.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_building_props}/101_chain_smithing_table.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_building_props}/202_menger_sponge_staff.md (75%) create mode 100644 src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_building_props/312_menger_sponge_staff.md rename src/main/resources/assets/anvilcraft/ageratum/en_us/{100_anvilcraft_pigsplus => 100_pigsplus_building_props}/index.md (73%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/100_karakuri_component.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/101_block_breaker.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/101_precision_magnetic_pivot.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/101_redstone_conduit.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/102_auto_chicken.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/102_auto_machine.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/102_void_catalyst.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/105_power_converter.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/109_experience_interface.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/110_budding_echo_shard.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/200_spiritual_component.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/201_sculk_extractor.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/205_enchanted_generator.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/210_ender_component.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/215_chaotic_raw_ore.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_automation_components}/311_electric_enchanting_table.md (100%) create mode 100644 src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/index.md rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_building_props}/005_weak_resin_block.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_building_props}/101_chain_smithing_table.md (100%) rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_building_props}/202_menger_sponge_staff.md (75%) create mode 100644 src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_building_props/312_menger_sponge_staff.md rename src/main/resources/assets/anvilcraft/ageratum/zh_cn/{100_anvilcraft_pigsplus => 100_pigsplus_building_props}/index.md (77%) diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/100_karakuri_component.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/100_karakuri_component.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/100_karakuri_component.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/100_karakuri_component.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_block_breaker.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/101_block_breaker.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_block_breaker.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/101_block_breaker.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_precision_magnetic_pivot.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/101_precision_magnetic_pivot.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_precision_magnetic_pivot.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/101_precision_magnetic_pivot.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_redstone_conduit.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/101_redstone_conduit.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_redstone_conduit.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/101_redstone_conduit.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/102_auto_chicken.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/102_auto_chicken.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/102_auto_chicken.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/102_auto_chicken.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/102_auto_machine.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/102_auto_machine.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/102_auto_machine.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/102_auto_machine.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/102_void_catalyst.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/102_void_catalyst.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/102_void_catalyst.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/102_void_catalyst.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/105_power_converter.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/105_power_converter.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/105_power_converter.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/105_power_converter.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/109_experience_interface.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/109_experience_interface.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/109_experience_interface.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/109_experience_interface.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/110_budding_echo_shard.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/110_budding_echo_shard.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/110_budding_echo_shard.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/110_budding_echo_shard.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/200_spiritual_component.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/200_spiritual_component.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/200_spiritual_component.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/200_spiritual_component.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/201_sculk_extractor.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/201_sculk_extractor.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/201_sculk_extractor.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/201_sculk_extractor.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/205_enchanted_generator.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/205_enchanted_generator.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/205_enchanted_generator.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/205_enchanted_generator.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/210_ender_component.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/210_ender_component.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/210_ender_component.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/210_ender_component.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/215_chaotic_raw_ore.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/215_chaotic_raw_ore.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/215_chaotic_raw_ore.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/215_chaotic_raw_ore.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/311_electric_enchanting_table.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/311_electric_enchanting_table.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/311_electric_enchanting_table.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/311_electric_enchanting_table.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/index.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/index.md new file mode 100644 index 00000000..4b737374 --- /dev/null +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_automation_components/index.md @@ -0,0 +1,11 @@ +--- +navigation: + title: "Pigs+ Automation Components" + icon: "anvilcraft_pigsplus:karakuri_component" +--- + +# AnvilCraft: Pigs+ + +Hello! This is Da Zhu. AnvilCraft: Pigs+ aims to add more blocks and machines, making AnvilCraft more convenient and fun to play. + +This chapter introduces various automation components diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/005_weak_resin_block.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_building_props/005_weak_resin_block.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/005_weak_resin_block.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_building_props/005_weak_resin_block.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_chain_smithing_table.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_building_props/101_chain_smithing_table.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/101_chain_smithing_table.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_building_props/101_chain_smithing_table.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/202_menger_sponge_staff.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_building_props/202_menger_sponge_staff.md similarity index 75% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/202_menger_sponge_staff.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_building_props/202_menger_sponge_staff.md index 86358738..ea684420 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/202_menger_sponge_staff.md +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_building_props/202_menger_sponge_staff.md @@ -6,11 +6,7 @@ items: - anvilcraft_pigsplus:menger_sponge_staff --- -# Menger Sponge Staff - - - -# Crafting +# diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_building_props/312_menger_sponge_staff.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_building_props/312_menger_sponge_staff.md new file mode 100644 index 00000000..e9984ef2 --- /dev/null +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_building_props/312_menger_sponge_staff.md @@ -0,0 +1,15 @@ +--- +navigation: + title: "§5Menger Sponge Holy Staff" + icon: "anvilcraft_pigsplus:menger_sponge_holy_staff" +items: + - anvilcraft_pigsplus:menger_sponge_holy_staff +--- + +# + + + +# Function + +Right-click a block to clear nearby liquids, and creates a that lasts for 10s diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/index.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_building_props/index.md similarity index 73% rename from src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/index.md rename to src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_building_props/index.md index 4bf6e830..2e3bee60 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/en_us/100_anvilcraft_pigsplus/index.md +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/100_pigsplus_building_props/index.md @@ -1,6 +1,6 @@ --- navigation: - title: "AnvilCraft: Pigs+" + title: "Pigs+ Building Props" icon: "anvilcraft_pigsplus:karakuri_component" --- @@ -8,3 +8,4 @@ navigation: Hello! This is Da Zhu. AnvilCraft: Pigs+ aims to add more blocks and machines, making AnvilCraft more convenient and fun to play. +This chapter introduces various building props diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/100_karakuri_component.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/100_karakuri_component.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/100_karakuri_component.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/100_karakuri_component.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_block_breaker.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/101_block_breaker.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_block_breaker.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/101_block_breaker.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_precision_magnetic_pivot.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/101_precision_magnetic_pivot.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_precision_magnetic_pivot.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/101_precision_magnetic_pivot.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_redstone_conduit.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/101_redstone_conduit.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_redstone_conduit.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/101_redstone_conduit.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_auto_chicken.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/102_auto_chicken.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_auto_chicken.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/102_auto_chicken.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_auto_machine.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/102_auto_machine.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_auto_machine.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/102_auto_machine.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_void_catalyst.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/102_void_catalyst.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/102_void_catalyst.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/102_void_catalyst.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/105_power_converter.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/105_power_converter.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/105_power_converter.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/105_power_converter.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/109_experience_interface.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/109_experience_interface.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/109_experience_interface.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/109_experience_interface.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/110_budding_echo_shard.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/110_budding_echo_shard.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/110_budding_echo_shard.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/110_budding_echo_shard.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/200_spiritual_component.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/200_spiritual_component.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/200_spiritual_component.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/200_spiritual_component.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/201_sculk_extractor.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/201_sculk_extractor.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/201_sculk_extractor.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/201_sculk_extractor.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/205_enchanted_generator.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/205_enchanted_generator.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/205_enchanted_generator.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/205_enchanted_generator.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/210_ender_component.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/210_ender_component.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/210_ender_component.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/210_ender_component.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/215_chaotic_raw_ore.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/215_chaotic_raw_ore.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/215_chaotic_raw_ore.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/215_chaotic_raw_ore.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/311_electric_enchanting_table.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/311_electric_enchanting_table.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/311_electric_enchanting_table.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/311_electric_enchanting_table.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/index.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/index.md new file mode 100644 index 00000000..a5d37e73 --- /dev/null +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_automation_components/index.md @@ -0,0 +1,11 @@ +--- +navigation: + title: "猪+自动化元件" + icon: "anvilcraft_pigsplus:karakuri_component" +--- + +# 铁砧工艺:猪+ + +你好!这里是大猪。《铁砧工艺:猪+》旨在添加更多方块和机器,让玩家游玩铁砧工艺更加方便有趣。 + +这一章节介绍各种自动化元件 diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/005_weak_resin_block.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_building_props/005_weak_resin_block.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/005_weak_resin_block.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_building_props/005_weak_resin_block.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_chain_smithing_table.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_building_props/101_chain_smithing_table.md similarity index 100% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/101_chain_smithing_table.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_building_props/101_chain_smithing_table.md diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/202_menger_sponge_staff.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_building_props/202_menger_sponge_staff.md similarity index 75% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/202_menger_sponge_staff.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_building_props/202_menger_sponge_staff.md index be1d5b25..db9c11bf 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/202_menger_sponge_staff.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_building_props/202_menger_sponge_staff.md @@ -6,11 +6,7 @@ items: - anvilcraft_pigsplus:menger_sponge_staff --- -# 门格海绵杖 - - - -# 合成 +# diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_building_props/312_menger_sponge_staff.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_building_props/312_menger_sponge_staff.md new file mode 100644 index 00000000..a0f632d1 --- /dev/null +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_building_props/312_menger_sponge_staff.md @@ -0,0 +1,15 @@ +--- +navigation: + title: "§5门格海绵神杖" + icon: "anvilcraft_pigsplus:menger_sponge_holy_staff" +items: + - anvilcraft_pigsplus:menger_sponge_holy_staff +--- + +# + + + +# 功能 + +右键方块清除周围的液体,还能生成一个存在 10s 的 \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/index.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_building_props/index.md similarity index 77% rename from src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/index.md rename to src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_building_props/index.md index 50467027..addb1b9c 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_anvilcraft_pigsplus/index.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/100_pigsplus_building_props/index.md @@ -1,9 +1,11 @@ --- navigation: - title: "铁砧工艺:猪+" + title: "猪+建设道具" icon: "anvilcraft_pigsplus:karakuri_component" --- # 铁砧工艺:猪+ 你好!这里是大猪。《铁砧工艺:猪+》旨在添加更多方块和机器,让玩家游玩铁砧工艺更加方便有趣。 + +这一章节介绍各种建设道具