diff --git a/src/main/java/com/hbm/blocks/generic/BlockToolConversion.java b/src/main/java/com/hbm/blocks/generic/BlockToolConversion.java index ddb34f66e..582db2d18 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockToolConversion.java +++ b/src/main/java/com/hbm/blocks/generic/BlockToolConversion.java @@ -95,9 +95,10 @@ public class BlockToolConversion extends BlockMulti implements IToolable, ILookO if(list == null || list.isEmpty() || InventoryUtil.doesPlayerHaveAStacks(player, list, true)) { world.setBlock(x, y, z, result.value.block, result.value.meta, 3); + return true; } - return true; + return false; } @Override diff --git a/src/main/java/com/hbm/handler/nei/ConstructionHandler.java b/src/main/java/com/hbm/handler/nei/ConstructionHandler.java index e6b93517f..240ad58af 100644 --- a/src/main/java/com/hbm/handler/nei/ConstructionHandler.java +++ b/src/main/java/com/hbm/handler/nei/ConstructionHandler.java @@ -4,8 +4,10 @@ import java.util.HashMap; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; +import com.hbm.util.ItemStackUtil; import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; public class ConstructionHandler extends NEIUniversalHandler { @@ -42,11 +44,11 @@ public class ConstructionHandler extends NEIUniversalHandler { /* ITER */ ItemStack[] iter = new ItemStack[] { - new ItemStack(ModBlocks.fusion_conductor, 64), - new ItemStack(ModBlocks.fusion_conductor, 64), - new ItemStack(ModBlocks.fusion_conductor, 64), - new ItemStack(ModBlocks.fusion_conductor, 64), new ItemStack(ModBlocks.fusion_conductor, 36), + new ItemStack(ModBlocks.fusion_conductor, 64), + new ItemStack(ModBlocks.fusion_conductor, 64), + new ItemStack(ModBlocks.fusion_conductor, 64), + new ItemStack(ModBlocks.fusion_conductor, 64), new ItemStack(ModBlocks.fusion_center, 64), new ItemStack(ModBlocks.fusion_motor, 4), new ItemStack(ModBlocks.reinforced_glass, 8)}; @@ -54,6 +56,42 @@ public class ConstructionHandler extends NEIUniversalHandler { bufferedRecipes.put(iter, new ItemStack(ModBlocks.iter)); bufferedTools.put(iter, new ItemStack(ModBlocks.struct_iter_core)); + /* PLASMA HEATER */ + ItemStack[] heater = new ItemStack[] { + new ItemStack(ModBlocks.fusion_heater, 7), + new ItemStack(ModBlocks.fusion_heater, 64), + new ItemStack(ModBlocks.fusion_heater, 64) }; + + bufferedRecipes.put(heater, new ItemStack(ModBlocks.plasma_heater)); + bufferedTools.put(heater, new ItemStack(ModBlocks.struct_plasma_core)); + + /* COMPACT LAUNCHER */ + ItemStack[] launcher = new ItemStack[] { new ItemStack(ModBlocks.struct_launcher, 8) }; + + bufferedRecipes.put(launcher, new ItemStack(ModBlocks.compact_launcher)); + bufferedTools.put(launcher, new ItemStack(ModBlocks.struct_launcher_core)); + + /* LAUNCH TABLE */ + ItemStack[] table = new ItemStack[] { + new ItemStack(ModBlocks.struct_launcher, 16), + new ItemStack(ModBlocks.struct_launcher, 64), + new ItemStack(ModBlocks.struct_scaffold, 11)}; + + bufferedRecipes.put(table, new ItemStack(ModBlocks.launch_table)); + bufferedTools.put(table, new ItemStack(ModBlocks.struct_launcher_core_large)); + + /* SOYUZ LAUNCHER */ + ItemStack[] soysauce = new ItemStack[] { + new ItemStack(ModBlocks.struct_launcher, 60), + ItemStackUtil.addTooltipToStack(new ItemStack(ModBlocks.struct_launcher, 320), EnumChatFormatting.RED + "5x64"), + new ItemStack(ModBlocks.struct_scaffold, 53), + ItemStackUtil.addTooltipToStack(new ItemStack(ModBlocks.struct_scaffold, 384), EnumChatFormatting.RED + "6x64"), + new ItemStack(ModBlocks.concrete_smooth, 8), + ItemStackUtil.addTooltipToStack(new ItemStack(ModBlocks.concrete_smooth, 320), EnumChatFormatting.RED + "5x64"),}; + + bufferedRecipes.put(soysauce, new ItemStack(ModBlocks.soyuz_launcher)); + bufferedTools.put(soysauce, new ItemStack(ModBlocks.struct_soyuz_core)); + return recipes ? bufferedRecipes : bufferedTools; } } diff --git a/src/main/java/com/hbm/items/machine/ItemWatzPellet.java b/src/main/java/com/hbm/items/machine/ItemWatzPellet.java index 0b782df9d..4a0f35dc1 100644 --- a/src/main/java/com/hbm/items/machine/ItemWatzPellet.java +++ b/src/main/java/com/hbm/items/machine/ItemWatzPellet.java @@ -36,18 +36,18 @@ public class ItemWatzPellet extends ItemEnumMulti { public static enum EnumWatzType { - SCHRABIDIUM( 0x32FFFF, 0x005C5C, 2_000, 10D, new FunctionLogarithmic(10), null, null), - HES( 0x66DCD6, 0x023933, 1_500, 10D, null, null, null), - MES( 0xCBEADF, 0x28473C, 1_000, 10D, null, null, null), - LES( 0xABB4A8, 0x0C1105, 500, 10D, null, null, null), - HEN( 0xA6B2A6, 0x030F03, 0, 10D, null, null, null), - MEU( 0xC1C7BD, 0x2B3227, 0, 10D, null, null, null), - MEP( 0x9AA3A0, 0x111A17, 0, 10D, null, null, null), - LEAD( 0xA6A6B2, 0x03030F, 0, 0, null, null, new FunctionSqrt(10)), //standard absorber, negative coefficient - BORON( 0xBDC8D2, 0x29343E, 0, 0, null, null, new FunctionLinear(10)), //improved absorber, linear - DU( 0xC1C7BD, 0x2B3227, 0, 0, null, null, new FunctionQuadratic(1D, 1D).withDiv(100)), //absorber with positive coefficient - NQD( 0x4B4B4B, 0x121212, 0, 0, null, null, null), - NQR( 0x2D2D2D, 0x0B0B0B, 0, 0, null, null, null); + SCHRABIDIUM( 0x32FFFF, 0x005C5C, 2_000, 20D, 0.02D, new FunctionLinear(1.5D), new FunctionSqrt(1D/20D).withOff(20D * 20D), null), + HES( 0x66DCD6, 0x023933, 1_750, 20D, 0.01D, new FunctionLinear(1.25D), new FunctionSqrt(1/15D).withOff(15D*15D), null), + MES( 0xCBEADF, 0x28473C, 1_500, 15D, 0.005D, new FunctionLinear(1.15D), new FunctionSqrt(1/15D).withOff(15D*15D), null), + LES( 0xABB4A8, 0x0C1105, 1_250, 15D, 0.0025D, new FunctionLinear(1D), new FunctionSqrt(1/10D).withOff(10D*10D), null), + HEN( 0xA6B2A6, 0x030F03, 0, 10D, 0.001D, new FunctionSqrt(100), null, null), + MEU( 0xC1C7BD, 0x2B3227, 0, 10D, 0.001D, new FunctionSqrt(75), null, null), + MEP( 0x9AA3A0, 0x111A17, 0, 15D, 0.001D, new FunctionSqrt(150), new FunctionSqrt(1D/20D).withOff(20D * 20D), null), + LEAD( 0xA6A6B2, 0x03030F, 0, 0, 0.005D, null, null, new FunctionSqrt(10)), //standard absorber, negative coefficient + BORON( 0xBDC8D2, 0x29343E, 0, 0, 0.005D, null, null, new FunctionLinear(10)), //improved absorber, linear + DU( 0xC1C7BD, 0x2B3227, 0, 0, 0.005D, null, null, new FunctionQuadratic(1D, 1D).withDiv(100)), //absorber with positive coefficient + NQD( 0x4B4B4B, 0x121212, 2_000, 20, 0.02D, new FunctionLinear(2D), new FunctionSqrt(1D/25D).withOff(25D * 25D), null), + NQR( 0x2D2D2D, 0x0B0B0B, 2_500, 30, 0.02D, new FunctionLinear(1.5D), new FunctionSqrt(1D/25D).withOff(25D * 25D), null); public double yield = 1_000_000_000; public int colorLight; @@ -56,16 +56,17 @@ public class ItemWatzPellet extends ItemEnumMulti { public double passive; //base flux emission public double heatEmission; //reactivity(1) to heat (heat per outgoing flux) public Function burnFunc; //flux to reactivity(0) (classic reactivity) - public Function heatMult; //reactivity(0) to reactivity(1) based on heat (temperature coefficient) + public Function heatDiv; //reactivity(0) to reactivity(1) based on heat (temperature coefficient) public Function absorbFunc; //flux to heat (flux absobtion for non-active component) - private EnumWatzType(int colorLight, int colorDark, double passive, double heatEmission, Function burnFunction, Function heatMultiplier, Function absorbFunction) { + private EnumWatzType(int colorLight, int colorDark, double passive, double heatEmission, double mudContent, Function burnFunction, Function heatDivisor, Function absorbFunction) { this.colorLight = colorLight; this.colorDark = colorDark; this.passive = passive; this.heatEmission = heatEmission; + this.mudContent = mudContent; this.burnFunc = burnFunction; - this.heatMult = heatMultiplier; + this.heatDiv = heatDivisor; this.absorbFunc = absorbFunction; } } @@ -129,13 +130,16 @@ public class ItemWatzPellet extends ItemEnumMulti { String color = EnumChatFormatting.GOLD + ""; String reset = EnumChatFormatting.RESET + ""; - if(num.passive > 0) list.add(color + "Base fission rate: " + reset + num.passive); + if(num.passive > 0){ + list.add(color + "Base fission rate: " + reset + num.passive); + list.add(EnumChatFormatting.RED + "Self-ingiting!"); + } if(num.heatEmission > 0) list.add(color + "Heat per flux: " + reset + num.heatEmission + " TU"); if(num.burnFunc != null) { list.add(color + "Reacton function: " + reset + num.burnFunc.getLabelForFuel()); list.add(color + "Fuel type: " + reset + num.burnFunc.getDangerFromFuel()); } - if(num.heatMult != null) list.add(color + "Thermal coefficient: " + reset + num.heatMult.getLabelForFuel()); + if(num.heatDiv != null) list.add(color + "Thermal multiplier: " + reset + num.heatDiv.getLabelForFuel() + " TU⁻¹"); if(num.absorbFunc != null) list.add(color + "Flux capture: " + reset + num.absorbFunc.getLabelForFuel()); } diff --git a/src/main/java/com/hbm/items/tool/ItemBoltgun.java b/src/main/java/com/hbm/items/tool/ItemBoltgun.java index b97fb4b7a..a4ef287f3 100644 --- a/src/main/java/com/hbm/items/tool/ItemBoltgun.java +++ b/src/main/java/com/hbm/items/tool/ItemBoltgun.java @@ -10,6 +10,7 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; +import com.hbm.util.EntityDamageUtil; import api.hbm.block.IToolable; import api.hbm.block.IToolable.ToolType; @@ -58,9 +59,10 @@ public class ItemBoltgun extends Item implements IAnimatedItem { if(slot != null) { if(slot.getItem() == item) { if(!world.isRemote) { + world.playSoundAtEntity(entity, "hbm:item.boltgun", 1.0F, 1.0F); player.inventory.decrStackSize(i, 1); player.inventoryContainer.detectAndSendChanges(); - entity.attackEntityFrom(DamageSource.causePlayerDamage(player).setDamageBypassesArmor(), 10F); + EntityDamageUtil.attackEntityFromIgnoreIFrame(entity, DamageSource.causePlayerDamage(player).setDamageBypassesArmor(), 10F); NBTTagCompound data = new NBTTagCompound(); data.setString("type", "vanillaExt"); @@ -92,7 +94,8 @@ public class ItemBoltgun extends Item implements IAnimatedItem { if(b instanceof IToolable && ((IToolable)b).onScrew(world, player, x, y, z, side, fX, fY, fZ, ToolType.BOLT)) { if(!world.isRemote) { - + + world.playSoundAtEntity(player, "hbm:item.boltgun", 1.0F, 1.0F); player.inventoryContainer.detectAndSendChanges(); ForgeDirection dir = ForgeDirection.getOrientation(side); double off = 0.25; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java index 4b8bc95e3..be72c62f4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java @@ -181,11 +181,11 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand for(ItemStack stack : pellets) { EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage()); Function burnFunc = type.burnFunc; - Function heatMod = type.heatMult; + Function heatDiv = type.heatDiv; if(burnFunc != null) { - double mod = heatMod != null ? heatMod.effonix(heat) : 1D; - double burn = burnFunc.effonix(inputFlux) * mod; + double div = heatDiv != null ? heatDiv.effonix(heat) : 1D; + double burn = burnFunc.effonix(inputFlux) / div; ItemWatzPellet.setYield(stack, ItemWatzPellet.getYield(stack) - burn); addedFlux += burn; addedHeat += type.heatEmission * burn; @@ -198,7 +198,10 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand Function absorbFunc = type.absorbFunc; if(absorbFunc != null) { - addedHeat += absorbFunc.effonix(baseFlux + fluxLastReaction); + double absorb = absorbFunc.effonix(baseFlux + fluxLastReaction); + addedHeat += absorb; + ItemWatzPellet.setYield(stack, ItemWatzPellet.getYield(stack) - absorb); + tanks[2].setFill(tanks[2].getFill() + (int) Math.round(type.mudContent * absorb)); } } @@ -309,6 +312,7 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand } for(int i = 0; i < tanks.length; i++) tanks[i].readFromNBT(nbt, "t" + i); + this.heat = nbt.getInteger("heat"); this.fluxLastBase = nbt.getDouble("lastFluxB"); this.fluxLastReaction = nbt.getDouble("lastFluxR"); @@ -332,6 +336,7 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand nbt.setTag("locks", list); for(int i = 0; i < tanks.length; i++) tanks[i].writeToNBT(nbt, "t" + i); + nbt.setInteger("heat", this.heat); nbt.setDouble("lastFluxB", fluxLastBase); nbt.setDouble("lastFluxR", fluxLastReaction); diff --git a/src/main/java/com/hbm/util/function/Function.java b/src/main/java/com/hbm/util/function/Function.java index c9825d3e4..6f50ee651 100644 --- a/src/main/java/com/hbm/util/function/Function.java +++ b/src/main/java/com/hbm/util/function/Function.java @@ -27,8 +27,8 @@ public abstract class Function { public String getXName(boolean brackets) { String x = "x"; boolean mod = false; - if(div != 1D) x += " / " + div; - if(off != 0D) x += " + " + off; + if(div != 1D) x += " / " + String.format("%,.1f", div); + if(off != 0D) x += " + " + String.format("%,.1f", off); if(mod && brackets) x = "(" + x + ")"; return x; } @@ -46,28 +46,28 @@ public abstract class Function { public static class FunctionLogarithmic extends FunctionSingleArg { public FunctionLogarithmic(double level) { super(level); this.withOff(1D); } @Override public double effonix(double x) { return Math.log10(getX(x)) * level; } - @Override public String getLabelForFuel() { return "log10(" + getXName(false) + ") * " + level; } + @Override public String getLabelForFuel() { return "log10(" + getXName(false) + ") * " + String.format("%,.1f", this.level); } @Override public String getDangerFromFuel() { return EnumChatFormatting.YELLOW + "MEDIUM / LOGARITHMIC"; } } public static class FunctionPassive extends FunctionSingleArg { public FunctionPassive(double level) { super(level); } @Override public double effonix(double x) { return this.level; } - @Override public String getLabelForFuel() { return "" + level; } + @Override public String getLabelForFuel() { return "" + String.format("%,.1f", this.level); } @Override public String getDangerFromFuel() { return EnumChatFormatting.DARK_GREEN + "SAFE / PASSIVE"; } } public static class FunctionSqrt extends FunctionSingleArg { public FunctionSqrt(double level) { super(level); } @Override public double effonix(double x) { return BobMathUtil.squirt(getX(x)) * this.level; } - @Override public String getLabelForFuel() { return "sqrt(" + getXName(false) + ") * " + this.level; } //not entirely correct but good enough + @Override public String getLabelForFuel() { return "sqrt(" + getXName(false) + ") * " + String.format("%,.3f", this.level); } //not entirely correct but good enough @Override public String getDangerFromFuel() { return EnumChatFormatting.YELLOW + "MEDIUM / SQUARE ROOT"; } } public static class FunctionLinear extends FunctionSingleArg { public FunctionLinear(double level) { super(level); } @Override public double effonix(double x) { return getX(x) * this.level; } - @Override public String getLabelForFuel() { return getXName(true) + " * " + this.level; } + @Override public String getLabelForFuel() { return getXName(true) + " * " + String.format("%,.1f", this.level); } @Override public String getDangerFromFuel() { return EnumChatFormatting.RED + "DANGEROUS / LINEAR"; } } @@ -75,7 +75,7 @@ public abstract class Function { public FunctionQuadratic(double level) { super(level, 0D); } public FunctionQuadratic(double level, double vOff) { super(level, vOff); } @Override public double effonix(double x) { return getX(x) * getX(x) * this.level + this.vOff; } - @Override public String getLabelForFuel() { return getXName(true) + "² * " + this.level + (vOff != 0 ? (" + " + vOff) : ""); } + @Override public String getLabelForFuel() { return getXName(true) + "² * " + String.format("%,.1f", this.level) + (vOff != 0 ? (" + " + String.format("%,.1f", vOff)) : ""); } @Override public String getDangerFromFuel() { return EnumChatFormatting.RED + "DANGEROUS / QUADRATIC"; } } } diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 6458aa7fc..ab2066140 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -78,6 +78,7 @@ "item.vice": {"category": "player", "sounds": [{"name": "tool/vice", "stream": false}]}, "item.upgradePlug": {"category": "player", "sounds": [{"name": "tool/upgradePlug", "stream": false}]}, "item.battery": {"category": "player", "sounds": [{"name": "tool/battery", "stream": false}]}, + "item.boltgun": {"category": "player", "sounds": [{"name": "tool/boltgun", "stream": false}]}, "music.recordLambdaCore": {"category": "record", "sounds": [{"name": "music/recordLambdaCore", "stream": true}]}, "music.recordSectorSweep": {"category": "record", "sounds": [{"name": "music/recordSectorSweep", "stream": true}]}, diff --git a/src/main/resources/assets/hbm/sounds/tool/boltgun.ogg b/src/main/resources/assets/hbm/sounds/tool/boltgun.ogg new file mode 100644 index 000000000..98356b58b Binary files /dev/null and b/src/main/resources/assets/hbm/sounds/tool/boltgun.ogg differ