Przeglądaj źródła

Merge remote-tracking branch 'origin/master'

LTCatt 5 lat temu
rodzic
commit
7dee7ba092

+ 0 - 2
src/main/java/com/hexdragon/blacksmithre/block/anvil/AnvilTileEntity.java

@@ -116,6 +116,4 @@ public class AnvilTileEntity extends LockableLootTileEntity implements ISidedInv
         return super.getCapability(cap, side);
     }
 
-    // TODO : 让铁砧可以根据物品栏里的物品数量向比较器输出红石信号
-
 }

+ 27 - 4
src/main/java/com/hexdragon/blacksmithre/block/anvil/NetheriteAnvil.java

@@ -1,16 +1,17 @@
 package com.hexdragon.blacksmithre.block.anvil;
 
 import com.hexdragon.blacksmithre.registry.RegMain;
-import net.minecraft.block.AbstractBlock;
-import net.minecraft.block.AnvilBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.SoundType;
+import net.minecraft.block.*;
 import net.minecraft.block.material.Material;
 import net.minecraft.block.material.MaterialColor;
 import net.minecraft.item.BlockItem;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemGroup;
+import net.minecraft.item.ItemStack;
 import net.minecraft.util.Direction;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.MathHelper;
+import net.minecraft.world.World;
 import net.minecraftforge.common.ToolType;
 
 public class NetheriteAnvil extends AnvilBlock {
@@ -26,4 +27,26 @@ public class NetheriteAnvil extends AnvilBlock {
         }
     }
 
+    //设置红石比较器输出
+    public boolean hasComparatorInputOverride(BlockState state) {
+        return true;
+    }
+    public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) {
+        AnvilTileEntity tileEntity = (AnvilTileEntity) worldIn.getTileEntity(pos);
+
+        //@see Container.calcRedstoneFromInventory()
+        int i = 0;
+        float f = 0.0F;
+
+        for(int j = 0; j < tileEntity.getSizeInventory(); ++j) {
+            ItemStack itemstack = tileEntity.inventory.get(j);
+            if (!itemstack.isEmpty()) {
+                f += (float)itemstack.getCount() / (float)itemstack.getMaxStackSize();
+                ++i;
+            }
+        }
+
+        f = f / (float)tileEntity.getSizeInventory();
+        return MathHelper.floor(f * 14.0F) + (i > 0 ? 1 : 0);
+    }
 }

+ 28 - 0
src/main/java/com/hexdragon/blacksmithre/mixin/block/AnvilBlockMixin.java

@@ -4,12 +4,15 @@ import com.hexdragon.blacksmithre.block.anvil.AnvilTileEntity;
 import com.hexdragon.blacksmithre.registry.RegMain;
 import net.minecraft.block.*;
 import net.minecraft.inventory.InventoryHelper;
+import net.minecraft.inventory.container.Container;
 import net.minecraft.inventory.container.INamedContainerProvider;
+import net.minecraft.item.ItemStack;
 import net.minecraft.state.DirectionProperty;
 import net.minecraft.state.StateContainer;
 import net.minecraft.tileentity.TileEntity;
 import net.minecraft.util.Direction;
 import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.MathHelper;
 import net.minecraft.util.math.shapes.ISelectionContext;
 import net.minecraft.util.math.shapes.VoxelShape;
 import net.minecraft.util.math.shapes.VoxelShapes;
@@ -17,6 +20,7 @@ import net.minecraft.world.IBlockReader;
 import net.minecraft.world.World;
 import net.minecraftforge.common.extensions.IForgeBlock;
 import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Overwrite;
 import org.spongepowered.asm.mixin.Shadow;
 import org.spongepowered.asm.mixin.injection.At;
 import org.spongepowered.asm.mixin.injection.Inject;
@@ -103,6 +107,30 @@ public abstract class AnvilBlockMixin extends FallingBlock implements IForgeBloc
         }
     }
 
+    //设置红石比较器输出
+    public boolean hasComparatorInputOverride(BlockState state) {
+        return true;
+    }
+    public int getComparatorInputOverride(BlockState blockState, World worldIn, BlockPos pos) {
+        AnvilTileEntity tileEntity = (AnvilTileEntity) worldIn.getTileEntity(pos);
+
+        //@see Container.calcRedstoneFromInventory()
+        int i = 0;
+        float f = 0.0F;
+
+        for(int j = 0; j < tileEntity.getSizeInventory(); ++j) {
+            ItemStack itemstack = tileEntity.inventory.get(j);
+            if (!itemstack.isEmpty()) {
+                f += (float)itemstack.getCount() / (float)itemstack.getMaxStackSize();
+                ++i;
+            }
+        }
+
+        f = f / (float)tileEntity.getSizeInventory();
+        return MathHelper.floor(f * 14.0F) + (i > 0 ? 1 : 0);
+    }
+
+
     // TODO : <验证> 多个玩家同时打开物品栏是否有刷物品 Bug 的可能?
     // TODO : 破坏下界合金砧没有掉落物(加了 LootTable 也没啥用)
     // TODO : [010] 绘制下界合金砧的材质(也可以修改原版铁砧的材质以让它有更大的区分度?)