diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 77e01d676..97e4d45d1 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -176,6 +176,7 @@ public class Fluids { public static FluidType FULLERENE; public static FluidType STELLAR_FLUX; public static FluidType VITRIOL; + public static FluidType SLOP; /* Lagacy names for compatibility purposes */ @Deprecated public static FluidType ACID; //JAOPCA uses this, apparently @@ -377,7 +378,8 @@ public class Fluids { NAPHTHA_DS = new FluidType("NAPHTHA_DS", 0x63614E, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x5F6D44)).addTraits(LIQUID, VISCOUS, P_FUEL); LIGHTOIL_DS = new FluidType("LIGHTOIL_DS", 0x63543E, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xB46B52)).addTraits(LIQUID, P_FUEL); STELLAR_FLUX = new FluidType("STELLAR_FLUX", 0xE300FF, 0, 4, 4, EnumSymbol.ANTIMATTER).addTraits(ANTI, GASEOUS); - VITRIOL = new FluidType(140, "VITRIOL", 0x6E5222, 2, 0, 1, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS); + VITRIOL = new FluidType("VITRIOL", 0x6E5222, 2, 0, 1, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS); + SLOP = new FluidType(141, "SLOP", 0x929D45, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS); // ^ ^ ^ ^ ^ ^ ^ ^ //ADD NEW FLUIDS HERE diff --git a/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java b/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java index da7713b81..ec26b1d4e 100644 --- a/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java +++ b/src/main/java/com/hbm/items/special/ItemBedrockOreNew.java @@ -1,12 +1,14 @@ package com.hbm.items.special; import static com.hbm.inventory.OreDictManager.*; +import static com.hbm.items.special.ItemBedrockOreNew.ProcessingTrait.*; import java.util.List; import java.util.Locale; import com.hbm.items.ModItems; import com.hbm.util.EnumUtil; +import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -23,6 +25,7 @@ import com.hbm.render.icon.TextureAtlasSpriteMutatable; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; @@ -30,8 +33,9 @@ import net.minecraft.util.StatCollector; import net.minecraftforge.oredict.OreDictionary; public class ItemBedrockOreNew extends Item { - + public IIcon[] icons = new IIcon[BedrockOreType.values().length * BedrockOreGrade.values().length]; + public IIcon[] overlays = new IIcon[ProcessingTrait.values().length]; public ItemBedrockOreNew() { this.setHasSubtypes(true); @@ -55,6 +59,11 @@ public class ItemBedrockOreNew extends Item { } } } + + for(int i = 0; i < overlays.length; i++) { + ProcessingTrait trait = ProcessingTrait.values()[i]; + overlays[i] = reg.registerIcon(RefStrings.MODID + ":bedrock_ore_overlay." + trait.name().toLowerCase(Locale.US)); + } } @Override @@ -68,6 +77,23 @@ public class ItemBedrockOreNew extends Item { } } + @Override + @SideOnly(Side.CLIENT) + public boolean requiresMultipleRenderPasses() { + return true; + } + + @Override + public int getRenderPasses(int metadata) { + return 1 + this.getGrade(metadata).traits.length; + } + + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamageForRenderPass(int meta, int pass) { + if(pass == 0) return this.getIconFromDamage(meta); + return this.overlays[this.getGrade(meta).traits[pass - 1].ordinal()]; + } + @Override @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int meta) { @@ -81,6 +107,14 @@ public class ItemBedrockOreNew extends Item { String type = StatCollector.translateToLocalFormatted(this.getUnlocalizedNameInefficiently(stack) + ".type." + this.getType(meta).suffix + ".name"); return StatCollector.translateToLocalFormatted(this.getUnlocalizedNameInefficiently(stack) + ".grade." + this.getGrade(meta).name().toLowerCase(Locale.US) + ".name", type); } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + for(ProcessingTrait trait : this.getGrade(stack.getItemDamage()).traits) { + list.add(I18nUtil.resolveKey(this.getUnlocalizedNameInefficiently(stack) + ".trait." + trait.name().toLowerCase(Locale.US))); + } + } public static enum BedrockOreType { // primary sulfuric solvent radsolvent @@ -147,6 +181,7 @@ public class ItemBedrockOreNew extends Item { @Override @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack stack, int pass) { + if(pass != 0) return 0xFFFFFF; BedrockOreGrade grade = this.getGrade(stack.getItemDamage()); return grade.tint; } @@ -156,43 +191,55 @@ public class ItemBedrockOreNew extends Item { public static final int arc = 0xC3A2A2; public static final int washed = 0xDBE2CB; + public static enum ProcessingTrait { + ROASTED, + ARC, + WASHED, + CENTRIFUGED, + SULFURIC, + SOLVENT, + RAD + } + public static enum BedrockOreGrade { - BASE(none, "base"), //from the slopper - BASE_ROASTED(roasted, "base"), //optional combination oven step, yields vitriol - BASE_WASHED(washed, "base"), //primitive-ass acidizer with water - PRIMARY(none, "primary"), //centrifuging for more primary - PRIMARY_ROASTED(roasted, "primary"), //optional comboven - PRIMARY_SULFURIC(0xFFFFD3, "primary"), //sulfuric acid - PRIMARY_NOSULFURIC(0xD3D4FF, "primary"),//from centrifuging, sulfuric byproduct removed - PRIMARY_SOLVENT(0xD3F0FF, "primary"), //solvent - PRIMARY_NOSOLVENT(0xFFDED3, "primary"), //solvent byproduct removed - PRIMARY_RAD(0xECFFD3, "primary"), //radsolvent - PRIMARY_NORAD(0xEBD3FF, "primary"), //radsolvent byproduct removed - PRIMARY_FIRST(0xFFD3D4, "primary"), //higher first material yield - PRIMARY_SECOND(0xD3FFEB, "primary"), //higher second material yield - CRUMBS(none, "crumbs"), //endpoint for primary, recycling + BASE(none, "base"), //from the slopper + BASE_ROASTED(roasted, "base", ROASTED), //optional combination oven step, yields vitriol + BASE_WASHED(washed, "base", WASHED), //primitive-ass acidizer with water + PRIMARY(none, "primary", CENTRIFUGED), //centrifuging for more primary + PRIMARY_ROASTED(roasted, "primary", ROASTED), //optional comboven + PRIMARY_SULFURIC(0xFFFFD3, "primary", SULFURIC), //sulfuric acid + PRIMARY_NOSULFURIC(0xD3D4FF, "primary", CENTRIFUGED, SULFURIC), //from centrifuging, sulfuric byproduct removed + PRIMARY_SOLVENT(0xD3F0FF, "primary", SOLVENT), //solvent + PRIMARY_NOSOLVENT(0xFFDED3, "primary", CENTRIFUGED, SOLVENT), //solvent byproduct removed + PRIMARY_RAD(0xECFFD3, "primary", RAD), //radsolvent + PRIMARY_NORAD(0xEBD3FF, "primary", CENTRIFUGED, RAD), //radsolvent byproduct removed + PRIMARY_FIRST(0xFFD3D4, "primary", CENTRIFUGED), //higher first material yield + PRIMARY_SECOND(0xD3FFEB, "primary", CENTRIFUGED), //higher second material yield + CRUMBS(none, "crumbs", CENTRIFUGED), //endpoint for primary, recycling - SULFURIC_BYPRODUCT(none, "sulfuric"), //from centrifuging - SULFURIC_ROASTED(roasted, "sulfuric"), //comboven again - SULFURIC_ARC(arc, "sulfuric"), //alternate step - SULFURIC_WASHED(washed, "sulfuric"), //sulfuric endpoint + SULFURIC_BYPRODUCT(none, "sulfuric", CENTRIFUGED, SULFURIC), //from centrifuging + SULFURIC_ROASTED(roasted, "sulfuric", ROASTED, SULFURIC), //comboven again + SULFURIC_ARC(arc, "sulfuric", ARC, SULFURIC), //alternate step + SULFURIC_WASHED(washed, "sulfuric", WASHED, SULFURIC), //sulfuric endpoint - SOLVENT_BYPRODUCT(none, "solvent"), //from centrifuging - SOLVENT_ROASTED(roasted, "solvent"), //comboven again - SOLVENT_ARC(arc, "solvent"), //alternate step - SOLVENT_WASHED(washed, "solvent"), //solvent endpoint + SOLVENT_BYPRODUCT(none, "solvent", CENTRIFUGED, SOLVENT), //from centrifuging + SOLVENT_ROASTED(roasted, "solvent", ROASTED, SOLVENT), //comboven again + SOLVENT_ARC(arc, "solvent", ARC, SOLVENT), //alternate step + SOLVENT_WASHED(washed, "solvent", WASHED, SOLVENT), //solvent endpoint - RAD_BYPRODUCT(none, "rad"), //from centrifuging - RAD_ROASTED(roasted, "rad"), //comboven again - RAD_ARC(arc, "rad"), //alternate step - RAD_WASHED(washed, "rad"); //rad endpoint + RAD_BYPRODUCT(none, "rad", CENTRIFUGED, RAD), //from centrifuging + RAD_ROASTED(roasted, "rad", ROASTED, RAD), //comboven again + RAD_ARC(arc, "rad", ARC, RAD), //alternate step + RAD_WASHED(washed, "rad", WASHED, RAD); //rad endpoint public int tint; public String prefix; + public ProcessingTrait[] traits; - private BedrockOreGrade(int tint, String prefix) { + private BedrockOreGrade(int tint, String prefix, ProcessingTrait... traits) { this.tint = tint; this.prefix = prefix; + this.traits = traits; } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java index 1fdbe4de6..dccefcab4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java @@ -1,31 +1,195 @@ package com.hbm.tileentity.machine; import com.hbm.inventory.container.ContainerOreSlopper; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIOreSlopper; +import com.hbm.items.ModItems; +import com.hbm.items.special.ItemBedrockOreBase; +import com.hbm.items.special.ItemBedrockOreNew; +import com.hbm.items.special.ItemBedrockOreNew.BedrockOreGrade; +import com.hbm.items.special.ItemBedrockOreNew.BedrockOreType; +import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class TileEntityMachineOreSlopper extends TileEntityMachineBase implements IGUIProvider { + + public long power; + public static final long maxPower = 1_000_000; + + public static final int waterUsedBase = 1_000; + public int waterUsed = waterUsedBase; + public static final long consumptionBase = 200; + public long consumption = consumptionBase; + + public float progress; + public boolean processing; + + public SlopperAnimation animation = SlopperAnimation.LOWERING; + public float slider; + public float prevSlider; + public float bucket; + public float prevBucket; + public int delay; + + public static FluidTank[] tanks; + public double[] ores = new double[BedrockOreType.values().length]; public TileEntityMachineOreSlopper() { super(11); + tanks = new FluidTank[2]; + tanks[0] = new FluidTank(Fluids.WATER, 16_000); + tanks[1] = new FluidTank(Fluids.SLOP, 16_000); } @Override public String getName() { return "container.machineOreSlopper"; } + + public static enum SlopperAnimation { + LOWERING, LIFTING, MOVE_SHREDDER, DUMPING, MOVE_BUCKET + } @Override public void updateEntity() { + if(!worldObj.isRemote) { + + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); + + tanks[0].setType(1, slots); + FluidType conversion = this.getFluidOutput(tanks[0].getTankType()); + if(conversion != null) tanks[1].setTankType(conversion); + + this.processing = false; + + if(canSlop()) { + this.power -= this.consumption; + this.progress += 1F/200F; + this.processing = true; + boolean markDirty = false; + + while(progress >= 1F && canSlop()) { + progress -= 1F; + + for(BedrockOreType type : BedrockOreType.values()) { + ores[type.ordinal()] += ItemBedrockOreBase.getOreAmount(slots[2], type); + } + + this.decrStackSize(2, 1); + this.tanks[0].setFill(this.tanks[0].getFill() - waterUsed); + this.tanks[1].setFill(this.tanks[1].getFill() + waterUsed); + markDirty = true; + } + + if(markDirty) this.markDirty(); + + } else { + this.progress = 0; + } + + for(BedrockOreType type : BedrockOreType.values()) { + ItemStack output = ItemBedrockOreNew.make(BedrockOreGrade.BASE, type); + outer: while(ores[type.ordinal()] >= 1) { + for(int i = 3; i <= 8; i++) if(slots[i] != null && slots[i].getItem() == output.getItem() && slots[i].getItemDamage() == output.getItemDamage() && slots[i].stackSize < output.getMaxStackSize()) { + slots[i].stackSize++; ores[type.ordinal()] -= 1F; continue outer; + } + for(int i = 3; i <= 8; i++) if(slots[i] == null) { + slots[i] = output; ores[type.ordinal()] -= 1F; continue outer; + } + } + } + + } else { + + this.prevSlider = this.slider; + this.prevBucket = this.bucket; + + if(this.processing) { + + if(delay > 0) { + delay--; + return; + } + + switch(animation) { + case LOWERING: + this.bucket += 1F/40F; + if(bucket >= 1F) { + bucket = 1F; + animation = SlopperAnimation.LIFTING; + delay = 20; + } + break; + case LIFTING: + this.bucket -= 1F/40F; + if(bucket <= 0) { + bucket = 0F; + animation = SlopperAnimation.MOVE_SHREDDER; + delay = 10; + } + break; + case MOVE_SHREDDER: + this.slider += 1/60F; + if(slider >= 1F) { + slider = 1F; + animation = SlopperAnimation.DUMPING; + delay = 60; + } + break; + case DUMPING: + animation = SlopperAnimation.MOVE_BUCKET; + break; + case MOVE_BUCKET: + this.slider -= 1/60F; + if(slider <= 0F) { + animation = SlopperAnimation.LOWERING; + delay = 10; + } + break; + } + } + } + } + + @Override public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(power); + buf.writeFloat(progress); + buf.writeBoolean(processing); + } + + @Override public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.progress = buf.readFloat(); + this.processing = buf.readBoolean(); + } + + public boolean canSlop() { + if(this.getFluidOutput(tanks[0].getTankType()) == null) return false; + if(tanks[0].getFill() < waterUsed) return false; + if(tanks[1].getFill() + waterUsed > tanks[1].getMaxFill()) return false; + if(power < consumption) return false; + + return slots[2] != null && slots[2].getItem() == ModItems.bedrock_ore_base; + } + + public FluidType getFluidOutput(FluidType input) { + if(input == Fluids.WATER) return Fluids.SLOP; + return null; } @Override diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 7c6fd6b3a..8e784c2b7 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1999,6 +1999,13 @@ item.bedrock_ore.grade.rad_byproduct.name=%s Bedrock Ore, Cleaned Byproduct item.bedrock_ore.grade.rad_roasted.name=%s Bedrock Ore, Roasted Cleaned Byproduct item.bedrock_ore.grade.rad_arc.name=%s Bedrock Ore, Seared Cleaned Byproduct item.bedrock_ore.grade.rad_washed.name=%s Bedrock Ore, Washed Cleaned Byproduct +item.bedrock_ore.trait.arc=§6Arc Smelted +item.bedrock_ore.trait.centrifuged=§9Centrifuged +item.bedrock_ore.trait.rad=§aTreated with High-Performance Solvent +item.bedrock_ore.trait.roasted=§eCombination Oven Roasted +item.bedrock_ore.trait.solvent=§fTreated with Solvent +item.bedrock_ore.trait.sulfuric=§6Treated with Sulfuric Acid +item.bedrock_ore.trait.washed=§bWashed item.bedrock_ore.type.actinide.name=Actinide item.bedrock_ore.type.crystal.name=Crystalline item.bedrock_ore.type.heavy.name=Heavy Metal diff --git a/src/main/resources/assets/hbm/textures/gui/fluids/slop.png b/src/main/resources/assets/hbm/textures/gui/fluids/slop.png new file mode 100644 index 000000000..4d521d585 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/fluids/slop.png differ diff --git a/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.arc.png b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.arc.png new file mode 100644 index 000000000..77aba4494 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.arc.png differ diff --git a/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.centrifuged.png b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.centrifuged.png new file mode 100644 index 000000000..a739ce09c Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.centrifuged.png differ diff --git a/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.rad.png b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.rad.png new file mode 100644 index 000000000..86e67e437 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.rad.png differ diff --git a/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.roasted.png b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.roasted.png new file mode 100644 index 000000000..3c1ec46ac Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.roasted.png differ diff --git a/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.solvent.png b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.solvent.png new file mode 100644 index 000000000..95f45567c Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.solvent.png differ diff --git a/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.sulfuric.png b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.sulfuric.png new file mode 100644 index 000000000..5eaa9ba1b Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.sulfuric.png differ diff --git a/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.washed.png b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.washed.png new file mode 100644 index 000000000..14b860e0c Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/bedrock_ore_overlay.washed.png differ diff --git a/src/main/resources/assets/hbm/textures/models/tank/tank_SLOP.png b/src/main/resources/assets/hbm/textures/models/tank/tank_SLOP.png new file mode 100644 index 000000000..7e99ca01c Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/tank/tank_SLOP.png differ