From 79351bbd0a10c55a842b865dfff7d6e1fd673e29 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 9 Jan 2026 10:05:56 +0100 Subject: [PATCH] do you come from a vegetmite sandwich? --- changelog | 9 +- src/main/java/com/hbm/blocks/ModBlocks.java | 4 + .../machine/fusion/MachineFusionKlystron.java | 11 +- .../fusion/MachineFusionKlystronCreative.java | 48 ++ .../java/com/hbm/config/ServerConfig.java | 2 + .../java/com/hbm/extprop/HbmLivingProps.java | 6 +- .../com/hbm/handler/EntityEffectHandler.java | 2 + .../hbm/inventory/recipes/FusionRecipes.java | 13 + .../com/hbm/items/special/ItemSyringe.java | 7 + src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/ResourceManager.java | 1 + .../RenderFusionKlystronCreative.java | 79 +++ .../java/com/hbm/tileentity/TileMappings.java | 1 + .../fusion/TileEntityFusionKlystron.java | 83 ++- .../TileEntityFusionKlystronCreative.java | 137 +++++ .../machine/rbmk/TileEntityRBMKHeater.java | 4 +- src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + src/main/resources/assets/hbm/models/bale.obj | 535 ------------------ .../assets/hbm/textures/models/bale.png | Bin 28624 -> 0 bytes .../models/fusion/klystron_creative.png | Bin 0 -> 6450 bytes 21 files changed, 369 insertions(+), 578 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/fusion/MachineFusionKlystronCreative.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderFusionKlystronCreative.java create mode 100644 src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionKlystronCreative.java delete mode 100644 src/main/resources/assets/hbm/models/bale.obj delete mode 100644 src/main/resources/assets/hbm/textures/models/bale.png create mode 100644 src/main/resources/assets/hbm/textures/models/fusion/klystron_creative.png 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 908a0480f72d38e9b72c1cd11234e01d6c43b858..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28624 zcmXt9bySn@+owS!1-^8vFhO7{F}eh$8>J+qyQI63l#m!DjvgW~dUQw)5E)Wqp1AMp`qZ7Eqoqno&O(ldhe!GLjj|qYAO63Mj0E@DCu=o|+mTqS zt19E&|LCfq?%pSPN?N!Rd67+#4z^QvdS!{fqx ztE^z)Kfebb{b6hRY4eQrq!o$6Fo++F2f5ox(%H}3&OM>2|M>L@FSi2q4W0P`}jJ+;9#K?BtjCKWIjJt=PtbG;!AiEC_qxiMr;UN5>Gjn%$ z_bJah_{UdU?&$EUe8k~w%^3eN@ijLN&+tC*@%24ZQ?|HU6~0^DrBS>( z`*44j+;xAWeibcu&j|N>pZ(-kwd?Tge&0Y6?ng6p_2mtKr<-Po=_P=q8+d9Hc|#Pp zMQhkbrAU^k=Ln~RD-Br!vXEIRI{(lf5@>jN)1d9}B~67~KytjuAUcf~Bq1wl=T_bw zcG7+!u3aR1d)<64e6)6V^Py&Uq{+1(O_M1`VnYF@bJ{&ENdnTyGxR^GN~BW&E4^k? z(lw0j)uExq8`Qz;paYXhN|yTh@FN~X-kK3v*Zn=^k-*S+N(Y?_;@x6DEG%1-ka3^V zC~iq)OZuBVt0LTwf{B3}7#{_5JwCK>gf@uyFS39nq$jrpA-X0u&IQ0sh>sfX3}`XT zrll!r`+Wp&NZ{0MktZTZtzmpmD&gL*A3_6ecB+4H+!06KqQUK*t*xM7jMTCx?m}jm zY{Jg>-UkH-FIsekLUBjVnwy(FC!+g;gr{Ex&>lfy7HZ6>Am#o6rj5-_m4kzWKmg=+ zh4Zc?@eKucKQOi<^wz`~3d!`M;uZwie^3JoeQzQ4P$EyUa$4RKy;%U&sKm1hLq-GDAGF7Vi>NXs1cXiF{-(i6wq&E03e6!!xO!I^^Zq)(0rX;Vd6T=<( zMp1=N0zVVge&0hKnijs{&bH0XmNK+9>*nq*7lyl*^3i%TnV|EU_&0_#qkVl!MPFXTejIw>RGBP>iCF?YW>aSOga9u+RA+N9|{ z9p)=)#Et(U;NZ#hwoh1C*s?kxj;41Ab-gA%u~wQY>ji)WhlPFM`K6{l>f86z>9s-d}`;u_|r%{SM|NWU#+J(+R}>qRD%uM-P^FjM5XB zmx^OkVB=}pb8;4hm5}$$-K9uG(ka%#KSGm>)2x-1-&N0W*qT4!AL5UuAwe(OUvW~! zRcp)Lo;KWHE?>pnkKWGvn>`!~uuej-NvC4mMb3AJ&~x+h7Yt2VgX5kmh6$+j4khOJ zheo@NTCS9wJR3IGGR{9;0w}Zt0+VhS@2BOiFT4=@a@Rxm=l3`NI_fhAU)fqG88GOP zRgiss@}lE!F{bMTwFco$N@xU^ty(%m}o-eF>SAO?yw8MJm)Or(IevHo6q^8AoTH}b;7M_Iq)Y{%xe;8WLJ zgWcUnEj43PYyA=3Y;2%F6Jx!@Xv!22O=Nkd*Y(ZS$!wS{-p!`_ot+Fv>fLe1a&e

