diff --git a/src/main/java/appeng/block/networking/BlockEnergyCell.java b/src/main/java/appeng/block/networking/BlockEnergyCell.java index 2225613b8..44bf169e9 100644 --- a/src/main/java/appeng/block/networking/BlockEnergyCell.java +++ b/src/main/java/appeng/block/networking/BlockEnergyCell.java @@ -50,12 +50,12 @@ public class BlockEnergyCell extends AEBaseTileBlock { super.fillItemGroup( group, itemStacks ); - final ItemStack charged = new ItemStack( this, 1 ); - final CompoundNBT tag = charged.getOrCreateTag(); + final ItemStack charged = new ItemStack(this, 1); + final CompoundNBT tag = charged.getOrCreateTag(); tag.putDouble("internalCurrentPower", this.getMaxPower()); tag.putDouble("internalMaxPower", this.getMaxPower()); - itemStacks.add( charged ); + itemStacks.add(charged); } public double getMaxPower() diff --git a/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java b/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java index ba8750294..913bb0ae0 100644 --- a/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java +++ b/src/main/java/appeng/bootstrap/BlockDefinitionBuilder.java @@ -28,6 +28,7 @@ import java.util.function.Supplier; import javax.annotation.Nullable; +import appeng.core.AEItemGroup; import net.minecraft.block.Block; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; @@ -63,7 +64,7 @@ class BlockDefinitionBuilder implements IBlockBuilder private final EnumSet features = EnumSet.noneOf( AEFeature.class ); - private ItemGroup itemGroup = CreativeTab.instance; + private ItemGroup itemGroup = CreativeTab.INSTANCE; private TileEntityDefinition tileEntityDefinition; @@ -190,14 +191,21 @@ class BlockDefinitionBuilder implements IBlockBuilder } } + T definition; if( block instanceof AEBaseTileBlock ) { - return (T) new TileDefinition( this.registryName, (AEBaseTileBlock) block, item, features ); + definition = (T) new TileDefinition( this.registryName, (AEBaseTileBlock) block, item, features ); } else { - return (T) new BlockDefinition( this.registryName, block, item, features ); + definition = (T) new BlockDefinition( this.registryName, block, item, features ); } + + if (itemGroup instanceof AEItemGroup) { + ((AEItemGroup) itemGroup).add(definition); + } + + return definition; } @Nullable diff --git a/src/main/java/appeng/bootstrap/ItemDefinitionBuilder.java b/src/main/java/appeng/bootstrap/ItemDefinitionBuilder.java index d89391ffa..67017161e 100644 --- a/src/main/java/appeng/bootstrap/ItemDefinitionBuilder.java +++ b/src/main/java/appeng/bootstrap/ItemDefinitionBuilder.java @@ -28,13 +28,13 @@ import java.util.function.Function; import java.util.function.Supplier; import appeng.bootstrap.components.IInitComponent; +import appeng.core.AEItemGroup; import net.minecraft.block.DispenserBlock; import net.minecraft.dispenser.IDispenseItemBehavior; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import appeng.bootstrap.components.IItemRegistrationComponent; -import appeng.bootstrap.components.IPostInitComponent; import appeng.core.AppEng; import appeng.core.CreativeTab; import appeng.api.features.AEFeature; @@ -64,7 +64,7 @@ class ItemDefinitionBuilder implements IItemBuilder @OnlyIn( Dist.CLIENT ) private ItemRendering itemRendering; - private ItemGroup itemGroup = CreativeTab.instance; + private ItemGroup itemGroup = CreativeTab.INSTANCE; ItemDefinitionBuilder( FeatureFactory factory, String registryName, Function itemFactory ) { @@ -167,6 +167,10 @@ class ItemDefinitionBuilder implements IItemBuilder this.itemRendering.apply( this.factory, item ); } + if (itemGroup instanceof AEItemGroup) { + ((AEItemGroup) itemGroup).add(definition); + } + return definition; } diff --git a/src/main/java/appeng/core/AEItemGroup.java b/src/main/java/appeng/core/AEItemGroup.java new file mode 100644 index 000000000..3d1ab891d --- /dev/null +++ b/src/main/java/appeng/core/AEItemGroup.java @@ -0,0 +1,40 @@ +package appeng.core; + +import appeng.api.AEApi; +import appeng.api.definitions.IBlocks; +import appeng.api.definitions.IDefinitions; +import appeng.api.definitions.IItemDefinition; +import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; + +import java.util.ArrayList; +import java.util.List; + +public class AEItemGroup extends ItemGroup { + + private final List itemDefs = new ArrayList<>(); + + public AEItemGroup(String label) { + super(label); + } + + @Override + public ItemStack createIcon() { + final IDefinitions definitions = AEApi.instance().definitions(); + final IBlocks blocks = definitions.blocks(); + return blocks.controller().stack(1); + } + + public void add(IItemDefinition itemDef) { + this.itemDefs.add(itemDef); + } + + @Override + public void fill(NonNullList items) { + for (IItemDefinition itemDef : this.itemDefs) { + itemDef.item().fillItemGroup(this, items); + } + } + +} diff --git a/src/main/java/appeng/core/CreativeTab.java b/src/main/java/appeng/core/CreativeTab.java index fecaf7b70..27a2c0356 100644 --- a/src/main/java/appeng/core/CreativeTab.java +++ b/src/main/java/appeng/core/CreativeTab.java @@ -19,31 +19,13 @@ package appeng.core; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; - -import appeng.api.AEApi; -import appeng.api.definitions.IBlocks; -import appeng.api.definitions.IDefinitions; - - public final class CreativeTab { - public static ItemGroup instance = null; - static void init() - { - instance = new ItemGroup( "appliedenergistics2" ) - { + public static AEItemGroup INSTANCE; - @Override - public ItemStack createIcon() - { - final IDefinitions definitions = AEApi.instance().definitions(); - final IBlocks blocks = definitions.blocks(); - return blocks.controller().stack(1); - } - - }; + public static void init() { + INSTANCE = new AEItemGroup( "appliedenergistics2" ); } + } \ No newline at end of file diff --git a/src/main/java/appeng/core/api/definitions/ApiParts.java b/src/main/java/appeng/core/api/definitions/ApiParts.java index 458633aa2..b98c8c938 100644 --- a/src/main/java/appeng/core/api/definitions/ApiParts.java +++ b/src/main/java/appeng/core/api/definitions/ApiParts.java @@ -220,7 +220,7 @@ public final class ApiParts implements IParts private IItemDefinition createPart(FeatureFactory registry, String id, PartType type, Function factory) { return registry.item(id, props -> new ItemPart<>(props, type, factory)) - .itemGroup(CreativeTab.instance) + .itemGroup(CreativeTab.INSTANCE) .rendering(new ItemPartRendering()) .build(); } @@ -234,7 +234,7 @@ public final class ApiParts implements IParts String id = color.registryPrefix + '_' + idSuffix; IItemDefinition itemDef = registry.item(id, props -> new ColoredPartItem<>(props, type, factory, color)) - .itemGroup(CreativeTab.instance) + .itemGroup(CreativeTab.INSTANCE) .rendering(new ItemPartRendering(color)) .build(); diff --git a/src/main/java/appeng/items/misc/ItemPaintBall.java b/src/main/java/appeng/items/misc/ItemPaintBall.java index f79c5c5a5..3054aab09 100644 --- a/src/main/java/appeng/items/misc/ItemPaintBall.java +++ b/src/main/java/appeng/items/misc/ItemPaintBall.java @@ -81,6 +81,10 @@ public class ItemPaintBall extends AEBaseItem @Override public void fillItemGroup(ItemGroup group, NonNullList itemStacks) { + if (!isInGroup(group)) { + return; + } + for( final AEColor c : AEColor.values() ) { if( c != AEColor.TRANSPARENT ) diff --git a/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java b/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java index 981a69bc3..74804ef10 100644 --- a/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java +++ b/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java @@ -88,12 +88,14 @@ public abstract class AEBasePoweredItem extends AEBaseItem implements IAEItemPow public void fillItemGroup(ItemGroup group, NonNullList items) { super.fillItemGroup(group, items); - final ItemStack charged = new ItemStack( this, 1 ); - final CompoundNBT tag = charged.getOrCreateTag(); - tag.putDouble(CURRENT_POWER_NBT_KEY, this.getAEMaxPower( charged )); - tag.putDouble(MAX_POWER_NBT_KEY, this.getAEMaxPower( charged )); + if (this.isInGroup(group)) { + final ItemStack charged = new ItemStack(this, 1); + final CompoundNBT tag = charged.getOrCreateTag(); + tag.putDouble(CURRENT_POWER_NBT_KEY, this.getAEMaxPower(charged)); + tag.putDouble(MAX_POWER_NBT_KEY, this.getAEMaxPower(charged)); - items.add( charged ); + items.add(charged); + } } @Override