Merge branch 'HbmMods:master' into OC_bugfix
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
BIN
src/main/resources/assets/hbm/textures/gui/fluids/slop.png
Normal file
|
After Width: | Height: | Size: 554 B |
|
After Width: | Height: | Size: 126 B |
|
After Width: | Height: | Size: 125 B |
|
After Width: | Height: | Size: 132 B |
|
After Width: | Height: | Size: 131 B |
|
After Width: | Height: | Size: 132 B |
|
After Width: | Height: | Size: 134 B |
|
After Width: | Height: | Size: 127 B |
BIN
src/main/resources/assets/hbm/textures/models/tank/tank_SLOP.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |