diff --git a/src/api/java/appeng/api/definitions/IItems.java b/src/api/java/appeng/api/definitions/IItems.java index 2cb14ec5e..64f87fa24 100644 --- a/src/api/java/appeng/api/definitions/IItems.java +++ b/src/api/java/appeng/api/definitions/IItems.java @@ -104,7 +104,11 @@ public interface IItems IItemDefinition facade(); - IItemDefinition crystalSeed(); + IItemDefinition certusCrystalSeed(); + + IItemDefinition fluixCrystalSeed(); + + IItemDefinition netherQuartzSeed(); IItemDefinition dummyFluidItem(); diff --git a/src/api/java/appeng/api/implementations/items/IAEItemPowerStorage.java b/src/api/java/appeng/api/implementations/items/IAEItemPowerStorage.java index 3141496eb..1a20c8e1c 100644 --- a/src/api/java/appeng/api/implementations/items/IAEItemPowerStorage.java +++ b/src/api/java/appeng/api/implementations/items/IAEItemPowerStorage.java @@ -36,7 +36,6 @@ import appeng.api.networking.energy.IAEPowerStorage; */ public interface IAEItemPowerStorage { - /** * Inject amt, power into the device, it will store what it can, and return * the amount unable to be stored. @@ -72,4 +71,5 @@ public interface IAEItemPowerStorage * @return access restriction of network */ AccessRestriction getPowerFlow( ItemStack stack ); + } \ No newline at end of file diff --git a/src/main/java/appeng/block/AEBaseBlockItemChargeable.java b/src/main/java/appeng/block/AEBaseBlockItemChargeable.java index 237e9f9d9..c91d28891 100644 --- a/src/main/java/appeng/block/AEBaseBlockItemChargeable.java +++ b/src/main/java/appeng/block/AEBaseBlockItemChargeable.java @@ -19,19 +19,6 @@ package appeng.block; -import java.text.MessageFormat; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TranslationTextComponent; -import net.minecraft.world.World; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - import appeng.api.config.AccessRestriction; import appeng.api.config.Actionable; import appeng.api.config.PowerUnits; @@ -39,6 +26,19 @@ import appeng.api.definitions.IBlockDefinition; import appeng.api.implementations.items.IAEItemPowerStorage; import appeng.core.Api; import appeng.core.localization.GuiText; +import net.minecraft.block.Block; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +import java.text.MessageFormat; +import java.util.List; public class AEBaseBlockItemChargeable extends AEBaseBlockItem implements IAEItemPowerStorage @@ -46,6 +46,13 @@ public class AEBaseBlockItemChargeable extends AEBaseBlockItem implements IAEIte public AEBaseBlockItemChargeable(Block id, Properties props) { super(id, props); + + addPropertyOverride(new ResourceLocation("appliedenergistics2:fill_level"), (is, world, entity) -> { + double curPower = getAECurrentPower(is); + double maxPower = getAEMaxPower(is); + + return (int) Math.round(100 * curPower / maxPower); + }); } @Override @@ -153,4 +160,5 @@ public class AEBaseBlockItemChargeable extends AEBaseBlockItem implements IAEIte final CompoundNBT nbt = is.getOrCreateTag(); nbt.putDouble("internalCurrentPower", amt); } + } diff --git a/src/main/java/appeng/block/networking/BlockEnergyCellRendering.java b/src/main/java/appeng/block/networking/BlockEnergyCellRendering.java index 481ac3f5e..ea4699881 100644 --- a/src/main/java/appeng/block/networking/BlockEnergyCellRendering.java +++ b/src/main/java/appeng/block/networking/BlockEnergyCellRendering.java @@ -29,6 +29,7 @@ import appeng.bootstrap.IBlockRendering; import appeng.bootstrap.IItemRendering; +// FIXME REMOVE public class BlockEnergyCellRendering extends BlockRenderingCustomizer { @@ -42,37 +43,6 @@ public class BlockEnergyCellRendering extends BlockRenderingCustomizer @Override public void customize( IBlockRendering rendering, IItemRendering itemRendering ) { - // FIXME itemRendering.meshDefinition( this::getItemModel ); // Note: Since we use the block models, we dont need to register custom variants } - - /** - * Determines which version of the energy cell model should be used depending on the fill factor - * of the item stack. - */ -// FIXME private ModelResourceLocation getItemModel( ItemStack is ) -// FIXME { -// FIXME double fillFactor = getFillFactor( is ); -// FIXME -// FIXME int storageLevel = TileEnergyCell.getStorageLevelFromFillFactor( fillFactor ); -// FIXME return new ModelResourceLocation( this.baseModel, "fullness=" + storageLevel ); -// FIXME } - - /** - * Helper method that returns the energy fill factor (between 0 and 1) of a given item stack. - * Returns 0 if the item stack has no fill factor. - */ - private static double getFillFactor( ItemStack is ) - { - if( !( is.getItem() instanceof IAEItemPowerStorage ) ) - { - return 0; - } - - AEBaseBlockItemChargeable itemChargeable = (AEBaseBlockItemChargeable) is.getItem(); - double curPower = itemChargeable.getAECurrentPower( is ); - double maxPower = itemChargeable.getAEMaxPower( is ); - - return curPower / maxPower; - } } diff --git a/src/main/java/appeng/bootstrap/EntityBuilder.java b/src/main/java/appeng/bootstrap/EntityBuilder.java new file mode 100644 index 000000000..01d08fabf --- /dev/null +++ b/src/main/java/appeng/bootstrap/EntityBuilder.java @@ -0,0 +1,55 @@ +package appeng.bootstrap; + +import appeng.api.features.AEFeature; +import appeng.bootstrap.components.IEntityRegistrationComponent; +import appeng.core.AppEng; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityClassification; +import net.minecraft.entity.EntityType; + +import java.util.Collections; +import java.util.EnumSet; +import java.util.function.Consumer; + +/** + * Helper to register a custom Entity with Minecraft. + */ +public class EntityBuilder { + + private final FeatureFactory factory; + + private final String id; + + private final EntityType.Builder builder; + + private final EnumSet features = EnumSet.noneOf(AEFeature.class); + + public EntityBuilder(FeatureFactory factory, String id, EntityType.IFactory entityFactory, EntityClassification classification) { + this.factory = factory; + this.id = id; + this.builder = EntityType.Builder.create(entityFactory, classification); + } + + public EntityBuilder features(AEFeature... features) { + this.features.clear(); + this.addFeatures(features); + return this; + } + + public EntityBuilder addFeatures(AEFeature... features) { + Collections.addAll(this.features, features); + return this; + } + + public EntityBuilder customize(Consumer> function) { + function.accept(builder); + return this; + } + + public void build() { + factory.addBootstrapComponent((IEntityRegistrationComponent) r -> { + EntityType entityType = builder.build("appliedenergistics2:" + id); + r.register( entityType.setRegistryName(AppEng.MOD_ID, id) ); + }); + } +} diff --git a/src/main/java/appeng/bootstrap/FeatureFactory.java b/src/main/java/appeng/bootstrap/FeatureFactory.java index 5c07ac2bb..fa70a8707 100644 --- a/src/main/java/appeng/bootstrap/FeatureFactory.java +++ b/src/main/java/appeng/bootstrap/FeatureFactory.java @@ -36,9 +36,13 @@ import appeng.tile.AEBaseTile; import net.minecraft.block.Block; import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.model.IUnbakedModel; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityClassification; +import net.minecraft.entity.EntityType; import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -100,6 +104,11 @@ public class FeatureFactory return new ItemDefinitionBuilder( this, id, itemFactory ).features( this.defaultFeatures ); } + public EntityBuilder entity(String id, EntityType.IFactory factory, EntityClassification classification) + { + return new EntityBuilder( this, id, factory, classification ).features( this.defaultFeatures ); + } + public TileEntityBuilder tileEntity(String id, Class teClass, Function, T> factory) { return new TileEntityBuilder<>( this, id, teClass, factory ).features( this.defaultFeatures ); diff --git a/src/main/java/appeng/core/ApiDefinitions.java b/src/main/java/appeng/core/ApiDefinitions.java index 82d2c39dd..4bc88ae5e 100644 --- a/src/main/java/appeng/core/ApiDefinitions.java +++ b/src/main/java/appeng/core/ApiDefinitions.java @@ -46,8 +46,8 @@ public final class ApiDefinitions implements IDefinitions public ApiDefinitions( final PartModels partModels ) { this.blocks = new ApiBlocks( this.registry, partModels ); - this.items = new ApiItems( this.registry ); this.materials = new ApiMaterials( this.registry ); + this.items = new ApiItems( this.registry, this.materials ); this.parts = new ApiParts( this.registry, partModels ); } diff --git a/src/main/java/appeng/core/api/definitions/ApiItems.java b/src/main/java/appeng/core/api/definitions/ApiItems.java index bc6d92636..2c36f5ca9 100644 --- a/src/main/java/appeng/core/api/definitions/ApiItems.java +++ b/src/main/java/appeng/core/api/definitions/ApiItems.java @@ -26,6 +26,7 @@ import appeng.bootstrap.FeatureFactory; import appeng.api.features.AEFeature; import appeng.bootstrap.components.IEntityRegistrationComponent; import appeng.client.render.crafting.ItemEncodedPatternRendering; +import appeng.core.Api; import appeng.core.CreativeTabFacade; import appeng.debug.ToolDebugCard; import appeng.debug.ToolEraser; @@ -53,6 +54,7 @@ import net.minecraft.entity.EntityType; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraftforge.common.ToolType; +import org.lwjgl.system.APIUtil; import java.util.function.Consumer; @@ -105,7 +107,9 @@ public final class ApiItems implements IItems private final IItemDefinition spatialCell128; private final IItemDefinition facade; - private final IItemDefinition crystalSeed; + private final IItemDefinition certusCrystalSeed; + private final IItemDefinition fluixCrystalSeed; + private final IItemDefinition netherQuartzSeed; // rv1 private final IItemDefinition encodedPattern; @@ -123,7 +127,7 @@ public final class ApiItems implements IItems private final IItemDefinition dummyFluidItem; - public ApiItems( FeatureFactory registry ) + public ApiItems(FeatureFactory registry, ApiMaterials materials) { FeatureFactory certusTools = registry.features( AEFeature.CERTUS_QUARTZ_TOOLS ); this.certusQuartzAxe = certusTools.item( "certus_quartz_axe", props -> new ToolQuartzAxe( props, AEFeature.CERTUS_QUARTZ_TOOLS ) ) @@ -270,19 +274,21 @@ public final class ApiItems implements IItems .itemGroup( CreativeTabFacade.instance ) .rendering( new FacadeRendering() ) .build(); - this.crystalSeed = registry.item( "crystal_seed", ItemCrystalSeed::new ) + + this.certusCrystalSeed = registry.item( "certus_crystal_seed", props -> new ItemCrystalSeed(props, materials.purifiedCertusQuartzCrystal().item()) ) .features( AEFeature.CRYSTAL_SEEDS ) - .rendering( new ItemCrystalSeedRendering() ) - .bootstrap( item -> (IEntityRegistrationComponent) r -> - { - r.register( EntityType.Builder.create(EntityGrowingCrystal::new, EntityClassification.MISC) - .setTrackingRange(16) - .setUpdateInterval(4) - .setShouldReceiveVelocityUpdates(true) - .build("appliedenergistics2:growing_crystal") - .setRegistryName("appliedenergistics2:growing_crystal") - ); - } ) + .build(); + this.fluixCrystalSeed = registry.item( "fluix_crystal_seed", props -> new ItemCrystalSeed(props, materials.purifiedFluixCrystal().item()) ) + .features( AEFeature.CRYSTAL_SEEDS ) + .build(); + this.netherQuartzSeed = registry.item( "nether_quartz_seed", props -> new ItemCrystalSeed(props, materials.purifiedNetherQuartzCrystal().item()) ) + .features( AEFeature.CRYSTAL_SEEDS ) + .build(); + + registry.entity("growing_crystal", EntityGrowingCrystal::new, EntityClassification.MISC) + .customize(builder -> builder.setTrackingRange(16) + .setUpdateInterval(4) + .setShouldReceiveVelocityUpdates(true)) .build(); // rv1 @@ -525,9 +531,18 @@ public final class ApiItems implements IItems } @Override - public IItemDefinition crystalSeed() - { - return this.crystalSeed; + public IItemDefinition certusCrystalSeed() { + return certusCrystalSeed; + } + + @Override + public IItemDefinition fluixCrystalSeed() { + return fluixCrystalSeed; + } + + @Override + public IItemDefinition netherQuartzSeed() { + return netherQuartzSeed; } @Override diff --git a/src/main/java/appeng/core/api/definitions/ApiMaterials.java b/src/main/java/appeng/core/api/definitions/ApiMaterials.java index ae4d3b251..e69c796fc 100644 --- a/src/main/java/appeng/core/api/definitions/ApiMaterials.java +++ b/src/main/java/appeng/core/api/definitions/ApiMaterials.java @@ -19,25 +19,18 @@ package appeng.core.api.definitions; -import java.util.Arrays; -import java.util.stream.Collectors; - -import net.minecraft.entity.EntityClassification; -import net.minecraft.entity.EntityType; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; - import appeng.api.definitions.IItemDefinition; import appeng.api.definitions.IMaterials; +import appeng.api.features.AEFeature; import appeng.bootstrap.FeatureFactory; -import appeng.bootstrap.IItemRendering; -import appeng.bootstrap.ItemRenderingCustomizer; -import appeng.bootstrap.components.IEntityRegistrationComponent; -import appeng.core.features.DamagedItemDefinition; +import appeng.core.AEConfig; +import appeng.core.features.MaterialStackSrc; import appeng.entity.EntityChargedQuartz; import appeng.entity.EntitySingularity; import appeng.items.materials.ItemMaterial; import appeng.items.materials.MaterialType; +import com.google.common.base.Preconditions; +import net.minecraft.entity.EntityClassification; /** @@ -121,127 +114,98 @@ public final class ApiMaterials implements IMaterials private final IItemDefinition fluidCell16kPart; private final IItemDefinition fluidCell64kPart; + private final FeatureFactory registry; + public ApiMaterials( FeatureFactory registry ) { - IItemDefinition materialDef = registry.item( "material", ItemMaterial::new ) - .rendering( new ItemRenderingCustomizer() - { - @Override - @OnlyIn( Dist.CLIENT ) - public void customize( IItemRendering rendering ) - { - // FIXME rendering.meshDefinition( is -> materials.getTypeByStack( is ).getModel() ); - // Register a resource location for every material type - rendering.variants( Arrays.stream( MaterialType.values() ) - .map( MaterialType::getModel ) - .collect( Collectors.toList() ) ); - } - } ) - .bootstrap( item -> (IEntityRegistrationComponent) r -> - { - r.register( EntityType.Builder.create(EntitySingularity::new, EntityClassification.MISC) - .setTrackingRange(16) - .setUpdateInterval(4) - .setShouldReceiveVelocityUpdates(true) - .build("appliedenergistics2:singularity") - .setRegistryName("appliedenergistics2:singularity") - ); - r.register( EntityType.Builder.create(EntityChargedQuartz::new, EntityClassification.MISC) - .setTrackingRange(16) - .setUpdateInterval(4) - .setShouldReceiveVelocityUpdates(true) - .build("appliedenergistics2:charged_quartz") - .setRegistryName("appliedenergistics2:charged_quartz") - ); - } ) + this.registry = registry; + + registry.entity("singularity", EntitySingularity::new, EntityClassification.MISC) + .customize(builder -> builder.setTrackingRange(16).setUpdateInterval(4).setShouldReceiveVelocityUpdates(true)) .build(); - final ItemMaterial materials = (ItemMaterial) materialDef.item(); - this.cell2SpatialPart = new DamagedItemDefinition( "material.cell.spatial.2", materials.createMaterial( MaterialType.CELL2_SPATIAL_PART ) ); - this.cell16SpatialPart = new DamagedItemDefinition( "material.cell.spatial.16", materials.createMaterial( MaterialType.CELL16_SPATIAL_PART ) ); - this.cell128SpatialPart = new DamagedItemDefinition( "material.cell.spatial.128", materials.createMaterial( MaterialType.CELL128_SPATIAL_PART ) ); + registry.entity("charged_quartz", EntityChargedQuartz::new, EntityClassification.MISC) + .customize(builder -> builder.setTrackingRange(16).setUpdateInterval(4).setShouldReceiveVelocityUpdates(true)) + .build(); - this.silicon = new DamagedItemDefinition( "material.silicon", materials.createMaterial( MaterialType.SILICON ) ); - this.skyDust = new DamagedItemDefinition( "material.dust.sky_stone", materials.createMaterial( MaterialType.SKY_DUST ) ); + this.cell2SpatialPart = createMaterial( "material_cell2_spatial_part", MaterialType.CELL2_SPATIAL_PART ); + this.cell16SpatialPart = createMaterial( "material_cell16_spatial_part", MaterialType.CELL16_SPATIAL_PART ); + this.cell128SpatialPart = createMaterial( "material_cell128_spatial_part", MaterialType.CELL128_SPATIAL_PART ); + this.silicon = createMaterial( "material_silicon", MaterialType.SILICON ); + this.skyDust = createMaterial( "material_sky_dust", MaterialType.SKY_DUST ); + this.calcProcessorPress = createMaterial( "material_calculation_processor_press", MaterialType.CALCULATION_PROCESSOR_PRESS ); + this.engProcessorPress = createMaterial( "material_engineering_processor_press", MaterialType.ENGINEERING_PROCESSOR_PRESS ); + this.logicProcessorPress = createMaterial( "material_logic_processor_press", MaterialType.LOGIC_PROCESSOR_PRESS ); + this.siliconPress = createMaterial( "material_silicon_press", MaterialType.SILICON_PRESS ); + this.namePress = createMaterial( "material_name_press", MaterialType.NAME_PRESS ); + this.calcProcessorPrint = createMaterial( "material_calculation_processor_print", MaterialType.CALCULATION_PROCESSOR_PRINT ); + this.engProcessorPrint = createMaterial( "material_engineering_processor_print", MaterialType.ENGINEERING_PROCESSOR_PRINT ); + this.logicProcessorPrint = createMaterial( "material_logic_processor_print", MaterialType.LOGIC_PROCESSOR_PRINT ); + this.siliconPrint = createMaterial( "material_silicon_print", MaterialType.SILICON_PRINT ); + this.logicProcessor = createMaterial( "material_logic_processor", MaterialType.LOGIC_PROCESSOR ); + this.calcProcessor = createMaterial( "material_calculation_processor", MaterialType.CALCULATION_PROCESSOR ); + this.engProcessor = createMaterial( "material_engineering_processor", MaterialType.ENGINEERING_PROCESSOR ); + this.basicCard = createMaterial( "material_basic_card", MaterialType.BASIC_CARD ); + this.advCard = createMaterial( "material_advanced_card", MaterialType.ADVANCED_CARD ); + this.purifiedCertusQuartzCrystal = createMaterial( "material_purified_certus_quartz_crystal", MaterialType.PURIFIED_CERTUS_QUARTZ_CRYSTAL ); + this.purifiedNetherQuartzCrystal = createMaterial( "material_purified_nether_quartz_crystal", MaterialType.PURIFIED_NETHER_QUARTZ_CRYSTAL ); + this.purifiedFluixCrystal = createMaterial( "material_purified_fluix_crystal", MaterialType.PURIFIED_FLUIX_CRYSTAL ); + this.cell1kPart = createMaterial( "material_cell1k_part", MaterialType.CELL1K_PART ); + this.cell4kPart = createMaterial( "material_cell4k_part", MaterialType.CELL4K_PART ); + this.cell16kPart = createMaterial( "material_cell16k_part", MaterialType.CELL16K_PART ); + this.cell64kPart = createMaterial( "material_cell64k_part", MaterialType.CELL64K_PART ); + this.emptyStorageCell = createMaterial( "material_empty_storage_cell", MaterialType.EMPTY_STORAGE_CELL ); + this.cardRedstone = createMaterial( "material_card_redstone", MaterialType.CARD_REDSTONE ); + this.cardSpeed = createMaterial( "material_card_speed", MaterialType.CARD_SPEED ); + this.cardCapacity = createMaterial( "material_card_capacity", MaterialType.CARD_CAPACITY ); + this.cardFuzzy = createMaterial( "material_card_fuzzy", MaterialType.CARD_FUZZY ); + this.cardInverter = createMaterial( "material_card_inverter", MaterialType.CARD_INVERTER ); + this.cardCrafting = createMaterial( "material_card_crafting", MaterialType.CARD_CRAFTING ); + this.enderDust = createMaterial( "material_ender_dust", MaterialType.ENDER_DUST ); + this.flour = createMaterial( "material_flour", MaterialType.FLOUR ); + this.goldDust = createMaterial( "material_gold_dust", MaterialType.GOLD_DUST ); + this.ironDust = createMaterial( "material_iron_dust", MaterialType.IRON_DUST ); + this.fluixDust = createMaterial( "material_fluix_dust", MaterialType.FLUIX_DUST ); + this.certusQuartzDust = createMaterial( "material_certus_quartz_dust", MaterialType.CERTUS_QUARTZ_DUST ); + this.netherQuartzDust = createMaterial( "material_nether_quartz_dust", MaterialType.NETHER_QUARTZ_DUST ); + this.matterBall = createMaterial( "material_matter_ball", MaterialType.MATTER_BALL ); + this.certusQuartzCrystal = createMaterial( "material_certus_quartz_crystal", MaterialType.CERTUS_QUARTZ_CRYSTAL ); + this.certusQuartzCrystalCharged = createMaterial( "material_certus_quartz_crystal_charged", MaterialType.CERTUS_QUARTZ_CRYSTAL_CHARGED ); + this.fluixCrystal = createMaterial( "material_fluix_crystal", MaterialType.FLUIX_CRYSTAL ); + this.fluixPearl = createMaterial( "material_fluix_pearl", MaterialType.FLUIX_PEARL ); + this.woodenGear = createMaterial( "material_wooden_gear", MaterialType.WOODEN_GEAR ); + this.wirelessReceiver = createMaterial( "material_wireless_receiver", MaterialType.WIRELESS ); + this.wirelessBooster = createMaterial( "material_wireless_booster", MaterialType.WIRELESS_BOOSTER ); + this.annihilationCore = createMaterial( "material_annihilation_core", MaterialType.ANNIHILATION_CORE ); + this.formationCore = createMaterial( "material_formation_core", MaterialType.FORMATION_CORE ); + this.singularity = createMaterial( "material_singularity", MaterialType.SINGULARITY ); + this.qESingularity = createMaterial( "material_quantum_entangled_singularity", MaterialType.QUANTUM_ENTANGLED_SINGULARITY ); + this.blankPattern = createMaterial( "material_blank_pattern", MaterialType.BLANK_PATTERN ); + this.fluidCell1kPart = createMaterial( "material_fluid_cell1k_part", MaterialType.FLUID_CELL1K_PART ); + this.fluidCell4kPart = createMaterial( "material_fluid_cell4k_part", MaterialType.FLUID_CELL4K_PART ); + this.fluidCell16kPart = createMaterial( "material_fluid_cell16k_part", MaterialType.FLUID_CELL16K_PART ); + this.fluidCell64kPart = createMaterial( "material_fluid_cell64k_part", MaterialType.FLUID_CELL64K_PART ); + } - this.calcProcessorPress = new DamagedItemDefinition( "material.press.processor.calculation", materials - .createMaterial( MaterialType.CALCULATION_PROCESSOR_PRESS ) ); - this.engProcessorPress = new DamagedItemDefinition( "material.press.processor.engineering", materials - .createMaterial( MaterialType.ENGINEERING_PROCESSOR_PRESS ) ); - this.logicProcessorPress = new DamagedItemDefinition( "material.press.processor.logic", materials - .createMaterial( MaterialType.LOGIC_PROCESSOR_PRESS ) ); - this.siliconPress = new DamagedItemDefinition( "material.press.silicon", materials.createMaterial( MaterialType.SILICON_PRESS ) ); - this.namePress = new DamagedItemDefinition( "material.press.name", materials.createMaterial( MaterialType.NAME_PRESS ) ); + private IItemDefinition createMaterial(String id, final MaterialType mat) + { + Preconditions.checkState( !mat.isRegistered(), "Cannot create the same material twice." ); - this.calcProcessorPrint = new DamagedItemDefinition( "material.print.processor.calculation", materials - .createMaterial( MaterialType.CALCULATION_PROCESSOR_PRINT ) ); - this.engProcessorPrint = new DamagedItemDefinition( "material.print.processor.engineering", materials - .createMaterial( MaterialType.ENGINEERING_PROCESSOR_PRINT ) ); - this.logicProcessorPrint = new DamagedItemDefinition( "material.print.processor.logic", materials - .createMaterial( MaterialType.LOGIC_PROCESSOR_PRINT ) ); - this.siliconPrint = new DamagedItemDefinition( "material.print.silicon", materials.createMaterial( MaterialType.SILICON_PRINT ) ); + IItemDefinition def = registry.item(id, props -> new ItemMaterial(props, mat)) + .features(mat.getFeature().toArray(new AEFeature[0])) + .build(); - this.logicProcessor = new DamagedItemDefinition( "material.processor.logic", materials.createMaterial( MaterialType.LOGIC_PROCESSOR ) ); - this.calcProcessor = new DamagedItemDefinition( "material.processor.calculation", materials.createMaterial( MaterialType.CALCULATION_PROCESSOR ) ); - this.engProcessor = new DamagedItemDefinition( "material.processor.engineering", materials.createMaterial( MaterialType.ENGINEERING_PROCESSOR ) ); + boolean enabled = true; - this.basicCard = new DamagedItemDefinition( "material.card.basic", materials.createMaterial( MaterialType.BASIC_CARD ) ); - this.advCard = new DamagedItemDefinition( "material.card.advanced", materials.createMaterial( MaterialType.ADVANCED_CARD ) ); + for( final AEFeature f : mat.getFeature() ) + { + enabled = enabled && AEConfig.instance().isFeatureEnabled( f ); + } - this.purifiedCertusQuartzCrystal = new DamagedItemDefinition( "material.crystal.quartz.certus.purified", materials - .createMaterial( MaterialType.PURIFIED_CERTUS_QUARTZ_CRYSTAL ) ); - this.purifiedNetherQuartzCrystal = new DamagedItemDefinition( "material.crystal.quartz.nether.purified", materials - .createMaterial( MaterialType.PURIFIED_NETHER_QUARTZ_CRYSTAL ) ); - this.purifiedFluixCrystal = new DamagedItemDefinition( "material.crystal.fluix.purified", materials - .createMaterial( MaterialType.PURIFIED_FLUIX_CRYSTAL ) ); - - this.cell1kPart = new DamagedItemDefinition( "material.cell.storage.1k", materials.createMaterial( MaterialType.CELL1K_PART ) ); - this.cell4kPart = new DamagedItemDefinition( "material.cell.storage.4k", materials.createMaterial( MaterialType.CELL4K_PART ) ); - this.cell16kPart = new DamagedItemDefinition( "material.cell.storage.16k", materials.createMaterial( MaterialType.CELL16K_PART ) ); - this.cell64kPart = new DamagedItemDefinition( "material.cell.storage.64k", materials.createMaterial( MaterialType.CELL64K_PART ) ); - this.emptyStorageCell = new DamagedItemDefinition( "material.cell.storage.empty", materials.createMaterial( MaterialType.EMPTY_STORAGE_CELL ) ); - - this.cardRedstone = new DamagedItemDefinition( "material.card.redstone", materials.createMaterial( MaterialType.CARD_REDSTONE ) ); - this.cardSpeed = new DamagedItemDefinition( "material.card.acceleration", materials.createMaterial( MaterialType.CARD_SPEED ) ); - this.cardCapacity = new DamagedItemDefinition( "material.card.capacity", materials.createMaterial( MaterialType.CARD_CAPACITY ) ); - this.cardFuzzy = new DamagedItemDefinition( "material.card.fuzzy", materials.createMaterial( MaterialType.CARD_FUZZY ) ); - this.cardInverter = new DamagedItemDefinition( "material.card.inverter", materials.createMaterial( MaterialType.CARD_INVERTER ) ); - this.cardCrafting = new DamagedItemDefinition( "material.card.crafting", materials.createMaterial( MaterialType.CARD_CRAFTING ) ); - - this.enderDust = new DamagedItemDefinition( "material.dust.ender", materials.createMaterial( MaterialType.ENDER_DUST ) ); - this.flour = new DamagedItemDefinition( "material.flour", materials.createMaterial( MaterialType.FLOUR ) ); - this.goldDust = new DamagedItemDefinition( "material.dust.gold", materials.createMaterial( MaterialType.GOLD_DUST ) ); - this.ironDust = new DamagedItemDefinition( "material.dust.iron", materials.createMaterial( MaterialType.IRON_DUST ) ); - this.fluixDust = new DamagedItemDefinition( "material.dust.fluix", materials.createMaterial( MaterialType.FLUIX_DUST ) ); - this.certusQuartzDust = new DamagedItemDefinition( "material.dust.quartz.certus", materials.createMaterial( MaterialType.CERTUS_QUARTZ_DUST ) ); - this.netherQuartzDust = new DamagedItemDefinition( "material.dust.quartz.nether", materials.createMaterial( MaterialType.NETHER_QUARTZ_DUST ) ); - - this.matterBall = new DamagedItemDefinition( "material.ammo.matter_ball", materials.createMaterial( MaterialType.MATTER_BALL ) ); - - this.certusQuartzCrystal = new DamagedItemDefinition( "material.crystal.quartz.certus", materials - .createMaterial( MaterialType.CERTUS_QUARTZ_CRYSTAL ) ); - this.certusQuartzCrystalCharged = new DamagedItemDefinition( "material.crystal.quartz.certus.charged", materials - .createMaterial( MaterialType.CERTUS_QUARTZ_CRYSTAL_CHARGED ) ); - this.fluixCrystal = new DamagedItemDefinition( "material.crystal.fluix", materials.createMaterial( MaterialType.FLUIX_CRYSTAL ) ); - this.fluixPearl = new DamagedItemDefinition( "material.pearl.fluix", materials.createMaterial( MaterialType.FLUIX_PEARL ) ); - - this.woodenGear = new DamagedItemDefinition( "material.gear.wooden", materials.createMaterial( MaterialType.WOODEN_GEAR ) ); - - this.wirelessReceiver = new DamagedItemDefinition( "material.wireless.receiver", materials.createMaterial( MaterialType.WIRELESS ) ); - this.wirelessBooster = new DamagedItemDefinition( "material.wireless.booster", materials.createMaterial( MaterialType.WIRELESS_BOOSTER ) ); - - this.annihilationCore = new DamagedItemDefinition( "material.core.annihilation", materials.createMaterial( MaterialType.ANNIHILATION_CORE ) ); - this.formationCore = new DamagedItemDefinition( "material.core.formation", materials.createMaterial( MaterialType.FORMATION_CORE ) ); - - this.singularity = new DamagedItemDefinition( "material.singularity", materials.createMaterial( MaterialType.SINGULARITY ) ); - this.qESingularity = new DamagedItemDefinition( "material.singularity.entangled.quantum", materials - .createMaterial( MaterialType.QUANTUM_ENTANGLED_SINGULARITY ) ); - this.blankPattern = new DamagedItemDefinition( "material.pattern.blank", materials.createMaterial( MaterialType.BLANK_PATTERN ) ); - - this.fluidCell1kPart = new DamagedItemDefinition( "material.cell.storage.1k", materials.createMaterial( MaterialType.FLUID_CELL1K_PART ) ); - this.fluidCell4kPart = new DamagedItemDefinition( "material.cell.storage.4k", materials.createMaterial( MaterialType.FLUID_CELL4K_PART ) ); - this.fluidCell16kPart = new DamagedItemDefinition( "material.cell.storage.16k", materials.createMaterial( MaterialType.FLUID_CELL16K_PART ) ); - this.fluidCell64kPart = new DamagedItemDefinition( "material.cell.storage.64k", materials.createMaterial( MaterialType.FLUID_CELL64K_PART ) ); + mat.setStackSrc( new MaterialStackSrc( mat, enabled ) ); + mat.setItemInstance( def.item() ); + mat.markReady(); + return def; } @Override diff --git a/src/main/java/appeng/core/features/DamagedItemDefinition.java b/src/main/java/appeng/core/features/DamagedItemDefinition.java index dfc08ecbc..c393b7600 100644 --- a/src/main/java/appeng/core/features/DamagedItemDefinition.java +++ b/src/main/java/appeng/core/features/DamagedItemDefinition.java @@ -37,31 +37,22 @@ import appeng.api.definitions.IItemDefinition; public final class DamagedItemDefinition implements IItemDefinition { private final String identifier; - private final Optional source; + private final IStackSrc source; public DamagedItemDefinition( @Nonnull final String identifier, @Nonnull final IStackSrc source ) { this.identifier = Preconditions.checkNotNull( identifier ); - Preconditions.checkNotNull( source ); - - if( source.isEnabled() ) - { - this.source = Optional.of( source ); - } - else - { - this.source = Optional.empty(); - } + this.source = Preconditions.checkNotNull( source ); } @Override public Item item() { - return source.get().getItem(); + return source.getItem(); } @Override public ItemStack stack(int stackSize) { - return source.get().stack(stackSize); + return source.stack(stackSize); } @Nonnull @@ -74,13 +65,13 @@ public final class DamagedItemDefinition implements IItemDefinition @Override public Optional maybeItem() { - return this.source.map( IStackSrc::getItem ); + return Optional.of(this.source.getItem()); } @Override public Optional maybeStack( final int stackSize ) { - return this.source.map( input -> input.stack( stackSize ) ); + return Optional.of(this.source.stack(stackSize)); } @Override @@ -97,7 +88,7 @@ public final class DamagedItemDefinition implements IItemDefinition return false; } - return comparableStack.getItem() == this.source.get().getItem(); + return comparableStack.getItem() == this.source.getItem(); } } diff --git a/src/main/java/appeng/items/materials/ItemMaterial.java b/src/main/java/appeng/items/materials/ItemMaterial.java index 4175029bd..172a0b721 100644 --- a/src/main/java/appeng/items/materials/ItemMaterial.java +++ b/src/main/java/appeng/items/materials/ItemMaterial.java @@ -72,16 +72,14 @@ import appeng.util.inv.AdaptorItemHandler; public final class ItemMaterial extends AEBaseItem implements IStorageComponent, IUpgradeModule { - public static ItemMaterial instance; private static final int KILO_SCALAR = 1024; - private final Map dmgToMaterial = new HashMap<>(); + private final MaterialType materialType; - public ItemMaterial(Properties properties) { + public ItemMaterial(Properties properties, MaterialType materialType) { super(properties); - // FIXME this.setHasSubtypes( true ); - instance = this; + this.materialType = materialType; } @OnlyIn( Dist.CLIENT ) @@ -90,13 +88,7 @@ public final class ItemMaterial extends AEBaseItem implements IStorageComponent, { super.addInformation( stack, world, lines, advancedTooltips ); - final MaterialType mt = this.getTypeByStack( stack ); - if( mt == null ) - { - return; - } - - if( mt == MaterialType.NAME_PRESS ) + if( materialType == MaterialType.NAME_PRESS ) { final CompoundNBT c = stack.getOrCreateTag(); lines.add( new StringTextComponent( c.getString( "InscribeName" ) ) ); @@ -141,16 +133,10 @@ public final class ItemMaterial extends AEBaseItem implements IStorageComponent, } } - public MaterialType getTypeByStack( final ItemStack is ) - { - MaterialType type = this.dmgToMaterial.get( is.getDamage() ); - return ( type != null ) ? type : MaterialType.INVALID_TYPE; - } - @Override public Upgrades getType( final ItemStack itemstack ) { - switch( this.getTypeByStack( itemstack ) ) + switch( materialType ) { case CARD_CAPACITY: return Upgrades.CAPACITY; @@ -169,59 +155,6 @@ public final class ItemMaterial extends AEBaseItem implements IStorageComponent, } } - public IStackSrc createMaterial( final MaterialType mat ) - { - Preconditions.checkState( !mat.isRegistered(), "Cannot create the same material twice." ); - - boolean enabled = true; - - for( final AEFeature f : mat.getFeature() ) - { - enabled = enabled && AEConfig.instance().isFeatureEnabled( f ); - } - - mat.setStackSrc( new MaterialStackSrc( mat, enabled ) ); - - if( enabled ) - { - mat.setItemInstance( this ); - mat.markReady(); - final int newMaterialNum = mat.getDamageValue(); - - if( this.dmgToMaterial.get( newMaterialNum ) == null ) - { - this.dmgToMaterial.put( newMaterialNum, mat ); - } - else - - { - throw new IllegalStateException( "Meta Overlap detected." ); - } - } - - return mat.getStackSrc(); - } - - @Override - public String getTranslationKey( final ItemStack is ) - { - return "item.appliedenergistics2.material." + this.nameOf( is ).toLowerCase(); - } - - @Override - public void fillItemGroup(ItemGroup group, NonNullList items) { - final List types = Arrays.asList( MaterialType.values() ); - Collections.sort( types, ( o1, o2 ) -> o1.name().compareTo( o2.name() ) ); - - for( final MaterialType mat : types ) - { - if( mat.getDamageValue() >= 0 && mat.isRegistered() && mat.getItemInstance() == this ) - { - items.add( new ItemStack( this, 1/* FIXME, mat.getDamageValue() */ ) ); - } - } - } - @Override public ActionResultType onItemUseFirst( ItemStack stack, ItemUseContext context ) { @@ -270,13 +203,13 @@ public final class ItemMaterial extends AEBaseItem implements IStorageComponent, @Override public boolean hasCustomEntity( final ItemStack is ) { - return this.getTypeByStack( is ).hasCustomEntity(); + return materialType.hasCustomEntity(); } @Override public Entity createEntity( final World w, final Entity location, final ItemStack itemstack ) { - final Class droppedEntity = this.getTypeByStack( itemstack ).getCustomEntityClass(); + final Class droppedEntity = materialType.getCustomEntityClass(); final Entity eqi; try @@ -298,26 +231,10 @@ public final class ItemMaterial extends AEBaseItem implements IStorageComponent, return eqi; } - private String nameOf( final ItemStack is ) - { - if( is.isEmpty() ) - { - return "null"; - } - - final MaterialType mt = this.getTypeByStack( is ); - if( mt == null ) - { - return "null"; - } - - return mt.name(); - } - @Override public int getBytes( final ItemStack is ) { - switch( this.getTypeByStack( is ) ) + switch( materialType ) { case CELL1K_PART: return KILO_SCALAR; @@ -335,7 +252,7 @@ public final class ItemMaterial extends AEBaseItem implements IStorageComponent, @Override public boolean isStorageComponent( final ItemStack is ) { - switch( this.getTypeByStack( is ) ) + switch( materialType ) { case CELL1K_PART: case CELL4K_PART: diff --git a/src/main/java/appeng/items/materials/MaterialType.java b/src/main/java/appeng/items/materials/MaterialType.java index 7c3a86276..06c0473d8 100644 --- a/src/main/java/appeng/items/materials/MaterialType.java +++ b/src/main/java/appeng/items/materials/MaterialType.java @@ -37,137 +37,132 @@ import appeng.entity.EntitySingularity; public enum MaterialType { - INVALID_TYPE( -1, "material_invalid_type" ), + CERTUS_QUARTZ_CRYSTAL("material_certus_quartz_crystal", EnumSet.of( AEFeature.CERTUS ), "crystalCertusQuartz" ), + CERTUS_QUARTZ_CRYSTAL_CHARGED("material_certus_quartz_crystal_charged", EnumSet.of( AEFeature.CERTUS ), EntityChargedQuartz.class ), - CERTUS_QUARTZ_CRYSTAL( 0, "material_certus_quartz_crystal", EnumSet.of( AEFeature.CERTUS ), "crystalCertusQuartz" ), - CERTUS_QUARTZ_CRYSTAL_CHARGED( 1, "material_certus_quartz_crystal_charged", EnumSet.of( AEFeature.CERTUS ), EntityChargedQuartz.class ), + CERTUS_QUARTZ_DUST("material_certus_quartz_dust", EnumSet.of( AEFeature.DUSTS, AEFeature.CERTUS ), "dustCertusQuartz" ), + NETHER_QUARTZ_DUST("material_nether_quartz_dust", EnumSet.of( AEFeature.DUSTS ), "dustNetherQuartz,dustQuartz" ), + FLOUR("material_flour", EnumSet.of( AEFeature.FLOUR ), "dustWheat" ), + GOLD_DUST("material_gold_dust", EnumSet.of( AEFeature.DUSTS ), "dustGold" ), + IRON_DUST("material_iron_dust", EnumSet.of( AEFeature.DUSTS ), "dustIron" ), - CERTUS_QUARTZ_DUST( 2, "material_certus_quartz_dust", EnumSet.of( AEFeature.DUSTS, AEFeature.CERTUS ), "dustCertusQuartz" ), - NETHER_QUARTZ_DUST( 3, "material_nether_quartz_dust", EnumSet.of( AEFeature.DUSTS ), "dustNetherQuartz,dustQuartz" ), - FLOUR( 4, "material_flour", EnumSet.of( AEFeature.FLOUR ), "dustWheat" ), - GOLD_DUST( 51, "material_gold_dust", EnumSet.of( AEFeature.DUSTS ), "dustGold" ), - IRON_DUST( 49, "material_iron_dust", EnumSet.of( AEFeature.DUSTS ), "dustIron" ), + SILICON("material_silicon", EnumSet.of( AEFeature.SILICON ), "itemSilicon" ), + MATTER_BALL("material_matter_ball", EnumSet.of( AEFeature.MATTER_BALL ) ), - SILICON( 5, "material_silicon", EnumSet.of( AEFeature.SILICON ), "itemSilicon" ), - MATTER_BALL( 6, "material_matter_ball", EnumSet.of( AEFeature.MATTER_BALL ) ), + FLUIX_CRYSTAL("material_fluix_crystal", EnumSet.of( AEFeature.FLUIX ), "crystalFluix" ), + FLUIX_DUST("material_fluix_dust", EnumSet.of( AEFeature.FLUIX, AEFeature.DUSTS ), "dustFluix" ), + FLUIX_PEARL("material_fluix_pearl", EnumSet.of( AEFeature.FLUIX ), "pearlFluix" ), - FLUIX_CRYSTAL( 7, "material_fluix_crystal", EnumSet.of( AEFeature.FLUIX ), "crystalFluix" ), - FLUIX_DUST( 8, "material_fluix_dust", EnumSet.of( AEFeature.FLUIX, AEFeature.DUSTS ), "dustFluix" ), - FLUIX_PEARL( 9, "material_fluix_pearl", EnumSet.of( AEFeature.FLUIX ), "pearlFluix" ), - - PURIFIED_CERTUS_QUARTZ_CRYSTAL( 10, "material_purified_certus_quartz_crystal", EnumSet.of( AEFeature.CERTUS, + PURIFIED_CERTUS_QUARTZ_CRYSTAL("material_purified_certus_quartz_crystal", EnumSet.of( AEFeature.CERTUS, AEFeature.PURE_CRYSTALS ), "crystalPureCertusQuartz" ), - PURIFIED_NETHER_QUARTZ_CRYSTAL( 11, "material_purified_nether_quartz_crystal", EnumSet.of( AEFeature.PURE_CRYSTALS ), "crystalPureNetherQuartz" ), - PURIFIED_FLUIX_CRYSTAL( 12, "material_purified_fluix_crystal", EnumSet.of( AEFeature.FLUIX, AEFeature.PURE_CRYSTALS ), "crystalPureFluix" ), + PURIFIED_NETHER_QUARTZ_CRYSTAL("material_purified_nether_quartz_crystal", EnumSet.of( AEFeature.PURE_CRYSTALS ), "crystalPureNetherQuartz" ), + PURIFIED_FLUIX_CRYSTAL("material_purified_fluix_crystal", EnumSet.of( AEFeature.FLUIX, AEFeature.PURE_CRYSTALS ), "crystalPureFluix" ), - CALCULATION_PROCESSOR_PRESS( 13, "material_calculation_processor_press", EnumSet.of( AEFeature.PRESSES ) ), - ENGINEERING_PROCESSOR_PRESS( 14, "material_engineering_processor_press", EnumSet.of( AEFeature.PRESSES ) ), - LOGIC_PROCESSOR_PRESS( 15, "material_logic_processor_press", EnumSet.of( AEFeature.PRESSES ) ), + CALCULATION_PROCESSOR_PRESS("material_calculation_processor_press", EnumSet.of( AEFeature.PRESSES ) ), + ENGINEERING_PROCESSOR_PRESS("material_engineering_processor_press", EnumSet.of( AEFeature.PRESSES ) ), + LOGIC_PROCESSOR_PRESS("material_logic_processor_press", EnumSet.of( AEFeature.PRESSES ) ), - CALCULATION_PROCESSOR_PRINT( 16, "material_calculation_processor_print", EnumSet.of( AEFeature.PRINTED_CIRCUITS ) ), - ENGINEERING_PROCESSOR_PRINT( 17, "material_engineering_processor_print", EnumSet.of( AEFeature.PRINTED_CIRCUITS ) ), - LOGIC_PROCESSOR_PRINT( 18, "material_logic_processor_print", EnumSet.of( AEFeature.PRINTED_CIRCUITS ) ), + CALCULATION_PROCESSOR_PRINT("material_calculation_processor_print", EnumSet.of( AEFeature.PRINTED_CIRCUITS ) ), + ENGINEERING_PROCESSOR_PRINT("material_engineering_processor_print", EnumSet.of( AEFeature.PRINTED_CIRCUITS ) ), + LOGIC_PROCESSOR_PRINT("material_logic_processor_print", EnumSet.of( AEFeature.PRINTED_CIRCUITS ) ), - SILICON_PRESS( 19, "material_silicon_press", EnumSet.of( AEFeature.PRESSES ) ), - SILICON_PRINT( 20, "material_silicon_print", EnumSet.of( AEFeature.PRINTED_CIRCUITS ) ), + SILICON_PRESS("material_silicon_press", EnumSet.of( AEFeature.PRESSES ) ), + SILICON_PRINT("material_silicon_print", EnumSet.of( AEFeature.PRINTED_CIRCUITS ) ), - NAME_PRESS( 21, "material_name_press", EnumSet.of( AEFeature.PRESSES ) ), + NAME_PRESS("material_name_press", EnumSet.of( AEFeature.PRESSES ) ), - LOGIC_PROCESSOR( 22, "material_logic_processor", EnumSet.of( AEFeature.PROCESSORS ) ), - CALCULATION_PROCESSOR( 23, "material_calculation_processor", EnumSet.of( AEFeature.PROCESSORS ) ), - ENGINEERING_PROCESSOR( 24, "material_engineering_processor", EnumSet.of( AEFeature.PROCESSORS ) ), + LOGIC_PROCESSOR("material_logic_processor", EnumSet.of( AEFeature.PROCESSORS ) ), + CALCULATION_PROCESSOR("material_calculation_processor", EnumSet.of( AEFeature.PROCESSORS ) ), + ENGINEERING_PROCESSOR("material_engineering_processor", EnumSet.of( AEFeature.PROCESSORS ) ), // Basic Cards - BASIC_CARD( 25, "material_basic_card", EnumSet.of( AEFeature.BASIC_CARDS ) ), - CARD_REDSTONE( 26, "material_card_redstone", EnumSet.of( AEFeature.BASIC_CARDS ) ), - CARD_CAPACITY( 27, "material_card_capacity", EnumSet.of( AEFeature.BASIC_CARDS ) ), + BASIC_CARD("material_basic_card", EnumSet.of( AEFeature.BASIC_CARDS ) ), + CARD_REDSTONE("material_card_redstone", EnumSet.of( AEFeature.BASIC_CARDS ) ), + CARD_CAPACITY("material_card_capacity", EnumSet.of( AEFeature.BASIC_CARDS ) ), // Adv Cards - ADVANCED_CARD( 28, "material_advanced_card", EnumSet.of( AEFeature.ADVANCED_CARDS ) ), - CARD_FUZZY( 29, "material_card_fuzzy", EnumSet.of( AEFeature.ADVANCED_CARDS ) ), - CARD_SPEED( 30, "material_card_speed", EnumSet.of( AEFeature.ADVANCED_CARDS ) ), - CARD_INVERTER( 31, "material_card_inverter", EnumSet.of( AEFeature.ADVANCED_CARDS ) ), + ADVANCED_CARD("material_advanced_card", EnumSet.of( AEFeature.ADVANCED_CARDS ) ), + CARD_FUZZY("material_card_fuzzy", EnumSet.of( AEFeature.ADVANCED_CARDS ) ), + CARD_SPEED("material_card_speed", EnumSet.of( AEFeature.ADVANCED_CARDS ) ), + CARD_INVERTER("material_card_inverter", EnumSet.of( AEFeature.ADVANCED_CARDS ) ), - CELL2_SPATIAL_PART( 32, "material_cell2_spatial_part", EnumSet.of( AEFeature.SPATIAL_IO ) ), - CELL16_SPATIAL_PART( 33, "material_cell16_spatial_part", EnumSet.of( AEFeature.SPATIAL_IO ) ), - CELL128_SPATIAL_PART( 34, "material_cell128_spatial_part", EnumSet.of( AEFeature.SPATIAL_IO ) ), + CELL2_SPATIAL_PART("material_cell2_spatial_part", EnumSet.of( AEFeature.SPATIAL_IO ) ), + CELL16_SPATIAL_PART("material_cell16_spatial_part", EnumSet.of( AEFeature.SPATIAL_IO ) ), + CELL128_SPATIAL_PART("material_cell128_spatial_part", EnumSet.of( AEFeature.SPATIAL_IO ) ), - CELL1K_PART( 35, "material_cell1k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ), - CELL4K_PART( 36, "material_cell4k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ), - CELL16K_PART( 37, "material_cell16k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ), - CELL64K_PART( 38, "material_cell64k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ), - EMPTY_STORAGE_CELL( 39, "material_empty_storage_cell", EnumSet.of( AEFeature.STORAGE_CELLS ) ), + CELL1K_PART("material_cell1k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ), + CELL4K_PART("material_cell4k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ), + CELL16K_PART("material_cell16k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ), + CELL64K_PART("material_cell64k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ), + EMPTY_STORAGE_CELL("material_empty_storage_cell", EnumSet.of( AEFeature.STORAGE_CELLS ) ), - WOODEN_GEAR( 40, "material_wooden_gear", EnumSet.of( AEFeature.GRIND_STONE ), "gearWood" ), + WOODEN_GEAR("material_wooden_gear", EnumSet.of( AEFeature.GRIND_STONE ), "gearWood" ), - WIRELESS( 41, "material_wireless", EnumSet.of( AEFeature.WIRELESS_ACCESS_TERMINAL ) ), - WIRELESS_BOOSTER( 42, "material_wireless_booster", EnumSet.of( AEFeature.WIRELESS_ACCESS_TERMINAL ) ), + WIRELESS("material_wireless", EnumSet.of( AEFeature.WIRELESS_ACCESS_TERMINAL ) ), + WIRELESS_BOOSTER("material_wireless_booster", EnumSet.of( AEFeature.WIRELESS_ACCESS_TERMINAL ) ), - FORMATION_CORE( 43, "material_formation_core", EnumSet.of( AEFeature.CORES ) ), - ANNIHILATION_CORE( 44, "material_annihilation_core", EnumSet.of( AEFeature.CORES ) ), + FORMATION_CORE("material_formation_core", EnumSet.of( AEFeature.CORES ) ), + ANNIHILATION_CORE("material_annihilation_core", EnumSet.of( AEFeature.CORES ) ), - SKY_DUST( 45, "material_sky_dust", EnumSet.of( AEFeature.DUSTS ) ), + SKY_DUST("material_sky_dust", EnumSet.of( AEFeature.DUSTS ) ), - ENDER_DUST( 46, "material_ender_dust", EnumSet.of( AEFeature.QUANTUM_NETWORK_BRIDGE ), "dustEnder,dustEnderPearl", EntitySingularity.class ), - SINGULARITY( 47, "material_singularity", EnumSet.of( AEFeature.QUANTUM_NETWORK_BRIDGE ), EntitySingularity.class ), - QUANTUM_ENTANGLED_SINGULARITY( 48, "material_quantum_entangled_singularity", EnumSet.of( AEFeature.QUANTUM_NETWORK_BRIDGE ), EntitySingularity.class ), + ENDER_DUST("material_ender_dust", EnumSet.of( AEFeature.QUANTUM_NETWORK_BRIDGE ), "dustEnder,dustEnderPearl", EntitySingularity.class ), + SINGULARITY("material_singularity", EnumSet.of( AEFeature.QUANTUM_NETWORK_BRIDGE ), EntitySingularity.class ), + QUANTUM_ENTANGLED_SINGULARITY("material_quantum_entangled_singularity", EnumSet.of( AEFeature.QUANTUM_NETWORK_BRIDGE ), EntitySingularity.class ), - BLANK_PATTERN( 52, "material_blank_pattern", EnumSet.of( AEFeature.PATTERNS ) ), - CARD_CRAFTING( 53, "material_card_crafting", EnumSet.of( AEFeature.ADVANCED_CARDS, AEFeature.CRAFTING_CPU ) ), + BLANK_PATTERN("material_blank_pattern", EnumSet.of( AEFeature.PATTERNS ) ), + CARD_CRAFTING("material_card_crafting", EnumSet.of( AEFeature.ADVANCED_CARDS, AEFeature.CRAFTING_CPU ) ), - FLUID_CELL1K_PART( 54, "material_fluid_cell1k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ), - FLUID_CELL4K_PART( 55, "material_fluid_cell4k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ), - FLUID_CELL16K_PART( 56, "material_fluid_cell16k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ), - FLUID_CELL64K_PART( 57, "material_fluid_cell64k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ); + FLUID_CELL1K_PART("material_fluid_cell1k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ), + FLUID_CELL4K_PART("material_fluid_cell4k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ), + FLUID_CELL16K_PART("material_fluid_cell16k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ), + FLUID_CELL64K_PART("material_fluid_cell64k_part", EnumSet.of( AEFeature.STORAGE_CELLS ) ); private final Set features; private final ModelResourceLocation model; private Item itemInstance; - private int damageValue; // stack! private MaterialStackSrc stackSrc; private String oreName; private Class droppedEntity; private boolean isRegistered = false; - MaterialType( final int metaValue, String modelName ) + MaterialType(String modelName) { - this( metaValue, modelName, EnumSet.of( AEFeature.CORE ) ); + this(modelName, EnumSet.of( AEFeature.CORE ) ); } - MaterialType( final int metaValue, String modelName, final Set features ) + MaterialType(String modelName, final Set features) { - this.setDamageValue( metaValue ); this.features = features; this.model = new ModelResourceLocation( new ResourceLocation( AppEng.MOD_ID, modelName ), "inventory" ); } - MaterialType( final int metaValue, String modelName, final Set features, final Class c ) + MaterialType(String modelName, final Set features, final Class c) { - this( metaValue, modelName, features ); + this(modelName, features ); this.droppedEntity = c; } - MaterialType( final int metaValue, String modelName, final Set features, final String oreDictionary, final Class c ) + MaterialType(String modelName, final Set features, final String oreDictionary, final Class c) { - this( metaValue, modelName, features ); + this(modelName, features ); this.oreName = oreDictionary; this.droppedEntity = c; } - MaterialType( final int metaValue, String modelName, final Set features, final String oreDictionary ) + MaterialType(String modelName, final Set features, final String oreDictionary) { - this( metaValue, modelName, features ); + this(modelName, features ); this.oreName = oreDictionary; } public ItemStack stack( final int size ) { - //FIXME - return new ItemStack( this.getItemInstance(), size/*, this.getDamageValue()*/ ); + return new ItemStack( this.getItemInstance(), size ); } - Set getFeature() + public Set getFeature() { return this.features; } @@ -192,37 +187,27 @@ public enum MaterialType return this.isRegistered; } - void markReady() + public void markReady() { this.isRegistered = true; } - public int getDamageValue() - { - return this.damageValue; - } - - void setDamageValue( final int damageValue ) - { - this.damageValue = damageValue; - } - public Item getItemInstance() { return this.itemInstance; } - void setItemInstance( final Item itemInstance ) + public void setItemInstance( final Item itemInstance ) { this.itemInstance = itemInstance; } - MaterialStackSrc getStackSrc() + public MaterialStackSrc getStackSrc() { return this.stackSrc; } - void setStackSrc( final MaterialStackSrc stackSrc ) + public void setStackSrc( final MaterialStackSrc stackSrc ) { this.stackSrc = stackSrc; } diff --git a/src/main/java/appeng/items/misc/ItemCrystalSeed.java b/src/main/java/appeng/items/misc/ItemCrystalSeed.java index ca8f6514a..9c9582a47 100644 --- a/src/main/java/appeng/items/misc/ItemCrystalSeed.java +++ b/src/main/java/appeng/items/misc/ItemCrystalSeed.java @@ -19,11 +19,11 @@ package appeng.items.misc; -import java.util.List; -import java.util.Optional; - -import javax.annotation.Nullable; - +import appeng.api.implementations.items.IGrowableCrystal; +import appeng.core.localization.ButtonToolTips; +import appeng.entity.EntityGrowingCrystal; +import appeng.items.AEBaseItem; +import com.google.common.base.Preconditions; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.util.ITooltipFlag; @@ -31,127 +31,68 @@ import net.minecraft.entity.Entity; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.IItemProvider; import net.minecraft.util.NonNullList; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import appeng.api.AEApi; -import appeng.api.definitions.IMaterials; -import appeng.api.implementations.items.IGrowableCrystal; -import appeng.api.recipes.ResolverResult; -import appeng.core.Api; -import appeng.core.localization.ButtonToolTips; -import appeng.entity.EntityGrowingCrystal; -import appeng.items.AEBaseItem; - +import javax.annotation.Nullable; +import java.util.List; +/** + * This item reprents one of the seeds used to grow various forms of quartz by + * throwing them into water (for that behavior, see the linked entity) + */ public class ItemCrystalSeed extends AEBaseItem implements IGrowableCrystal { - static final int LEVEL_OFFSET = 200; - static final int SINGLE_OFFSET = LEVEL_OFFSET * 3; + /** + * Name of NBT tag used to store the growth progress value. + */ + private static final String TAG_GROWTH_TICKS = "p"; - public static final int CERTUS = 0; - public static final int NETHER = SINGLE_OFFSET; - public static final int FLUIX = SINGLE_OFFSET * 2; - public static final int FINAL_STAGE = SINGLE_OFFSET * 3; + /** + * The number of growth ticks required to finish growing. + */ + private static final int GROWTH_TICKS_REQUIRED = 600; - public ItemCrystalSeed(Properties properties) { + /** + * The item to convert to, when growth finishes. + */ + private final IItemProvider grownItem; + + public ItemCrystalSeed(Properties properties, IItemProvider grownItem) { super(properties); - // FIXME this.setHasSubtypes( true ); - } - - @Nullable - public static ResolverResult getResolver( final int certus2 ) - { - - return Api.INSTANCE - .definitions() - .items() - .crystalSeed() - .maybeStack( 1 ) - .map( crystalSeedStack -> - { - // FIXME crystalSeedStack.setItemDamage( certus2 ); - crystalSeedStack = newStyle( crystalSeedStack ); - String itemName = crystalSeedStack.getItem().getRegistryName().getPath(); - return new ResolverResult( itemName, crystalSeedStack.getDamage(), crystalSeedStack.getTag() ); - } ) - .orElse( null ); - - } - - private static ItemStack newStyle( final ItemStack itemStack ) - { - getProgress( itemStack ); - return itemStack; - } - - static int getProgress( final ItemStack is ) - { - if( is.hasTag() ) - { - return is.getTag().getInt( "progress" ); - } - else - { - final int progress; - final CompoundNBT comp = is.getOrCreateTag(); - comp.putInt( "progress", progress = is.getDamage() ); - // FIXME is.setItemDamage( ( is.getDamage() / SINGLE_OFFSET ) * SINGLE_OFFSET ); - return progress; - } + this.grownItem = Preconditions.checkNotNull(grownItem); } @Nullable @Override public ItemStack triggerGrowth( final ItemStack is ) { - final int newDamage = getProgress( is ) + 1; - final IMaterials materials = Api.INSTANCE.definitions().materials(); - final int size = is.getCount(); - - if( newDamage == CERTUS + SINGLE_OFFSET ) - { - Optional quartzStack = materials.purifiedCertusQuartzCrystal().maybeStack( size ); - if( quartzStack.isPresent() ) - { - return quartzStack.get(); - } + final int growthTicks = getGrowthTicks( is ) + 1; + if (growthTicks >= GROWTH_TICKS_REQUIRED) { + return new ItemStack(grownItem, is.getCount()); + } else { + this.setGrowthTicks(is, growthTicks); + return is; } - if( newDamage == NETHER + SINGLE_OFFSET ) - { - Optional quartzStack = materials.purifiedNetherQuartzCrystal().maybeStack( size ); - if( quartzStack.isPresent() ) - { - return quartzStack.get(); - } - } - if( newDamage == FLUIX + SINGLE_OFFSET ) - { - Optional quartzStack = materials.purifiedFluixCrystal().maybeStack( size ); - if( quartzStack.isPresent() ) - { - return quartzStack.get(); - } - } - if( newDamage > FINAL_STAGE ) - { - return ItemStack.EMPTY; - } - - this.setProgress( is, newDamage ); - return is; } - private void setProgress( final ItemStack is, final int newDamage ) + private static int getGrowthTicks(final ItemStack is ) { - final CompoundNBT comp = is.getOrCreateTag(); - comp.putInt( "progress", newDamage ); - // FIXME is.setItemDamage( is.getDamage() / LEVEL_OFFSET * LEVEL_OFFSET ); + CompoundNBT tag = is.getTag(); + return tag != null ? tag.getInt(TAG_GROWTH_TICKS) : 0; + } + + private void setGrowthTicks(final ItemStack is, int ticks) + { + ticks = MathHelper.clamp(ticks, 0, GROWTH_TICKS_REQUIRED); + is.getOrCreateTag().putInt(TAG_GROWTH_TICKS, ticks); } @Override @@ -165,8 +106,8 @@ public class ItemCrystalSeed extends AEBaseItem implements IGrowableCrystal public void addInformation(final ItemStack stack, final World world, final List lines, final ITooltipFlag advancedTooltips ) { lines.add( ButtonToolTips.DoesntDespawn.getTranslationKey() ); - final int progress = getProgress( stack ) % SINGLE_OFFSET; - lines.add( new StringTextComponent( Math.floor( (float) progress / (float) ( SINGLE_OFFSET / 100 ) ) + "%" ) ); + final int progress = getGrowthTicks( stack ); + lines.add( new StringTextComponent( Math.round( 100 * progress / (float) GROWTH_TICKS_REQUIRED ) + "%" ) ); super.addInformation( stack, world, lines, advancedTooltips ); } @@ -177,47 +118,6 @@ public class ItemCrystalSeed extends AEBaseItem implements IGrowableCrystal return Integer.MAX_VALUE; } - @Override - public String getTranslationKey( final ItemStack is ) - { - final int damage = getProgress( is ); - - if( damage < CERTUS + SINGLE_OFFSET ) - { - return this.getTranslationKey() + ".certus"; - } - - if( damage < NETHER + SINGLE_OFFSET ) - { - return this.getTranslationKey() + ".nether"; - } - - if( damage < FLUIX + SINGLE_OFFSET ) - { - return this.getTranslationKey() + ".fluix"; - } - - return this.getTranslationKey(); - } - - @Override - public boolean isDamageable() - { - return false; - } - - @Override - public boolean isDamaged( final ItemStack stack ) - { - return false; - } - - @Override - public int getMaxDamage( final ItemStack stack ) - { - return FINAL_STAGE; - } - @Override public boolean hasCustomEntity( final ItemStack stack ) { @@ -240,20 +140,14 @@ public class ItemCrystalSeed extends AEBaseItem implements IGrowableCrystal @Override public void fillItemGroup(ItemGroup group, NonNullList items) { - // lvl 0 - items.add( newStyle( new ItemStack( this, 1 /* FIXME , CERTUS */ ) ) ); - items.add( newStyle( new ItemStack( this, 1 /* FIXME , NETHER */ ) ) ); - items.add( newStyle( new ItemStack( this, 1 /* FIXME , FLUIX */ ) ) ); - - // lvl 1 - items.add( newStyle( new ItemStack( this, 1 /* FIXME , LEVEL_OFFSET + CERTUS */ ) ) ); - items.add( newStyle( new ItemStack( this, 1 /* FIXME , LEVEL_OFFSET + NETHER */ ) ) ); - items.add( newStyle( new ItemStack( this, 1 /* FIXME , LEVEL_OFFSET + FLUIX */ ) ) ); - - // lvl 2 - items.add( newStyle( new ItemStack( this, 1 /* FIXME , LEVEL_OFFSET * 2 + CERTUS */ ) ) ); - items.add( newStyle( new ItemStack( this, 1 /* FIXME , LEVEL_OFFSET * 2 + NETHER */ ) ) ); - items.add( newStyle( new ItemStack( this, 1 /* FIXME , LEVEL_OFFSET * 2 + FLUIX */ ) ) ); + if (this.isInGroup(group)) { + // lvl 0 + items.add(new ItemStack(this, 1)); + // one tick before maturity + ItemStack almostFullGrown = new ItemStack(this, 1); + setGrowthTicks(almostFullGrown, GROWTH_TICKS_REQUIRED - 1); + items.add(almostFullGrown); + } } } diff --git a/src/main/java/appeng/recipes/AEItemResolver.java b/src/main/java/appeng/recipes/AEItemResolver.java index 92828b0d8..646dbaec8 100644 --- a/src/main/java/appeng/recipes/AEItemResolver.java +++ b/src/main/java/appeng/recipes/AEItemResolver.java @@ -19,10 +19,6 @@ package appeng.recipes; -import appeng.core.Api; -import net.minecraft.item.ItemStack; - -import appeng.api.AEApi; import appeng.api.definitions.IDefinitions; import appeng.api.definitions.IItems; import appeng.api.definitions.IParts; @@ -31,12 +27,13 @@ import appeng.api.recipes.ResolverResult; import appeng.api.recipes.ResolverResultSet; import appeng.api.util.AEColor; import appeng.api.util.AEColoredItemDefinition; +import appeng.core.Api; import appeng.core.AppEng; import appeng.items.materials.ItemMaterial; import appeng.items.materials.MaterialType; -import appeng.items.misc.ItemCrystalSeed; import appeng.items.parts.ItemPart; import appeng.items.parts.PartType; +import net.minecraft.item.ItemStack; public class AEItemResolver implements ISubItemResolver @@ -116,15 +113,15 @@ public class AEItemResolver implements ISubItemResolver { if( itemName.equalsIgnoreCase( "crystal_seed.certus" ) ) { - return ItemCrystalSeed.getResolver( ItemCrystalSeed.CERTUS ); + return new ResolverResultSet( "certus_crystal_seed", items.certusCrystalSeed().stack( 1 ) ); } if( itemName.equalsIgnoreCase( "crystal_seed.nether" ) ) { - return ItemCrystalSeed.getResolver( ItemCrystalSeed.NETHER ); + return new ResolverResultSet( "nether_crystal_seed", items.netherQuartzSeed().stack( 1 ) ); } if( itemName.equalsIgnoreCase( "crystal_seed.fluix" ) ) { - return ItemCrystalSeed.getResolver( ItemCrystalSeed.FLUIX ); + return new ResolverResultSet( "fluix_crystal_seed", items.fluixCrystalSeed().stack( 1 ) ); } return null; diff --git a/src/main/resources/assets/appliedenergistics2/lang/cs_cz.json b/src/main/resources/assets/appliedenergistics2/lang/cs_cz.json index c52609a36..999085aed 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/cs_cz.json +++ b/src/main/resources/assets/appliedenergistics2/lang/cs_cz.json @@ -319,9 +319,9 @@ "item.appliedenergistics2.view_cell": "Zobrazit článek", "item.appliedenergistics2.facade": "Kabelová fasáda", - "item.appliedenergistics2.crystal_seed.certus": "Semínko nakloněného křemene", - "item.appliedenergistics2.crystal_seed.nether": "Semínko křemene", - "item.appliedenergistics2.crystal_seed.fluix": "Semínko Fluixu", + "item.appliedenergistics2.certus_crystal_seed": "Semínko nakloněného křemene", + "item.appliedenergistics2.nether_crystal_seed": "Semínko křemene", + "item.appliedenergistics2.fluix_crystal_seed": "Semínko Fluixu", "item.appliedenergistics2.material.invalid_type": "Tento předmět je zakázaný.", "item.appliedenergistics2.material.advanced_card": "Pokročilá karta", "item.appliedenergistics2.material.annihilation_core": "Jádro zkázy", diff --git a/src/main/resources/assets/appliedenergistics2/lang/de_de.json b/src/main/resources/assets/appliedenergistics2/lang/de_de.json index 8a3cf0235..899d73d15 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/de_de.json +++ b/src/main/resources/assets/appliedenergistics2/lang/de_de.json @@ -359,9 +359,9 @@ "item.appliedenergistics2.view_cell": "Sichtzelle", "item.appliedenergistics2.facade": "Kabelfassade", - "item.appliedenergistics2.crystal_seed.certus": "Certusquarzkeim", - "item.appliedenergistics2.crystal_seed.nether": "Netherquarzkeim", - "item.appliedenergistics2.crystal_seed.fluix": "Fluixkeim", + "item.appliedenergistics2.certus_crystal_seed": "Certusquarzkeim", + "item.appliedenergistics2.nether_crystal_seed": "Netherquarzkeim", + "item.appliedenergistics2.fluix_crystal_seed": "Fluixkeim", "item.appliedenergistics2.material.invalid_type": "Dieses Item ist deaktiviert.", "item.appliedenergistics2.material.advanced_card": "Fortgeschrittene Karte", "item.appliedenergistics2.material.annihilation_core": "Annihilationskern", diff --git a/src/main/resources/assets/appliedenergistics2/lang/en_us.json b/src/main/resources/assets/appliedenergistics2/lang/en_us.json index 142178f1d..914996e15 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/en_us.json +++ b/src/main/resources/assets/appliedenergistics2/lang/en_us.json @@ -409,9 +409,9 @@ "item.appliedenergistics2.view_cell": "View Cell", "item.appliedenergistics2.facade": "Cable Facade", - "item.appliedenergistics2.crystal_seed.certus": "Certus Quartz Seed", - "item.appliedenergistics2.crystal_seed.nether": "Nether Quartz Seed", - "item.appliedenergistics2.crystal_seed.fluix": "Fluix Seed", + "item.appliedenergistics2.certus_crystal_seed": "Certus Quartz Seed", + "item.appliedenergistics2.nether_crystal_seed": "Nether Quartz Seed", + "item.appliedenergistics2.fluix_crystal_seed": "Fluix Seed", "item.appliedenergistics2.material.invalid_type": "This Item Is Disabled.", "item.appliedenergistics2.material.advanced_card": "Advanced Card", "item.appliedenergistics2.material.annihilation_core": "Annihilation Core", diff --git a/src/main/resources/assets/appliedenergistics2/lang/es_es.json b/src/main/resources/assets/appliedenergistics2/lang/es_es.json index 0684894c8..1b1a34cc4 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/es_es.json +++ b/src/main/resources/assets/appliedenergistics2/lang/es_es.json @@ -303,9 +303,9 @@ "item.appliedenergistics2.view_cell": "Celda de Visión", "item.appliedenergistics2.facade": "Fachada de Cable", - "item.appliedenergistics2.crystal_seed.certus": "Semilla de Cuarzo Certus", - "item.appliedenergistics2.crystal_seed.nether": "Semilla de Cuarzo", - "item.appliedenergistics2.crystal_seed.fluix": "Semilla de Fluix", + "item.appliedenergistics2.certus_crystal_seed": "Semilla de Cuarzo Certus", + "item.appliedenergistics2.nether_crystal_seed": "Semilla de Cuarzo", + "item.appliedenergistics2.fluix_crystal_seed": "Semilla de Fluix", "item.appliedenergistics2.material.advanced_card": "Tarjeta Avanzada", "item.appliedenergistics2.material.annihilation_core": "Núcleo de Absorción", "item.appliedenergistics2.material.basic_card": "Tarjeta Básica", diff --git a/src/main/resources/assets/appliedenergistics2/lang/fr_fr.json b/src/main/resources/assets/appliedenergistics2/lang/fr_fr.json index e51f7af04..31d861c30 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/fr_fr.json +++ b/src/main/resources/assets/appliedenergistics2/lang/fr_fr.json @@ -356,9 +356,9 @@ "item.appliedenergistics2.view_cell": "Cellule de visualisation", "item.appliedenergistics2.facade": "Façade de câble", - "item.appliedenergistics2.crystal_seed.certus": "Graine de Quartz Certus", - "item.appliedenergistics2.crystal_seed.nether": "Graine de Quartz du Nether", - "item.appliedenergistics2.crystal_seed.fluix": "Graine de Fluix", + "item.appliedenergistics2.certus_crystal_seed": "Graine de Quartz Certus", + "item.appliedenergistics2.nether_crystal_seed": "Graine de Quartz du Nether", + "item.appliedenergistics2.fluix_crystal_seed": "Graine de Fluix", "item.appliedenergistics2.material.invalid_type": "Cet objet est désactivé.", "item.appliedenergistics2.material.advanced_card": "Carte avancée", "item.appliedenergistics2.material.annihilation_core": "Noyau d'annihilation", diff --git a/src/main/resources/assets/appliedenergistics2/lang/it_it.json b/src/main/resources/assets/appliedenergistics2/lang/it_it.json index b848a8eaa..c9c7427bc 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/it_it.json +++ b/src/main/resources/assets/appliedenergistics2/lang/it_it.json @@ -340,9 +340,9 @@ "item.appliedenergistics2.view_cell": "Cella olografica", "item.appliedenergistics2.facade": "Facciata per cavo", - "item.appliedenergistics2.crystal_seed.certus": "Seme di quarzo certus", - "item.appliedenergistics2.crystal_seed.nether": "Seme di quarzo degli Inferi", - "item.appliedenergistics2.crystal_seed.fluix": "Seme di fluix", + "item.appliedenergistics2.certus_crystal_seed": "Seme di quarzo certus", + "item.appliedenergistics2.nether_crystal_seed": "Seme di quarzo degli Inferi", + "item.appliedenergistics2.fluix_crystal_seed": "Seme di fluix", "item.appliedenergistics2.material.invalid_type": "Quest'oggetto è disabilitato.", "item.appliedenergistics2.material.advanced_card": "Scheda avanzata", "item.appliedenergistics2.material.annihilation_core": "Nucleo di annientamento", diff --git a/src/main/resources/assets/appliedenergistics2/lang/ko_kr.json b/src/main/resources/assets/appliedenergistics2/lang/ko_kr.json index 679162ee4..d008f927d 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/ko_kr.json +++ b/src/main/resources/assets/appliedenergistics2/lang/ko_kr.json @@ -404,9 +404,9 @@ "item.appliedenergistics2.view_cell": "뷰 셀", "item.appliedenergistics2.facade": "케이블 덮개", - "item.appliedenergistics2.crystal_seed.certus": "서투스 석영 씨앗", - "item.appliedenergistics2.crystal_seed.nether": "지옥 석영 씨앗", - "item.appliedenergistics2.crystal_seed.fluix": "액정 씨앗", + "item.appliedenergistics2.certus_crystal_seed": "서투스 석영 씨앗", + "item.appliedenergistics2.nether_crystal_seed": "지옥 석영 씨앗", + "item.appliedenergistics2.fluix_crystal_seed": "액정 씨앗", "item.appliedenergistics2.material.invalid_type": "이 아이템은 비활성화됨", "item.appliedenergistics2.material.advanced_card": "고급 카드", "item.appliedenergistics2.material.annihilation_core": "소멸 코어", diff --git a/src/main/resources/assets/appliedenergistics2/lang/pt_br.json b/src/main/resources/assets/appliedenergistics2/lang/pt_br.json index 815db0330..bcaf13c99 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/pt_br.json +++ b/src/main/resources/assets/appliedenergistics2/lang/pt_br.json @@ -393,9 +393,9 @@ "item.appliedenergistics2.view_cell": "Célula de Visualização", "item.appliedenergistics2.facade": "Fachada de Cabos", - "item.appliedenergistics2.crystal_seed.certus": "Semente de Quartzo Certus", - "item.appliedenergistics2.crystal_seed.nether": "Semente de Quartzo do Nether", - "item.appliedenergistics2.crystal_seed.fluix": "Semente de Fluix", + "item.appliedenergistics2.certus_crystal_seed": "Semente de Quartzo Certus", + "item.appliedenergistics2.nether_crystal_seed": "Semente de Quartzo do Nether", + "item.appliedenergistics2.fluix_crystal_seed": "Semente de Fluix", "item.appliedenergistics2.material.invalid_type": "Esse item está Desativado.", "item.appliedenergistics2.material.advanced_card": "Cartão Avançado", "item.appliedenergistics2.material.annihilation_core": "Núcleo de Aniquilação", diff --git a/src/main/resources/assets/appliedenergistics2/lang/ro_ro.json b/src/main/resources/assets/appliedenergistics2/lang/ro_ro.json index b494dada9..3eaf4ffbd 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/ro_ro.json +++ b/src/main/resources/assets/appliedenergistics2/lang/ro_ro.json @@ -230,9 +230,9 @@ "item.appliedenergistics2.view_cell": "Vizionează Celulă", "item.appliedenergistics2.facade": "Faţadă de Cablu", - "item.appliedenergistics2.crystal_seed.certus": "Sămânţă de Cuarţ Certus", - "item.appliedenergistics2.crystal_seed.nether": "Sămânţă de Cuarţ de Iad", - "item.appliedenergistics2.crystal_seed.fluix": "Sămânţă de Fluix", + "item.appliedenergistics2.certus_crystal_seed": "Sămânţă de Cuarţ Certus", + "item.appliedenergistics2.nether_crystal_seed": "Sămânţă de Cuarţ de Iad", + "item.appliedenergistics2.fluix_crystal_seed": "Sămânţă de Fluix", "item.appliedenergistics2.material.advanced_card": "Cartelă Avansată", "item.appliedenergistics2.material.annihilation_core": "Centru de Anihilaţie", "item.appliedenergistics2.material.basic_card": "Cartelă de Bază", diff --git a/src/main/resources/assets/appliedenergistics2/lang/ru_ru.json b/src/main/resources/assets/appliedenergistics2/lang/ru_ru.json index 593426de3..e67c4b755 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/ru_ru.json +++ b/src/main/resources/assets/appliedenergistics2/lang/ru_ru.json @@ -390,9 +390,9 @@ "item.appliedenergistics2.view_cell": "Ячейка представления", "item.appliedenergistics2.facade": "Кабельный фасад", - "item.appliedenergistics2.crystal_seed.certus": "Семя истинного кварца", - "item.appliedenergistics2.crystal_seed.nether": "Семя кварца Нижнего мира", - "item.appliedenergistics2.crystal_seed.fluix": "Изменчивое семя", + "item.appliedenergistics2.certus_crystal_seed": "Семя истинного кварца", + "item.appliedenergistics2.nether_crystal_seed": "Семя кварца Нижнего мира", + "item.appliedenergistics2.fluix_crystal_seed": "Изменчивое семя", "item.appliedenergistics2.material.invalid_type": "Этот предмет отключен.", "item.appliedenergistics2.material.advanced_card": "Продвинутая карта", "item.appliedenergistics2.material.annihilation_core": "Ядро истребления", diff --git a/src/main/resources/assets/appliedenergistics2/lang/zh_cn.json b/src/main/resources/assets/appliedenergistics2/lang/zh_cn.json index b7cc44837..24bb805ba 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/zh_cn.json +++ b/src/main/resources/assets/appliedenergistics2/lang/zh_cn.json @@ -409,9 +409,9 @@ "item.appliedenergistics2.view_cell": "显示元件", "item.appliedenergistics2.facade": "线缆伪装板", - "item.appliedenergistics2.crystal_seed.certus": "赛特斯石英种子", - "item.appliedenergistics2.crystal_seed.nether": "下界石英种子", - "item.appliedenergistics2.crystal_seed.fluix": "福鲁伊克斯种子", + "item.appliedenergistics2.certus_crystal_seed": "赛特斯石英种子", + "item.appliedenergistics2.nether_crystal_seed": "下界石英种子", + "item.appliedenergistics2.fluix_crystal_seed": "福鲁伊克斯种子", "item.appliedenergistics2.material.invalid_type": "该物品被禁用.", "item.appliedenergistics2.material.advanced_card": "高级卡", "item.appliedenergistics2.material.annihilation_core": "破坏核心", diff --git a/src/main/resources/assets/appliedenergistics2/lang/zh_tw.json b/src/main/resources/assets/appliedenergistics2/lang/zh_tw.json index f9a9788c4..d48b55f30 100644 --- a/src/main/resources/assets/appliedenergistics2/lang/zh_tw.json +++ b/src/main/resources/assets/appliedenergistics2/lang/zh_tw.json @@ -390,9 +390,9 @@ "item.appliedenergistics2.view_cell": "顯示元件", "item.appliedenergistics2.facade": "線纜偽裝板", - "item.appliedenergistics2.crystal_seed.certus": "賽特斯石英種子", - "item.appliedenergistics2.crystal_seed.nether": "地獄石英鐘子", - "item.appliedenergistics2.crystal_seed.fluix": "福魯伊克斯種子", + "item.appliedenergistics2.certus_crystal_seed": "賽特斯石英種子", + "item.appliedenergistics2.nether_crystal_seed": "地獄石英鐘子", + "item.appliedenergistics2.fluix_crystal_seed": "福魯伊克斯種子", "item.appliedenergistics2.material.invalid_type": "這個物品被禁用。", "item.appliedenergistics2.material.advanced_card": "高級卡", "item.appliedenergistics2.material.annihilation_core": "破壞核心", diff --git a/src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_certus.json b/src/main/resources/assets/appliedenergistics2/models/item/certus_crystal_seed.json similarity index 93% rename from src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_certus.json rename to src/main/resources/assets/appliedenergistics2/models/item/certus_crystal_seed.json index d4380929f..2668d5a6b 100644 --- a/src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_certus.json +++ b/src/main/resources/assets/appliedenergistics2/models/item/certus_crystal_seed.json @@ -2,5 +2,6 @@ "parent": "item/generated", "textures": { "layer0": "appliedenergistics2:item/crystal_seed_certus" - } + }, + } diff --git a/src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_certus2.json b/src/main/resources/assets/appliedenergistics2/models/item/certus_crystal_seed_2.json similarity index 100% rename from src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_certus2.json rename to src/main/resources/assets/appliedenergistics2/models/item/certus_crystal_seed_2.json diff --git a/src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_certus3.json b/src/main/resources/assets/appliedenergistics2/models/item/certus_crystal_seed_3.json similarity index 100% rename from src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_certus3.json rename to src/main/resources/assets/appliedenergistics2/models/item/certus_crystal_seed_3.json diff --git a/src/main/resources/assets/appliedenergistics2/models/item/dense_energy_cell.json b/src/main/resources/assets/appliedenergistics2/models/item/dense_energy_cell.json index bddbfd3a0..78a9f64bb 100644 --- a/src/main/resources/assets/appliedenergistics2/models/item/dense_energy_cell.json +++ b/src/main/resources/assets/appliedenergistics2/models/item/dense_energy_cell.json @@ -1,3 +1,47 @@ { - "parent": "MISSING" + "parent": "appliedenergistics2:block/energy_cell/dense_energy_cell0", + "overrides": [ + { + "predicate": { + "appliedenergistics2:fill_level": 0.125 + }, + "model": "appliedenergistics2:block/energy_cell/dense_energy_cell1" + }, + { + "predicate": { + "appliedenergistics2:fill_level": 0.25 + }, + "model": "appliedenergistics2:block/energy_cell/dense_energy_cell2" + }, + { + "predicate": { + "appliedenergistics2:fill_level": 0.375 + }, + "model": "appliedenergistics2:block/energy_cell/dense_energy_cell3" + }, + { + "predicate": { + "appliedenergistics2:fill_level": 0.5 + }, + "model": "appliedenergistics2:block/energy_cell/dense_energy_cell4" + }, + { + "predicate": { + "appliedenergistics2:fill_level": 0.625 + }, + "model": "appliedenergistics2:block/energy_cell/dense_energy_cell5" + }, + { + "predicate": { + "appliedenergistics2:fill_level": 0.75 + }, + "model": "appliedenergistics2:block/energy_cell/dense_energy_cell6" + }, + { + "predicate": { + "appliedenergistics2:fill_level": 0.875 + }, + "model": "appliedenergistics2:block/energy_cell/dense_energy_cell7" + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/item/energy_cell.json b/src/main/resources/assets/appliedenergistics2/models/item/energy_cell.json index bddbfd3a0..0bdcc97bf 100644 --- a/src/main/resources/assets/appliedenergistics2/models/item/energy_cell.json +++ b/src/main/resources/assets/appliedenergistics2/models/item/energy_cell.json @@ -1,3 +1,47 @@ { - "parent": "MISSING" + "parent": "appliedenergistics2:block/energy_cell/energy_cell0", + "overrides": [ + { + "predicate": { + "appliedenergistics2:fill_level": 0.125 + }, + "model": "appliedenergistics2:block/energy_cell/energy_cell1" + }, + { + "predicate": { + "appliedenergistics2:fill_level": 0.25 + }, + "model": "appliedenergistics2:block/energy_cell/energy_cell2" + }, + { + "predicate": { + "appliedenergistics2:fill_level": 0.375 + }, + "model": "appliedenergistics2:block/energy_cell/energy_cell3" + }, + { + "predicate": { + "appliedenergistics2:fill_level": 0.5 + }, + "model": "appliedenergistics2:block/energy_cell/energy_cell4" + }, + { + "predicate": { + "appliedenergistics2:fill_level": 0.625 + }, + "model": "appliedenergistics2:block/energy_cell/energy_cell5" + }, + { + "predicate": { + "appliedenergistics2:fill_level": 0.75 + }, + "model": "appliedenergistics2:block/energy_cell/energy_cell6" + }, + { + "predicate": { + "appliedenergistics2:fill_level": 0.875 + }, + "model": "appliedenergistics2:block/energy_cell/energy_cell7" + } + ] } \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_fluix.json b/src/main/resources/assets/appliedenergistics2/models/item/fluix_crystal_seed.json similarity index 100% rename from src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_fluix.json rename to src/main/resources/assets/appliedenergistics2/models/item/fluix_crystal_seed.json diff --git a/src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_fluix2.json b/src/main/resources/assets/appliedenergistics2/models/item/fluix_crystal_seed_2.json similarity index 100% rename from src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_fluix2.json rename to src/main/resources/assets/appliedenergistics2/models/item/fluix_crystal_seed_2.json diff --git a/src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_fluix3.json b/src/main/resources/assets/appliedenergistics2/models/item/fluix_crystal_seed_3.json similarity index 100% rename from src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_fluix3.json rename to src/main/resources/assets/appliedenergistics2/models/item/fluix_crystal_seed_3.json diff --git a/src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_nether.json b/src/main/resources/assets/appliedenergistics2/models/item/nether_crystal_seed.json similarity index 100% rename from src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_nether.json rename to src/main/resources/assets/appliedenergistics2/models/item/nether_crystal_seed.json diff --git a/src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_nether2.json b/src/main/resources/assets/appliedenergistics2/models/item/nether_crystal_seed_2.json similarity index 100% rename from src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_nether2.json rename to src/main/resources/assets/appliedenergistics2/models/item/nether_crystal_seed_2.json diff --git a/src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_nether3.json b/src/main/resources/assets/appliedenergistics2/models/item/nether_crystal_seed_3.json similarity index 100% rename from src/main/resources/assets/appliedenergistics2/models/item/crystal_seed_nether3.json rename to src/main/resources/assets/appliedenergistics2/models/item/nether_crystal_seed_3.json diff --git a/src/main/resources/assets/appliedenergistics2/models/item/quantum_link.json b/src/main/resources/assets/appliedenergistics2/models/item/quantum_link.json index bddbfd3a0..624f8d400 100644 --- a/src/main/resources/assets/appliedenergistics2/models/item/quantum_link.json +++ b/src/main/resources/assets/appliedenergistics2/models/item/quantum_link.json @@ -1,3 +1,3 @@ { - "parent": "MISSING" + "parent": "appliedenergistics2:block/qnb/link" } \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/item/quantum_ring.json b/src/main/resources/assets/appliedenergistics2/models/item/quantum_ring.json index bddbfd3a0..15520b719 100644 --- a/src/main/resources/assets/appliedenergistics2/models/item/quantum_ring.json +++ b/src/main/resources/assets/appliedenergistics2/models/item/quantum_ring.json @@ -1,3 +1,3 @@ { - "parent": "MISSING" + "parent": "appliedenergistics2:block/qnb/ring" } \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/item/quartz_growth_accelerator.json b/src/main/resources/assets/appliedenergistics2/models/item/quartz_growth_accelerator.json index bddbfd3a0..24f638a96 100644 --- a/src/main/resources/assets/appliedenergistics2/models/item/quartz_growth_accelerator.json +++ b/src/main/resources/assets/appliedenergistics2/models/item/quartz_growth_accelerator.json @@ -1,3 +1,3 @@ { - "parent": "MISSING" + "parent": "appliedenergistics2:block/quartz_growth_accelerator_off" } \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/item/security_station.json b/src/main/resources/assets/appliedenergistics2/models/item/security_station.json index bddbfd3a0..0432a822a 100644 --- a/src/main/resources/assets/appliedenergistics2/models/item/security_station.json +++ b/src/main/resources/assets/appliedenergistics2/models/item/security_station.json @@ -1,3 +1,3 @@ { - "parent": "MISSING" + "parent": "appliedenergistics2:block/security_station_off" } \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/item/vibration_chamber.json b/src/main/resources/assets/appliedenergistics2/models/item/vibration_chamber.json index bddbfd3a0..49eff78d5 100644 --- a/src/main/resources/assets/appliedenergistics2/models/item/vibration_chamber.json +++ b/src/main/resources/assets/appliedenergistics2/models/item/vibration_chamber.json @@ -1,3 +1,3 @@ { - "parent": "MISSING" + "parent": "appliedenergistics2:block/vibration_chamber_off" } \ No newline at end of file diff --git a/src/main/resources/assets/appliedenergistics2/models/item/wireless_access_point.json b/src/main/resources/assets/appliedenergistics2/models/item/wireless_access_point.json index bddbfd3a0..3a530222d 100644 --- a/src/main/resources/assets/appliedenergistics2/models/item/wireless_access_point.json +++ b/src/main/resources/assets/appliedenergistics2/models/item/wireless_access_point.json @@ -1,3 +1,3 @@ { - "parent": "MISSING" + "parent": "appliedenergistics2:block/wireless_access_point_off" } \ No newline at end of file