compat recipes, watz pump functionality, IO filter

This commit is contained in:
Boblet 2023-04-04 16:28:21 +02:00
parent a33abf85ea
commit 8244747692
6 changed files with 113 additions and 147 deletions

View File

@ -1,12 +1,14 @@
package com.hbm.blocks.machine;
import com.hbm.blocks.BlockDummyable;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntityWatz;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class Watz extends BlockDummyable {
@ -17,9 +19,8 @@ public class Watz extends BlockDummyable {
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12)
return new TileEntityWatz();
if(meta >= 12) return new TileEntityWatz();
if(meta >= 6) return new TileEntityProxyCombo().inventory().fluid();
return null;
}
@ -37,4 +38,26 @@ public class Watz extends BlockDummyable {
public int getOffset() {
return 3;
}
@Override
protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
return super.checkRequirement(world, x, y, z, dir, o); //TODO
}
@Override
protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
x += dir.offsetX * o;
z += dir.offsetZ * o;
this.makeExtra(world, x + 2, y, z);
this.makeExtra(world, x - 2, y, z);
this.makeExtra(world, x, y, z + 2);
this.makeExtra(world, x, y, z - 2);
this.makeExtra(world, x + 2, y + 2, z);
this.makeExtra(world, x - 2, y + 2, z);
this.makeExtra(world, x, y + 2, z + 2);
this.makeExtra(world, x, y + 2, z - 2);
}
}

View File

