diff --git a/changelog b/changelog index 4aa8ff9c3..86d9714a3 100644 --- a/changelog +++ b/changelog @@ -1,6 +1,12 @@ +## Added +* Creative klystron + * Always outputs as much KyU as the most demanding existing recipe needs + ## Changed * Updated chinese and russian localization * Increased density of osmiridium ores in tom craters considerably (from 1:500 to 1:200) +* Added a new server setting called `ENABLE_MKU` to toggle contageon effects, spread and save (part of `/ntmserver`) +* Extended logging now logs uses of MKU ## Fixed * Fixed missing battery socket tooltip @@ -8,4 +14,5 @@ * Fixed FEnSU not immediately applying the muffler effect when used * Fixed fluid counter valve not having a recipe * Fixed issue where `/ntmreload` would break registered fluids from addons -* Fixed yet another issue regarding crates \ No newline at end of file +* Fixed yet another issue regarding crates +* Fixed RBMK fluid heaters losing their tank types when unable to boil anything \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 33ac3beb7..ef0796687 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -13,6 +13,7 @@ import com.hbm.blocks.machine.fusion.MachineFusionBreeder; import com.hbm.blocks.machine.fusion.MachineFusionCollector; import com.hbm.blocks.machine.fusion.MachineFusionCoupler; import com.hbm.blocks.machine.fusion.MachineFusionKlystron; +import com.hbm.blocks.machine.fusion.MachineFusionKlystronCreative; import com.hbm.blocks.machine.fusion.MachineFusionMHDT; import com.hbm.blocks.machine.fusion.MachineFusionTorus; import com.hbm.blocks.machine.pile.*; @@ -901,6 +902,7 @@ public class ModBlocks { public static Block fusion_component; public static Block fusion_torus; public static Block fusion_klystron; + public static Block fusion_klystron_creative; public static Block fusion_breeder; public static Block fusion_collector; public static Block fusion_boiler; @@ -2039,6 +2041,7 @@ public class ModBlocks { fusion_component = new BlockFusionComponent().setBlockName("fusion_component").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fusion_component"); fusion_torus = new MachineFusionTorus().setBlockName("fusion_torus").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); fusion_klystron = new MachineFusionKlystron().setBlockName("fusion_klystron").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + fusion_klystron_creative = new MachineFusionKlystronCreative().setBlockName("fusion_klystron_creative").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); fusion_breeder = new MachineFusionBreeder().setBlockName("fusion_breeder").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); fusion_collector = new MachineFusionCollector().setBlockName("fusion_collector").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); fusion_boiler = new MachineFusionBoiler().setBlockName("fusion_boiler").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3419,6 +3422,7 @@ public class ModBlocks { register(fusion_component); register(fusion_torus); register(fusion_klystron); + register(fusion_klystron_creative); register(fusion_breeder); register(fusion_collector); register(fusion_boiler); diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystron.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystron.java index d95b48f53..46f5abc0f 100644 --- a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystron.java +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystron.java @@ -33,15 +33,8 @@ public class MachineFusionKlystron extends BlockDummyable implements ITooltipPro return super.standardOpenBehavior(world, x, y, z, player, 0); } - @Override - public int[] getDimensions() { - return new int[] { 3, 0, 4, 3, 2, 2 }; - } - - @Override - public int getOffset() { - return 3; - } + @Override public int[] getDimensions() { return new int[] { 3, 0, 4, 3, 2, 2 }; } + @Override public int getOffset() { return 3; } @Override public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { diff --git a/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystronCreative.java b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystronCreative.java new file mode 100644 index 000000000..5b0b2edba --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystronCreative.java @@ -0,0 +1,48 @@ +package com.hbm.blocks.machine.fusion; + +import java.util.List; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ITooltipProvider; +import com.hbm.handler.MultiblockHandlerXR; +import com.hbm.tileentity.machine.fusion.TileEntityFusionKlystronCreative; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachineFusionKlystronCreative extends BlockDummyable implements ITooltipProvider { + + public MachineFusionKlystronCreative() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityFusionKlystronCreative(); + return null; + } + + @Override public int[] getDimensions() { return new int[] { 3, 0, 4, 3, 2, 2 }; } + @Override public int getOffset() { return 3; } + + @Override + public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { + return super.checkRequirement(world, x, y, z, dir, o) && + MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {4, -3, 4, 3, 1, 1}, x, y, z, dir); + } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y, z + dir.offsetZ * o, new int[] {4, -3, 4, 3, 1, 1}, this, dir); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + addStandardInfo(stack, player, list, ext); + } +} diff --git a/src/main/java/com/hbm/config/ServerConfig.java b/src/main/java/com/hbm/config/ServerConfig.java index 0ca1ccdcf..890c114a7 100644 --- a/src/main/java/com/hbm/config/ServerConfig.java +++ b/src/main/java/com/hbm/config/ServerConfig.java @@ -20,6 +20,7 @@ public class ServerConfig extends RunningConfig { public static ConfigWrapper CRATE_OPEN_HELD = new ConfigWrapper(true); public static ConfigWrapper CRATE_KEEP_CONTENTS = new ConfigWrapper(true); public static ConfigWrapper ITEM_HAZARD_DROP_TICKRATE = new ConfigWrapper(2); + public static ConfigWrapper ENABLE_MKU = new ConfigWrapper(true); private static void initDefaults() { configMap.put("DAMAGE_COMPATIBILITY_MODE", DAMAGE_COMPATIBILITY_MODE); @@ -32,6 +33,7 @@ public class ServerConfig extends RunningConfig { configMap.put("CRATE_OPEN_HELD", CRATE_OPEN_HELD); configMap.put("CRATE_KEEP_CONTENTS", CRATE_KEEP_CONTENTS); configMap.put("ITEM_HAZARD_DROP_TICKRATE", ITEM_HAZARD_DROP_TICKRATE); + configMap.put("ENABLE_MKU", ENABLE_MKU); } /** Initializes defaults, then reads the config file if it exists, then writes the config file. */ diff --git a/src/main/java/com/hbm/extprop/HbmLivingProps.java b/src/main/java/com/hbm/extprop/HbmLivingProps.java index aa6356078..c79258914 100644 --- a/src/main/java/com/hbm/extprop/HbmLivingProps.java +++ b/src/main/java/com/hbm/extprop/HbmLivingProps.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.UUID; import com.hbm.config.RadiationConfig; +import com.hbm.config.ServerConfig; import com.hbm.entity.mob.EntityDuck; import com.hbm.handler.threading.PacketThreading; import com.hbm.lib.ModDamageSource; @@ -261,6 +262,7 @@ public class HbmLivingProps implements IExtendedEntityProperties { /// CONTAGION /// public static int getContagion(EntityLivingBase entity) { + if(!ServerConfig.ENABLE_MKU.get()) return 0; return getData(entity).contagion; } @@ -315,7 +317,7 @@ public class HbmLivingProps implements IExtendedEntityProperties { props.setFloat("hfr_digamma", digamma); props.setInteger("hfr_asbestos", asbestos); props.setInteger("hfr_bomb", bombTimer); - props.setInteger("hfr_contagion", contagion); + if(ServerConfig.ENABLE_MKU.get()) props.setInteger("hfr_contagion", contagion); props.setInteger("hfr_blacklung", blacklung); props.setInteger("hfr_oil", oil); props.setInteger("hfr_fire", fire); @@ -343,7 +345,7 @@ public class HbmLivingProps implements IExtendedEntityProperties { digamma = props.getFloat("hfr_digamma"); asbestos = props.getInteger("hfr_asbestos"); bombTimer = props.getInteger("hfr_bomb"); - contagion = props.getInteger("hfr_contagion"); + if(ServerConfig.ENABLE_MKU.get()) contagion = props.getInteger("hfr_contagion"); blacklung = props.getInteger("hfr_blacklung"); oil = props.getInteger("hfr_oil"); fire = props.getInteger("hfr_fire"); diff --git a/src/main/java/com/hbm/handler/EntityEffectHandler.java b/src/main/java/com/hbm/handler/EntityEffectHandler.java index 9fc6d0c0e..006b3a00c 100644 --- a/src/main/java/com/hbm/handler/EntityEffectHandler.java +++ b/src/main/java/com/hbm/handler/EntityEffectHandler.java @@ -6,6 +6,7 @@ import java.util.Random; import com.hbm.config.GeneralConfig; import com.hbm.config.RadiationConfig; +import com.hbm.config.ServerConfig; import com.hbm.config.WorldConfig; import com.hbm.entity.mob.EntityCreeperNuclear; import com.hbm.entity.mob.EntityDuck; @@ -371,6 +372,7 @@ public class EntityEffectHandler { } private static void handleContagion(EntityLivingBase entity) { + if(!ServerConfig.ENABLE_MKU.get()) return; World world = entity.worldObj; diff --git a/src/main/java/com/hbm/inventory/recipes/FusionRecipes.java b/src/main/java/com/hbm/inventory/recipes/FusionRecipes.java index 7bf2c0e7b..6ccfc8244 100644 --- a/src/main/java/com/hbm/inventory/recipes/FusionRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/FusionRecipes.java @@ -16,6 +16,7 @@ import net.minecraft.item.ItemStack; public class FusionRecipes extends GenericRecipes { public static final FusionRecipes INSTANCE = new FusionRecipes(); + public long maxInput; @Override public int inputItemLimit() { return 0; } @Override public int inputFluidLimit() { return 3; } @@ -120,6 +121,18 @@ public class FusionRecipes extends GenericRecipes { .outputItems(new ItemStack(ModItems.powder_gold))); // eough } + @Override + public void registerPost() { + super.registerPost(); + + this.maxInput = 0; + + // set max value for creative klystron + for(FusionRecipe recipe : this.recipeOrderedList) { + if(recipe.ignitionTemp > this.maxInput) this.maxInput = recipe.ignitionTemp; + } + } + // foresight! yeah! @Override public void readExtraData(JsonElement element, FusionRecipe recipe) { diff --git a/src/main/java/com/hbm/items/special/ItemSyringe.java b/src/main/java/com/hbm/items/special/ItemSyringe.java index 0a4800953..8e81425d1 100644 --- a/src/main/java/com/hbm/items/special/ItemSyringe.java +++ b/src/main/java/com/hbm/items/special/ItemSyringe.java @@ -3,12 +3,16 @@ package com.hbm.items.special; import java.util.List; import java.util.Random; +import org.apache.logging.log4j.Level; + +import com.hbm.config.GeneralConfig; import com.hbm.config.VersatileConfig; import com.hbm.extprop.HbmLivingProps; import com.hbm.handler.ArmorModHandler; import com.hbm.interfaces.Spaghetti; import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; +import com.hbm.main.MainRegistry; import com.hbm.potion.HbmPotion; import api.hbm.fluidmk2.IFillableItem; @@ -336,6 +340,9 @@ public class ItemSyringe extends Item { HbmLivingProps.setContagion(entity, 3 * 60 * 60 * 20); world.playSoundAtEntity(entity, "hbm:item.syringe", 1.0F, 1.0F); stack.stackSize--; + + if(GeneralConfig.enableExtendedLogging) + MainRegistry.logger.log(Level.INFO, "[MKU] " + entityPlayer.getCommandSenderName() + " used an MKU syringe!"); } } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index f563e2300..1ddbfce2c 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -430,6 +430,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionTorusStruct.class, new RenderFusionTorusMultiblock()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionTorus.class, new RenderFusionTorus()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionKlystron.class, new RenderFusionKlystron()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionKlystronCreative.class, new RenderFusionKlystronCreative()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionBreeder.class, new RenderFusionBreeder()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionCollector.class, new RenderFusionCollector()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFusionBoiler.class, new RenderFusionBoiler()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index b89556fb4..d3de4e543 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -720,6 +720,7 @@ public class ResourceManager { public static final ResourceLocation fusion_plasma_glow_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/plasma_glow.png"); public static final ResourceLocation fusion_plasma_sparkle_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/plasma_sparkle.png"); public static final ResourceLocation fusion_klystron_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/klystron.png"); + public static final ResourceLocation fusion_klystron_creative_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/klystron_creative.png"); public static final ResourceLocation fusion_breeder_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/breeder.png"); public static final ResourceLocation fusion_collector_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/collector.png"); public static final ResourceLocation fusion_boiler_tex = new ResourceLocation(RefStrings.MODID, "textures/models/fusion/boiler.png"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderFusionKlystronCreative.java b/src/main/java/com/hbm/render/tileentity/RenderFusionKlystronCreative.java new file mode 100644 index 000000000..0df790842 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderFusionKlystronCreative.java @@ -0,0 +1,79 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.fusion.TileEntityFusionKlystronCreative; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderFusionKlystronCreative extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + + switch(tile.getBlockMetadata() - BlockDummyable.offset) { + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + + TileEntityFusionKlystronCreative klystron = (TileEntityFusionKlystronCreative) tile; + + GL11.glTranslated(-1, 0, 0); + + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.fusion_klystron_creative_tex); + ResourceManager.fusion_klystron.renderPart("Klystron"); + + GL11.glPushMatrix(); + float rot = klystron.prevFan + (klystron.fan - klystron.prevFan) * interp; + GL11.glTranslated(0, 2.5, 0); + GL11.glRotated(rot, 1, 0, 0); + GL11.glTranslated(0, -2.5, 0); + ResourceManager.fusion_klystron.renderPart("Rotor"); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glPopMatrix(); + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.fusion_klystron_creative); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -3, 1); + GL11.glScaled(3.5, 3.5, 3.5); + GL11.glRotated(90, 0, 1, 0); + } + public void renderCommon() { + GL11.glScaled(0.5, 0.5, 0.5); + GL11.glRotatef(90, 0F, 1F, 0F); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.fusion_klystron_creative_tex); + ResourceManager.fusion_klystron.renderPart("Klystron"); + double rot = (System.currentTimeMillis() / 10) % 360D; + GL11.glTranslated(0, 2.5, 0); + GL11.glRotated(rot, 1, 0, 0); + GL11.glTranslated(0, -2.5, 0); + ResourceManager.fusion_klystron.renderPart("Rotor"); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 629fb59cb..9be769ef1 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -418,6 +418,7 @@ public class TileMappings { put(TileEntityFusionTorusStruct.class, "tileentity_fusion_torus_struct"); put(TileEntityFusionTorus.class, "tileentity_fusion_torus"); put(TileEntityFusionKlystron.class, "tileentity_fusion_klystron"); + put(TileEntityFusionKlystronCreative.class, "tileentity_fusion_klystron_creative"); put(TileEntityFusionBreeder.class, "tileentity_fusion_breeder"); put(TileEntityFusionCollector.class, "tileentity_fusion_collector"); put(TileEntityFusionBoiler.class, "tileentity_fusion_boiler"); diff --git a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionKlystron.java b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionKlystron.java index 9418763a5..78484a5e4 100644 --- a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionKlystron.java +++ b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionKlystron.java @@ -34,6 +34,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraft.world.World; @@ -102,36 +103,8 @@ public class TileEntityFusionKlystron extends TileEntityMachineBase implements I if(output < outputTarget / 50) output = 0; - if(klystronNode == null || klystronNode.expired) { - ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10).getOpposite(); - klystronNode = UniNodespace.getNode(worldObj, xCoord + dir.offsetX * 4, yCoord + 2, zCoord + dir.offsetZ * 4, KlystronNetworkProvider.THE_PROVIDER); - - if(klystronNode == null) { - klystronNode = new GenNode(KlystronNetworkProvider.THE_PROVIDER, - new BlockPos(xCoord + dir.offsetX * 4, yCoord + 2, zCoord + dir.offsetZ * 4)) - .setConnections(new DirPos(xCoord + dir.offsetX * 5, yCoord + 2, zCoord + dir.offsetZ * 5, dir)); - - UniNodespace.createNode(worldObj, klystronNode); - } - } - - if(klystronNode.net != null) klystronNode.net.addProvider(this); - - if(klystronNode != null && klystronNode.net != null) { - KlystronNetwork net = (KlystronNetwork) klystronNode.net; - - for(Object o : net.receiverEntries.entrySet()) { - Entry e = (Entry) o; - if(e.getKey() instanceof TileEntityFusionTorus) { // replace this with an interface should we ever get more acceptors - TileEntityFusionTorus torus = (TileEntityFusionTorus) e.getKey(); - - if(torus.isLoaded() && !torus.isInvalid()) { // check against zombie network members - torus.klystronEnergy += this.output; - break; // we only do one anyway - } - } - } - } + this.klystronNode = handleKNode(klystronNode, this); + provideKyU(klystronNode, this.output); this.networkPackNT(100); @@ -173,6 +146,56 @@ public class TileEntityFusionKlystron extends TileEntityMachineBase implements I } } } + + /** Ensures the k-node exists, is loaded, and the klystron is a provider in the k-net. Returns a new klystron node if none existed, or the previous one. */ + public static GenNode handleKNode(GenNode klystronNode, TileEntity that) { + + World worldObj = that.getWorldObj(); + int xCoord = that.xCoord; + int yCoord = that.yCoord; + int zCoord = that.zCoord; + + if(klystronNode == null || klystronNode.expired) { + ForgeDirection dir = ForgeDirection.getOrientation(that.getBlockMetadata() - 10).getOpposite(); + klystronNode = UniNodespace.getNode(worldObj, xCoord + dir.offsetX * 4, yCoord + 2, zCoord + dir.offsetZ * 4, KlystronNetworkProvider.THE_PROVIDER); + + if(klystronNode == null) { + klystronNode = new GenNode(KlystronNetworkProvider.THE_PROVIDER, + new BlockPos(xCoord + dir.offsetX * 4, yCoord + 2, zCoord + dir.offsetZ * 4)) + .setConnections(new DirPos(xCoord + dir.offsetX * 5, yCoord + 2, zCoord + dir.offsetZ * 5, dir)); + + UniNodespace.createNode(worldObj, klystronNode); + } + } + + if(klystronNode.net != null) klystronNode.net.addProvider(that); + + return klystronNode; + } + + /** Provides klystron energy to the k-net of the supplied k-node, returns true is a connection is established */ + public static boolean provideKyU(GenNode klystronNode, long output) { + boolean connected = false; + + if(klystronNode != null && klystronNode.net != null) { + KlystronNetwork net = (KlystronNetwork) klystronNode.net; + + for(Object o : net.receiverEntries.entrySet()) { + Entry e = (Entry) o; + if(e.getKey() instanceof TileEntityFusionTorus) { // replace this with an interface should we ever get more acceptors + TileEntityFusionTorus torus = (TileEntityFusionTorus) e.getKey(); + + if(torus.isLoaded() && !torus.isInvalid()) { // check against zombie network members + torus.klystronEnergy += output; + connected = true; + break; // we only do one anyway + } + } + } + } + + return connected; + } public DirPos[] getConPos() { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); diff --git a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionKlystronCreative.java b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionKlystronCreative.java new file mode 100644 index 000000000..20f4059ef --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionKlystronCreative.java @@ -0,0 +1,137 @@ +package com.hbm.tileentity.machine.fusion; + +import com.hbm.inventory.recipes.FusionRecipes; +import com.hbm.main.MainRegistry; +import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.uninos.GenNode; +import com.hbm.uninos.UniNodespace; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MathHelper; + +public class TileEntityFusionKlystronCreative extends TileEntityLoadedBase { + + protected GenNode klystronNode; + + public float fan; + public float prevFan; + public float fanSpeed; + public static final float FAN_ACCELERATION = 0.125F; + + public boolean isConnected = false; + + private AudioWrapper audio; + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + this.klystronNode = TileEntityFusionKlystron.handleKNode(klystronNode, this); + this.isConnected = TileEntityFusionKlystron.provideKyU(klystronNode, FusionRecipes.INSTANCE.maxInput); + + this.networkPackNT(100); + + } else { + + if(this.isConnected) this.fanSpeed += FAN_ACCELERATION; + else this.fanSpeed -= FAN_ACCELERATION; + + this.fanSpeed = MathHelper.clamp_float(this.fanSpeed, 0F, 5F); + + this.prevFan = this.fan; + this.fan += this.fanSpeed; + + if(this.fan >= 360F) { + this.fan -= 360F; + this.prevFan -= 360F; + } + + if(this.fanSpeed > 0 && MainRegistry.proxy.me().getDistanceSq(xCoord + 0.5, yCoord + 2.5, zCoord + 0.5) < 30 * 30) { + + float speed = this.fanSpeed / 5F; + + if(audio == null) { + audio = MainRegistry.proxy.getLoopedSound("hbm:block.fel", xCoord + 0.5F, yCoord + 2.5F, zCoord + 0.5F, getVolume(speed), 15F, speed, 20); + audio.startSound(); + } else { + audio.updateVolume(getVolume(speed)); + audio.updatePitch(speed); + audio.keepAlive(); + } + + } else { + + if(audio != null) { + if(audio.isPlaying()) audio.stopSound(); + audio = null; + } + } + } + } + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + + if(audio != null) { + audio.stopSound(); + audio = null; + } + } + + @Override + public void invalidate() { + super.invalidate(); + + if(audio != null) { + audio.stopSound(); + audio = null; + } + + if(!worldObj.isRemote) { + if(this.klystronNode != null) UniNodespace.destroyNode(worldObj, klystronNode); + } + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeBoolean(isConnected); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.isConnected = buf.readBoolean(); + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 4, + yCoord, + zCoord - 4, + xCoord + 5, + yCoord + 5, + zCoord + 5 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java index dd355a829..dcc6b09f1 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java @@ -68,7 +68,9 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I feed.setFill(feed.getFill() - step.amountReq * ops); steam.setFill(steam.getFill() + step.amountProduced * ops); this.heat -= (step.heatReq * ops / TU_PER_DEGREE) * trait.getEfficiency(HeatingType.HEATEXCHANGER); - } else { + } + + if(eff <= 0) { feed.setTankType(Fluids.NONE); steam.setTankType(Fluids.NONE); } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index c3170b05c..772fd5ee0 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4333,6 +4333,8 @@ tile.fusion_hatch.name=Fusionsreaktorzugriffsluke tile.fusion_heater.name=Plasmaerhitzer-Komponente tile.fusion_klystron.name=Klystron tile.fusion_klystron.desc=Energiequelle für einen Fusionsreaktor.$Benötigt Kühlung mittles Druckluft. +tile.fusion_klystron_creative.name=Kreativ-Klystron +tile.fusion_klystron_creative.desc=Erzeugt unendlich viel Klystron-Energie. tile.fusion_mhdt.name=MHD-Turbine tile.fusion_mhdt.desc=Wandelt Plasmaenergie in verwendbare$elektrische Energie um. Effizienter als ein$konventioneller Boiler.$Benötigt Kühlung! tile.fusion_motor.name=Magnetmotorstück diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 1b0608a1e..94b9e5c02 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5588,6 +5588,8 @@ tile.fusion_hatch.name=Duct Deco Block tile.fusion_heater.name=Plasma Heater Component tile.fusion_klystron.name=Klystron tile.fusion_klystron.desc=Power source for fusion reactors.$Requires cooling via compressed air. +tile.fusion_klystron_creative.name=Creative Klystron +tile.fusion_klystron_creative.desc=Provides infinite klystron energy. tile.fusion_mhdt.name=MHD Turbine tile.fusion_mhdt.desc=Turns plasma energy into usable$electricity directly. More efficient$than a conventional boiler.$Requires cooling! tile.fusion_motor.name=Magnet Motor Piece diff --git a/src/main/resources/assets/hbm/models/bale.obj b/src/main/resources/assets/hbm/models/bale.obj deleted file mode 100644 index 10e0a45a8..000000000 --- a/src/main/resources/assets/hbm/models/bale.obj +++ /dev/null @@ -1,535 +0,0 @@ -# Blender v2.76 (sub 0) OBJ File: 'bale.blend' -# www.blender.org -o Cylinder -v 0.000000 1.000000 -0.500000 -v 0.000000 1.000000 0.750000 -v 0.250000 0.933013 -0.500000 -v 0.250000 0.933013 0.750000 -v 0.433013 0.750000 -0.500000 -v 0.433013 0.750000 0.750000 -v 0.500000 0.500000 -0.500000 -v 0.500000 0.500000 0.750000 -v 0.433013 0.250000 -0.500000 -v 0.433013 0.250000 0.750000 -v 0.250000 0.066987 -0.500000 -v 0.250000 0.066987 0.750000 -v 0.000000 -0.000000 -0.500000 -v 0.000000 0.000000 0.750000 -v -0.250000 0.066987 -0.500000 -v -0.250000 0.066987 0.750000 -v -0.433013 0.250000 -0.500000 -v -0.433013 0.250000 0.750000 -v -0.500000 0.500000 -0.500000 -v -0.500000 0.500000 0.750000 -v -0.433013 0.750000 -0.500000 -v -0.433013 0.750000 0.750000 -v -0.250000 0.933012 -0.500000 -v -0.250000 0.933013 0.750000 -v 0.187500 0.824760 1.000000 -v 0.000000 0.875000 1.000000 -v 0.324760 0.687500 1.000000 -v 0.375000 0.500000 1.000000 -v 0.324760 0.312500 1.000000 -v 0.187500 0.175241 1.000000 -v 0.000000 0.125000 1.000000 -v -0.187500 0.175241 1.000000 -v -0.324759 0.312500 1.000000 -v -0.375000 0.500000 1.000000 -v -0.324760 0.687500 1.000000 -v -0.187500 0.824759 1.000000 -v 0.000000 0.500000 1.150000 -v 0.000000 0.825000 -1.150000 -v 0.162500 0.781458 -1.150000 -v 0.281458 0.662500 -1.150000 -v 0.325000 0.500000 -1.150000 -v 0.281458 0.337500 -1.150000 -v 0.162500 0.218542 -1.150000 -v 0.000000 0.175000 -1.150000 -v -0.162500 0.218542 -1.150000 -v -0.281458 0.337500 -1.150000 -v -0.325000 0.500000 -1.150000 -v -0.281458 0.662500 -1.150000 -v -0.162500 0.781458 -1.150000 -v -0.500000 0.075000 -0.950000 -v 0.500000 0.075000 -0.950000 -v -0.500000 0.925000 -0.950000 -v 0.500000 0.925000 -0.950000 -v -0.425000 0.000000 -0.950000 -v 0.425000 0.000000 -0.950000 -v -0.425000 1.000000 -0.950000 -v 0.425000 1.000000 -0.950000 -v -0.425000 0.925000 -0.950000 -v 0.425000 0.925000 -0.950000 -v -0.425000 0.075000 -0.950000 -v 0.425000 0.075000 -0.950000 -v -0.500000 0.925000 -1.200000 -v -0.500000 0.075000 -1.200000 -v 0.425000 0.925000 -1.200000 -v 0.425000 0.075000 -1.200000 -v 0.500000 0.075000 -1.200000 -v 0.500000 0.925000 -1.200000 -v -0.425000 0.925000 -1.200000 -v -0.425000 0.075000 -1.200000 -v -0.425000 -0.000000 -1.200000 -v 0.425000 -0.000000 -1.200000 -v 0.425000 1.000000 -1.200000 -v -0.425000 1.000000 -1.200000 -v -0.459619 0.075736 -1.000000 -v 0.424264 0.959619 -1.000000 -v -0.459619 0.075736 -1.150000 -v 0.424264 0.959619 -1.150000 -v -0.424264 0.040381 -1.000000 -v 0.459619 0.924264 -1.000000 -v -0.424264 0.040381 -1.150000 -v 0.459619 0.924264 -1.150000 -v 0.000000 0.825000 -1.200000 -v 0.162500 0.781458 -1.200000 -v 0.281458 0.662500 -1.200000 -v 0.325000 0.500000 -1.200000 -v 0.281458 0.337500 -1.200000 -v 0.162500 0.218542 -1.200000 -v 0.000000 0.175000 -1.200000 -v -0.162500 0.218542 -1.200000 -v -0.281458 0.337500 -1.200000 -v -0.325000 0.500000 -1.200000 -v -0.281458 0.662500 -1.200000 -v -0.162500 0.781458 -1.200000 -v -0.424264 0.959619 -1.000000 -v 0.459619 0.075736 -1.000000 -v -0.424264 0.959619 -1.150000 -v 0.459619 0.075736 -1.150000 -v -0.459619 0.924264 -1.000000 -v 0.424264 0.040381 -1.000000 -v -0.459619 0.924264 -1.150000 -v 0.424264 0.040381 -1.150000 -vt 0.788698 0.361775 -vt 0.510343 0.361775 -vt 0.510343 0.304140 -vt 0.510343 0.246505 -vt 0.788698 0.246505 -vt 0.510343 0.188870 -vt 0.788698 0.188870 -vt 0.510343 0.131235 -vt 0.510343 0.073600 -vt 0.788698 0.073600 -vt 0.510343 0.015964 -vt 0.788698 0.015964 -vt 0.788698 0.707585 -vt 0.510343 0.707585 -vt 0.510343 0.649950 -vt 0.788698 0.649950 -vt 0.510343 0.592315 -vt 0.510343 0.534680 -vt 0.788698 0.534680 -vt 0.510343 0.477045 -vt 0.788698 0.477045 -vt 0.448519 0.124030 -vt 0.448519 0.080804 -vt 0.510343 0.419410 -vt 0.788698 0.419410 -vt 0.938258 0.198956 -vt 0.938258 0.236419 -vt 0.448519 0.181665 -vt 0.448519 0.138439 -vt 0.448519 0.412206 -vt 0.448519 0.354571 -vt 0.448519 0.311344 -vt 0.448519 0.239300 -vt 0.448519 0.196074 -vt 0.448519 0.469841 -vt 0.448519 0.296935 -vt 0.448519 0.253709 -vt 0.448519 0.527476 -vt 0.448519 0.484250 -vt 0.448519 0.585111 -vt 0.448519 0.541885 -vt 0.448519 0.642746 -vt 0.448519 0.599520 -vt 0.448519 0.700381 -vt 0.448519 0.657155 -vt 0.448519 0.066395 -vt 0.361215 0.678768 -vt 0.361214 0.621133 -vt 0.361215 0.563498 -vt 0.361215 0.505863 -vt 0.361215 0.448228 -vt 0.448519 0.426615 -vt 0.361215 0.390593 -vt 0.448519 0.368979 -vt 0.361215 0.332957 -vt 0.448519 0.023169 -vt 0.361215 0.044782 -vt 0.361214 0.102417 -vt 0.361215 0.160052 -vt 0.361215 0.217687 -vt 0.361215 0.275322 -vt 0.938258 0.141321 -vt 0.949392 0.141321 -vt 0.949392 0.178784 -vt 0.938258 0.429496 -vt 0.938258 0.466959 -vt 0.788698 0.304140 -vt 0.938258 0.256591 -vt 0.938258 0.487131 -vt 0.788698 0.592315 -vt 0.938258 0.544766 -vt 0.938258 0.602401 -vt 0.938258 0.639864 -vt 0.938258 0.660037 -vt 0.938258 0.697499 -vt 0.938258 0.026051 -vt 0.938258 0.063514 -vt 0.938258 0.083686 -vt 0.938258 0.121149 -vt 0.788698 0.131235 -vt 0.938258 0.178784 -vt 0.938258 0.371861 -vt 0.938258 0.409324 -vt 0.938258 0.314226 -vt 0.938258 0.351689 -vt 0.680346 0.943229 -vt 0.680346 0.959931 -vt 0.491064 0.959931 -vt 0.680346 0.753947 -vt 0.491064 0.753947 -vt 0.491064 0.737246 -vt 0.491064 0.943229 -vt 0.474362 0.943229 -vt 0.474362 0.753947 -vt 0.697047 0.753947 -vt 0.680346 0.737246 -vt 0.697047 0.943229 -vt 0.932691 0.959931 -vt 0.743409 0.959931 -vt 0.743409 0.943229 -vt 0.932691 0.737246 -vt 0.932691 0.753947 -vt 0.743409 0.753947 -vt 0.949392 0.753947 -vt 0.949392 0.943229 -vt 0.932691 0.943229 -vt 0.726707 0.753947 -vt 0.743409 0.737246 -vt 0.726707 0.943229 -vt 0.190552 0.394528 -vt 0.190552 0.205246 -vt 0.246223 0.205246 -vt 0.331554 0.228866 -vt 0.275883 0.228866 -vt 0.275883 0.205247 -vt 0.331554 0.418148 -vt 0.275883 0.418148 -vt 0.331554 0.631049 -vt 0.275883 0.631049 -vt 0.275883 0.441767 -vt 0.190551 0.015964 -vt 0.246223 0.015964 -vt 0.331554 0.867570 -vt 0.275883 0.867570 -vt 0.275883 0.843951 -vt 0.190552 0.583811 -vt 0.246223 0.583811 -vt 0.246223 0.773093 -vt 0.331554 0.654669 -vt 0.275883 0.654669 -vt 0.331554 0.205247 -vt 0.275883 0.015964 -vt 0.331554 0.843951 -vt 0.331554 0.441767 -vt 0.246223 0.394528 -vt 0.053199 0.941767 -vt 0.331554 0.941767 -vt 0.331554 0.975170 -vt 0.053199 0.930633 -vt 0.331554 0.930633 -vt 0.053198 0.897230 -vt 0.331554 0.897230 -vt 0.053199 0.975170 -vt 0.331554 0.986304 -vt 0.127488 0.015964 -vt 0.127488 0.294321 -vt 0.116354 0.294321 -vt 0.116354 0.015964 -vt 0.082952 0.294321 -vt 0.039809 0.445063 -vt 0.142160 0.342712 -vt 0.160891 0.412619 -vt 0.949392 0.429496 -vt 0.949392 0.466959 -vt 0.949392 0.314226 -vt 0.949392 0.351689 -vt 0.949392 0.602401 -vt 0.949392 0.639864 -vt 0.949392 0.083686 -vt 0.949392 0.121149 -vt 0.949392 0.371861 -vt 0.949392 0.409324 -vt 0.949392 0.256591 -vt 0.949392 0.294054 -vt 0.949392 0.544766 -vt 0.949392 0.582229 -vt 0.949392 0.026051 -vt 0.949392 0.198956 -vt 0.949392 0.236419 -vt 0.949392 0.487131 -vt 0.949392 0.524594 -vt 0.949392 0.660037 -vt 0.949392 0.697499 -vt 0.160891 0.015964 -vt 0.160891 0.294321 -vt 0.082951 0.015964 -vt 0.071817 0.294321 -vt 0.938258 0.294054 -vt 0.938258 0.524594 -vt 0.938258 0.582229 -vt 0.190551 0.773093 -vt 0.331554 0.015964 -vt 0.053199 0.986304 -vt 0.142160 0.445063 -vt 0.109716 0.463794 -vt 0.072253 0.463794 -vt 0.021078 0.412619 -vt 0.021078 0.375156 -vt 0.039809 0.342712 -vt 0.072253 0.323981 -vt 0.109716 0.323981 -vt 0.160891 0.375156 -vt 0.949392 0.063513 -vt 0.071817 0.015964 -vn 0.258800 0.965900 0.000000 -vn 0.707100 0.707100 0.000000 -vn 0.965900 0.258800 0.000000 -vn 0.965900 -0.258800 0.000000 -vn 0.707100 -0.707100 0.000000 -vn 0.258800 -0.965900 0.000000 -vn -0.258800 -0.965900 0.000000 -vn -0.707100 -0.707100 0.000000 -vn -0.965900 -0.258800 0.000000 -vn -0.965900 0.258800 -0.000000 -vn 0.636700 -0.636700 0.434900 -vn -0.258800 0.965900 -0.000000 -vn -0.707100 0.707100 -0.000000 -vn 0.934800 0.250500 -0.251700 -vn 0.869800 -0.233100 0.434900 -vn -0.233100 0.869800 0.434900 -vn 0.233100 0.869800 0.434900 -vn 0.869800 0.233100 0.434900 -vn -0.636700 0.636700 0.434900 -vn 0.636700 0.636700 0.434900 -vn -0.869800 0.233100 0.434900 -vn -0.869800 -0.233100 0.434900 -vn -0.636700 -0.636700 0.434900 -vn -0.233100 -0.869800 0.434900 -vn 0.233100 -0.869800 0.434900 -vn -0.099000 -0.369600 0.923900 -vn -0.270500 -0.270500 0.923900 -vn -0.369600 -0.099000 0.923900 -vn -0.369600 0.099000 0.923900 -vn -0.270500 0.270500 0.923900 -vn -0.099000 0.369600 0.923900 -vn 0.099000 0.369600 0.923900 -vn 0.099000 -0.369600 0.923900 -vn 0.270500 -0.270500 0.923900 -vn 0.369600 -0.099000 0.923900 -vn 0.369600 0.099000 0.923900 -vn 0.270500 0.270500 0.923900 -vn -0.684300 0.684300 -0.251700 -vn 0.684300 0.684300 -0.251700 -vn -0.934800 0.250500 -0.251700 -vn -0.934800 -0.250500 -0.251700 -vn -0.684300 -0.684300 -0.251700 -vn -0.250500 -0.934800 -0.251700 -vn 0.250500 -0.934800 -0.251700 -vn 0.684300 -0.684300 -0.251700 -vn 0.934800 -0.250500 -0.251700 -vn -0.250500 0.934800 -0.251700 -vn 0.250500 0.934800 -0.251700 -vn 0.000000 0.000000 1.000000 -vn 0.000000 -0.000000 -1.000000 -vn 1.000000 0.000000 0.000000 -vn -1.000000 0.000000 0.000000 -vn 0.000000 1.000000 0.000000 -vn 0.000000 -1.000000 0.000000 -s off -f 1/1/1 2/2/1 4/3/1 -f 4/3/2 6/4/2 5/5/2 -f 5/5/3 6/4/3 8/6/3 -f 7/7/4 8/6/4 10/8/4 -f 10/8/5 12/9/5 11/10/5 -f 12/9/6 14/11/6 13/12/6 -f 13/13/7 14/14/7 16/15/7 -f 15/16/8 16/15/8 18/17/8 -f 18/17/9 20/18/9 19/19/9 -f 20/18/10 22/20/10 21/21/10 -f 10/8/11 29/22/11 30/23/11 -f 24/24/12 2/2/12 1/1/12 -f 22/20/13 24/24/13 23/25/13 -f 7/7/14 41/26/14 40/27/14 -f 8/6/15 28/28/15 29/29/15 -f 2/2/16 24/24/16 36/30/16 -f 2/2/17 26/31/17 25/32/17 -f 6/4/18 27/33/18 28/34/18 -f 24/24/19 22/20/19 35/35/19 -f 4/3/20 25/36/20 27/37/20 -f 20/18/21 34/38/21 35/39/21 -f 18/17/22 33/40/22 34/41/22 -f 16/15/23 32/42/23 33/43/23 -f 14/14/24 31/44/24 32/45/24 -f 14/11/25 12/9/25 30/46/25 -f 31/44/26 37/47/26 32/45/26 -f 32/42/27 37/48/27 33/43/27 -f 33/40/28 37/49/28 34/41/28 -f 34/38/29 37/50/29 35/39/29 -f 35/35/30 37/51/30 36/52/30 -f 36/30/31 37/53/31 26/54/31 -f 26/31/32 37/55/32 25/32/32 -f 31/56/33 30/46/33 37/57/33 -f 29/22/34 37/58/34 30/23/34 -f 28/28/35 37/59/35 29/29/35 -f 27/33/36 37/60/36 28/34/36 -f 25/36/37 37/61/37 27/37/37 -f 42/62/4 86/63/4 85/64/4 -f 23/25/38 49/65/38 48/66/38 -f 3/67/39 5/5/39 40/68/39 -f 19/19/40 21/21/40 48/69/40 -f 17/70/41 19/19/41 47/71/41 -f 17/70/42 46/72/42 45/73/42 -f 15/16/43 45/74/43 44/75/43 -f 13/12/44 44/76/44 43/77/44 -f 11/10/45 43/78/45 42/79/45 -f 9/80/46 42/62/46 41/81/46 -f 1/1/47 38/82/47 49/83/47 -f 3/67/48 39/84/48 38/85/48 -f 61/86/49 51/87/49 53/88/49 -f 60/89/49 58/90/49 52/91/49 -f 59/92/49 57/93/49 56/94/49 -f 53/88/49 57/93/49 59/92/49 -f 56/94/49 52/91/49 58/90/49 -f 54/95/49 60/89/49 50/96/49 -f 51/87/49 61/86/49 55/97/49 -f 60/89/49 54/95/49 55/97/49 -f 67/98/50 66/99/50 65/100/50 -f 62/101/50 68/102/50 69/103/50 -f 73/104/50 72/105/50 64/106/50 -f 67/98/50 64/106/50 72/105/50 -f 73/104/50 68/102/50 62/101/50 -f 70/107/50 63/108/50 69/103/50 -f 66/99/50 71/109/50 65/100/50 -f 71/109/50 70/107/50 69/103/50 -f 58/110/51 60/111/51 69/112/51 -f 50/113/8 63/114/8 70/115/8 -f 52/116/52 62/117/52 63/114/52 -f 57/118/53 72/119/53 73/120/53 -f 61/121/53 65/122/53 69/112/53 -f 55/123/5 71/124/5 66/125/5 -f 59/126/52 64/127/52 65/128/52 -f 53/129/2 67/130/2 72/119/2 -f 54/131/54 70/115/54 71/132/54 -f 53/129/51 51/133/51 66/125/51 -f 56/134/13 73/120/13 62/117/13 -f 58/110/54 68/135/54 64/127/54 -f 77/136/13 76/137/13 74/138/13 -f 81/139/50 80/140/50 76/137/50 -f 79/141/5 78/142/5 80/140/5 -f 75/143/49 74/138/49 78/144/49 -f 101/145/50 100/146/50 96/147/50 -f 97/148/2 96/147/2 94/149/2 -f 85/150/50 91/151/50 93/152/50 -f 49/65/13 93/153/13 92/154/13 -f 39/84/1 83/155/1 82/156/1 -f 46/72/8 90/157/8 89/158/8 -f 43/78/5 87/159/5 86/160/5 -f 38/82/12 82/161/12 93/162/12 -f 40/68/2 84/163/2 83/164/2 -f 47/71/9 91/165/9 90/166/9 -f 43/77/6 44/76/6 88/167/6 -f 41/26/3 85/168/3 84/169/3 -f 48/69/10 92/170/10 91/171/10 -f 45/74/7 89/172/7 88/173/7 -f 99/174/8 98/175/8 100/146/8 -f 95/176/49 94/149/49 98/177/49 -f 3/67/1 1/1/1 4/3/1 -f 3/67/2 4/3/2 5/5/2 -f 7/7/3 5/5/3 8/6/3 -f 9/80/4 7/7/4 10/8/4 -f 9/80/5 10/8/5 11/10/5 -f 11/10/6 12/9/6 13/12/6 -f 15/16/7 13/13/7 16/15/7 -f 17/70/8 15/16/8 18/17/8 -f 17/70/9 18/17/9 19/19/9 -f 19/19/10 20/18/10 21/21/10 -f 12/9/11 10/8/11 30/23/11 -f 23/25/12 24/24/12 1/1/12 -f 21/21/13 22/20/13 23/25/13 -f 5/5/14 7/7/14 40/27/14 -f 10/8/15 8/6/15 29/29/15 -f 26/54/16 2/2/16 36/30/16 -f 4/3/17 2/2/17 25/32/17 -f 8/6/18 6/4/18 28/34/18 -f 36/52/19 24/24/19 35/35/19 -f 6/4/20 4/3/20 27/37/20 -f 22/20/21 20/18/21 35/39/21 -f 20/18/22 18/17/22 34/41/22 -f 18/17/23 16/15/23 33/43/23 -f 16/15/24 14/14/24 32/45/24 -f 31/56/25 14/11/25 30/46/25 -f 41/81/4 42/62/4 85/64/4 -f 21/21/38 23/25/38 48/66/38 -f 39/178/39 3/67/39 40/68/39 -f 47/179/40 19/19/40 48/69/40 -f 46/180/41 17/70/41 47/71/41 -f 15/16/42 17/70/42 45/73/42 -f 13/13/43 15/16/43 44/75/43 -f 11/10/44 13/12/44 43/77/44 -f 9/80/45 11/10/45 42/79/45 -f 7/7/46 9/80/46 41/81/46 -f 23/25/47 1/1/47 49/83/47 -f 1/1/48 3/67/48 38/85/48 -f 59/92/49 61/86/49 53/88/49 -f 50/96/49 60/89/49 52/91/49 -f 58/90/49 59/92/49 56/94/49 -f 61/86/49 60/89/49 55/97/49 -f 64/106/50 67/98/50 65/100/50 -f 63/108/50 62/101/50 69/103/50 -f 68/102/50 73/104/50 64/106/50 -f 65/100/50 71/109/50 69/103/50 -f 68/135/51 58/110/51 69/112/51 -f 54/131/8 50/113/8 70/115/8 -f 50/113/52 52/116/52 63/114/52 -f 56/134/53 57/118/53 73/120/53 -f 60/111/53 61/121/53 69/112/53 -f 51/133/5 55/123/5 66/125/5 -f 61/181/52 59/126/52 65/128/52 -f 57/118/2 53/129/2 72/119/2 -f 55/182/54 54/131/54 71/132/54 -f 67/130/51 53/129/51 66/125/51 -f 52/116/13 56/134/13 62/117/13 -f 59/126/54 58/110/54 64/127/54 -f 75/143/13 77/136/13 74/138/13 -f 77/136/50 81/139/50 76/137/50 -f 81/139/5 79/141/5 80/140/5 -f 79/183/49 75/143/49 78/144/49 -f 97/148/50 101/145/50 96/147/50 -f 95/176/2 97/148/2 94/149/2 -f 93/152/50 82/184/50 85/150/50 -f 83/185/50 84/186/50 85/150/50 -f 85/150/50 86/187/50 87/188/50 -f 87/188/50 88/189/50 89/190/50 -f 89/190/50 90/191/50 91/151/50 -f 91/151/50 92/192/50 93/152/50 -f 82/184/50 83/185/50 85/150/50 -f 85/150/50 87/188/50 89/190/50 -f 89/190/50 91/151/50 85/150/50 -f 48/66/13 49/65/13 92/154/13 -f 38/85/1 39/84/1 82/156/1 -f 45/73/8 46/72/8 89/158/8 -f 42/79/5 43/78/5 86/160/5 -f 49/83/12 38/82/12 93/162/12 -f 39/178/2 40/68/2 83/164/2 -f 46/180/9 47/71/9 90/166/9 -f 87/193/6 43/77/6 88/167/6 -f 40/27/3 41/26/3 84/169/3 -f 47/179/10 48/69/10 91/171/10 -f 44/75/7 45/74/7 88/173/7 -f 101/145/8 99/174/8 100/146/8 -f 99/194/49 95/176/49 98/177/49 diff --git a/src/main/resources/assets/hbm/textures/models/bale.png b/src/main/resources/assets/hbm/textures/models/bale.png deleted file mode 100644 index 908a0480f..000000000 Binary files a/src/main/resources/assets/hbm/textures/models/bale.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/models/fusion/klystron_creative.png b/src/main/resources/assets/hbm/textures/models/fusion/klystron_creative.png new file mode 100644 index 000000000..03e695b38 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/fusion/klystron_creative.png differ