@SpZ@u*!=300N?DoDx6 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

-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

et0C$qSTYf) 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 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 0000000000000000000000000000000000000000..03e695b382acad7f5b2f4d3998e5647a3732ba27 GIT binary patch literal 6450 zcmbVRX&{u}+a61(AxRBW_9DhG8CjF1ERje^W0}#<43T}`*PnfxiX>}<5HfbMhcQI9 z?Ca2seJ5Mq$NzobFYm{9K0I@td!BQi`&{R~uXEjJBA@7Juw1xy0R#fEXg*YZ3Ifq! zf%XOy18|i|;b{iG=w0q>8ZZGLUnXn>2*kOlsj6b&nYucOiQqO&Z`#Ck*lyv?{t;s8 zf6HBbyVa4u-#VC1JeYVP%fd0XmNn$3F!RgIX?euu`|K^>s3s%YBTex8#1QLSS{>(u z`yGc5vGJOd;Gk8lQX;>sak32a8Msdh+G-dh!d_8SfuHn=baLwcjrZ z*e%p=loSMgk#kz={<+I(D<818ldvo?*eO0t2Li3|@zDj|Vj_ZO&eI}6p8r%W(|{fh zue+)9R#{nERNd0_@&DtpK?g<7l=_$4I8yX9-zo9KDnt|)*%K$gy`5wYE3BQH#hla5 z!K`0Cy=y`=GjzkCariZ6!t)8XacrAaTh~g_%KOxBp9ioU_VerSG0{MEQca9`_Ui6J zjT@7=uZ(F}3LYOPE)-UzpI*bZFK@Mu?1h8ZJWf(JPgaj+Xo3kEOvFGdS4ncyNLE;=P;c4P;;@W8jpw5BXqpbAUCU!4La-chlT$J{x94&Gt=u5Y(x#)w7c#%3a zWd<(M4^T$uVSF|*A&sAp?qa@Wdyr$;M0#=}*`L<7DMogFlFp8sEwzFba*GTuKygxpu3LyC-lbsith#U6@)~*fw zh{*u#?i-JNSM4=;8vZaR6T+E@j>XoED?&)Jxf1G4T#|5zZ6f*-|&9`y^0p#8vPc6Qo&V=ZmwZLn%$ka&bhQ3mQ@6gOcQXX=gUqn(T z3&|>{C8{6hMvvumvbU}otRTB$9R9XhOzkuDBVn&d{T-T3pNe5;TRvtY=GDD5;*2cOi`cVp@FJj zshz{jyfSQ@x}|1x$fO!#+fU}ZeJc?W#S`%UfpQods_`qTai`hZ)3sfhZ`IXgVRxV9 z)InIld3CHJ(s-+^S25+F=B~#YF*{xnhVk80TUw?Mrrhd;-BoRz{zU0Th~J#b-=E*F zYuAEUFMuaEn=aBKzp-JRi=I82dhV&FdQ)1K;zsF7GsU=2e}3$?gJpoh4UIQbqI#zj z<_{ejhc!=X1;|0%^jJ^aZO#})`wC%aD=2phUbY8#o zrRC3Sm|Zt>1{x^3=IL0R+*W_orvC5h71?9C@f@%XF#>>6re*u3-30Mc z0=z%iiI0g?sRcnvYRuVud%>8Sx3G3tt8j2qJSY;{%v(#{>>dmFdS9^^-W9Fd4gt0gHdDWCWu(_6r4$kNvA8C8}hL#!W_!=Yn5vHu2CRV}!j2lu?+H zH{2Aj;$j6+zlfM=bM~}*uXklv-D(zFS?f$$LBfxwu0L?ydrOhps;+BLJT#h@+Woju?ikN2-1ds_$dpgf3N+?HP4NG2b;|`qa2^G-LsYwg@1rNoALxy(=Nr z z9z(Bw4T=J&^axf=#VAVm(Qb`ZywWdN0H;xwnBF-)MR$k`>i4)PXcu|2Yy)W{U z=4;cKUp80v&^!0b0~yI4yUd=dhvMs!IqLo!S_POa?sm&^7c!>c8K-nyjyFZ=ur>on4VpYS)=BPVWG`>ljKjsM%1WWiBfLn*Ir2T9J>riPnecdp zEhZF!Utet*3wpCS_}XEjTH?$lTRXeXy}do^>5N5MrY#{X^-4@gsp8&<1wHnGyJRBc zSB;7|u43+6iL|Cz5~|tL$0x;@pfZT3={TD?v(q#d2R zWbb81(PDe}oV5P0^X<(Y!uB539q>SBvuei|1_cph0b$Dd_VMv?=h>Ff*;gg?>Wf(* z8)BduN(!6UP3X={mEn9Vn9_V%2QZa!_Y=rpk-^S==3fr$`Jf!Tpm3dZ1-YEdR9g&H zk}W2BA}$u-{3eNEm1Of3R$$AgF*<8;0If(u2(o!ZsrvzgZS7IcuK``4Vi2iUox za@a343J8pA>(6z5La5+F1J^z{Iq3yq#JQ_(x$!Pn~X|+$B`hIYf)@6Z$ z6jZ{P6F%RQ9FNduJ$Ukf0e%CN(zov39*1ij&o_IV%nbedd3rfU@nW!Mwu zyEJmL{<9V)8~|vHOPt!a*8Qadfb!tV@EO{@1k2X!hzewuRUW->_BQS+&DkrI89=&# ztZ8DW$AUKK|34=9EWPZ{b+=FVT8({RwmgNm;_fLi?{ULfucANB|CuPXc%)tg$5hmY z@zOvY`HrLGT!rEd?|@D>SCwM?{B7BW-sfcZh>5YEOyK&`R4(fnc!W~Y#}~6 z$hpP@i}AQ8cYCs@S05e`>&Yl}N9k37Dq4ZP7W7z|0e*oo#*r_m!M{ZEwbL^*ye8u` zcwh>|xO7RI)c?ssEsR;V2@ZC1Q+y`cWt7*#L4O_)O>Qi=r3V+Erz!b-i1r3O$$j~| z5CAiiFh`3SBcDzBN(cdoHUn^sWn-DCrSS%2(KClM%XjBMp25seWee;sfp{MQ20b*- zP71x~jRFNys5lxB&xL()>)!7EE?SW3!BUw?zfHwI*H;ICTdhHx3hZr8;d@EUP!PP+ zhD{6TEv)IPDGYR0?gTn#I-QMhRSmGSe<;78uJ>5}8TQOq^tskMZ#$yU5RlNNn4uhQ zQJ{zLO@*tlco@TW*0jse&o0`}5m_`+Ymf=p?JYkeg|8X1ZeeIhAnW1e662NO0#A4R z+3k(TAH>WbO~&&>kxzp6UZW1E_3>t`*;~J!$pDLMYlp-EBTMOp8arQYe=c;^HVm!l zHsrJbB>5=RBWR1M9v&E$e?PPAp8EBA_?YC9ARF-1=aV)u69aG5ryu{8PId(Y`cK=j zRb|LPFq`$XRP;!e9Ul~x|Bw4h7cc$`8qycGrME)>T`IgF$!Qzkr;Y%pMSBAVK7pb4 z%}+ul)E7+$9|6#2z9_gvEx6r|?CYZ4_znnSt7W<=PX6=0f8Fh@z*&(6 zMC$V*#<*HnFN3ffvnqe&&3r810V_H~GRl~I^Q`ddUBBKsG(;1H>32_yX*CqGc8;m- z==lBIRs`Ap>B~rmE%e9#M$oXA@|p+vmS2aR18;KT`YE|Y>!|)@BuTwJuWN_XEl&5% zS^2c+wJPUPmGhh1;_13E`#rm$EP_3>#1|30>)`Kr?_cePSUoodRudkL53rcNn`?vm zMhg~K%`TIU(2&}^`GKQ#{jqgBiyMPh&M|6_Ao64AxdUYG2~hS_FeXJJP%Jd_^^6yV*4k06TiKV+=W!Z$9NsAvdY@j7_d zR!72TcO1;jhD7!j-G^itm4^`xs*j^8H+LG6LVu(c{=6qB^V$!MHcoyYo+@-mhfhrY z(2akb0N2J5YdiS8Qz@*xQi|%+k07&NxjIsvy9vq%Zv80ia+RiII1Zm?h~hfpsV0 z?64TiLNi44+yhv98yq}&&DoQAw$A3wpxe99wX>gBd^!aR@*l}cJzhgYa$>|oqfwAr zDXdvHVMI@zr6x)cd}kP-xuv15mNw?F4eJ^$cl}}Dkq#A&G%M7V*D0~Y!+V|F>BHqZ&u!5-9LeIWIZl%y*NgYd zz_A&L{80D_(b#PF!4LEkm!DRQRE@|`j`K0Fo;k>}W@;$H9_4c54g?J8g~ zfJ1T@<*RfgyJ#D3JGldF80~7sHfZ-wt?75IB``eu&n|(mRl(FH`L6p$P$_ICDXSiy z%82C<4I4qXs_?H z8m%)@Fs68yXopzZ@J{W~@0_i@B2Nh~d%LxKic^~sWH>pXHw3}dCjdJE^vy36&}@4S z#~Y#ywIE%O(ZHs%5+Qt&kpM-;_Wnw{>rP!_i}9Yq7Q`z-Q{3&G~=|ezB%U5}TpZ8M37&t6wRhi}KKJ;L7NGb*o!a zJlm2>t&_IluIHc6wpzYNW2Ak;SGzo4CxiKQOy_c=m(7Zc;$VW=qXMXYE@;lMK*etg z%_5{T%)Za9uMc6nC52cKpC@$>hUt*AcaTc2a&i zg~e30f~sl1Y3g6INPkQU!#;PqQL3v4`j?rHvLSAAlmb9ev&nDV__%=5ZZ;{yrVx$h zGnk!g$9JNywjsXf{P_CNdpdY^7A2-P!AU!yu5|ZY&-}HauKPDnI25`qe}4N`j)dHa zG8NXI%fhmqG-#Vf4EXT^;rWeci9aPFN1yOg`fSVhccW+ve^$@Co6SQHa69ozCFSWN;DEf5=W3gluz&Kghz5s1*xAd)m-@N{ zn$2%>9vN{w7D3JXoeHCx?yy@K#jfGlif$;KAR1FWx$3D#iE^!OA}Cd>HfDy9$bGTi zT@ZlkWq?x$MO=zMY?K4gDHC;;QMJw%;Mz``Cy)Stg6N?m#OiNVj}^y`a^ME>W(jcH zL45W${_WHapq=?3CrRy^H|plYuIe{y6O#8>Yhtbuz|uCvJ};uc+jaekBZ}XxZ4)Tn_&54UTSNK4VV3TXMo-(N z zWofJDs_0%M*Ta1eXK{DOmn%=kqEAJX-vInxx2pUh z5)Dy2`OgpI7ykuPw#wvt1~0m@tUhjBPwZqWzQ_c8tP)$7W71|n?e96-vnOvCZYJ%G zqVA|jOm(&7{pVTxak3@K@s)?a7omqZoVQ1ydUPb2MiC~v=1ytmn;xI9TWWs{{0Rcm MRMSx{zHc7