@ -14,7 +14,6 @@ import com.hbm.entity.mob.botprime.*;
import com.hbm.entity.mob.siege.*;
import com.hbm.entity.particle.*;
import com.hbm.entity.projectile.*;
import com.hbm.entity.qic.*;
import com.hbm.main.MainRegistry;
import com.hbm.util.Tuple.Quartet;
@ -201,7 +200,6 @@ public class EntityMappings {
addEntity(EntityArtilleryShell.class, "entity_artillery_shell", 1000);
addEntity(EntityArtilleryRocket.class, "entity_himars", 1000);
addEntity(EntitySiegeTunneler.class, "entity_meme_tunneler", 1000);
addEntity(EntitySPV.class, "entity_self_propelled_vehicle_mark_1", 1000);
addEntity(EntityCog.class, "entity_stray_cog", 1000);
addEntity(EntitySawblade.class, "entity_stray_saw", 1000);
addEntity(EntityChemical.class, "entity_chemthrower_splash", 1000);

View File

@ -1,73 +0,0 @@
package com.hbm.entity.qic;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public class EntitySPV extends Entity {
public EntitySPV(World p_i1582_1_) {
super(p_i1582_1_);
this.setSize(0.5F, 0.5F);
}
@Override
protected void entityInit() { }
@Override
protected void readEntityFromNBT(NBTTagCompound p_70037_1_) { }
@Override
protected void writeEntityToNBT(NBTTagCompound p_70014_1_) { }
@Override
public void onUpdate() {
if(this.riddenByEntity != null && this.riddenByEntity instanceof EntityLivingBase && ((EntityLivingBase)this.riddenByEntity).moveForward != 0) {
EntityLivingBase riding = (EntityLivingBase) this.riddenByEntity;
Vec3 vec = riding.getLookVec();
this.motionX = vec.xCoord * riding.moveForward * 0.25D;
this.motionY = vec.yCoord * riding.moveForward * 0.25D;
this.motionZ = vec.zCoord * riding.moveForward * 0.25D;
} else if(this.riddenByEntity == null) {
this.motionY -= 0.01D;
if(this.onGround) {
this.motionX = 0;
this.motionY = 0;
this.motionZ = 0;
}
} else {
this.motionX = 0;
this.motionY = 0;
this.motionZ = 0;
}
this.moveEntity(this.motionX, this.motionY, this.motionZ);
//this.setPositionAndRotation(this.posX + motionX, this.posY + motionY, this.posZ + motionZ, this.rotationYaw, this.rotationPitch);
super.onUpdate();
}
@Override
public boolean canBeCollidedWith() {
return true;
}
@Override
public boolean interactFirst(EntityPlayer player) {
if(super.interactFirst(player)) {
return true;
} else if(!this.worldObj.isRemote && (this.riddenByEntity == null || this.riddenByEntity == player)) {
player.mountEntity(this);
return true;
} else {
return false;
}
}
}

View File

@ -12,6 +12,7 @@ import com.google.gson.stream.JsonWriter;
import com.hbm.blocks.ModBlocks;
import com.hbm.config.GeneralConfig;
import com.hbm.handler.imc.IMCCentrifuge;
import static com.hbm.inventory.OreDictManager.*;
import com.hbm.inventory.OreDictManager.DictFrame;
import com.hbm.inventory.RecipesCommon;
import com.hbm.inventory.RecipesCommon.AStack;
@ -140,115 +141,115 @@ public class CentrifugeRecipes extends SerializableRecipe {
new ItemStack(ModItems.dust, 1),
new ItemStack(ModItems.dust, 1) });
recipes.put(new OreDictStack("oreCoal"), new ItemStack[] {
recipes.put(new OreDictStack(COAL.ore()), new ItemStack[] {
new ItemStack(ModItems.powder_coal, 2),
new ItemStack(ModItems.powder_coal, 2),
new ItemStack(ModItems.powder_coal, 2),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("oreLignite"), new ItemStack[] {
recipes.put(new OreDictStack(LIGNITE.ore()), new ItemStack[] {
new ItemStack(ModItems.powder_lignite, 2),
new ItemStack(ModItems.powder_lignite, 2),
new ItemStack(ModItems.powder_lignite, 2),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("oreIron"), new ItemStack[] {
recipes.put(new OreDictStack(IRON.ore()), new ItemStack[] {
new ItemStack(ModItems.powder_iron, 1),
new ItemStack(ModItems.powder_iron, 1),
new ItemStack(ModItems.powder_iron, 1),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("oreGold"), new ItemStack[] {
recipes.put(new OreDictStack(GOLD.ore()), new ItemStack[] {
lbs ? new ItemStack(ModItems.powder_gold, 2) : new ItemStack(ModItems.powder_gold, 1),
new ItemStack(ModItems.powder_gold, 1),
lbs ? new ItemStack(ModItems.nugget_bismuth, 1) : new ItemStack(ModItems.powder_gold, 1),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("oreDiamond"), new ItemStack[] {
recipes.put(new OreDictStack(DIAMOND.ore()), new ItemStack[] {
new ItemStack(ModItems.powder_diamond, 1),
new ItemStack(ModItems.powder_diamond, 1),
new ItemStack(ModItems.powder_diamond, 1),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("oreEmerald"), new ItemStack[] {
recipes.put(new OreDictStack(EMERALD.ore()), new ItemStack[] {
new ItemStack(ModItems.powder_emerald, 1),
new ItemStack(ModItems.powder_emerald, 1),
new ItemStack(ModItems.powder_emerald, 1),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("oreTitanium"), new ItemStack[] {
recipes.put(new OreDictStack(TI.ore()), new ItemStack[] {
lbs ? new ItemStack(ModItems.powder_titanium, 2) : new ItemStack(ModItems.powder_titanium, 1),
lbs ? new ItemStack(ModItems.powder_titanium, 2) : new ItemStack(ModItems.powder_titanium, 1),
new ItemStack(ModItems.powder_iron, 1),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("oreQuartz"), new ItemStack[] {
recipes.put(new OreDictStack(NETHERQUARTZ.ore()), new ItemStack[] {
new ItemStack(ModItems.powder_quartz, 1),
new ItemStack(ModItems.powder_quartz, 1),
new ItemStack(ModItems.powder_lithium_tiny, 1),
new ItemStack(Blocks.netherrack, 1) });
recipes.put(new OreDictStack("oreTungsten"), new ItemStack[] {
recipes.put(new OreDictStack(W.ore()), new ItemStack[] {
lbs ? new ItemStack(ModItems.powder_tungsten, 2) : new ItemStack(ModItems.powder_tungsten, 1),
new ItemStack(ModItems.powder_tungsten, 1),
new ItemStack(ModItems.powder_iron, 1),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("oreCopper"), new ItemStack[] {
recipes.put(new OreDictStack(CU.ore()), new ItemStack[] {
lbs ? new ItemStack(ModItems.powder_copper, 2) : new ItemStack(ModItems.powder_copper, 1),
new ItemStack(ModItems.powder_copper, 1),
new ItemStack(ModItems.powder_gold, 1),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("oreAluminum"), new ItemStack[] {
recipes.put(new OreDictStack(AL.ore()), new ItemStack[] {
new ItemStack(ModItems.powder_aluminium, 1),
new ItemStack(ModItems.powder_aluminium, 1),
new ItemStack(ModItems.powder_iron, 1),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("oreLead"), new ItemStack[] {
recipes.put(new OreDictStack(PB.ore()), new ItemStack[] {
lbs ? new ItemStack(ModItems.powder_lead, 2) : new ItemStack(ModItems.powder_lead, 1),
lbs ? new ItemStack(ModItems.nugget_bismuth, 1) : new ItemStack(ModItems.powder_lead, 1),
new ItemStack(ModItems.powder_gold, 1),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("oreSchrabidium"), new ItemStack[] {
recipes.put(new OreDictStack(SA326.ore()), new ItemStack[] {
new ItemStack(ModItems.powder_schrabidium, 1),
new ItemStack(ModItems.powder_schrabidium, 1),
new ItemStack(ModItems.nugget_solinium, 1),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new ComparableStack(ModBlocks.ore_rare), new ItemStack[] {
recipes.put(new OreDictStack("oreRareEarth"), new ItemStack[] {
new ItemStack(ModItems.powder_desh_mix, 1),
new ItemStack(ModItems.nugget_zirconium, 1),
new ItemStack(ModItems.nugget_zirconium, 1),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("orePlutonium"), new ItemStack[] {
recipes.put(new OreDictStack(PU.ore()), new ItemStack[] {
new ItemStack(ModItems.powder_plutonium, 1),
new ItemStack(ModItems.powder_plutonium, 1),
new ItemStack(ModItems.nugget_polonium, 3),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("oreUranium"), new ItemStack[] {
recipes.put(new OreDictStack(U.ore()), new ItemStack[] {
lbs ? new ItemStack(ModItems.powder_uranium, 2) : new ItemStack(ModItems.powder_uranium, 1),
lbs ? new ItemStack(ModItems.nugget_technetium, 2) : new ItemStack(ModItems.powder_uranium, 1),
lbs ? new ItemStack(ModItems.nugget_ra226, 2) : new ItemStack(ModItems.nugget_ra226, 1),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("oreThorium"), new ItemStack[] {
recipes.put(new OreDictStack(TH232.ore()), new ItemStack[] {
new ItemStack(ModItems.powder_thorium, 1),
new ItemStack(ModItems.powder_thorium, 1),
new ItemStack(ModItems.powder_uranium, 1),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("oreBeryllium"), new ItemStack[] {
recipes.put(new OreDictStack(BE.ore()), new ItemStack[] {
new ItemStack(ModItems.powder_beryllium, 1),
new ItemStack(ModItems.powder_beryllium, 1),
new ItemStack(ModItems.powder_emerald, 1),
new ItemStack(Blocks.gravel, 1) });
recipes.put(new OreDictStack("oreRedstone"), new ItemStack[] {
recipes.put(new OreDictStack(REDSTONE.ore()), new ItemStack[] {
new ItemStack(Items.redstone, 3),
new ItemStack(Items.redstone, 3),
lbs ? new ItemStack(ModItems.ingot_mercury, 3) : new ItemStack(ModItems.ingot_mercury, 1),
@ -260,7 +261,7 @@ public class CentrifugeRecipes extends SerializableRecipe {
new ItemStack(ModItems.powder_niobium, 2),
new ItemStack(Blocks.end_stone, 1) });
recipes.put(new OreDictStack("oreLapis"), new ItemStack[] {
recipes.put(new OreDictStack(LAPIS.ore()), new ItemStack[] {
new ItemStack(ModItems.powder_lapis, 3),
new ItemStack(ModItems.powder_lapis, 3),
new ItemStack(ModItems.powder_cobalt_tiny, 1),
@ -284,7 +285,7 @@ public class CentrifugeRecipes extends SerializableRecipe {
new ItemStack(ModItems.ingot_phosphorus),
new ItemStack(Blocks.netherrack) });
recipes.put(new OreDictStack("oreCobalt"), new ItemStack[] {
recipes.put(new OreDictStack(CO.ore()), new ItemStack[] {
new ItemStack(ModItems.powder_cobalt, 2),
new ItemStack(ModItems.powder_iron, 1),
new ItemStack(ModItems.powder_copper, 1),

View File

@ -140,13 +140,19 @@ public class CrystallizerRecipes extends SerializableRecipe {
registerRecipe(KEY_SAND, new CrystallizerRecipe(Blocks.clay, 20), new FluidStack(Fluids.COLLOID, 1_000));
/// COMPAT CERTUS QUARTZ ///
List<ItemStack> quartz = OreDictionary.getOres("crystalCertusQuartz");
if(quartz != null && !quartz.isEmpty()) {
ItemStack qItem = quartz.get(0).copy();
qItem.stackSize = 12;
registerRecipe("oreCertusQuartz", new CrystallizerRecipe(qItem, baseTime));
}
/// COMPAT WHITE PHOSPHORUS DUST ///
List<ItemStack> dustWhitePhosphorus = OreDictionary.getOres(P_WHITE.dust());
if(dustWhitePhosphorus != null && !dustWhitePhosphorus.isEmpty()) {
registerRecipe(P_WHITE.dust(), new CrystallizerRecipe(new ItemStack(ModItems.ingot_phosphorus), utilityTime), new FluidStack(Fluids.AROMATICS, 50));
}
if(!IMCCrystallizer.buffer.isEmpty()) {
recipes.putAll(IMCCrystallizer.buffer);

View File

@ -3,6 +3,7 @@ package com.hbm.tileentity.machine;
import java.util.ArrayList;
import java.util.List;
import com.hbm.blocks.ModBlocks;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.container.ContainerWatz;
import com.hbm.inventory.fluid.Fluids;
@ -64,6 +65,7 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand
if(!worldObj.isRemote && !updateLock()) {
boolean turnedOn = worldObj.getBlock(xCoord, yCoord + 3, zCoord) == ModBlocks.watz_pump && worldObj.getIndirectPowerLevelTo(xCoord, yCoord + 5, zCoord, 0) > 0;
List<TileEntityWatz> segments = new ArrayList();
segments.add(this);
this.subscribeToTop();
@ -97,11 +99,11 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand
}
/* update reaction, top to bottom */
this.updateReaction(null, sharedTanks);
this.updateReaction(null, sharedTanks, turnedOn);
for(int i = 1; i < segments.size(); i++) {
TileEntityWatz segment = segments.get(i);
TileEntityWatz above = segments.get(i - 1);
segment.updateReaction(above, sharedTanks);
segment.updateReaction(above, sharedTanks, turnedOn);
}
/* re-distribute fluid from shared tanks back into actual tanks, bottom to top */
@ -153,57 +155,64 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand
}
/** enforces strict top to bottom update order (instead of semi-random based on placement) */
public void updateReaction(TileEntityWatz above, FluidTank[] tanks) {
public void updateReaction(TileEntityWatz above, FluidTank[] tanks, boolean turnedOn) {
List<ItemStack> pellets = new ArrayList();
for(int i = 0; i < 24; i++) {
ItemStack stack = slots[i];
if(stack != null && stack.getItem() == ModItems.watz_pellet) {
pellets.add(stack);
}
}
double baseFlux = 0D;
/* init base flux */
for(ItemStack stack : pellets) {
EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage());
baseFlux += type.passive;
}
double inputFlux = baseFlux + fluxLastReaction;
double addedFlux = 0D;
double addedHeat = 0D;
for(ItemStack stack : pellets) {
EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage());
Function burnFunc = type.burnFunc;
Function heatMod = type.heatMult;
if(turnedOn) {
List<ItemStack> pellets = new ArrayList();
if(burnFunc != null) {
double mod = heatMod != null ? heatMod.effonix(heat) : 1D;
double burn = burnFunc.effonix(inputFlux) * mod;
ItemWatzPellet.setYield(stack, ItemWatzPellet.getYield(stack) - burn);
addedFlux += burn;
addedHeat += type.heatEmission * burn;
tanks[2].setFill(tanks[2].getFill() + (int) Math.round(type.mudContent * burn));
for(int i = 0; i < 24; i++) {
ItemStack stack = slots[i];
if(stack != null && stack.getItem() == ModItems.watz_pellet) {
pellets.add(stack);
}
}
}
for(ItemStack stack : pellets) {
EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage());
Function absorbFunc = type.absorbFunc;
if(absorbFunc != null) {
addedHeat += absorbFunc.effonix(baseFlux + fluxLastReaction);
double baseFlux = 0D;
/* init base flux */
for(ItemStack stack : pellets) {
EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage());
baseFlux += type.passive;
}
double inputFlux = baseFlux + fluxLastReaction;
double addedFlux = 0D;
double addedHeat = 0D;
for(ItemStack stack : pellets) {
EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage());
Function burnFunc = type.burnFunc;
Function heatMod = type.heatMult;
if(burnFunc != null) {
double mod = heatMod != null ? heatMod.effonix(heat) : 1D;
double burn = burnFunc.effonix(inputFlux) * mod;
ItemWatzPellet.setYield(stack, ItemWatzPellet.getYield(stack) - burn);
addedFlux += burn;
addedHeat += type.heatEmission * burn;
tanks[2].setFill(tanks[2].getFill() + (int) Math.round(type.mudContent * burn));
}
}
for(ItemStack stack : pellets) {
EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage());
Function absorbFunc = type.absorbFunc;
if(absorbFunc != null) {
addedHeat += absorbFunc.effonix(baseFlux + fluxLastReaction);
}
}
this.heat += addedHeat;
this.fluxLastBase = baseFlux;
this.fluxLastReaction = addedFlux;
} else {
this.fluxLastBase = 0;
this.fluxLastReaction = 0;
}
this.heat += addedHeat;
this.fluxLastBase = baseFlux;
this.fluxLastReaction = addedFlux;
if(above != null) {
for(int i = 0; i < 24; i++) {
ItemStack stackBottom = slots[i];
@ -307,7 +316,9 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand
@Override
public boolean isItemValidForSlot(int i, ItemStack stack) {
return stack.getItem() == ModItems.watz_pellet;
if(stack.getItem() != ModItems.watz_pellet) return false;
if(!this.isLocked) return true;
return this.locks[i] != null && this.locks[i].getItem() == stack.getItem() && locks[i].getItemDamage() == stack.getItemDamage();
}
@Override