1
1

2 Ревизии 67c435456e ... d84d1c0ff5

Автор SHA1 Съобщение Дата
  husj d84d1c0ff5 修改样式 преди 3 дни
  husj f8605dbf7f 修改为右键交互 преди 3 дни

+ 1 - 1
src/main/java/com/husj/ModBlocks.java

@@ -17,7 +17,7 @@ import net.minecraft.util.Identifier;
 
 public class ModBlocks {
     public static final Block DISASSEMBLER_BLOCK = registerBlock("disassembler",
-            DisassemblerBlock::new, AbstractBlock.Settings.copy(Blocks.IRON_BLOCK).nonOpaque());
+            DisassemblerBlock::new, AbstractBlock.Settings.copy(Blocks.IRON_BLOCK).nonOpaque().requiresTool());
 
     public static final BlockEntityType<DisassemblerBlockEntity> DISASSEMBLER_BLOCK_ENTITY = Registry.register(
             Registries.BLOCK_ENTITY_TYPE,

+ 24 - 0
src/main/java/com/husj/ModItemGroups.java

@@ -0,0 +1,24 @@
+package com.husj;
+
+import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
+import net.minecraft.item.ItemGroup;
+import net.minecraft.item.ItemStack;
+import net.minecraft.registry.Registries;
+import net.minecraft.registry.Registry;
+import net.minecraft.text.Text;
+import net.minecraft.util.Identifier;
+
+public class ModItemGroups {
+    public static final ItemGroup HUSJ_GROUP = Registry.register(Registries.ITEM_GROUP,
+            Identifier.of(Husj.MOD_ID, "husj_group"),
+            FabricItemGroup.builder()
+                    .displayName(Text.translatable("itemgroup.husj"))
+                    .icon(() -> new ItemStack(ModBlocks.DISASSEMBLER_BLOCK))
+                    .entries((displayContext, entries) -> {
+                        entries.add(ModBlocks.DISASSEMBLER_BLOCK);
+                    }).build());
+
+    public static void registerItemGroups() {
+        Husj.LOGGER.info("Registering Item Groups for " + Husj.MOD_ID);
+    }
+}

+ 82 - 9
src/main/java/com/husj/block/DisassemblerBlock.java

@@ -39,19 +39,19 @@ public class DisassemblerBlock extends BlockWithEntity {
 
             // 检查是否可以拆解
             if (!heldItem.isEmpty() && com.husj.recipe.DisassemblerRecipes.hasRecipe(heldItem)) {
-                // 获取拆解结果
+
+                // 检查是否为下界合金装备(特殊处理)
+                if (isNetheriteItem(heldItem)) {
+                    disassembleNetheriteItem(world, pos, player, heldItem);
+                    return ActionResult.SUCCESS;
+                }
+
+                // 普通拆解逻辑
                 net.minecraft.item.ItemStack result = com.husj.recipe.DisassemblerRecipes.getRecipeResult(heldItem);
 
                 if (!result.isEmpty()) {
                     // 在方块上方生成掉落物
-                    net.minecraft.entity.ItemEntity itemEntity = new net.minecraft.entity.ItemEntity(
-                            world,
-                            pos.getX() + 0.5,
-                            pos.getY() + 1.0,
-                            pos.getZ() + 0.5,
-                            result.copy());
-                    itemEntity.setToDefaultPickupDelay();
-                    world.spawnEntity(itemEntity);
+                    spawnItemDrop(world, pos, result.copy());
 
                     // 消耗玩家手中的物品
                     if (!player.isCreative()) {
@@ -70,4 +70,77 @@ public class DisassemblerBlock extends BlockWithEntity {
         return ActionResult.CONSUME;
     }
 
+    private boolean isNetheriteItem(net.minecraft.item.ItemStack stack) {
+        net.minecraft.item.Item item = stack.getItem();
+        return item == net.minecraft.item.Items.NETHERITE_SWORD ||
+                item == net.minecraft.item.Items.NETHERITE_PICKAXE ||
+                item == net.minecraft.item.Items.NETHERITE_AXE ||
+                item == net.minecraft.item.Items.NETHERITE_SHOVEL ||
+                item == net.minecraft.item.Items.NETHERITE_HOE ||
+                item == net.minecraft.item.Items.NETHERITE_HELMET ||
+                item == net.minecraft.item.Items.NETHERITE_CHESTPLATE ||
+                item == net.minecraft.item.Items.NETHERITE_LEGGINGS ||
+                item == net.minecraft.item.Items.NETHERITE_BOOTS;
+    }
+
+    private void disassembleNetheriteItem(World world, BlockPos pos, PlayerEntity player,
+            net.minecraft.item.ItemStack heldItem) {
+        net.minecraft.item.Item item = heldItem.getItem();
+
+        // 1. 下界合金升级模板
+        spawnItemDrop(world, pos,
+                new net.minecraft.item.ItemStack(net.minecraft.item.Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE));
+
+        // 2. 对应的钻石工具/装备
+        net.minecraft.item.Item diamondItem = getDiamondEquivalent(item);
+        if (diamondItem != null) {
+            spawnItemDrop(world, pos, new net.minecraft.item.ItemStack(diamondItem));
+        }
+
+        // 3. 下界合金锭
+        spawnItemDrop(world, pos, new net.minecraft.item.ItemStack(net.minecraft.item.Items.NETHERITE_INGOT));
+
+        // 消耗玩家手中的物品
+        if (!player.isCreative()) {
+            heldItem.decrement(1);
+        }
+
+        // 播放音效
+        world.playSound(null, pos, net.minecraft.sound.SoundEvents.BLOCK_ANVIL_USE,
+                net.minecraft.sound.SoundCategory.BLOCKS, 1.0F, 1.0F);
+    }
+
+    private net.minecraft.item.Item getDiamondEquivalent(net.minecraft.item.Item netheriteItem) {
+        if (netheriteItem == net.minecraft.item.Items.NETHERITE_SWORD)
+            return net.minecraft.item.Items.DIAMOND_SWORD;
+        if (netheriteItem == net.minecraft.item.Items.NETHERITE_PICKAXE)
+            return net.minecraft.item.Items.DIAMOND_PICKAXE;
+        if (netheriteItem == net.minecraft.item.Items.NETHERITE_AXE)
+            return net.minecraft.item.Items.DIAMOND_AXE;
+        if (netheriteItem == net.minecraft.item.Items.NETHERITE_SHOVEL)
+            return net.minecraft.item.Items.DIAMOND_SHOVEL;
+        if (netheriteItem == net.minecraft.item.Items.NETHERITE_HOE)
+            return net.minecraft.item.Items.DIAMOND_HOE;
+        if (netheriteItem == net.minecraft.item.Items.NETHERITE_HELMET)
+            return net.minecraft.item.Items.DIAMOND_HELMET;
+        if (netheriteItem == net.minecraft.item.Items.NETHERITE_CHESTPLATE)
+            return net.minecraft.item.Items.DIAMOND_CHESTPLATE;
+        if (netheriteItem == net.minecraft.item.Items.NETHERITE_LEGGINGS)
+            return net.minecraft.item.Items.DIAMOND_LEGGINGS;
+        if (netheriteItem == net.minecraft.item.Items.NETHERITE_BOOTS)
+            return net.minecraft.item.Items.DIAMOND_BOOTS;
+        return null;
+    }
+
+    private void spawnItemDrop(World world, BlockPos pos, net.minecraft.item.ItemStack stack) {
+        net.minecraft.entity.ItemEntity itemEntity = new net.minecraft.entity.ItemEntity(
+                world,
+                pos.getX() + 0.5,
+                pos.getY() + 1.0,
+                pos.getZ() + 0.5,
+                stack);
+        itemEntity.setToDefaultPickupDelay();
+        world.spawnEntity(itemEntity);
+    }
+
 }

+ 17 - 4
src/main/java/com/husj/recipe/DisassemblerRecipes.java

@@ -40,6 +40,19 @@ public class DisassemblerRecipes {
         registerRecipe(Items.STONE_SHOVEL, Items.COBBLESTONE, 1);
         registerRecipe(Items.STONE_HOE, Items.COBBLESTONE, 2);
 
+        // 铜工具
+        // 铜盔甲
+        registerRecipe(Items.COPPER_HELMET, Items.COPPER_INGOT, 5);
+        registerRecipe(Items.COPPER_CHESTPLATE, Items.COPPER_INGOT, 8);
+        registerRecipe(Items.COPPER_LEGGINGS, Items.COPPER_INGOT, 7);
+        registerRecipe(Items.COPPER_BOOTS, Items.COPPER_INGOT, 4);
+        // 铜工具
+        registerRecipe(Items.COPPER_SWORD, Items.COPPER_INGOT, 2);
+        registerRecipe(Items.COPPER_PICKAXE, Items.COPPER_INGOT, 3);
+        registerRecipe(Items.COPPER_AXE, Items.COPPER_INGOT, 3);
+        registerRecipe(Items.COPPER_SHOVEL, Items.COPPER_INGOT, 1);
+        registerRecipe(Items.COPPER_HOE, Items.COPPER_INGOT, 2);
+
         // 钻石盔甲
         registerRecipe(Items.DIAMOND_HELMET, Items.DIAMOND, 5);
         registerRecipe(Items.DIAMOND_CHESTPLATE, Items.DIAMOND, 8);
@@ -91,11 +104,11 @@ public class DisassemblerRecipes {
     // 检查是否为矿物工具(排除木制工具)
     public static boolean isMineralTool(ItemStack stack) {
         Item item = stack.getItem();
-        
+
         // 排除木制工具
-        if (item == Items.WOODEN_SWORD || item == Items.WOODEN_PICKAXE || 
-            item == Items.WOODEN_AXE || item == Items.WOODEN_SHOVEL || 
-            item == Items.WOODEN_HOE) {
+        if (item == Items.WOODEN_SWORD || item == Items.WOODEN_PICKAXE ||
+                item == Items.WOODEN_AXE || item == Items.WOODEN_SHOVEL ||
+                item == Items.WOODEN_HOE) {
             return false;
         }
 

BIN
src/main/resources/assets/husj/textures/block/disassembler_bottom.png


BIN
src/main/resources/assets/husj/textures/block/disassembler_front.png


BIN
src/main/resources/assets/husj/textures/block/disassembler_side.png


BIN
src/main/resources/assets/husj/textures/block/disassembler_top.png


+ 19 - 0
src/main/resources/data/husj/loot_tables/blocks/disassembler.json

@@ -0,0 +1,19 @@
+{
+    "type": "minecraft:block",
+    "pools": [
+        {
+            "rolls": 1,
+            "entries": [
+                {
+                    "type": "minecraft:item",
+                    "name": "husj:disassembler"
+                }
+            ],
+            "conditions": [
+                {
+                    "condition": "minecraft:survives_explosion"
+                }
+            ]
+        }
+    ]
+}

+ 1 - 2
src/main/resources/data/husj/recipes/disassembler.json

@@ -17,7 +17,6 @@
     }
   },
   "result": {
-    "id": "husj:disassembler",
-    "count": 1
+    "item": "husj:disassembler"
   }
 }

+ 5 - 0
src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json

@@ -0,0 +1,5 @@
+{
+  "values": [
+    "husj:disassembler"
+  ]
+}

+ 5 - 0
src/main/resources/data/minecraft/tags/block/needs_iron_tool.json

@@ -0,0 +1,5 @@
+{
+    "values": [
+        "husj:disassembler"
+    ]
+}