From b88d6f6cd3fb22ed420238916525cb2aa0ba5fa8 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Sat, 20 Dec 2025 15:48:05 +0200 Subject: [PATCH 01/29] aoh --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 66931abd2..d95852242 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -6289,6 +6289,7 @@ tile.pink_log.name=Розовое дерево tile.pink_planks.name=Розовые доски tile.pink_slab.name=Плита из розового дерева tile.pink_stairs.name=Ступеньки из розового дерева +tile.pipe_anchor.name=Трубный якорь tile.piston_inserter.name=Вставщик tile.piston_inserter.desc=Может принимать один предмет$Если подан сигнал редстоуна, то вставит предмет в просверлённый графит$Все предметы в просверлённом графите в цепочке будут сдвинуты на один блок$Требуется один блок воздуха между графитом tile.plant_dead.name=Мёртвое растение @@ -6800,3 +6801,4 @@ desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х + From a944c28dd44712be602d830a0f4480ce7ad58eb7 Mon Sep 17 00:00:00 2001 From: Toshayo Date: Fri, 26 Dec 2025 00:29:06 +0100 Subject: [PATCH 02/29] Added fluid valve with counter --- src/main/java/com/hbm/blocks/ModBlocks.java | 5 +- .../hbm/blocks/network/FluidCounterValve.java | 68 ++++++++ .../java/com/hbm/tileentity/TileMappings.java | 1 + .../network/TileEntityFluidCounterValve.java | 157 ++++++++++++++++++ src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../blocks/fluid_counter_valve_off.png | Bin 0 -> 4474 bytes .../blocks/fluid_counter_valve_on.png | Bin 0 -> 4489 bytes 7 files changed, 232 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/hbm/blocks/network/FluidCounterValve.java create mode 100644 src/main/java/com/hbm/tileentity/network/TileEntityFluidCounterValve.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/fluid_counter_valve_off.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/fluid_counter_valve_on.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index a4c4381be..ed97a6af0 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -743,7 +743,7 @@ public class ModBlocks { public static Block machine_microwave; public static Block machine_battery_socket; - + @Deprecated public static Block machine_battery_potato; @Deprecated public static Block machine_battery; @Deprecated public static Block machine_lithium_battery; @@ -787,6 +787,7 @@ public class ModBlocks { public static Block pipe_anchor; public static Block fluid_valve; public static Block fluid_switch; + public static Block fluid_counter_valve; public static Block fluid_pump; public static Block machine_drain; public static Block radio_torch_sender; @@ -1920,6 +1921,7 @@ public class ModBlocks { fluid_duct_gauge = new FluidDuctGauge().setBlockName("fluid_duct_gauge").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); fluid_valve = new FluidValve(Material.iron).setBlockName("fluid_valve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); fluid_switch = new FluidSwitch(Material.iron).setBlockName("fluid_switch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); + fluid_counter_valve = new FluidCounterValve(Material.iron).setBlockName("fluid_counter_valve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); fluid_pump = new FluidPump(Material.iron).setBlockName("fluid_pump").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_drain = new MachineDrain(Material.iron).setBlockName("machine_drain").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":concrete"); radio_torch_sender = new RadioTorchSender().setBlockName("radio_torch_sender").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); @@ -3205,6 +3207,7 @@ public class ModBlocks { register(pipe_anchor); register(fluid_duct_gauge); register(fluid_valve); + register(fluid_counter_valve); register(fluid_switch); register(fluid_pump); register(machine_drain); diff --git a/src/main/java/com/hbm/blocks/network/FluidCounterValve.java b/src/main/java/com/hbm/blocks/network/FluidCounterValve.java new file mode 100644 index 000000000..f0a202fbd --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/FluidCounterValve.java @@ -0,0 +1,68 @@ +package com.hbm.blocks.network; + +import com.hbm.blocks.ILookOverlay; +import com.hbm.blocks.ITooltipProvider; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.network.TileEntityFluidCounterValve; +import com.hbm.util.i18n.I18nUtil; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; + +import java.util.ArrayList; +import java.util.List; + +public class FluidCounterValve extends FluidDuctBase implements ILookOverlay, ITooltipProvider { + + @SideOnly(Side.CLIENT) + private IIcon iconOn; + + public FluidCounterValve(Material mat) { + super(mat); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.iconOn = iconRegister.registerIcon(RefStrings.MODID + ":fluid_counter_valve_on"); + this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":fluid_counter_valve_off"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + return metadata == 1 ? iconOn : blockIcon; + } + + @Override + public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { + return new TileEntityFluidCounterValve(); + } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityFluidCounterValve)) + return; + + TileEntityFluidCounterValve duct = (TileEntityFluidCounterValve) te; + + List text = new ArrayList<>(); + text.add("&[" + duct.getType().getColor() + "&]" + duct.getType().getLocalizedName()); + text.add("Counter: " + duct.getCounter()); + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + this.addStandardInfo(stack, player, list, ext); + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index a4cbb8014..cf5ce3cac 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -443,6 +443,7 @@ public class TileMappings { put(TileEntityPipeExhaust.class, "tileentity_pipe_exhaust"); put(TileEntityPipeExhaustPaintable.class, "tileentity_pipe_exhaust_paintable"); put(TileEntityFluidValve.class, "tileentity_pipe_valve"); + put(TileEntityFluidCounterValve.class, "tileentity_pipe_counter_valve"); put(TileEntityFluidPump.class, "tileentity_pipe_pump"); put(TileEntityPipeAnchor.class, "tileentity_pioe_anchor"); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityFluidCounterValve.java b/src/main/java/com/hbm/tileentity/network/TileEntityFluidCounterValve.java new file mode 100644 index 000000000..285b49ce0 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/network/TileEntityFluidCounterValve.java @@ -0,0 +1,157 @@ +package com.hbm.tileentity.network; + +import api.hbm.redstoneoverradio.IRORInteractive; +import api.hbm.redstoneoverradio.IRORValueProvider; +import com.hbm.handler.CompatHandler; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.uninos.UniNodespace; +import cpw.mods.fml.common.Optional; +import io.netty.buffer.ByteBuf; +import li.cil.oc.api.machine.Arguments; +import li.cil.oc.api.machine.Callback; +import li.cil.oc.api.machine.Context; +import li.cil.oc.api.network.SimpleComponent; +import net.minecraft.block.Block; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) +public class TileEntityFluidCounterValve extends TileEntityPipeBaseNT implements SimpleComponent, CompatHandler.OCComponent, IRORValueProvider, IRORInteractive { + private long counter; + + @Override + public void updateEntity() { + super.updateEntity(); + + if(!worldObj.isRemote) { + if(node != null && node.net != null && getType() != Fluids.NONE) { + counter += node.net.fluidTracker; + } + + networkPackNT(25); + } + } + + @Override + public boolean shouldCreateNode() { + return this.getBlockMetadata() == 1; + } + + public void updateState() { + this.blockMetadata = -1; // delete cache + + if(this.getBlockMetadata() == 0 && this.node != null) { + UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, this.getType().getNetworkProvider()); + this.node = null; + } + } + + @Override + public boolean shouldRefresh(Block oldBlock, Block newBlock, int oldMeta, int newMeta, World world, int x, int y, int z) { + return oldBlock != newBlock; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + counter = nbt.getLong("counter"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setLong("counter", counter); + } + + @Override + public void serialize(ByteBuf buf) { + buf.writeLong(counter); + } + + @Override + public void deserialize(ByteBuf buf) { + this.counter = Math.max(buf.readLong(), 0); + } + + private void setState(int state) { + worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, state, 2); + worldObj.playSoundEffect(xCoord, yCoord, zCoord, "hbm:block.reactorStart", 1.0F, 1.0F); + updateState(); + } + + public long getCounter() { + return counter; + } + + @Optional.Method(modid = "OpenComputers") + public String getComponentName() { + return "ntm_fluid_counter_valve"; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getFluid(Context context, Arguments args) { + return new Object[] {getType().getName()}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getCounter(Context context, Arguments args) { + return new Object[] {counter}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] resetCounter(Context context, Arguments args) { + counter = 0; + markDirty(); + return new Object[] {}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] getState(Context context, Arguments args) { + return new Object[] {getBlockMetadata() == 1 ? 1 : 0}; + } + + @Callback(direct = true) + @Optional.Method(modid = "OpenComputers") + public Object[] setState(Context context, Arguments args) { + final int state = args.checkInteger(0); + if(state != 0 && state != 1) { + throw new IllegalArgumentException(); + } + setState(state); + return new Object[] {}; + } + + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "value").equals(name)) + return String.valueOf(counter); + if((PREFIX_VALUE + "state").equals(name)) + return String.valueOf(getBlockMetadata() == 1 ? 1 : 0); + return null; + } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "value", + PREFIX_VALUE + "state", + PREFIX_FUNCTION + "reset", + PREFIX_FUNCTION + "setState" + NAME_SEPARATOR + "state", + }; + } + + @Override + public String runRORFunction(String name, String[] params) { + if(name.equals(PREFIX_FUNCTION + "reset")) { + counter = 0; + markDirty(); + } else if(name.equals(PREFIX_FUNCTION + "setState")) { + setState(IRORInteractive.parseInt(params[0], 0, 1)); + } + return null; + } +} diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 567bd333d..ba4501b3e 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5529,6 +5529,8 @@ tile.fluid_duct_neo.name=Universal Fluid Duct tile.fluid_duct_paintable.name=Paintable Coated Universal Fluid Duct tile.fluid_duct_solid.name=Coated Universal Fluid Duct (Deprecated) tile.fluid_pump.name=Flow Control Pump +tile.fluid_counter_valve.name=Fluid Valve with Counter +tile.fluid_counter_valve.desc=Beware of loops in your fluid network... tile.fluid_switch.name=Redstone Fluid Valve tile.fluid_valve.name=Fluid Valve tile.foam_layer.name=Foam layer diff --git a/src/main/resources/assets/hbm/textures/blocks/fluid_counter_valve_off.png b/src/main/resources/assets/hbm/textures/blocks/fluid_counter_valve_off.png new file mode 100644 index 0000000000000000000000000000000000000000..77c0aa43272211bc25dccddb91684c995a4c196d GIT binary patch literal 4474 zcmeHKYfuzd7H-4ah@yt3QAvcJ=^5tP#qgXF#&uvAAR@%A?diS)E%RcgfdOB{ zNJ$_XQDfAo=%R@gkQfaHqX{G`>Mo+YWHB2Hf|3erYFBZIYgN#=w}*EnRa;bT{xMZO z-F?q@zI)Dh&pp-m4MS>jfFMMGAV`2NMPr2b=lILd2mXf+KB3^PwJbB6Gg2j}!)Z6O z7Jzc44uAqTYeo?FH&#Q!EblPCb3;|JUS6x$ZM)f|+jzY{c#fs(^v+7}q-Be?-WaU0 z`LyqEwit7dAL?xjI2-7d97p@a(u;^I#_Woc`0(@x zUYApKUuDH_-Iv{WCE;d6>{Tx8$$z9ZJzw2jt`(yJ$`*jfUc^#t~bXqkoVCKy|)|c zU#~~~elBl*CbddvyuDs`So>!1i}(7@t(|qR+t+WaptGS-dFamRy{StsSZrDTpJ8uO z{#g0;_9!}ahjHNehiiYR`?UIg)RWKS>eH^~`ukO0C^YYp-}kxS{+`v*6S3{Yj)uV6 zptL<)!tLb7$QN4*g`Y+Zv{&xcT?v%9lzn zH-qC) zIsS>u0~edc0^`r!SgxYI!%}yQS4# zbMnUep6*W7CmYx13=Vl|o1MEt=?4p8&AC}vTiN;*ByG0}DaLLBLbufciw;3z;@l33 zE&v>A0(q=Wjomxjf}t#<##YMogx-+^^4XL!C&(yE&7{i;XcdFS#R_8FBqXo`jzZm5 zi_Jy4)tHBugwOo22tz#(u0V}t>kVj<-3d^sP%0#Ft(z^DV6g%;#>tpTqh{F%1$(aR5*#9MSE-Go+_=pZ&QlC?Xn>1$vJQ^5+fbg9 zGTDnbHHJYuIvStVq1TVm+gu|mKs`im${`X936a$*n&{!;w8fBQB%ojQaAm?RDl!6> zy~s%eZ85NM;S(tsdd%NZoC4rl08G{o_DZ?<)X38X^CQ#{YE{?L%fTx1wLKgDK6beEj1^`z@%V=CmD^?*lTMTiNxT&x-gy#kyrScyERm=Hz}hrllj36p`sQhc340*?pGg-mh+ zinBX2?RJYA<3mDu&oQ$eZYPG~C=JB{NJ>a#q*y{qWSJ5PNkl^xA_*}`Ou*Y2)?E6( z(ER2>V}_SJg>}LCOFcuwJ1PSd4!;e*T3F9kLQ&7AASrq{1s7Ee7*Cv#YuH5RQ?@(+ zyT?emj*hdxQVM2DPRNvE6HbXuDqJd|r8s3Wn{cyP60M}6g;LOy*<^1mnjk zV1r*lCGfCRbV^UdgO-o!cgY&$d*m2`ym7ALYdG?>BW0BfL7oZXFE3=@{<(0_m(%IB zzIXiRz2GglP|(4jrXzHkgiPh1kM0!PzKnlPTU(PWsGjq5MAhPcq-JH}@_V!Qzm~DN zYH5~J(3~h(H{(dktEjQ6X>rI}Yx;M{5rXd8ygB}$^lE!YM|*5i;gJvI&B$LQ zUaj5-4^ry#4L;rPAm!ICz15~T&}uIE;#_dA=Dd489yI4LS^v}dq4|TqHS#IP zm$kE#x^cSq0FmH)^;q8LpKMxrY97Mwo6$QIiy5|$pU zYqDJ&n#X~e>ABngq)j)>ehRFT$KJXt>nRurB~Rwf|MuaP!3DH`+n(LCzFf2GQ506* z_0zkR@|LRn`hY`kecTgRNdDbd9A$d`Tg(6e literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/fluid_counter_valve_on.png b/src/main/resources/assets/hbm/textures/blocks/fluid_counter_valve_on.png new file mode 100644 index 0000000000000000000000000000000000000000..14f414cc7cef849796d5ab6e75f21dddb4c87cab GIT binary patch literal 4489 zcmeHKYfuzd7H;t|EMPQ>XmF8sH0laHGu`u^%qYkVFob~#5FhL#_H^HY)_Kw0z<@Dg zlnqA1E`}J48WR=b`XDHkh$t(RM2$f)VVAJ6WI=XCO^g^T(UgLFdw2+yRHdxi{9~$m zy8GPkeD|F1o_nhACTmjM#DLHM1VJX6%;4#Yx&UFV85;+f3`8PV{U5Q%j1qtxqP8y)n|Rx#WHQDY^gLhKbhQB zD7o?BOR>Sz9~dtlQ`}@4gZ(NRirmp(*Z$#D)wi;kuHZ>~?zS!d(RTUrfx6Si=jLoM zT?-jowL9Hg78QcsIkREIM|oi_O(Ea8ljonG`OlCQB%^9 zv*YTagBuQ_{(S{Cfl04RQm(Ewzi-+yeb()+lWU&3eMRK|MnKDA{> zan;sCQ+7{HF5{!G##KhlI+Z1j?&*M43-QF#A@+ zxg!M&73V6$A5MCuxpiTpCEwgR?o#hnO*j>mIX$yAtouP*);sf~dY-BI;&R`rv1Pq; z>)KoQ#6>+)d9tpwmKr)((Tse8PR%JtvG=V=d-L@jY<)d;>BO}QhqH@YL}*NP!WBgH zTD`aA=$C8Tue4~7ty`0R_rVxb4O<#ceIEvk&db2!T5d_yQEsP%q}?_k@j5-Q>JUV~ z*y|yw)qqEBAcJuk#J5kJ5~B=l5HC|&WEM{h$YkR4S&*8alt$&RrnIzp@uC2|R|g54 zfG1I})8XQDUW3@jtAo#iSt>?-5Pr2myxd|%W85r26%vI+hMBxf4k2C?fa+P=u1hh- z4p6{1gE*7tJvym0H#b+3E0?(03@NVFYNawlN)Q-CU|gPyC%u@9n~r^jL$qIYovDnLD?UeY7QB{HegDIM;?@unO|G7!+udT?oQ zk4jSj=gwv+V9Eh5e$H?Tni}%=WU~%mIy5B(4&a1P4$g{?m@>|6u?~3%5@aw=kIxH= zJp#!y_Qzt4h)o#rr87Jb=sv_d0zH_!4-8Qji_Yk#vW4)>MuS+GUq`zshSvEWm2wrZ zsR6)jYB`N5aHSp70;K{|+2l&CQl%zsHuW$nvy0|S`xRbHL770$t(k_l5`A@N}!@46^_GrD4@b*fTDzG0H(FmTFgeP zNQKg_R@<~n9~DjMV%@Bhgv-e|$qXR%xH5bLg5bJntJxqXB(ldAtAph2(7_;1WL(+a z#{+4M6QuH_peC+XsZ?5(Qj2TkxSY^D1}z0F2P;wF#AOnBe>TFh=wLEXSW>7{NZ|8; zx#(h8K=N)j&Fyv=#6n1@;5jsGf!m2DdD2Mo0FufGr4A=_gffjFbTTR^0Z2}OOILPt{lDR5*CpnY*duKpn^ zlXPVO*gXcybUYCjyUF*Z)nf zfXBxv;DTR4x$v-by}RIBc+i?)dp^#HTtoIF$flEpZP4-?Py7lFK?0`=*BIoToim_O z#G5T9(T$*Iri~4(cJxW$XQ7n*`wTLirn}tS8#5d`15_l z_+{t^$nkg+S(4hgEPj2&`S_BWf@c>vN+o|P??5U%tyzAv=jxdq+k304*JUVAg)iM% zR2mV4tlQ>yY0RwMD?cB90^z>#>&bi6+88^jDt&tV#?9C6oj$+2T)(E_g%AEsb5lB7 z!}!*Qw;g@+@6-o|zHzbE`N@y#%dMefZ$9_Zv8|udeo^msBbwr|^;bM?->l#}6Q)%K z*0eG5VrpM0;y=4+PiBOB`pN@-*V+oJEkrZ7ue1~#pSHSX$DiqwU(R|c`ePk8^K91S zB`a5iYy-15X1;7a*uPBe)`e9M&Cfz@}{&rte6`VlT+dme?ZK?iZ y#;t#~_a@dcZ8Lso$?&@*se3P7^50LJ?~m_@WfJGPN}`~qh}o26tX#74)&Bv>9BxJc literal 0 HcmV?d00001 From e601e79ad3bc0758de99c99a21f2279b3286d4d2 Mon Sep 17 00:00:00 2001 From: Toshayo Date: Fri, 26 Dec 2025 15:05:47 +0100 Subject: [PATCH 03/29] Updated changelog --- changelog | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/changelog b/changelog index 53a3e52b4..9483965ac 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,6 @@ +## Added +* Fluid valve with counter to control and count fluid that pass through. + ## Changed * After not being part of worldgen for a long time, oily coal is finally being removed * The rare metal blocks that had been unobtainable and unused for the longest time have been removed @@ -7,4 +10,4 @@ ## Fixed * Fixed meteors using a nonexistant keepalive timer, causing potential audio flickering in certain cases -* Fixed 528 coltan deposit config misspelling \ No newline at end of file +* Fixed 528 coltan deposit config misspelling From 4e7bbda68984d3aa6ef572fcef4b2004eac34a07 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Thu, 1 Jan 2026 17:59:35 +0200 Subject: [PATCH 04/29] =?UTF-8?q?=D0=BD=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/ru_RU.lang | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index d95852242..773fa2882 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -724,6 +724,7 @@ container.autocrafter=Автоматический верстак container.barrel=Бочка container.bat9000=Охереть-большая цистерна 9000 container.battery=Энергохранилище +container.batterySocket=Battery Socket container.bombMulti=Многоцелевая бомба container.casingBag=Сумка для гильз container.catalyticReformer=Каталитический реформер @@ -2229,6 +2230,18 @@ item.battery_lithium.name=Литий-ионный аккумулятор item.battery_lithium_cell.name=Литий-ионная энергоячейка item.battery_lithium_cell_3.name=Строенная литий-ионная энергоячейка item.battery_lithium_cell_6.name=Сшестерённая литий-ионная энергоячейка +item.battery_pack.battery_lead.name=Свинцово-серная батарея +item.battery_pack.battery_lithium.name=Литий-ионная батарея +item.battery_pack.battery_quantum.name=Квантовая батарея +item.battery_pack.battery_redstone.name=Редстоун батарея +item.battery_pack.battery_schrabidium.name=Шрабидиевая батарея +item.battery_pack.battery_sodium.name=Натрий-железная батарея +item.battery_pack.capacitor_bismuth.name=Конденсатор (Висмут) +item.battery_pack.capacitor_copper.name=Конденсатор (Медь) +item.battery_pack.capacitor_gold.name=Конденсатор (Золото) +item.battery_pack.capacitor_niobium.name=Конденсатор (Ниобий) +item.battery_pack.capacitor_spark.name=Конденсатор (Спарк) +item.battery_pack.capacitor_tantalum.name=Конденсатор (Тантал) item.battery_potato.name=Картофельная батарейка item.battery_potatos.name=КартошкОС item.battery_red_cell.name=Энергоячейка из красной пыли @@ -5989,6 +6002,7 @@ tile.machine_autosaw.suspended=Приостановлена tile.machine_bat9000.name=Охереть-большая цистерна 9000 tile.machine_battery.name=Энергохранилище tile.machine_battery_potato.name=Картофельная батарея +tile.machine_battery_socket.name=Battery Socket tile.machine_boiler.name=Бойлер tile.machine_boiler.desc=Большой бойлер для кипячения воды или нагрева нефти.$Требует внешний источник тепла.$Скорость передачи тепла: ΔT*0.01 TU/t tile.machine_boiler_electric_off.name=Электрический нагреватель нефти @@ -6802,3 +6816,4 @@ desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х + From b20d5f46b2e0c9a780c68d2f4ed15f2caef5aa67 Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 3 Jan 2026 12:22:56 +0100 Subject: [PATCH 05/29] more caching because sure --- changelog | 11 ++ .../api/hbm/energymk2/IEnergyProviderMK2.java | 3 +- .../api/hbm/energymk2/IEnergyReceiverMK2.java | 3 +- .../api/hbm/fluidmk2/IFluidReceiverMK2.java | 3 +- .../hbm/fluidmk2/IFluidStandardSenderMK2.java | 3 +- src/main/java/api/hbm/tile/ILoadedTile.java | 48 +++++++++ .../java/com/hbm/blocks/machine/Radiobox.java | 100 ++++++------------ .../com/hbm/commands/CommandReapNetworks.java | 46 ++++++++ .../java/com/hbm/crafting/ToolRecipes.java | 11 +- .../recipes/AssemblyMachineRecipes.java | 4 +- .../hbm/inventory/recipes/MachineRecipes.java | 34 ++---- .../inventory/recipes/anvil/AnvilRecipes.java | 3 - .../com/hbm/itempool/ItemPoolsComponent.java | 5 +- .../com/hbm/itempool/ItemPoolsLegacy.java | 13 +-- .../com/hbm/itempool/ItemPoolsSingle.java | 3 - src/main/java/com/hbm/items/ModItems.java | 8 +- .../hbm/items/machine/ItemBatteryPack.java | 6 +- .../com/hbm/items/special/ItemStarterKit.java | 5 - .../weapon/sedna/factory/LegoClient.java | 2 +- .../sedna/mags/MagazineElectricEngine.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 34 +----- src/main/java/com/hbm/main/MainRegistry.java | 1 + .../java/com/hbm/uninos/UniNodespace.java | 8 +- src/main/java/com/hbm/util/Tuple.java | 11 ++ 24 files changed, 193 insertions(+), 174 deletions(-) create mode 100644 src/main/java/com/hbm/commands/CommandReapNetworks.java diff --git a/changelog b/changelog index 2c8db44ed..d26d26487 100644 --- a/changelog +++ b/changelog @@ -1,9 +1,20 @@ +## Added +* New battery system + * Energy storage blocks, capacitors and battery items are now deprecated, but can still be used + * There is now new types of battery items, as well as capacitor items + * Instead of energy storage blocks, there is now a battery socket, which allows those new items to be connected to the power grid + * Battery sockets act like cables, they will connect power grids when two cables are plugged into them in different directions + * Self-chargers and creative batteries are still around, as well as spark batteries which are needed for the balefire bomb + ## Changed +* Updated italian localization * After not being part of worldgen for a long time, oily coal is finally being removed * The rare metal blocks that had been unobtainable and unused for the longest time have been removed * The schrabidium transmutator's grace period is over, it is finally being destroyed * Most of the legacy fusion reactor components, which were unobtainable and unusable, have been removed * The block ID economy is looking better than ever +* Infinite water barrels can now be crafted with any water container and not just buckets +* OpenComputers integration for the PWR can now also read the heat capacity stats ## Fixed * Fixed meteors using a nonexistant keepalive timer, causing potential audio flickering in certain cases diff --git a/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java b/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java index 50f74215c..bb51996e0 100644 --- a/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java +++ b/src/main/java/api/hbm/energymk2/IEnergyProviderMK2.java @@ -2,7 +2,6 @@ package api.hbm.energymk2; import com.hbm.handler.threading.PacketThreading; import com.hbm.packet.toclient.AuxParticlePacketNT; -import com.hbm.util.Compat; import api.hbm.energymk2.Nodespace.PowerNode; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -25,7 +24,7 @@ public interface IEnergyProviderMK2 extends IEnergyHandlerMK2 { public default void tryProvide(World world, int x, int y, int z, ForgeDirection dir) { - TileEntity te = Compat.getTileStandard(world, x, y, z); + TileEntity te = TileAccessCache.getTileOrCache(world, x, y, z); boolean red = false; if(te instanceof IEnergyConductorMK2) { diff --git a/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java b/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java index 466b8b277..58c9ae1ec 100644 --- a/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java +++ b/src/main/java/api/hbm/energymk2/IEnergyReceiverMK2.java @@ -3,7 +3,6 @@ package api.hbm.energymk2; import com.hbm.handler.threading.PacketThreading; import com.hbm.interfaces.NotableComments; import com.hbm.packet.toclient.AuxParticlePacketNT; -import com.hbm.util.Compat; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.Nodespace.PowerNode; @@ -39,7 +38,7 @@ public interface IEnergyReceiverMK2 extends IEnergyHandlerMK2 { public default void trySubscribe(World world, int x, int y, int z, ForgeDirection dir) { - TileEntity te = Compat.getTileStandard(world, x, y, z); + TileEntity te = TileAccessCache.getTileOrCache(world, x, y, z); boolean red = false; if(te instanceof IEnergyConductorMK2) { diff --git a/src/main/java/api/hbm/fluidmk2/IFluidReceiverMK2.java b/src/main/java/api/hbm/fluidmk2/IFluidReceiverMK2.java index 55bdb1372..80d3a5f7b 100644 --- a/src/main/java/api/hbm/fluidmk2/IFluidReceiverMK2.java +++ b/src/main/java/api/hbm/fluidmk2/IFluidReceiverMK2.java @@ -5,7 +5,6 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.uninos.GenNode; import com.hbm.uninos.UniNodespace; -import com.hbm.util.Compat; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IEnergyReceiverMK2.ConnectionPriority; @@ -28,7 +27,7 @@ public interface IFluidReceiverMK2 extends IFluidUserMK2 { public default void trySubscribe(FluidType type, World world, int x, int y, int z, ForgeDirection dir) { - TileEntity te = Compat.getTileStandard(world, x, y, z); + TileEntity te = TileAccessCache.getTileOrCache(world, x, y, z); boolean red = false; if(te instanceof IFluidConnectorMK2) { diff --git a/src/main/java/api/hbm/fluidmk2/IFluidStandardSenderMK2.java b/src/main/java/api/hbm/fluidmk2/IFluidStandardSenderMK2.java index 75791b659..6aa83ec15 100644 --- a/src/main/java/api/hbm/fluidmk2/IFluidStandardSenderMK2.java +++ b/src/main/java/api/hbm/fluidmk2/IFluidStandardSenderMK2.java @@ -6,7 +6,6 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.uninos.GenNode; import com.hbm.uninos.UniNodespace; -import com.hbm.util.Compat; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -30,7 +29,7 @@ public interface IFluidStandardSenderMK2 extends IFluidProviderMK2 { public default void tryProvide(FluidType type, int pressure, World world, int x, int y, int z, ForgeDirection dir) { - TileEntity te = Compat.getTileStandard(world, x, y, z); + TileEntity te = TileAccessCache.getTileOrCache(world, x, y, z); boolean red = false; if(te instanceof IFluidConnectorMK2) { diff --git a/src/main/java/api/hbm/tile/ILoadedTile.java b/src/main/java/api/hbm/tile/ILoadedTile.java index 33b221bde..9ff84aacd 100644 --- a/src/main/java/api/hbm/tile/ILoadedTile.java +++ b/src/main/java/api/hbm/tile/ILoadedTile.java @@ -1,7 +1,55 @@ package api.hbm.tile; +import java.util.HashMap; +import java.util.Map; + +import com.hbm.util.Compat; +import com.hbm.util.Tuple.Quartet; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + /** For anything that should be removed off networks when considered unloaded, only affects providers and receivers, not links. Must not necessarily be a tile. */ public interface ILoadedTile { public boolean isLoaded(); + + // should we gunk this into the API? no, but i don't care + public static class TileAccessCache { + + public static Map cache = new HashMap(); + + public static int NULL_CACHE = 20; + public static int NONNULL_CACHE = 60; + + public TileEntity tile; + public long expiresOn; + + public TileAccessCache(TileEntity tile, long expiresOn) { + this.tile = tile; + this.expiresOn = expiresOn; + } + + public boolean hasExpired(long worldTime) { + if(tile != null && tile.isInvalid()) return true; + if(worldTime >= expiresOn) return true; + if(tile instanceof ILoadedTile && !((ILoadedTile) tile).isLoaded()) return true; + return false; + } + + public static Quartet publicCumRag = new Quartet(0, 0, 0, 0); + public static TileEntity getTileOrCache(World world, int x, int y, int z) { + publicCumRag.mangle(x, y, z, world.provider.dimensionId); + TileAccessCache cache = TileAccessCache.cache.get(publicCumRag); + + if(cache == null || cache.hasExpired(world.getTotalWorldTime())) { + TileEntity tile = Compat.getTileStandard(world, x, y, z); + cache = new TileAccessCache(tile, world.getTotalWorldTime() + (tile == null ? NULL_CACHE : NONNULL_CACHE)); + TileAccessCache.cache.put(publicCumRag.clone(), cache); + return tile; + } else { + return cache.tile; + } + } + } } diff --git a/src/main/java/com/hbm/blocks/machine/Radiobox.java b/src/main/java/com/hbm/blocks/machine/Radiobox.java index b7eea5519..bfec9aa75 100644 --- a/src/main/java/com/hbm/blocks/machine/Radiobox.java +++ b/src/main/java/com/hbm/blocks/machine/Radiobox.java @@ -1,7 +1,6 @@ package com.hbm.blocks.machine; import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemBattery; import com.hbm.tileentity.machine.TileEntityRadiobox; import net.minecraft.block.Block; @@ -47,31 +46,17 @@ public class Radiobox extends BlockContainer { public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; - if(i == 0) - { - world.setBlockMetadataWithNotify(x, y, z, 2, 2); - } - if(i == 1) - { - world.setBlockMetadataWithNotify(x, y, z, 5, 2); - } - if(i == 2) - { - world.setBlockMetadataWithNotify(x, y, z, 3, 2); - } - if(i == 3) - { - world.setBlockMetadataWithNotify(x, y, z, 4, 2); - } + if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 2, 2); + if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 5, 2); + if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 2); + if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 4, 2); } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) - { + if(world.isRemote) { return true; - } else if(!player.isSneaking()) - { + } else if(!player.isSneaking()) { TileEntityRadiobox box = (TileEntityRadiobox)world.getTileEntity(x, y, z); if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.battery_spark && !box.infinite) { @@ -93,78 +78,53 @@ public class Radiobox extends BlockContainer { return true; } else { - //FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_radiobox, world, x, y, z); - //return true; return false; } } - + @Override - public void setBlockBoundsBasedOnState(IBlockAccess p_149719_1_, int p_149719_2_, int p_149719_3_, int p_149719_4_) - { + public void setBlockBoundsBasedOnState(IBlockAccess p_149719_1_, int p_149719_2_, int p_149719_3_, int p_149719_4_) { int te = p_149719_1_.getBlockMetadata(p_149719_2_, p_149719_3_, p_149719_4_); - float f = 0.0625F; - - this.setBlockBounds(0.0F, 0.0F, 2*f, 1.0F, 1.0F, 14*f); - switch(te) - { + float f = 0.0625F; + + this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); + switch(te) { case 4: - case 8: - this.setBlockBounds(11*f, 1*f, 4*f, 16*f, 15*f, 12*f); - break; + case 8: this.setBlockBounds(11 * f, 1 * f, 4 * f, 16 * f, 15 * f, 12 * f); break; case 2: - case 6: - this.setBlockBounds(4*f, 1*f, 11*f, 12*f, 15*f, 16*f); - break; + case 6: this.setBlockBounds(4 * f, 1 * f, 11 * f, 12 * f, 15 * f, 16 * f); break; case 5: - case 9: - this.setBlockBounds(0*f, 1*f, 4*f, 5*f, 15*f, 12*f); - break; + case 9: this.setBlockBounds(0 * f, 1 * f, 4 * f, 5 * f, 15 * f, 12 * f); break; case 3: - case 7: - this.setBlockBounds(4*f, 1*f, 0*f, 12*f, 15*f, 5*f); - break; + case 7: this.setBlockBounds(4 * f, 1 * f, 0 * f, 12 * f, 15 * f, 5 * f); break; } - } + } @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { int te = world.getBlockMetadata(x, y, z); - float f = 0.0625F; - - this.setBlockBounds(0.0F, 0.0F, 2*f, 1.0F, 1.0F, 14*f); - switch(te) - { + float f = 0.0625F; + + this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); + switch(te) { case 4: - case 8: - this.setBlockBounds(11*f, 1*f, 4*f, 16*f, 15*f, 12*f); - break; + case 8: this.setBlockBounds(11 * f, 1 * f, 4 * f, 16 * f, 15 * f, 12 * f); break; case 2: - case 6: - this.setBlockBounds(4*f, 1*f, 11*f, 12*f, 15*f, 16*f); - break; + case 6: this.setBlockBounds(4 * f, 1 * f, 11 * f, 12 * f, 15 * f, 16 * f); break; case 5: - case 9: - this.setBlockBounds(0*f, 1*f, 4*f, 5*f, 15*f, 12*f); - break; + case 9: this.setBlockBounds(0 * f, 1 * f, 4 * f, 5 * f, 15 * f, 12 * f); break; case 3: - case 7: - this.setBlockBounds(4*f, 1*f, 0*f, 12*f, 15*f, 5*f); - break; + case 7: this.setBlockBounds(4 * f, 1 * f, 0 * f, 12 * f, 15 * f, 5 * f); break; } - + return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ); } - public void breakBlock(World world, int x, int y, int z, Block b, int m) { - + public void breakBlock(World world, int x, int y, int z, Block b, int m) { TileEntityRadiobox box = (TileEntityRadiobox)world.getTileEntity(x, y, z); + if(box.infinite) world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.battery_spark))); - if(box.infinite) { - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, ItemBattery.getEmptyBattery(ModItems.battery_spark))); - } - - super.breakBlock(world, x, y, z, b, m); - } + super.breakBlock(world, x, y, z, b, m); + } } diff --git a/src/main/java/com/hbm/commands/CommandReapNetworks.java b/src/main/java/com/hbm/commands/CommandReapNetworks.java new file mode 100644 index 000000000..2d746057c --- /dev/null +++ b/src/main/java/com/hbm/commands/CommandReapNetworks.java @@ -0,0 +1,46 @@ +package com.hbm.commands; + +import com.hbm.uninos.GenNode; +import com.hbm.uninos.UniNodespace; +import com.hbm.util.ChatBuilder; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.EnumChatFormatting; + +public class CommandReapNetworks extends CommandBase { + + @Override + public String getCommandName() { + return "ntmreapnetworks"; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return "/ntmreapnetworks"; + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + + try { + + UniNodespace.activeNodeNets.forEach((net) -> { + net.links.forEach((link) -> { ((GenNode)link).expired = true; }); + net.links.clear(); + net.providerEntries.clear(); + net.receiverEntries.clear(); + }); + UniNodespace.activeNodeNets.clear(); + UniNodespace.worlds.clear(); + + } catch(Exception ex) { + sender.addChatMessage(ChatBuilder.start("----------------------------------").color(EnumChatFormatting.GRAY).flush()); + sender.addChatMessage(ChatBuilder.start("An error has occoured during network reap, consult the log for details.").color(EnumChatFormatting.RED).flush()); + sender.addChatMessage(ChatBuilder.start(ex.getLocalizedMessage()).color(EnumChatFormatting.RED).flush()); + sender.addChatMessage(ChatBuilder.start(ex.getStackTrace()[0].toString()).color(EnumChatFormatting.RED).flush()); + sender.addChatMessage(ChatBuilder.start("----------------------------------").color(EnumChatFormatting.GRAY).flush()); + throw ex; + } + } +} diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index 814607a6c..e3a63d760 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -9,6 +9,7 @@ import static com.hbm.inventory.OreDictManager.*; import com.hbm.items.ItemEnums.EnumPlantType; import com.hbm.items.ItemGenericPart.EnumPartType; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.tool.ItemBlowtorch; import com.hbm.items.tool.ItemModMinecart; @@ -62,10 +63,10 @@ public class ToolRecipes { addShovel( DESH.ingot(), ModItems.desh_shovel); addHoe( DESH.ingot(), ModItems.desh_hoe); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_sword, 1), new Object[] { "RPR", "RPR", " B ", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', ModItems.battery_lithium }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_pickaxe, 1), new Object[] { "RDM", " PB", " P ", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', ModItems.battery_lithium }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_axe, 1), new Object[] { " DP", "RRM", " PB", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', ModItems.battery_lithium }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_shovel, 1), new Object[] { " P", "RRM", " B", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', ModItems.battery_lithium }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_sword, 1), new Object[] { "RPR", "RPR", " B ", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', EnumBatteryPack.BATTERY_LEAD.stack() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_pickaxe, 1), new Object[] { "RDM", " PB", " P ", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', EnumBatteryPack.BATTERY_LEAD.stack() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_axe, 1), new Object[] { " DP", "RRM", " PB", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', EnumBatteryPack.BATTERY_LEAD.stack() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.elec_shovel, 1), new Object[] { " P", "RRM", " B", 'P', ANY_PLASTIC.ingot(), 'D', DURA.ingot(), 'R', DURA.bolt(), 'M', ModItems.motor, 'B', EnumBatteryPack.BATTERY_LEAD.stack() }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.centri_stick, 1), new Object[] { ModItems.centrifuge_element, ModItems.energy_core, KEY_STICK }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.smashing_hammer, 1), new Object[] { "STS", "SPS", " P ", 'S', STEEL.block(), 'T', W.block(), 'P', ANY_PLASTIC.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.meteorite_sword, 1), new Object[] { " B", "GB ", "SG ", 'B', ModItems.blade_meteorite, 'G', GOLD.plate(), 'S', KEY_STICK }); @@ -136,7 +137,7 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.mirror_tool), new Object[] { " A ", " IA", "I ", 'A', AL.ingot(), 'I', IRON.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.rbmk_tool), new Object[] { " A ", " IA", "I ", 'A', PB.ingot(), 'I', IRON.ingot() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.power_net_tool), new Object[] { "WRW", " I ", " B ", 'W', MINGRADE.wireFine(), 'R', REDSTONE.dust(), 'I', IRON.ingot(), 'B', ModItems.battery_generic }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.power_net_tool), new Object[] { "WRW", " I ", " B ", 'W', MINGRADE.wireFine(), 'R', REDSTONE.dust(), 'I', IRON.ingot(), 'B', EnumBatteryPack.BATTERY_LEAD.stack() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.analysis_tool), new Object[] { " G", " S ", "S ", 'G', KEY_ANYPANE, 'S', STEEL.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.toolbox), new Object[] { "CCC", "CIC", 'C', CU.plate(), 'I', IRON.ingot() }); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 0a30d24dc..692821491 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -794,7 +794,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(STEEL.shell(), 3), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.turrettauon").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_tauon, 1)) - .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(CU.ingot(), 32), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.battery_lithium, 1), new ComparableStack(ModItems.crt_display, 1)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_NIOBIUM), new OreDictStack(STEEL.ingot(), 16), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new ComparableStack(ModItems.motor_desh, 1), new OreDictStack(CU.ingot(), 32), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.turretrichard").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_richard, 1)) .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(ANY_PLASTIC.ingot(), 2), new OreDictStack(STEEL.shell(), 8), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1)) @@ -803,7 +803,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 24), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 10), new OreDictStack(WEAPONSTEEL.mechanism(), 3), new ComparableStack(ModBlocks.crate_steel, 1), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.maxwell").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_maxwell, 1)) - .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 24), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 4), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.magnetron, 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new ComparableStack(ModItems.crt_display, 1)) + .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.CAPACITOR_NIOBIUM), new OreDictStack(STEEL.ingot(), 24), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 4), new OreDictStack(BIGMT.mechanism(), 3), new ComparableStack(ModItems.magnetron, 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new ComparableStack(ModItems.crt_display, 1)) .setPools528(GenericRecipes.POOL_PREFIX_528 + "bmg")); this.register(new GenericRecipe("ass.fritz").setup(200, 100).outputItems(new ItemStack(ModBlocks.turret_fritz, 1)) .inputItems(new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD), new OreDictStack(STEEL.ingot(), 16), new ComparableStack(ModItems.motor, 3), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.ADVANCED), new OreDictStack(STEEL.pipe(), 8), new OreDictStack(GUNMETAL.mechanism(), 3), new ComparableStack(ModBlocks.barrel_steel)) diff --git a/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java index ddc9f78db..ecbe59072 100644 --- a/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java @@ -6,6 +6,7 @@ import com.hbm.interfaces.Spaghetti; import com.hbm.inventory.FluidContainer; import com.hbm.inventory.FluidContainerRegistry; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import com.hbm.util.Tuple.Triplet; import net.minecraft.init.Blocks; @@ -48,32 +49,17 @@ public class MachineRecipes { ArrayList fuels = new ArrayList(); fuels.add(new ItemStack(ModItems.battery_potato)); fuels.add(new ItemStack(ModItems.battery_potatos)); - fuels.add(new ItemStack(ModItems.battery_generic)); - fuels.add(new ItemStack(ModItems.battery_red_cell)); - fuels.add(new ItemStack(ModItems.battery_red_cell_6)); - fuels.add(new ItemStack(ModItems.battery_red_cell_24)); - fuels.add(new ItemStack(ModItems.battery_advanced)); - fuels.add(new ItemStack(ModItems.battery_advanced_cell)); - fuels.add(new ItemStack(ModItems.battery_advanced_cell_4)); - fuels.add(new ItemStack(ModItems.battery_advanced_cell_12)); - fuels.add(new ItemStack(ModItems.battery_lithium)); - fuels.add(new ItemStack(ModItems.battery_lithium_cell)); - fuels.add(new ItemStack(ModItems.battery_lithium_cell_3)); - fuels.add(new ItemStack(ModItems.battery_lithium_cell_6)); - fuels.add(new ItemStack(ModItems.battery_schrabidium)); - fuels.add(new ItemStack(ModItems.battery_schrabidium_cell)); - fuels.add(new ItemStack(ModItems.battery_schrabidium_cell_2)); - fuels.add(new ItemStack(ModItems.battery_schrabidium_cell_4)); - fuels.add(new ItemStack(ModItems.battery_trixite)); - fuels.add(new ItemStack(ModItems.battery_spark)); - fuels.add(new ItemStack(ModItems.battery_spark_cell_6)); - fuels.add(new ItemStack(ModItems.battery_spark_cell_25)); - fuels.add(new ItemStack(ModItems.battery_spark_cell_100)); - fuels.add(new ItemStack(ModItems.battery_spark_cell_1000)); - fuels.add(new ItemStack(ModItems.battery_spark_cell_10000)); - fuels.add(new ItemStack(ModItems.battery_spark_cell_power)); fuels.add(new ItemStack(ModItems.fusion_core)); fuels.add(new ItemStack(ModItems.energy_core)); + for(EnumBatteryPack num : EnumBatteryPack.values()) fuels.add(new ItemStack(ModItems.battery_pack, 1, num.ordinal())); + fuels.add(new ItemStack(ModItems.battery_creative)); + fuels.add(new ItemStack(ModItems.battery_sc_uranium)); + fuels.add(new ItemStack(ModItems.battery_sc_technetium)); + fuels.add(new ItemStack(ModItems.battery_sc_plutonium)); + fuels.add(new ItemStack(ModItems.battery_sc_polonium)); + fuels.add(new ItemStack(ModItems.battery_sc_gold)); + fuels.add(new ItemStack(ModItems.battery_sc_lead)); + fuels.add(new ItemStack(ModItems.battery_sc_americium)); return fuels; } diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index c107df9d5..27d058172 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -740,8 +740,6 @@ public class AnvilRecipes extends SerializableRecipe { new AnvilOutput(new ItemStack(ModItems.scrap, 1)), new AnvilOutput(new ItemStack(ModItems.coil_tungsten, 1)), new AnvilOutput(new ItemStack(Items.bread, 1), 0.5F), - new AnvilOutput(new ItemStack(ModItems.battery_generic, 1), 0.25F), - new AnvilOutput(new ItemStack(ModItems.battery_advanced, 1), 0.1F), new AnvilOutput(new ItemStack(ModItems.fusion_core, 1), 0.01F) } @@ -753,7 +751,6 @@ public class AnvilRecipes extends SerializableRecipe { new AnvilOutput(new ItemStack(ModItems.scrap, 1)), new AnvilOutput(new ItemStack(ModItems.coil_tungsten, 2)), new AnvilOutput(new ItemStack(Items.bread, 1), 0.5F), - new AnvilOutput(new ItemStack(ModItems.battery_lithium, 1), 0.25F), new AnvilOutput(new ItemStack(ModItems.battery_sc_uranium, 1), 0.1F), new AnvilOutput(new ItemStack(ModItems.fusion_core, 1), 0.05F) diff --git a/src/main/java/com/hbm/itempool/ItemPoolsComponent.java b/src/main/java/com/hbm/itempool/ItemPoolsComponent.java index 4f9b63282..7ba5e59fc 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsComponent.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsComponent.java @@ -9,6 +9,7 @@ import com.hbm.items.ItemEnums.EnumCokeType; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemRTGPelletDepleted; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import com.hbm.items.tool.ItemBlowtorch; import net.minecraft.init.Items; @@ -45,7 +46,7 @@ public class ItemPoolsComponent { weighted(ModItems.coil_copper_torus, 0, 1, 2, 3), weighted(ModItems.wire_fine, Mats.MAT_MINGRADE.id, 1, 8, 5), weighted(ModItems.piston_selenium, 0, 1, 1, 3), - weighted(ModItems.battery_advanced_cell, 0, 1, 1, 3), + weighted(ModItems.battery_pack, EnumBatteryPack.BATTERY_LEAD.ordinal(), 1, 1, 3), weighted(ModItems.circuit, EnumCircuitType.VACUUM_TUBE.ordinal(), 1, 2, 4), weighted(ModItems.circuit, EnumCircuitType.PCB.ordinal(), 1, 3, 5), weighted(ModItems.circuit, EnumCircuitType.CAPACITOR.ordinal(), 1, 1, 3), @@ -81,7 +82,7 @@ public class ItemPoolsComponent { weighted(ModItems.missile_generic, 0, 1, 1, 4), weighted(ModItems.missile_incendiary, 0, 1, 1, 4), weighted(ModItems.gas_mask_m65, 0, 1, 1, 5), - weighted(ModItems.battery_advanced, 0, 1, 1, 5), + weighted(ModItems.battery_pack, EnumBatteryPack.BATTERY_LEAD.ordinal(), 1, 1, 3), weighted(ModItems.designator, 0, 1, 1, 5), weighted(ModItems.thruster_small, 0, 1, 1, 5), weighted(ModItems.thruster_medium, 0, 1, 1, 4), diff --git a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java index 706fe43b1..76cad0680 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java @@ -4,6 +4,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.material.Mats; import com.hbm.items.ItemEnums.EnumCasingType; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack; import com.hbm.items.machine.ItemBreedingRod.BreedingRodType; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.machine.ItemZirnoxRod.EnumZirnoxType; @@ -52,8 +53,7 @@ public class ItemPoolsLegacy { weighted(ModItems.casing, EnumCasingType.SMALL.ordinal(), 4, 10, 3), weighted(ModItems.casing, EnumCasingType.SHOTSHELL.ordinal(), 4, 10, 3), weighted(ModItems.cordite, 0, 4, 6, 5), - weighted(ModItems.battery_generic, 0, 1, 1, 4), - weighted(ModItems.battery_advanced, 0, 1, 1, 2), + weighted(ModItems.battery_pack, EnumBatteryPack.BATTERY_REDSTONE.ordinal(), 1, 1, 1), weighted(ModItems.scrap, 0, 1, 3, 10), weighted(ModItems.dust, 0, 2, 4, 9), weighted(ModItems.bottle_opener, 0, 1, 1, 2), @@ -79,8 +79,7 @@ public class ItemPoolsLegacy { weighted(ModItems.wire_fine, Mats.MAT_MINGRADE.id, 2, 3, 7), weighted(ModItems.circuit, EnumCircuitType.VACUUM_TUBE.ordinal(), 1, 1, 4), weighted(ModItems.circuit, EnumCircuitType.CAPACITOR.ordinal(), 1, 1, 2), - weighted(ModItems.battery_generic, 0, 1, 1, 4), - weighted(ModItems.battery_advanced, 0, 1, 1, 3), + weighted(ModItems.battery_pack, EnumBatteryPack.BATTERY_REDSTONE.ordinal(), 1, 1, 1), weighted(ModItems.powder_iodine, 0, 1, 1, 1), weighted(ModItems.powder_bromine, 0, 1, 1, 1), weighted(ModBlocks.steel_poles, 0, 1, 4, 8), @@ -116,9 +115,7 @@ public class ItemPoolsLegacy { weighted(ModItems.grenade_smart, 0, 1, 3, 3), weighted(ModItems.grenade_mirv, 0, 1, 1, 2), weighted(ModItems.stealth_boy, 0, 1, 1, 2), - weighted(ModItems.battery_advanced, 0, 1, 1, 3), - weighted(ModItems.battery_advanced_cell, 0, 1, 1, 2), - weighted(ModItems.battery_schrabidium, 0, 1, 1, 1), + weighted(ModItems.battery_pack, EnumBatteryPack.BATTERY_LITHIUM.ordinal(), 1, 1, 1), weighted(ModItems.syringe_awesome, 0, 1, 1, 1), weighted(ModItems.fusion_core, 0, 1, 1, 4), weighted(ModItems.bottle_nuka, 0, 1, 3, 6), @@ -215,7 +212,7 @@ public class ItemPoolsLegacy { //spaceship double chests new ItemPool(POOL_SPACESHIP) {{ this.pool = new WeightedRandomChestContent[] { - weighted(ModItems.battery_advanced, 0, 1, 1, 5), + weighted(ModItems.battery_pack, EnumBatteryPack.BATTERY_LEAD.ordinal(), 1, 1, 2), weighted(ModItems.ingot_advanced_alloy, 0, 2, 16, 5), weighted(ModItems.wire_fine, Mats.MAT_ALLOY.id, 8, 32, 5), weighted(ModItems.coil_advanced_alloy, 0, 2, 16, 5), diff --git a/src/main/java/com/hbm/itempool/ItemPoolsSingle.java b/src/main/java/com/hbm/itempool/ItemPoolsSingle.java index 570df9ef6..8950a9e06 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsSingle.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsSingle.java @@ -42,7 +42,6 @@ public class ItemPoolsSingle { new ItemPool(POOL_VAULT_STANDARD) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.ingot_desh, 0, 2, 6, 1), - weighted(ModItems.battery_advanced_cell_4, 0, 1, 1, 1), weighted(ModItems.powder_desh_mix, 0, 1, 5, 1), weighted(Items.diamond, 0, 3, 6, 1), weighted(ModItems.ammo_standard, EnumAmmo.NUKE_STANDARD.ordinal(), 1, 1, 1), @@ -59,7 +58,6 @@ public class ItemPoolsSingle { new ItemPool(POOL_VAULT_REINFORCED) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.ingot_desh, 0, 6, 16, 1), - weighted(ModItems.battery_lithium, 0, 1, 1, 1), weighted(ModItems.powder_power, 0, 1, 5, 1), weighted(ModItems.sat_chip, 0, 1, 1, 1), weighted(Items.diamond, 0, 5, 9, 1), @@ -81,7 +79,6 @@ public class ItemPoolsSingle { weighted(ModItems.gun_carbine, 0, 1, 1, 1), weighted(ModItems.ammo_standard, EnumAmmo.R762_DU.ordinal(), 16, 32, 1), weighted(ModItems.gun_congolake, 0, 1, 1, 1), - weighted(ModItems.battery_schrabidium_cell, 0, 1, 1, 1), weighted(ModItems.circuit, EnumCircuitType.ADVANCED.ordinal(), 6, 12, 1) }; }}; diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 06dfd4ad2..bde1c68d2 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1631,8 +1631,6 @@ public class ModItems { @Deprecated public static Item battery_advanced; @Deprecated public static Item battery_lithium; @Deprecated public static Item battery_schrabidium; - @Deprecated public static Item battery_spark; - @Deprecated public static Item battery_trixite; @Deprecated public static Item battery_red_cell; @Deprecated public static Item battery_red_cell_6; @Deprecated public static Item battery_red_cell_24; @@ -1656,6 +1654,8 @@ public class ModItems { public static Item battery_pack; public static Item battery_creative; public static Item cube_power; + @Deprecated public static Item battery_spark; + @Deprecated public static Item battery_trixite; public static Item battery_sc_uranium; public static Item battery_sc_technetium; @@ -3873,8 +3873,8 @@ public class ModItems { battery_advanced = new ItemBattery(20000, 500, 500).setUnlocalizedName("battery_advanced").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_advanced_new"); battery_lithium = new ItemBattery(250000, 1000, 1000).setUnlocalizedName("battery_lithium").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_lithium"); battery_schrabidium = new ItemBattery(1000000, 5000, 5000).setUnlocalizedName("battery_schrabidium").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_schrabidium_new"); - battery_spark = new ItemBattery(100000000, 2000000, 2000000).setUnlocalizedName("battery_spark").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_spark"); - battery_trixite = new ItemBattery(5000000, 40000, 200000).setUnlocalizedName("battery_trixite").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_trixite"); + battery_spark = new Item().setUnlocalizedName("battery_spark").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":battery_spark"); + battery_trixite = new Item().setUnlocalizedName("battery_trixite").setMaxStackSize(1).setCreativeTab(MainRegistry.nukeTab).setTextureName(RefStrings.MODID + ":battery_trixite"); battery_red_cell = new ItemBattery(15000, 100, 100).setUnlocalizedName("battery_red_cell").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_red_cell"); battery_red_cell_6 = new ItemBattery(15000 * 6, 100, 100).setUnlocalizedName("battery_red_cell_6").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_red_cell_6"); battery_red_cell_24 = new ItemBattery(15000 * 24, 100, 100).setUnlocalizedName("battery_red_cell_24").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_red_cell_24"); diff --git a/src/main/java/com/hbm/items/machine/ItemBatteryPack.java b/src/main/java/com/hbm/items/machine/ItemBatteryPack.java index 5208f3790..eb780d51a 100644 --- a/src/main/java/com/hbm/items/machine/ItemBatteryPack.java +++ b/src/main/java/com/hbm/items/machine/ItemBatteryPack.java @@ -4,6 +4,7 @@ import java.util.List; import com.hbm.interfaces.IOrderedEnum; import com.hbm.items.ItemEnumMulti; +import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.util.BobMathUtil; @@ -67,6 +68,7 @@ public class ItemBatteryPack extends ItemEnumMulti implements IBatteryItem { } public boolean isCapacitor() { return this.ordinal() > BATTERY_QUANTUM.ordinal(); } + public ItemStack stack() { return new ItemStack(ModItems.battery_pack, 1, this.ordinal()); } } @Override @@ -95,7 +97,7 @@ public class ItemBatteryPack extends ItemEnumMulti implements IBatteryItem { stack.stackTagCompound.setLong("charge", stack.stackTagCompound.getLong("charge") - i); } else { stack.stackTagCompound = new NBTTagCompound(); - stack.stackTagCompound.setLong("charge", this.getMaxCharge(stack) - i); + stack.stackTagCompound.setLong("charge", 0); } } @@ -105,7 +107,7 @@ public class ItemBatteryPack extends ItemEnumMulti implements IBatteryItem { return stack.stackTagCompound.getLong("charge"); } else { stack.stackTagCompound = new NBTTagCompound(); - stack.stackTagCompound.setLong("charge", getMaxCharge(stack)); + stack.stackTagCompound.setLong("charge", 0); return stack.stackTagCompound.getLong("charge"); } } diff --git a/src/main/java/com/hbm/items/special/ItemStarterKit.java b/src/main/java/com/hbm/items/special/ItemStarterKit.java index 018dbefef..c193b8c7b 100644 --- a/src/main/java/com/hbm/items/special/ItemStarterKit.java +++ b/src/main/java/com/hbm/items/special/ItemStarterKit.java @@ -181,10 +181,6 @@ public class ItemStarterKit extends Item { player.inventory.addItemStackToInventory(new ItemStack(ModItems.piston_selenium, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.canister_full, 16, Fluids.DIESEL.getID())); player.inventory.addItemStackToInventory(new ItemStack(ModItems.canister_full, 16, Fluids.BIOFUEL.getID())); - player.inventory.addItemStackToInventory(new ItemStack(ModItems.battery_advanced_cell_4, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModItems.battery_advanced_cell_4, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModItems.battery_lithium, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModItems.battery_lithium, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.battery_potato, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.screwdriver, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModBlocks.machine_excavator, 1)); @@ -383,7 +379,6 @@ public class ItemStarterKit extends Item { player.inventory.addItemStackToInventory(new ItemStack(ModItems.designator, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.designator_range, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.designator_manual, 1)); - player.inventory.addItemStackToInventory(new ItemStack(ModItems.battery_schrabidium_cell_4, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.missile_generic, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.missile_strong, 1)); player.inventory.addItemStackToInventory(new ItemStack(ModItems.missile_burst, 1)); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java index a2bf670d2..4513341a7 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java @@ -443,7 +443,7 @@ public class LegoClient { double age = MathHelper.clamp_double(1D - ((double) bullet.ticksExisted - 2 + interp) / (double) bullet.getBulletConfig().expires, 0, 1); GL11.glScaled(age / 2 + 0.5, 1, age / 2 + 0.5); int colorInner = ((int)(r * age) << 16) | ((int)(g * age) << 8) | (int) (b * age); - BeamPronter.prontBeam(delta, EnumWaveType.RANDOM, EnumBeamType.SOLID, colorInner, colorInner, bullet.ticksExisted / 3, (int)(bullet.beamLength / 2 + 1), 0F, 8, 0.0625F); + BeamPronter.prontBeam(delta, EnumWaveType.RANDOM, EnumBeamType.SOLID, colorInner, colorInner, bullet.ticksExisted / 3, (int)(bullet.beamLength / 2 + 1), 0F, 4, 0.025F); GL11.glPopMatrix(); RenderArcFurnace.fullbright(false); } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineElectricEngine.java b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineElectricEngine.java index 1c8c2c285..ea38a19d9 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineElectricEngine.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineElectricEngine.java @@ -42,7 +42,7 @@ public class MagazineElectricEngine implements IMagazine { @Override public void reloadAction(ItemStack stack, IInventory inventory) { } @Override public SpentCasing getCasing(ItemStack stack, IInventory inventory) { return null; } - @Override public ItemStack getIconForHUD(ItemStack stack, EntityPlayer player) { return new ItemStack(ModItems.battery_generic); } + @Override public ItemStack getIconForHUD(ItemStack stack, EntityPlayer player) { return new ItemStack(ModItems.battery_creative); } @Override public String reportAmmoStateForHUD(ItemStack stack, EntityPlayer player) { return BobMathUtil.getShortNumber(getAmount(stack, player.inventory)) + "/" + BobMathUtil.getShortNumber(this.capacity) + "HE"; } @Override public void setAmountBeforeReload(ItemStack stack, int amount) { ItemGunBaseNT.setValueInt(stack, KEY_MAG_PREV + index, amount); } diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index fc7d40cea..773bb98bc 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -525,18 +525,6 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModBlocks.charge_semtex, 1), new Object[] { ModItems.stick_semtex, ModItems.stick_semtex, ModItems.stick_semtex, ModItems.ducttape }); addShapelessAuto(new ItemStack(ModBlocks.charge_c4, 1), new Object[] { ModItems.stick_c4, ModItems.stick_c4, ModItems.stick_c4, ModItems.ducttape }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_generic), new Object[] { " A ", "PRP", "PRP", 'A', AL.wireFine(), 'P', AL.plate(), 'R', REDSTONE.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_advanced), new Object[] { " A ", "PSP", "PLP", 'A', MINGRADE.wireFine(), 'P', CU.plate(), 'S', "sulfur", 'L', PB.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_advanced), new Object[] { " A ", "PLP", "PSP", 'A', MINGRADE.wireFine(), 'P', CU.plate(), 'S', "sulfur", 'L', PB.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_advanced), new Object[] { " A ", "PSP", "PLP", 'A', MINGRADE.wireFine(), 'P', CU.plate(), 'S', "dustSulfur", 'L', PB.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_advanced), new Object[] { " A ", "PLP", "PSP", 'A', MINGRADE.wireFine(), 'P', CU.plate(), 'S', "dustSulfur", 'L', PB.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_lithium), new Object[] { "A A", "PSP", "PLP", 'A', GOLD.wireFine(), 'P', TI.plate(), 'S', LI.dust(), 'L', CO.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_lithium), new Object[] { "A A", "PLP", "PSP", 'A', GOLD.wireFine(), 'P', TI.plate(), 'S', LI.dust(), 'L', CO.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_schrabidium), new Object[] { " A ", "PNP", "PSP", 'A', SA326.wireFine(), 'P', SA326.plate(), 'S', SA326.dust(), 'N', NP237.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_schrabidium), new Object[] { " A ", "PSP", "PNP", 'A', SA326.wireFine(), 'P', SA326.plate(), 'S', SA326.dust(), 'N', NP237.dust() }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark), new Object[] { "P", "S", "S", 'P', ModItems.plate_dineutronium, 'S', ModItems.powder_spark_mix }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_trixite), new Object[] { " A ", "PSP", "PTP", 'A', AL.wireFine(), 'P', AL.plate(), 'S', ModItems.powder_power, 'T', ModItems.crystal_trixite }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_trixite), new Object[] { " A ", "PTP", "PSP", 'A', AL.wireFine(), 'P', AL.plate(), 'S', ModItems.powder_power, 'T', ModItems.crystal_trixite }); addRecipeAuto(ItemBattery.getFullBattery(ModItems.energy_core), new Object[] { "PCW", "TRD", "PCW", 'P', ALLOY.plate(), 'C', ModItems.coil_advanced_alloy, 'W', ALLOY.wireFine(), 'R', ModItems.cell_tritium, 'D', ModItems.cell_deuterium, 'T', W.ingot() }); addRecipeAuto(ItemBattery.getFullBattery(ModItems.energy_core), new Object[] { "PCW", "TDR", "PCW", 'P', ALLOY.plate(), 'C', ModItems.coil_advanced_alloy, 'W', ALLOY.wireFine(), 'R', ModItems.cell_tritium, 'D', ModItems.cell_deuterium, 'T', W.ingot() }); addRecipeAuto(new ItemStack(ModItems.hev_battery, 4), new Object[] { " W ", "IEI", "ICI", 'W', GOLD.wireFine(), 'I', ModItems.plate_polymer, 'E', REDSTONE.dust(), 'C', CO.dust() }); @@ -544,26 +532,6 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModItems.hev_battery, 1), new Object[] { ModBlocks.hev_battery }); addShapelessAuto(new ItemStack(ModBlocks.hev_battery, 1), new Object[] { ModItems.hev_battery }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_red_cell), new Object[] { "WBW", "PBP", "WBW", 'W', AL.wireFine(), 'P', AL.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_generic) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_advanced_cell), new Object[] { "WBW", "PBP", "WBW", 'W', MINGRADE.wireFine(), 'P', CU.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_advanced) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_lithium_cell), new Object[] { "WBW", "PBP", "WBW", 'W', GOLD.wireFine(), 'P', TI.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_lithium) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_schrabidium_cell), new Object[] { "WBW", "PBP", "WBW", 'W', SA326.wireFine(), 'P', SA326.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_schrabidium) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_red_cell_6), new Object[] { "BBB", "WPW", "BBB", 'W', AL.wireFine(), 'P', AL.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_red_cell) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_advanced_cell_4), new Object[] { "BWB", "WPW", "BWB", 'W', MINGRADE.wireFine(), 'P', CU.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_advanced_cell) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_lithium_cell_3), new Object[] { "WPW", "BBB", "WPW", 'W', GOLD.wireFine(), 'P', TI.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_lithium_cell) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_schrabidium_cell_2), new Object[] { "WPW", "BWB", "WPW", 'W', SA326.wireFine(), 'P', SA326.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_schrabidium_cell) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_red_cell_24), new Object[] { "BWB", "WPW", "BWB", 'W', AL.wireFine(), 'P', AL.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_red_cell_6) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_advanced_cell_12), new Object[] { "WPW", "BBB", "WPW", 'W', MINGRADE.wireFine(), 'P', CU.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_advanced_cell_4) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_lithium_cell_6), new Object[] { "WPW", "BWB", "WPW", 'W', GOLD.wireFine(), 'P', TI.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_lithium_cell_3) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_schrabidium_cell_4), new Object[] { "WPW", "BWB", "WPW", 'W', SA326.wireFine(), 'P', SA326.plate(), 'B', ItemBattery.getEmptyBattery(ModItems.battery_schrabidium_cell_2) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_6), new Object[] { "BW", "PW", "BW", 'W', MAGTUNG.wireFine(), 'P', ModItems.powder_spark_mix, 'B', ItemBattery.getEmptyBattery(ModItems.battery_spark) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_25), new Object[] { "W W", "SCS", "PSP", 'W', MAGTUNG.wireFine(), 'P', ModItems.plate_dineutronium, 'S', ModItems.powder_spark_mix, 'C', ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_6) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_100), new Object[] { "W W", "BPB", "SSS", 'W', MAGTUNG.wireFine(), 'P', ModItems.plate_dineutronium, 'S', ModItems.powder_spark_mix, 'B', ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_25) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_1000), new Object[] { "PCP", "CSC", "PCP", 'S', ModItems.singularity_spark, 'P', ModItems.powder_spark_mix, 'C', ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_100) }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_2500), new Object[] { "SCS", "CVC", "SCS", 'C', ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_100), 'V', ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_1000), 'S', ModItems.powder_spark_mix }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_10000), new Object[] { "OSO", "SVS", "OSO", 'S', ModItems.singularity_spark, 'V', ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_2500), 'O', ModItems.ingot_osmiridium }); - addRecipeAuto(ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_power), new Object[] { "YSY", "SCS", "YSY", 'S', ModItems.singularity_spark, 'C', ItemBattery.getEmptyBattery(ModItems.battery_spark_cell_10000), 'Y', ModItems.billet_yharonite }); - addShapelessAuto(ItemBattery.getFullBattery(ModItems.battery_potato), new Object[] { Items.potato, AL.wireFine(), CU.wireFine() }); addShapelessAuto(ItemBattery.getFullBattery(ModItems.battery_potatos), new Object[] { ItemBattery.getFullBattery(ModItems.battery_potato), ModItems.turret_chip, REDSTONE.dust() }); @@ -637,7 +605,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.ams_core_sing, 1), new Object[] { "EAE", "ASA", "EAE", 'E', ModItems.plate_euphemium, 'A', ModItems.cell_anti_schrabidium, 'S', ModItems.singularity }); addRecipeAuto(new ItemStack(ModItems.ams_core_wormhole, 1), new Object[] { "DPD", "PSP", "DPD", 'D', ModItems.plate_dineutronium, 'P', ModItems.powder_spark_mix, 'S', ModItems.singularity }); addRecipeAuto(new ItemStack(ModItems.ams_core_eyeofharmony, 1), new Object[] { "ALA", "LSL", "ALA", 'A', ModItems.plate_dalekanium, 'L', new ItemStack(ModItems.fluid_barrel_full, 1, Fluids.LAVA.getID()), 'S', ModItems.black_hole }); - addRecipeAuto(new ItemStack(ModItems.ams_core_thingy), new Object[] { "NSN", "NGN", "G G", 'N', GOLD.nugget(), 'G', GOLD.ingot(), 'S', ModItems.battery_spark_cell_10000 }); + addRecipeAuto(new ItemStack(ModItems.ams_core_thingy), new Object[] { "NSN", "NGN", "G G", 'N', GOLD.nugget(), 'G', GOLD.ingot(), 'S', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_QUANTUM.ordinal()) }); addRecipeAuto(new ItemStack(ModItems.photo_panel), new Object[] { " G ", "IPI", " C ", 'G', KEY_ANYPANE, 'I', ModItems.plate_polymer, 'P', NETHERQUARTZ.dust(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.PCB) }); addRecipeAuto(new ItemStack(ModBlocks.machine_satlinker), new Object[] { "PSP", "SCS", "PSP", 'P', STEEL.plate(), 'S', STAR.ingot(), 'C', ModItems.sat_chip }); addRecipeAuto(new ItemStack(ModBlocks.machine_keyforge), new Object[] { "PCP", "WSW", "WSW", 'P', STEEL.plate(), 'S', W.ingot(), 'C', ModItems.padlock, 'W', KEY_PLANKS }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 7080fc9d2..3046a25cd 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -664,6 +664,7 @@ public class MainRegistry { event.registerServerCommand(new CommandReloadServer()); event.registerServerCommand(new CommandLocate()); event.registerServerCommand(new CommandCustomize()); + event.registerServerCommand(new CommandReapNetworks()); ArcFurnaceRecipes.registerFurnaceSmeltables(); // because we have to wait for other mods to take their merry ass time to register recipes } diff --git a/src/main/java/com/hbm/uninos/UniNodespace.java b/src/main/java/com/hbm/uninos/UniNodespace.java index fbd807cce..2f8e1faf2 100644 --- a/src/main/java/com/hbm/uninos/UniNodespace.java +++ b/src/main/java/com/hbm/uninos/UniNodespace.java @@ -3,6 +3,7 @@ package com.hbm.uninos; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.Map; import java.util.Set; import java.util.Map.Entry; @@ -23,7 +24,7 @@ import net.minecraft.world.World; */ public class UniNodespace { - public static HashMap worlds = new HashMap(); + public static Map worlds = new HashMap(); public static Set activeNodeNets = new HashSet(); public static GenNode getNode(World world, int x, int y, int z, INetworkProvider type) { @@ -73,7 +74,7 @@ public class UniNodespace { } updateNetworks(); - resetReapTimer(); + updateReapTimer(); } private static void updateNetworks() { @@ -87,8 +88,9 @@ public class UniNodespace { } } - private static void resetReapTimer() { + private static void updateReapTimer() { if(reapTimer <= 0) reapTimer = 5 * 60 * 20; // 5 minutes is more than plenty + else reapTimer--; } /** Goes over each connection point of the given node, tries to find neighbor nodes and to join networks with them */ diff --git a/src/main/java/com/hbm/util/Tuple.java b/src/main/java/com/hbm/util/Tuple.java index f2276386e..22f750185 100644 --- a/src/main/java/com/hbm/util/Tuple.java +++ b/src/main/java/com/hbm/util/Tuple.java @@ -194,6 +194,17 @@ public class Tuple { public Z getZ() { return this.z; } + + /// flavor town /// + public void mangle(W w, X x, Y y, Z z) { + this.w = w; + this.x = x; + this.y = y; + this.z = z; + } + public Quartet clone() { + return new Quartet(w, x, y, z); + } } public static class Quintet { From 9c89902e565876b876357e24660e45d88f8bc9cd Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Sun, 4 Jan 2026 21:12:53 +0200 Subject: [PATCH 06/29] aoh --- src/main/resources/assets/hbm/lang/ru_RU.lang | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 773fa2882..544ea2823 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -724,7 +724,7 @@ container.autocrafter=Автоматический верстак container.barrel=Бочка container.bat9000=Охереть-большая цистерна 9000 container.battery=Энергохранилище -container.batterySocket=Battery Socket +container.batterySocket=Аккумуляторный массив container.bombMulti=Многоцелевая бомба container.casingBag=Сумка для гильз container.catalyticReformer=Каталитический реформер @@ -2233,15 +2233,15 @@ item.battery_lithium_cell_6.name=Сшестерённая литий-ионна item.battery_pack.battery_lead.name=Свинцово-серная батарея item.battery_pack.battery_lithium.name=Литий-ионная батарея item.battery_pack.battery_quantum.name=Квантовая батарея -item.battery_pack.battery_redstone.name=Редстоун батарея +item.battery_pack.battery_redstone.name=Краснокаменная батарея item.battery_pack.battery_schrabidium.name=Шрабидиевая батарея -item.battery_pack.battery_sodium.name=Натрий-железная батарея -item.battery_pack.capacitor_bismuth.name=Конденсатор (Висмут) -item.battery_pack.capacitor_copper.name=Конденсатор (Медь) -item.battery_pack.capacitor_gold.name=Конденсатор (Золото) -item.battery_pack.capacitor_niobium.name=Конденсатор (Ниобий) -item.battery_pack.capacitor_spark.name=Конденсатор (Спарк) -item.battery_pack.capacitor_tantalum.name=Конденсатор (Тантал) +item.battery_pack.battery_sodium.name=Натриево-железная батарея +item.battery_pack.capacitor_bismuth.name=Висмутовый конденсатор +item.battery_pack.capacitor_copper.name=Медный конденсатор +item.battery_pack.capacitor_gold.name=Золотой конденсатор +item.battery_pack.capacitor_niobium.name=Ниобиевый конденсатор +item.battery_pack.capacitor_spark.name=Спарк-конденсатор +item.battery_pack.capacitor_tantalum.name=Танталовый конденсатор item.battery_potato.name=Картофельная батарейка item.battery_potatos.name=КартошкОС item.battery_red_cell.name=Энергоячейка из красной пыли @@ -6002,7 +6002,7 @@ tile.machine_autosaw.suspended=Приостановлена tile.machine_bat9000.name=Охереть-большая цистерна 9000 tile.machine_battery.name=Энергохранилище tile.machine_battery_potato.name=Картофельная батарея -tile.machine_battery_socket.name=Battery Socket +tile.machine_battery_socket.name=Аккумуляторный массив tile.machine_boiler.name=Бойлер tile.machine_boiler.desc=Большой бойлер для кипячения воды или нагрева нефти.$Требует внешний источник тепла.$Скорость передачи тепла: ΔT*0.01 TU/t tile.machine_boiler_electric_off.name=Электрический нагреватель нефти @@ -6817,3 +6817,4 @@ desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х + From 8619c8e67de7801f2adb0bc60e29217aa345b9ff Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 6 Jan 2026 19:35:39 +0100 Subject: [PATCH 07/29] he big --- changelog | 11 +- .../java/api/hbm/block/IDrillInteraction.java | 1 + src/main/java/api/hbm/block/IMiningDrill.java | 1 + src/main/java/com/hbm/blocks/ModBlocks.java | 6 +- .../com/hbm/blocks/generic/BlockCluster.java | 60 +- .../blocks/network/MachineBatteryREDD.java | 50 + .../blocks/network/MachineBatterySocket.java | 1 + .../com/hbm/commands/CommandReapNetworks.java | 3 + .../java/com/hbm/crafting/WeaponRecipes.java | 3 + .../com/hbm/handler/EntityEffectHandler.java | 2 +- .../container/ContainerBatteryREDD.java | 62 + .../com/hbm/inventory/gui/GUIBatteryREDD.java | 87 + .../hbm/inventory/gui/GUIBatterySocket.java | 6 + .../inventory/recipes/AnnihilatorRecipes.java | 37 +- .../recipes/AssemblyMachineRecipes.java | 28 +- src/main/java/com/hbm/items/ModItems.java | 6 +- .../items/block/ItemBlockStorageCrate.java | 5 + .../items/machine/ItemBatteryCreative.java | 18 + src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/ResourceManager.java | 2 + .../render/tileentity/RenderBatteryREDD.java | 264 + .../java/com/hbm/render/util/BeamPronter.java | 4 +- .../java/com/hbm/tileentity/TileMappings.java | 1 + .../machine/TileEntityMachineMiningLaser.java | 83 +- .../machine/rbmk/TileEntityRBMKHeater.java | 4 + .../storage/TileEntityBatteryBase.java | 184 + .../storage/TileEntityBatteryREDD.java | 219 + .../storage/TileEntityBatterySocket.java | 159 +- src/main/resources/assets/hbm/lang/de_DE.lang | 26 +- src/main/resources/assets/hbm/lang/en_US.lang | 26 +- .../assets/hbm/models/machines/fensu2.obj | 6193 +++++++++++++++++ src/main/resources/assets/hbm/sounds.json | 1 + .../assets/hbm/sounds/block/fensuHum.ogg | Bin 0 -> 99323 bytes .../textures/gui/storage/gui_battery_redd.png | Bin 0 -> 10989 bytes .../hbm/textures/models/machines/fensu2.png | Bin 0 -> 6901 bytes 35 files changed, 7211 insertions(+), 343 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/network/MachineBatteryREDD.java create mode 100644 src/main/java/com/hbm/inventory/container/ContainerBatteryREDD.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIBatteryREDD.java create mode 100644 src/main/java/com/hbm/items/machine/ItemBatteryCreative.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderBatteryREDD.java create mode 100644 src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java create mode 100644 src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java create mode 100644 src/main/resources/assets/hbm/models/machines/fensu2.obj create mode 100644 src/main/resources/assets/hbm/sounds/block/fensuHum.ogg create mode 100644 src/main/resources/assets/hbm/textures/gui/storage/gui_battery_redd.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/fensu2.png diff --git a/changelog b/changelog index d26d26487..cb014d297 100644 --- a/changelog +++ b/changelog @@ -5,6 +5,10 @@ * Instead of energy storage blocks, there is now a battery socket, which allows those new items to be connected to the power grid * Battery sockets act like cables, they will connect power grids when two cables are plugged into them in different directions * Self-chargers and creative batteries are still around, as well as spark batteries which are needed for the balefire bomb + * The FEnSU has been replaced by a much larger version with unlimited energy storage +* `/ntmreapnetworks` + * Deletes all active nodespace instances + * Mainly useful for server owners, in case nodespace builds up too much garbage data that isn't cleared correctly ## Changed * Updated italian localization @@ -15,6 +19,8 @@ * The block ID economy is looking better than ever * Infinite water barrels can now be crafted with any water container and not just buckets * OpenComputers integration for the PWR can now also read the heat capacity stats +* Removed the restriction that demands that cluster ores need to be mined by hand +* Laser beams from energy weapons are now a lot more narrow ## Fixed * Fixed meteors using a nonexistant keepalive timer, causing potential audio flickering in certain cases @@ -22,4 +28,7 @@ * Potentially fixed a performance issue caused by transmission networks not being deleted when they have no active links * Fixed multi output recipe objects not deserializing right, causing the precision assembler config to not load * Fixed pedestal recipes not using the correct register option, making custom config files wipe all clay tablets -* Fixed custom fluids breaking when using the `/ntmreload` command \ No newline at end of file +* Fixed custom fluids breaking when using the `/ntmreload` command +* Fixed power not saving for mining lasers +* Fixed the annihilator producing blank 528 mode blueprints when 528 mode isn't even enabled +* Fixed black fire not using the skeletonizer on death \ No newline at end of file diff --git a/src/main/java/api/hbm/block/IDrillInteraction.java b/src/main/java/api/hbm/block/IDrillInteraction.java index 7e9c7bffe..f9b700da3 100644 --- a/src/main/java/api/hbm/block/IDrillInteraction.java +++ b/src/main/java/api/hbm/block/IDrillInteraction.java @@ -3,6 +3,7 @@ package api.hbm.block; import net.minecraft.item.ItemStack; import net.minecraft.world.World; +@Deprecated public interface IDrillInteraction { /** diff --git a/src/main/java/api/hbm/block/IMiningDrill.java b/src/main/java/api/hbm/block/IMiningDrill.java index 15d61178b..05294f0d1 100644 --- a/src/main/java/api/hbm/block/IMiningDrill.java +++ b/src/main/java/api/hbm/block/IMiningDrill.java @@ -1,5 +1,6 @@ package api.hbm.block; +@Deprecated public interface IMiningDrill { /** diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index a63a8fe91..e14996324 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -743,13 +743,14 @@ public class ModBlocks { public static Block machine_microwave; public static Block machine_battery_socket; + public static Block machine_battery_redd; @Deprecated public static Block machine_battery_potato; @Deprecated public static Block machine_battery; @Deprecated public static Block machine_lithium_battery; @Deprecated public static Block machine_schrabidium_battery; @Deprecated public static Block machine_dineutronium_battery; - public static Block machine_fensu; + @Deprecated public static Block machine_fensu; @Deprecated public static Block capacitor_bus; public static Block capacitor_copper; // neat for structures @@ -1863,6 +1864,8 @@ public class ModBlocks { machine_microwave = new MachineMicrowave(Material.iron).setBlockName("machine_microwave").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_microwave"); machine_battery_socket = new MachineBatterySocket().setBlockName("machine_battery_socket").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_battery_redd = new MachineBatteryREDD().setBlockName("machine_battery_redd").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_battery_potato = new MachineBattery(Material.iron, 10_000).setBlockName("machine_battery_potato").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_battery = new MachineBattery(Material.iron, 1_000_000).setBlockName("machine_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_lithium_battery = new MachineBattery(Material.iron, 50_000_000).setBlockName("machine_lithium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); @@ -3261,6 +3264,7 @@ public class ModBlocks { register(barrel_tcalloy); register(barrel_antimatter); register(machine_battery_socket); + register(machine_battery_redd); register(machine_battery_potato); register(machine_battery); register(machine_lithium_battery); diff --git a/src/main/java/com/hbm/blocks/generic/BlockCluster.java b/src/main/java/com/hbm/blocks/generic/BlockCluster.java index ab7ae9dff..0887df979 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockCluster.java +++ b/src/main/java/com/hbm/blocks/generic/BlockCluster.java @@ -1,26 +1,15 @@ package com.hbm.blocks.generic; -import java.util.List; import java.util.Random; -import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; -import com.hbm.util.i18n.I18nUtil; -import api.hbm.block.IDrillInteraction; -import api.hbm.block.IMiningDrill; import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.FakePlayer; -public class BlockCluster extends Block implements IDrillInteraction, ITooltipProvider { +public class BlockCluster extends Block { public BlockCluster(Material mat) { super(mat); @@ -28,32 +17,7 @@ public class BlockCluster extends Block implements IDrillInteraction, ITooltipPr @Override public Item getItemDropped(int i, Random rand, int j) { - return null; - } - - @Override - public void harvestBlock(World world, EntityPlayer player, int x, int y, int z, int meta) { - - if(player instanceof FakePlayer || player == null) { - return; - } - - if(!world.isRemote && world.getGameRules().getGameRuleBooleanValue("doTileDrops") && !world.restoringBlockSnapshots) { - - Item drop = getDrop(); - - if(drop == null) - return; - - float f = 0.7F; - double mX = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; - double mY = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; - double mZ = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; - - EntityItem entityitem = new EntityItem(world, (double) x + mX, (double) y + mY, (double) z + mZ, new ItemStack(drop)); - entityitem.delayBeforeCanPickup = 10; - world.spawnEntityInWorld(entityitem); - } + return getDrop(); } private Item getDrop() { @@ -65,24 +29,4 @@ public class BlockCluster extends Block implements IDrillInteraction, ITooltipPr return null; } - - @Override - public boolean canBreak(World world, int x, int y, int z, int meta, IMiningDrill drill) { - return drill.getDrillRating() > 70 || world.rand.nextFloat() < 0.05; - } - - @Override - public ItemStack extractResource(World world, int x, int y, int z, int meta, IMiningDrill drill) { - return drill.getDrillRating() <= 70 ? new ItemStack(getDrop()) : null; - } - - @Override - public float getRelativeHardness(World world, int x, int y, int z, int meta, IMiningDrill drill) { - return this.getBlockHardness(world, x, y, z); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { - list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.tile.cluster")); - } } diff --git a/src/main/java/com/hbm/blocks/network/MachineBatteryREDD.java b/src/main/java/com/hbm/blocks/network/MachineBatteryREDD.java new file mode 100644 index 000000000..ee40d8574 --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/MachineBatteryREDD.java @@ -0,0 +1,50 @@ +package com.hbm.blocks.network; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.storage.TileEntityBatteryREDD; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class MachineBatteryREDD extends BlockDummyable { + + public MachineBatteryREDD() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityBatteryREDD(); + if(meta >= 6) return new TileEntityProxyCombo().power().conductor(); + return null; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return standardOpenBehavior(world, x, y, z, player, side); + } + + @Override public int[] getDimensions() { return new int[] {9, 0, 2, 2, 4, 4}; } + @Override public int getOffset() { return 2; } + + @Override + protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + x += dir.offsetX * o; + z += dir.offsetZ * o; + + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + this.makeExtra(world, x + dir.offsetX * 2 + rot.offsetX * 2, y, z + dir.offsetZ * 2 + rot.offsetZ * 2); + this.makeExtra(world, x + dir.offsetX * 2 - rot.offsetX * 2, y, z + dir.offsetZ * 2 - rot.offsetZ * 2); + this.makeExtra(world, x - dir.offsetX * 2 + rot.offsetX * 2, y, z - dir.offsetZ * 2 + rot.offsetZ * 2); + this.makeExtra(world, x - dir.offsetX * 2 - rot.offsetX * 2, y, z - dir.offsetZ * 2 - rot.offsetZ * 2); + this.makeExtra(world, x + rot.offsetX * 4, y, z + rot.offsetZ * 4); + this.makeExtra(world, x - rot.offsetX * 4, y, z - rot.offsetZ * 4); + } +} diff --git a/src/main/java/com/hbm/blocks/network/MachineBatterySocket.java b/src/main/java/com/hbm/blocks/network/MachineBatterySocket.java index a1030cd99..89ccdf7ce 100644 --- a/src/main/java/com/hbm/blocks/network/MachineBatterySocket.java +++ b/src/main/java/com/hbm/blocks/network/MachineBatterySocket.java @@ -35,6 +35,7 @@ public class MachineBatterySocket extends BlockDummyable implements ITooltipProv @Override public int[] getDimensions() { return new int[] {1, 0, 1, 0, 1, 0}; } @Override public int getOffset() { return 0; } + @Override protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { super.fillSpace(world, x, y, z, dir, o); diff --git a/src/main/java/com/hbm/commands/CommandReapNetworks.java b/src/main/java/com/hbm/commands/CommandReapNetworks.java index 2d746057c..a52c41e3d 100644 --- a/src/main/java/com/hbm/commands/CommandReapNetworks.java +++ b/src/main/java/com/hbm/commands/CommandReapNetworks.java @@ -6,6 +6,7 @@ import com.hbm.util.ChatBuilder; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; public class CommandReapNetworks extends CommandBase { @@ -33,6 +34,8 @@ public class CommandReapNetworks extends CommandBase { }); UniNodespace.activeNodeNets.clear(); UniNodespace.worlds.clear(); + + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "Nodespace cleared :)")); } catch(Exception ex) { sender.addChatMessage(ChatBuilder.start("----------------------------------").color(EnumChatFormatting.GRAY).flush()); diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index c11304bf5..e597fec39 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -311,6 +311,9 @@ public class WeaponRecipes { //Nuke parts CraftingManager.addRecipeAuto(new ItemStack(ModItems.n2_charge, 1), new Object[] { " D ", "ERE", " D ", 'D', ModItems.ducttape, 'E', ModBlocks.det_charge, 'R', REDSTONE.block() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.battery_spark, 1), new Object[] { " W ", "DSD", "DSD", 'W', MAGTUNG.wireDense(), 'D', ModItems.plate_dineutronium, 'S', ModItems.powder_spark_mix }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.battery_trixite, 1), new Object[] { " W ", "DSD", "DTD", 'W', MAGTUNG.wireDense(), 'D', BIGMT.plateCast(), 'S', ModItems.powder_power, 'T', ModItems.crystal_trixite }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.battery_trixite, 1), new Object[] { " W ", "DTD", "DSD", 'W', MAGTUNG.wireDense(), 'D', BIGMT.plateCast(), 'S', ModItems.powder_power, 'T', ModItems.crystal_trixite }); //Custom nuke rods CraftingManager.addRecipeAuto(new ItemStack(ModItems.custom_tnt, 1), new Object[] { " C ", "TIT", "TIT", 'C', CU.plate(), 'I', IRON.plate(), 'T', ANY_HIGHEXPLOSIVE.ingot() }); diff --git a/src/main/java/com/hbm/handler/EntityEffectHandler.java b/src/main/java/com/hbm/handler/EntityEffectHandler.java index 8a98850ac..9fc6d0c0e 100644 --- a/src/main/java/com/hbm/handler/EntityEffectHandler.java +++ b/src/main/java/com/hbm/handler/EntityEffectHandler.java @@ -676,7 +676,7 @@ public class EntityEffectHandler { FlameCreator.composeEffect(entity.worldObj, x - living.width / 2 + living.width * rand.nextDouble(), y + rand.nextDouble() * living.height, z - living.width / 2 + living.width * rand.nextDouble(), FlameCreator.META_BLACK); } - if(props.fire > 0 || props.phosphorus > 0 || props.balefire > 0) if(!entity.isEntityAlive()) ConfettiUtil.decideConfetti(living, DamageSource.onFire); + if(props.fire > 0 || props.phosphorus > 0 || props.balefire > 0 || props.blackFire > 0) if(!entity.isEntityAlive()) ConfettiUtil.decideConfetti(living, DamageSource.onFire); } private static void handleDashing(Entity entity) { diff --git a/src/main/java/com/hbm/inventory/container/ContainerBatteryREDD.java b/src/main/java/com/hbm/inventory/container/ContainerBatteryREDD.java new file mode 100644 index 000000000..e2478b79c --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerBatteryREDD.java @@ -0,0 +1,62 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotNonRetarded; +import com.hbm.tileentity.machine.storage.TileEntityBatteryREDD; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerBatteryREDD extends Container { + + protected TileEntityBatteryREDD socket; + + public ContainerBatteryREDD(InventoryPlayer invPlayer, TileEntityBatteryREDD tedf) { + this.socket = tedf; + + this.addSlotToContainer(new SlotNonRetarded(socket, 0, 26, 53)); + this.addSlotToContainer(new SlotNonRetarded(socket, 1, 80, 53)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 99 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 157)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return socket.isUseableByPlayer(player); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack copy = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack stack = slot.getStack(); + copy = stack.copy(); + + if(index <= 1) { + if(!this.mergeItemStack(stack, 2, this.inventorySlots.size(), true)) return null; + } else { + if(!this.mergeItemStack(stack, 0, 2, false)) return null; + } + + if(stack.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + } + + return copy; + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIBatteryREDD.java b/src/main/java/com/hbm/inventory/gui/GUIBatteryREDD.java new file mode 100644 index 000000000..c8c2f5f55 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIBatteryREDD.java @@ -0,0 +1,87 @@ +package com.hbm.inventory.gui; + +import java.math.BigInteger; +import java.util.Locale; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +import com.hbm.inventory.container.ContainerBatteryREDD; +import com.hbm.lib.RefStrings; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toserver.NBTControlPacket; +import com.hbm.tileentity.machine.storage.TileEntityBatteryREDD; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; + +public class GUIBatteryREDD extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/storage/gui_battery_redd.png"); + private TileEntityBatteryREDD battery; + + public GUIBatteryREDD(InventoryPlayer invPlayer, TileEntityBatteryREDD tedf) { + super(new ContainerBatteryREDD(invPlayer, tedf)); + battery = tedf; + + this.xSize = 176; + this.ySize = 181; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + } + + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + NBTTagCompound data = new NBTTagCompound(); + + if(this.checkClick(x, y, 133, 16, 18, 18)) { this.click(); data.setBoolean("low", true); } + if(this.checkClick(x, y, 133, 52, 18, 18)) { this.click(); data.setBoolean("high", true); } + if(this.checkClick(x, y, 152, 35, 16, 16)) { this.click(); data.setBoolean("priority", true); } + + if(!data.hasNoTags()) PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, battery.xCoord, battery.yCoord, battery.zCoord)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.battery.hasCustomInventoryName() ? this.battery.getInventoryName() : I18n.format(this.battery.getInventoryName()); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + + GL11.glPushMatrix(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glScaled(0.5, 0.5, 1); + + String label = String.format(Locale.US, "%,d", battery.power) + " HE"; + this.fontRendererObj.drawString(label, 242 - this.fontRendererObj.getStringWidth(label), 45, 0x00ff00); + + String deltaText = String.format(Locale.US, "%,d", battery.delta) + " HE/s"; + + int comp = battery.delta.compareTo(BigInteger.ZERO); + if(comp > 0) deltaText = EnumChatFormatting.GREEN + "+" + deltaText; + else if(comp < 0) deltaText = EnumChatFormatting.RED + deltaText; + else deltaText = EnumChatFormatting.YELLOW + "+" + deltaText; + + this.fontRendererObj.drawString(deltaText, 242 - this.fontRendererObj.getStringWidth(deltaText), 65, 0x00ff00); + + GL11.glPopMatrix(); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + drawTexturedModalRect(guiLeft + 133, guiTop + 16, 176, 52 + battery.redLow * 18, 18, 18); + drawTexturedModalRect(guiLeft + 133, guiTop + 52, 176, 52 + battery.redHigh * 18, 18, 18); + drawTexturedModalRect(guiLeft + 152, guiTop + 35, 194, 52 + battery.priority.ordinal() * 16 - 16, 16, 16); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java b/src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java index f9e0f5585..cc94ceae3 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java +++ b/src/main/java/com/hbm/inventory/gui/GUIBatterySocket.java @@ -99,6 +99,12 @@ public class GUIBatterySocket extends GuiInfoContainer { IBatteryItem item = (IBatteryItem) battery.slots[0].getItem(); long power = item.getCharge(battery.slots[0]); long maxPower = item.getMaxCharge(battery.slots[0]); + + if(power > Long.MAX_VALUE / 100) { + power /= 100; + maxPower /= 100; + } + if(maxPower <= 1) maxPower = 1; int p = (int) (power * 52 / maxPower); // won't work then flying too close to the sun (the limits of the LONG data type) drawTexturedModalRect(guiLeft + 62, guiTop + 69 - p, 176, 52 - p, 34, p); } diff --git a/src/main/java/com/hbm/inventory/recipes/AnnihilatorRecipes.java b/src/main/java/com/hbm/inventory/recipes/AnnihilatorRecipes.java index 2a1ae355d..b58b8d9d2 100644 --- a/src/main/java/com/hbm/inventory/recipes/AnnihilatorRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AnnihilatorRecipes.java @@ -14,6 +14,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; +import com.hbm.config.GeneralConfig; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.fluid.FluidType; @@ -59,23 +60,25 @@ public class AnnihilatorRecipes extends SerializableRecipe { @Override public void registerDefaults() { - recipes.put(STEEL.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "steel")))); - recipes.put(SI.billet(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chip")))); - recipes.put(BI.nugget(), new AnnihilatorRecipe(new Pair(new BigInteger("128"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chip_bismoid")))); - recipes.put(ModItems.pellet_charged, new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chip_quantum")))); - - recipes.put(U.billet(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "gascent")))); - recipes.put(ANY_PLASTIC.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("512"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "plastic")))); - recipes.put(RUBBER.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("512"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "rubber")))); - recipes.put(FERRO.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "ferrouranium")))); - recipes.put(SR.dust(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "strontium")))); - recipes.put(ANY_HARDPLASTIC.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "hardplastic")))); - recipes.put(ANY_RESISTANTALLOY.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "tcalloy")))); - recipes.put(ModItems.powder_chlorophyte, new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")))); - - recipes.put(new ComparableStack(ModItems.ammo_standard, 1, EnumAmmo.BMG50_FMJ), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "bmg")))); - recipes.put(new ComparableStack(ModItems.ammo_arty, 1, 0), new AnnihilatorRecipe(new Pair(new BigInteger("128"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "arty")))); - recipes.put(new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER), new AnnihilatorRecipe(new Pair(new BigInteger("128"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "controller")))); + if(GeneralConfig.enable528) { + recipes.put(STEEL.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "steel")))); + recipes.put(SI.billet(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chip")))); + recipes.put(BI.nugget(), new AnnihilatorRecipe(new Pair(new BigInteger("128"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chip_bismoid")))); + recipes.put(ModItems.pellet_charged, new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chip_quantum")))); + + recipes.put(U.billet(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "gascent")))); + recipes.put(ANY_PLASTIC.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("512"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "plastic")))); + recipes.put(RUBBER.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("512"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "rubber")))); + recipes.put(FERRO.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "ferrouranium")))); + recipes.put(SR.dust(), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "strontium")))); + recipes.put(ANY_HARDPLASTIC.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "hardplastic")))); + recipes.put(ANY_RESISTANTALLOY.ingot(), new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "tcalloy")))); + recipes.put(ModItems.powder_chlorophyte, new AnnihilatorRecipe(new Pair(new BigInteger("1024"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "chlorophyte")))); + + recipes.put(new ComparableStack(ModItems.ammo_standard, 1, EnumAmmo.BMG50_FMJ), new AnnihilatorRecipe(new Pair(new BigInteger("256"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "bmg")))); + recipes.put(new ComparableStack(ModItems.ammo_arty, 1, 0), new AnnihilatorRecipe(new Pair(new BigInteger("128"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "arty")))); + recipes.put(new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CONTROLLER), new AnnihilatorRecipe(new Pair(new BigInteger("128"), ItemBlueprints.make(GenericRecipes.POOL_PREFIX_528 + "controller")))); + } } @Override public String getFileName() { return "hbmAnnihilator.json"; } diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 692821491..5013ba2ba 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -83,7 +83,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.platebismuth").setup(200, 100).outputItems(new ItemStack(ModItems.plate_bismuth, 1)) .inputItems(new ComparableStack(ModItems.nugget_bismuth, 2), new OreDictStack(U238.billet(), 2), new OreDictStack(NB.dust(), 1))); this.register(new GenericRecipe("ass.plateeuphemium").setup(600, 100).outputItems(new ItemStack(ModItems.plate_euphemium, 1)) - .inputItems(new OreDictStack(EUPH.ingot(), 4), new OreDictStack(AT.dust(), 3), new OreDictStack(BI.dust(), 1), new OreDictStack(VOLCANIC.gem(), 1), new ComparableStack(ModItems.ingot_osmiridium))); + .inputItems(new OreDictStack(EUPH.ingot(), 4), new OreDictStack(AT.dust(), 3), new OreDictStack(BI.dust(), 1), new OreDictStack(VOLCANIC.gem(), 1), new OreDictStack(OSMIRIDIUM.ingot()))); this.register(new GenericRecipe("ass.platednt").setup(600, 100).outputItems(new ItemStack(ModItems.plate_dineutronium, 4)) .inputItems(new OreDictStack(DNT.ingot(), 4), new ComparableStack(ModItems.powder_spark_mix, 2), new OreDictStack(DESH.ingot(), 1))); @@ -422,16 +422,16 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL_COLD, 8_000)) .outputFluids(new FluidStack(Fluids.PERFLUOROMETHYL, 8_000))); - this.register(new GenericRecipe("ass.fensusan").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.machine_fensu, 1)) - .inputItems(new ComparableStack(ModItems.ingot_electronium, 32), + this.register(new GenericRecipe("ass.fensusan").setup(1_200, 100).outputItems(new ItemStack(ModBlocks.machine_battery_redd, 1)) + .inputItems(new ComparableStack(ModItems.ingot_electronium, 64), new ComparableStack(ModItems.battery_pack, 16, EnumBatteryPack.BATTERY_QUANTUM), - new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 64), - new OreDictStack(DURA.block(), 16), - new OreDictStack(STAR.block(), 64), - new ComparableStack(ModBlocks.machine_transformer_dnt, 8), - new ComparableStack(ModItems.coil_magnetized_tungsten, 24), + new OreDictStack(OSMIRIDIUM.plateWelded(), 64), + new OreDictStack(OSMIRIDIUM.plateWelded(), 64), + new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 64), + new OreDictStack(CMB.plateCast(), 32), + new OreDictStack(MAGTUNG.wireDense(), 32), + new ComparableStack(ModItems.plate_dineutronium, 64), new ComparableStack(ModItems.powder_magic, 64), - new ComparableStack(ModItems.plate_dineutronium, 24), new ComparableStack(ModItems.ingot_u238m2), new ComparableStack(ModItems.ingot_cft, 64), new ComparableStack(ModItems.ingot_cft, 64)) @@ -439,11 +439,11 @@ public class AssemblyMachineRecipes extends GenericRecipes { new ComparableStack(ModItems.battery_pack, 16, EnumBatteryPack.BATTERY_QUANTUM), new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.BRONZE_TUBES), new ComparableStack(ModItems.item_expensive, 64, EnumExpensiveType.FERRO_PLATING), - new OreDictStack(STAR.block(), 64), - new ComparableStack(ModBlocks.machine_transformer_dnt, 8), - new ComparableStack(ModItems.coil_magnetized_tungsten, 24), - new ComparableStack(ModItems.powder_magic, 64), - new ComparableStack(ModItems.plate_dineutronium, 24), + new OreDictStack(OSMIRIDIUM.plateWelded(), 64), + new OreDictStack(OSMIRIDIUM.plateWelded(), 64), + new OreDictStack(OSMIRIDIUM.plateWelded(), 64), + new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 64), + new OreDictStack(CMB.plateCast(), 64), new ComparableStack(ModItems.ingot_u238m2), new ComparableStack(ModItems.ingot_cft, 64), new ComparableStack(ModItems.ingot_cft, 64))); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index bde1c68d2..fb868ca18 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1654,8 +1654,8 @@ public class ModItems { public static Item battery_pack; public static Item battery_creative; public static Item cube_power; - @Deprecated public static Item battery_spark; - @Deprecated public static Item battery_trixite; + public static Item battery_spark; + public static Item battery_trixite; public static Item battery_sc_uranium; public static Item battery_sc_technetium; @@ -3896,7 +3896,7 @@ public class ModItems { battery_spark_cell_power = new ItemBattery(100000000L * 1000000L, 200000000, 200000000).setUnlocalizedName("battery_spark_cell_power").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":battery_spark_cell_power"); battery_pack = new ItemBatteryPack().setUnlocalizedName("battery_pack").setTextureName(RefStrings.MODID + ":battery_generic_new"); - battery_creative = new Item().setUnlocalizedName("battery_creative").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_creative_new"); + battery_creative = new ItemBatteryCreative().setUnlocalizedName("battery_creative").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_creative_new"); cube_power = new ItemBattery(1000000000000000000L, 1000000000000000L, 1000000000000000L).setUnlocalizedName("cube_power").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":cube_power"); battery_sc_uranium = new ItemSelfcharger(5).setUnlocalizedName("battery_sc_uranium").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":battery_sc_uranium"); diff --git a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java index 97d2cb7e8..badb00e86 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java +++ b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java @@ -133,6 +133,11 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider public boolean hasCustomInventoryName() { return target.hasDisplayName(); } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + return player.getHeldItem() == this.target; + } @Override public void markDirty() { // You have been blessed by the unfuck diff --git a/src/main/java/com/hbm/items/machine/ItemBatteryCreative.java b/src/main/java/com/hbm/items/machine/ItemBatteryCreative.java new file mode 100644 index 000000000..1c3f30b82 --- /dev/null +++ b/src/main/java/com/hbm/items/machine/ItemBatteryCreative.java @@ -0,0 +1,18 @@ +package com.hbm.items.machine; + +import api.hbm.energymk2.IBatteryItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class ItemBatteryCreative extends Item implements IBatteryItem { + + @Override public void chargeBattery(ItemStack stack, long i) { } + @Override public void setCharge(ItemStack stack, long i) { } + @Override public void dischargeBattery(ItemStack stack, long i) { } + + @Override public long getCharge(ItemStack stack) { return Long.MAX_VALUE / 2L; } + @Override public long getMaxCharge(ItemStack stack) { return Long.MAX_VALUE; } + + @Override public long getChargeRate(ItemStack stack) { return Long.MAX_VALUE / 100L; } + @Override public long getDischargeRate(ItemStack stack) { return Long.MAX_VALUE / 100L; } +} diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 47bb3e5d9..f563e2300 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -307,6 +307,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityForceField.class, new RenderMachineForceField()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineFENSU.class, new RenderFENSU()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBatterySocket.class, new RenderBatterySocket()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBatteryREDD.class, new RenderBatteryREDD()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineLargeTurbine.class, new RenderBigTurbine()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineReactorBreeding.class, new RenderBreeder()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySolarBoiler.class, new RenderSolarBoiler()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index a0f97f3b6..b89556fb4 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -271,6 +271,7 @@ public class ResourceManager { //FENSU public static final IModelCustom battery_socket = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/battery.obj")).asVBO(); + public static final IModelCustom battery_redd = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/fensu2.obj")).asVBO(); public static final IModelCustom fensu = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/fensu.obj")).asVBO(); //Radar @@ -739,6 +740,7 @@ public class ResourceManager { //FENSU public static final ResourceLocation battery_socket_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/battery_socket.png"); + public static final ResourceLocation battery_redd_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/fensu2.png"); public static final ResourceLocation fensu_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/fensu.png"); //Radar diff --git a/src/main/java/com/hbm/render/tileentity/RenderBatteryREDD.java b/src/main/java/com/hbm/render/tileentity/RenderBatteryREDD.java new file mode 100644 index 000000000..b0080da6d --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderBatteryREDD.java @@ -0,0 +1,264 @@ +package com.hbm.render.tileentity; + +import java.util.Random; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.main.MainRegistry; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.render.util.BeamPronter; +import com.hbm.render.util.BeamPronter.EnumBeamType; +import com.hbm.render.util.BeamPronter.EnumWaveType; +import com.hbm.tileentity.machine.storage.TileEntityBatteryREDD; +import com.hbm.util.BobMathUtil; +import com.hbm.util.Clock; +import com.hbm.util.Vec3NT; + +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Vec3; +import net.minecraftforge.client.IItemRenderer; + +public class RenderBatteryREDD 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() - 10) { + case 2: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(180, 0F, 1F, 0F); break; + } + + GL11.glShadeModel(GL11.GL_SMOOTH); + + bindTexture(ResourceManager.battery_redd_tex); + ResourceManager.battery_redd.renderPart("Base"); + + GL11.glPushMatrix(); + + GL11.glTranslated(0, 5.5, 0); + TileEntityBatteryREDD redd = (TileEntityBatteryREDD) tile; + float speed = redd.getSpeed(); + double rot = redd.prevRotation + (redd.rotation - redd.prevRotation) * interp; + GL11.glRotated(rot, 1, 0, 0); + GL11.glTranslated(0, -5.5, 0); + + ResourceManager.battery_redd.renderPart("Wheel"); + + RenderArcFurnace.fullbright(true); + ResourceManager.battery_redd.renderPart("Lights"); + + RenderArcFurnace.fullbright(false); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 5.5, 0); + + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_TEXTURE_2D); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glPushAttrib(GL11.GL_LIGHTING_BIT); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glDepthMask(false); + + Vec3NT vec = new Vec3NT(0, 0, 4); + + Tessellator tess = Tessellator.instance; + tess.startDrawingQuads(); + + double len = 4.25D; + double width = 0.125D; + double span = speed * 0.75; + + if(span > 0) for(int j = -1; j <= 1; j += 2) { + for(int i = 0; i < 8; i++) { + double xOffset = 0.8125 * j; + vec.setComponents(0, 1, 0); + vec.rotateAroundXDeg(i * 45D); + + tess.setColorRGBA_F(1F, 1F, 0F, 0.75F); + tess.addVertex(xOffset, vec.yCoord * len - vec.yCoord * width, vec.zCoord * len - vec.zCoord * width); + tess.addVertex(xOffset, vec.yCoord * len + vec.yCoord * width, vec.zCoord * len + vec.zCoord * width); + vec.rotateAroundXDeg(span); + tess.setColorRGBA_F(1F, 1F, 0F, 0.5F); + tess.addVertex(xOffset, vec.yCoord * len + vec.yCoord * width, vec.zCoord * len + vec.zCoord * width); + tess.addVertex(xOffset, vec.yCoord * len - vec.yCoord * width, vec.zCoord * len - vec.zCoord * width); + + tess.setColorRGBA_F(1F, 1F, 0F, 0.5F); + tess.addVertex(xOffset, vec.yCoord * len - vec.yCoord * width, vec.zCoord * len - vec.zCoord * width); + tess.addVertex(xOffset, vec.yCoord * len + vec.yCoord * width, vec.zCoord * len + vec.zCoord * width); + vec.rotateAroundXDeg(span); + tess.setColorRGBA_F(1F, 1F, 0F, 0.25F); + tess.addVertex(xOffset, vec.yCoord * len + vec.yCoord * width, vec.zCoord * len + vec.zCoord * width); + tess.addVertex(xOffset, vec.yCoord * len - vec.yCoord * width, vec.zCoord * len - vec.zCoord * width); + + tess.setColorRGBA_F(1F, 1F, 0F, 0.25F); + tess.addVertex(xOffset, vec.yCoord * len - vec.yCoord * width, vec.zCoord * len - vec.zCoord * width); + tess.addVertex(xOffset, vec.yCoord * len + vec.yCoord * width, vec.zCoord * len + vec.zCoord * width); + vec.rotateAroundXDeg(span); + tess.setColorRGBA_F(1F, 1F, 0F, 0F); + tess.addVertex(xOffset, vec.yCoord * len + vec.yCoord * width, vec.zCoord * len + vec.zCoord * width); + tess.addVertex(xOffset, vec.yCoord * len - vec.yCoord * width, vec.zCoord * len - vec.zCoord * width); + } + } + tess.draw(); + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthMask(true); + GL11.glPopAttrib(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_TEXTURE_2D); + + GL11.glPopMatrix(); + + renderSparkle(tile); + + GL11.glPopMatrix(); + + if(speed > 0) renderZaps(tile); + + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } + + protected void renderSparkle(TileEntity tile) { + TileEntityBatteryREDD redd = (TileEntityBatteryREDD) tile; + + long time = Clock.get_ms(); + float alpha = 0.45F + (float) (Math.sin(time / 1000D) * 0.15F); + float alphaMult = redd.getSpeed() / 15F; + float r = 1.0F; + float g = 0.25F; + float b = 0.75F; + + double mainOsc = BobMathUtil.sps(time / 1000D) % 1D; + double sparkleSpin = time / 250D * -1 % 1D; + double sparkleOsc = Math.sin(time / 1000D) * 0.5D % 1D; + + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + GL11.glDisable(GL11.GL_CULL_FACE); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glPushAttrib(GL11.GL_LIGHTING_BIT); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glDepthMask(false); + + GL11.glColor4f(r, g, b, alpha * alphaMult); + + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + bindTexture(ResourceManager.fusion_plasma_tex); + GL11.glTranslated(0, mainOsc, 0); + ResourceManager.battery_redd.renderPart("Plasma"); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + + // cost-cutting measure, don't render extra layers from more than 100m away + if(MainRegistry.proxy.me().getDistanceSq(tile.xCoord + 0.5, tile.yCoord + 2.5, tile.zCoord + 0.5) < 100 * 100) { + + GL11.glColor4f(r * 2, g * 2, b * 2, 0.75F * alphaMult); + + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + bindTexture(ResourceManager.fusion_plasma_sparkle_tex); + GL11.glTranslated(sparkleSpin, sparkleOsc, 0); + ResourceManager.battery_redd.renderPart("Plasma"); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + } + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthMask(true); + GL11.glPopAttrib(); + + GL11.glEnable(GL11.GL_CULL_FACE); + } + + protected void renderZaps(TileEntity tile) { + + Random rand = new Random(tile.getWorldObj().getTotalWorldTime() / 5); + rand.nextBoolean(); + + if(rand.nextBoolean()) { + GL11.glPushMatrix(); + GL11.glTranslated(3.125, 5.5, 0); + BeamPronter.prontBeam(Vec3.createVectorHelper(-1.375, -2.625, 3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 15, 0.25F, 3, 0.0625F); + BeamPronter.prontBeam(Vec3.createVectorHelper(-1.375, -2.625, 3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 1, 0, 3, 0.0625F); + GL11.glPopMatrix(); + } + + if(rand.nextBoolean()) { + GL11.glPushMatrix(); + GL11.glTranslated(-3.125, 5.5, 0); + BeamPronter.prontBeam(Vec3.createVectorHelper(1.375, -2.625, 3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 15, 0.25F, 3, 0.0625F); + BeamPronter.prontBeam(Vec3.createVectorHelper(1.375, -2.625, 3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 1, 0, 3, 0.0625F); + GL11.glPopMatrix(); + } + + if(rand.nextBoolean()) { + GL11.glPushMatrix(); + GL11.glTranslated(3.125, 5.5, 0); + BeamPronter.prontBeam(Vec3.createVectorHelper(-1.375, -2.625, -3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 15, 0.25F, 3, 0.0625F); + BeamPronter.prontBeam(Vec3.createVectorHelper(-1.375, -2.625, -3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 1, 0, 3, 0.0625F); + GL11.glPopMatrix(); + } + + if(rand.nextBoolean()) { + GL11.glPushMatrix(); + GL11.glTranslated(-3.125, 5.5, 0); + BeamPronter.prontBeam(Vec3.createVectorHelper(1.375, -2.625, -3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 15, 0.25F, 3, 0.0625F); + BeamPronter.prontBeam(Vec3.createVectorHelper(1.375, -2.625, -3.75), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0x404040, 0x002040, (int)(System.currentTimeMillis() % 1000) / 50, 1, 0, 3, 0.0625F); + GL11.glPopMatrix(); + } + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_battery_redd); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -3, 0); + GL11.glScaled(2.5, 2.5, 2.5); + } + public void renderCommon() { + GL11.glRotated(-90, 0, 1, 0); + GL11.glScaled(0.5, 0.5, 0.5); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.battery_redd_tex); + ResourceManager.battery_redd.renderPart("Base"); + ResourceManager.battery_redd.renderPart("Wheel"); + GL11.glDisable(GL11.GL_LIGHTING); + ResourceManager.battery_redd.renderPart("Lights"); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } + +} diff --git a/src/main/java/com/hbm/render/util/BeamPronter.java b/src/main/java/com/hbm/render/util/BeamPronter.java index 27a065534..c13b90d7c 100644 --- a/src/main/java/com/hbm/render/util/BeamPronter.java +++ b/src/main/java/com/hbm/render/util/BeamPronter.java @@ -9,6 +9,8 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; public class BeamPronter { + + public static Random rand = new Random(); public static enum EnumWaveType { RANDOM, SPIRAL @@ -51,7 +53,7 @@ public class BeamPronter { Tessellator tessellator = Tessellator.instance; Vec3 unit = Vec3.createVectorHelper(0, 1, 0); - Random rand = new Random(start); + rand.setSeed(start); double length = skeleton.lengthVector(); double segLength = length / segments; double lastX = 0; diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index a4cbb8014..8e3eca98c 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -82,6 +82,7 @@ public class TileMappings { put(TileEntityDecoPoleSatelliteReceiver.class, "tileentity_satellitereceicer"); put(TileEntityMachineBattery.class, "tileentity_battery"); put(TileEntityBatterySocket.class, "tileentity_battery_socket"); + put(TileEntityBatteryREDD.class, "tileentity_battery_redd"); put(TileEntityCapacitor.class, "tileentity_capacitor"); put(TileEntityMachineWoodBurner.class, "tileentity_wood_burner"); put(TileEntityRedBarrel.class, "tileentity_barrel"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java index 09393dc0a..c270b3828 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java @@ -28,8 +28,6 @@ import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; import com.hbm.util.i18n.I18nUtil; -import api.hbm.block.IDrillInteraction; -import api.hbm.block.IMiningDrill; import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardSender; import cpw.mods.fml.relauncher.Side; @@ -53,7 +51,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineMiningLaser extends TileEntityMachineBase implements IEnergyReceiverMK2, IMiningDrill, IFluidStandardSender, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineMiningLaser extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardSender, IGUIProvider, IUpgradeInfoProvider { public long power; public int age = 0; @@ -325,17 +323,6 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen } } - if(normal && b instanceof IDrillInteraction) { - IDrillInteraction in = (IDrillInteraction) b; - ItemStack drop = in.extractResource(worldObj, targetX, targetY, targetZ, meta, this); - - if(drop != null) { - worldObj.spawnEntityInWorld(new EntityItem(worldObj, targetX + 0.5, targetY + 0.5, targetZ + 0.5, drop.copy())); - } - - doesBreak = in.canBreak(worldObj, targetX, targetY, targetZ, meta, this); - } - if(doesBreak) { if(normal) b.dropBlockAsItem(worldObj, targetX, targetY, targetZ, meta, fortune); worldObj.func_147480_a(targetX, targetY, targetZ, false); @@ -464,106 +451,68 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen } public int getRange() { - int range = 1; - for(int i = 1; i < 9; i++) { - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_effect_1) - range += 2; - else if(slots[i].getItem() == ModItems.upgrade_effect_2) - range += 4; - else if(slots[i].getItem() == ModItems.upgrade_effect_3) - range += 6; + if(slots[i].getItem() == ModItems.upgrade_effect_1) range += 2; + else if(slots[i].getItem() == ModItems.upgrade_effect_2) range += 4; + else if(slots[i].getItem() == ModItems.upgrade_effect_3) range += 6; } } - return Math.min(range, 25); } public boolean hasNullifier() { - for(int i = 1; i < 9; i++) { - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_nullifier) - return true; + if(slots[i].getItem() == ModItems.upgrade_nullifier) return true; } } - return false; } public boolean hasSmelter() { - for(int i = 1; i < 9; i++) { - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_smelter) - return true; + if(slots[i].getItem() == ModItems.upgrade_smelter) return true; } } - return false; } public boolean hasShredder() { - for(int i = 1; i < 9; i++) { - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_shredder) - return true; + if(slots[i].getItem() == ModItems.upgrade_shredder) return true; } } - return false; } public boolean hasCentrifuge() { - for(int i = 1; i < 9; i++) { - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_centrifuge) - return true; + if(slots[i].getItem() == ModItems.upgrade_centrifuge) return true; } } - return false; } public boolean hasCrystallizer() { - for(int i = 1; i < 9; i++) { - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_crystallizer) - return true; + if(slots[i].getItem() == ModItems.upgrade_crystallizer) return true; } } - return false; } public boolean doesScream() { - for(int i = 1; i < 9; i++) { - if(slots[i] != null) { - - if(slots[i].getItem() == ModItems.upgrade_screm) - return true; + if(slots[i].getItem() == ModItems.upgrade_screm) return true; } } - return false; } @@ -646,6 +595,7 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen super.readFromNBT(nbt); tank.readFromNBT(nbt, "oil"); + power = nbt.getLong("power"); isOn = nbt.getBoolean("isOn"); redstonePowered = false; } @@ -655,19 +605,10 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen super.writeToNBT(nbt); tank.writeToNBT(nbt, "oil"); + nbt.setLong("power", power); nbt.setBoolean("isOn", isOn); } - @Override - public DrillType getDrillTier() { - return DrillType.HITECH; - } - - @Override - public int getDrillRating() { - return 100; - } - @Override public FluidTank[] getSendingTanks() { return new FluidTank[] { tank }; 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 3965ea170..dd355a829 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java @@ -68,9 +68,13 @@ 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 { + feed.setTankType(Fluids.NONE); + steam.setTankType(Fluids.NONE); } } else { + feed.setTankType(Fluids.NONE); steam.setTankType(Fluids.NONE); } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java new file mode 100644 index 000000000..34976ac9d --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryBase.java @@ -0,0 +1,184 @@ +package com.hbm.tileentity.machine.storage; + +import com.hbm.interfaces.IControlReceiver; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.uninos.UniNodespace; +import com.hbm.util.EnumUtil; +import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.fauxpointtwelve.DirPos; + +import api.hbm.energymk2.IBatteryItem; +import api.hbm.energymk2.IEnergyConductorMK2; +import api.hbm.energymk2.IEnergyProviderMK2; +import api.hbm.energymk2.IEnergyReceiverMK2; +import api.hbm.energymk2.Nodespace; +import api.hbm.energymk2.Nodespace.PowerNode; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MathHelper; + +public abstract class TileEntityBatteryBase extends TileEntityMachineBase implements IEnergyConductorMK2, IEnergyProviderMK2, IEnergyReceiverMK2, IControlReceiver, IGUIProvider { + + public byte lastRedstone = 0; + public long prevPowerState = 0; + + public static final int mode_input = 0; + public static final int mode_buffer = 1; + public static final int mode_output = 2; + public static final int mode_none = 3; + public short redLow = 0; + public short redHigh = 2; + public ConnectionPriority priority = ConnectionPriority.LOW; + + protected PowerNode node; + + public TileEntityBatteryBase(int slotCount) { + super(slotCount); + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + if(priority == null || priority.ordinal() == 0 || priority.ordinal() == 4) { + priority = ConnectionPriority.LOW; + } + + if(this.node == null || this.node.expired) { + this.node = (PowerNode) UniNodespace.getNode(worldObj, xCoord, yCoord, zCoord, Nodespace.THE_POWER_PROVIDER); + + if(this.node == null || this.node.expired) { + this.node = this.createNode(); + UniNodespace.createNode(worldObj, this.node); + } + } + + if(this.node != null && this.node.hasValidNet()) switch(this.getRelevantMode(false)) { + case mode_input: this.node.net.removeProvider(this); this.node.net.addReceiver(this); break; + case mode_output: this.node.net.addProvider(this); this.node.net.removeReceiver(this); break; + case mode_buffer: this.node.net.addProvider(this); this.node.net.addReceiver(this); break; + case mode_none: this.node.net.removeProvider(this); this.node.net.removeReceiver(this); break; + } + + byte comp = this.getComparatorPower(); + if(comp != this.lastRedstone) this.markDirty(); + this.lastRedstone = comp; + + prevPowerState = this.getPower(); + + this.networkPackNT(100); + } + } + + public byte getComparatorPower() { + double frac = (double) this.getPower() / (double) this.getMaxPower() * 15D; + return (byte) (MathHelper.clamp_int((int) frac + 1, 0, 15)); //to combat eventual rounding errors with the FEnSU's stupid maxPower + } + + @Override + public PowerNode createNode() { + return new PowerNode(this.getPortPos()).setConnections(this.getConPos()); + } + + @Override + public void invalidate() { + super.invalidate(); + + if(!worldObj.isRemote) { + if(this.node != null) { + UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, Nodespace.THE_POWER_PROVIDER); + } + } + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack) { + return stack.getItem() instanceof IBatteryItem; + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + + buf.writeShort(redLow); + buf.writeShort(redHigh); + buf.writeByte(priority.ordinal()); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + redLow = buf.readShort(); + redHigh = buf.readShort(); + priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, buf.readByte()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + this.redLow = nbt.getShort("redLow"); + this.redHigh = nbt.getShort("redHigh"); + this.lastRedstone = nbt.getByte("lastRedstone"); + this.priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, nbt.getByte("priority")); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setShort("redLow", redLow); + nbt.setShort("redHigh", redHigh); + nbt.setByte("lastRedstone", lastRedstone); + nbt.setByte("priority", (byte) this.priority.ordinal()); + } + + @Override public boolean allowDirectProvision() { return false; } + @Override public ConnectionPriority getPriority() { return this.priority; } + + public abstract BlockPos[] getPortPos(); + public abstract DirPos[] getConPos(); + + private short modeCache = 0; + + public short getRelevantMode(boolean useCache) { + if(useCache) return this.modeCache; + boolean powered = false; + for(BlockPos pos : getPortPos()) if(worldObj.isBlockIndirectlyGettingPowered(pos.getX(), pos.getY(), pos.getZ())) { powered = true; break; } + this.modeCache = powered ? this.redHigh : this.redLow; + return this.modeCache; + } + + @Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("low")) { + this.redLow++; + if(this.redLow > 3) this.redLow = 0; + } + if(data.hasKey("high")) { + this.redHigh++; + if(this.redHigh > 3) this.redHigh = 0; + } + if(data.hasKey("priority")) { + int ordinal = this.priority.ordinal(); + ordinal++; + if(ordinal > ConnectionPriority.HIGH.ordinal()) ordinal = ConnectionPriority.LOW.ordinal(); + this.priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, ordinal); + } + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java new file mode 100644 index 000000000..06f3d8a8d --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java @@ -0,0 +1,219 @@ +package com.hbm.tileentity.machine.storage; + +import java.math.BigInteger; + +import com.hbm.inventory.container.ContainerBatteryREDD; +import com.hbm.inventory.gui.GUIBatteryREDD; +import com.hbm.lib.Library; +import com.hbm.main.MainRegistry; +import com.hbm.sound.AudioWrapper; +import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.fauxpointtwelve.DirPos; + +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityBatteryREDD extends TileEntityBatteryBase { + + public float prevRotation = 0F; + public float rotation = 0F; + + public BigInteger[] log = new BigInteger[20]; + public BigInteger delta = BigInteger.valueOf(0); + + public BigInteger power = BigInteger.valueOf(0); + + private AudioWrapper audio; + + public TileEntityBatteryREDD() { + super(2); + } + + @Override public String getName() { return "container.batteryREDD"; } + + @Override + public void updateEntity() { + BigInteger prevPower = new BigInteger(power.toByteArray()); + + super.updateEntity(); + + if(!worldObj.isRemote) { + + long toAdd = Library.chargeTEFromItems(slots, 0, 0, this.getMaxPower()); + if(toAdd > 0) this.power = this.power.add(BigInteger.valueOf(toAdd)); + + long toRemove = this.getPower() - Library.chargeItemsFromTE(slots, 1, this.getPower(), this.getMaxPower()); + if(toRemove > 0)this.power = this.power.subtract(BigInteger.valueOf(toRemove)); + + // same implementation as for batteries, however retooled to use bigints because fuck + BigInteger avg = this.power.add(prevPower).divide(BigInteger.valueOf(2)); + this.delta = avg.subtract(this.log[0] == null ? BigInteger.ZERO : this.log[0]); + + for(int i = 1; i < this.log.length; i++) { + this.log[i - 1] = this.log[i]; + } + + this.log[19] = avg; + + } else { + this.prevRotation = this.rotation; + this.rotation += this.getSpeed(); + + if(rotation >= 360) { + rotation -= 360; + prevRotation -= 360; + } + + float pitch = 0.5F + this.getSpeed() / 15F * 1.5F; + + if(this.prevRotation != this.rotation && MainRegistry.proxy.me().getDistanceSq(xCoord + 0.5, yCoord + 5.5, zCoord + 0.5) < 50 * 50) { + if(this.audio == null || !this.audio.isPlaying()) { + this.audio = MainRegistry.proxy.getLoopedSound("hbm:block.fensuHum", xCoord, yCoord, zCoord, this.getVolume(1.5F), 25F, pitch, 5); + this.audio.startSound(); + } + this.audio.updatePitch(pitch); + this.audio.keepAlive(); + + } else { + if(this.audio != null) { + this.audio.stopSound(); + this.audio = null; + } + } + } + } + + public float getSpeed() { + return (float) Math.min(Math.pow(Math.log(this.power.doubleValue() * 0.05 + 1) * 0.05F, 5), 15F); + } + + @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; + } + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + + byte[] array0 = this.power.toByteArray(); + buf.writeInt(array0.length); + for(byte b : array0) buf.writeByte(b); + + byte[] array1 = this.delta.toByteArray(); + buf.writeInt(array1.length); + for(byte b : array1) buf.writeByte(b); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + byte[] array0 = new byte[buf.readInt()]; + for(int i = 0 ; i < array0.length; i++) array0[i] = buf.readByte(); + this.power = new BigInteger(array0); + + byte[] array1 = new byte[buf.readInt()]; + for(int i = 0 ; i < array1.length; i++) array1[i] = buf.readByte(); + this.delta = new BigInteger(array1); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + this.power = new BigInteger(nbt.getByteArray("power")); + + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setByteArray("power", this.power.toByteArray()); + + } + + @Override + public BlockPos[] getPortPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + return new BlockPos[] { + new BlockPos(xCoord + dir.offsetX * 2 + rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 2 + rot.offsetZ * 2), + new BlockPos(xCoord + dir.offsetX * 2 - rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 2 - rot.offsetZ * 2), + new BlockPos(xCoord - dir.offsetX * 2 + rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 2 + rot.offsetZ * 2), + new BlockPos(xCoord - dir.offsetX * 2 - rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 2 - rot.offsetZ * 2), + new BlockPos(xCoord + rot.offsetX * 4, yCoord, zCoord + rot.offsetZ * 4), + new BlockPos(xCoord - rot.offsetX * 4, yCoord, zCoord - rot.offsetZ * 4), + }; + } + + @Override + public DirPos[] getConPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + return new DirPos[] { + new DirPos(xCoord + dir.offsetX * 3 + rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 3 + rot.offsetZ * 2, dir), + new DirPos(xCoord + dir.offsetX * 3 - rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 3 - rot.offsetZ * 2, dir), + new DirPos(xCoord - dir.offsetX * 3 + rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 3 + rot.offsetZ * 2, dir.getOpposite()), + new DirPos(xCoord - dir.offsetX * 3 - rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 3 - rot.offsetZ * 2, dir.getOpposite()), + new DirPos(xCoord + rot.offsetX * 5, yCoord, zCoord + rot.offsetZ * 5, rot), + new DirPos(xCoord - rot.offsetX * 5, yCoord, zCoord - rot.offsetZ * 5, rot.getOpposite()), + }; + } + + @Override + public void usePower(long power) { + this.power = this.power.subtract(BigInteger.valueOf(power)); + } + + @Override + public long transferPower(long power) { + this.power = this.power.add(BigInteger.valueOf(power)); + return 0L; + } + + @Override public long getPower() { return this.power.min(BigInteger.valueOf(getMaxPower() / 2)).longValue(); } // for provision + @Override public void setPower(long power) { } // not needed since we use transferPower and usePower directly + @Override public long getMaxPower() { return Long.MAX_VALUE / 100L; } // for connection speed + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerBatteryREDD(player.inventory, this); } + @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBatteryREDD(player.inventory, this); } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 4, + yCoord, + zCoord - 4, + xCoord + 5, + yCoord + 10, + zCoord + 5 + ); + } + + return bb; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java index 6538ea15f..329391fc3 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java @@ -1,52 +1,26 @@ package com.hbm.tileentity.machine.storage; -import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerBatterySocket; import com.hbm.inventory.gui.GUIBatterySocket; import com.hbm.items.ModItems; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.TileEntityMachineBase; -import com.hbm.uninos.UniNodespace; -import com.hbm.util.EnumUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IBatteryItem; -import api.hbm.energymk2.IEnergyConductorMK2; -import api.hbm.energymk2.IEnergyProviderMK2; -import api.hbm.energymk2.IEnergyReceiverMK2; -import api.hbm.energymk2.Nodespace; -import api.hbm.energymk2.Nodespace.PowerNode; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityBatterySocket extends TileEntityMachineBase implements IEnergyConductorMK2, IEnergyProviderMK2, IEnergyReceiverMK2, IControlReceiver, IGUIProvider { +public class TileEntityBatterySocket extends TileEntityBatteryBase { public long[] log = new long[20]; public long delta = 0; - public byte lastRedstone = 0; - public long prevPowerState = 0; - - public static final int mode_input = 0; - public static final int mode_buffer = 1; - public static final int mode_output = 2; - public static final int mode_none = 3; - public short redLow = 0; - public short redHigh = 2; - public ConnectionPriority priority = ConnectionPriority.LOW; public int renderPack = -1; - - protected PowerNode node; public TileEntityBatterySocket() { super(1); @@ -56,36 +30,12 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE @Override public void updateEntity() { + long prevPower = this.getPower(); + + super.updateEntity(); if(!worldObj.isRemote) { - if(priority == null || priority.ordinal() == 0 || priority.ordinal() == 4) { - priority = ConnectionPriority.LOW; - } - - long prevPower = this.getPower(); - - if(this.node == null || this.node.expired) { - - this.node = (PowerNode) UniNodespace.getNode(worldObj, xCoord, yCoord, zCoord, Nodespace.THE_POWER_PROVIDER); - - if(this.node == null || this.node.expired) { - this.node = this.createNode(); - UniNodespace.createNode(worldObj, this.node); - } - } - - if(this.node != null && this.node.hasValidNet()) switch(this.getRelevantMode(false)) { - case mode_input: this.node.net.removeProvider(this); this.node.net.addReceiver(this); break; - case mode_output: this.node.net.addProvider(this); this.node.net.removeReceiver(this); break; - case mode_buffer: this.node.net.addProvider(this); this.node.net.addReceiver(this); break; - case mode_none: this.node.net.removeProvider(this); this.node.net.removeReceiver(this); break; - } - - byte comp = this.getComparatorPower(); - if(comp != this.lastRedstone) this.markDirty(); - this.lastRedstone = comp; - long avg = (this.getPower() + prevPower) / 2; this.delta = avg - this.log[0]; @@ -94,31 +44,6 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE } this.log[19] = avg; - - prevPowerState = this.getPower(); - - this.networkPackNT(100); - } - } - - @Override - public PowerNode createNode() { - return new PowerNode(this.getPortPos()).setConnections(this.getConPos()); - } - - public byte getComparatorPower() { - double frac = (double) this.getPower() / (double) this.getMaxPower() * 15D; - return (byte) (MathHelper.clamp_int((int) frac + 1, 0, 15)); //to combat eventual rounding errors with the FEnSU's stupid maxPower - } - - @Override - public void invalidate() { - super.invalidate(); - - if(!worldObj.isRemote) { - if(this.node != null) { - UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, Nodespace.THE_POWER_PROVIDER); - } } } @@ -130,43 +55,15 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE if(slots[0] != null && slots[0].getItem() == ModItems.battery_pack) { renderPack = slots[0].getItemDamage(); } - buf.writeInt(renderPack); buf.writeLong(delta); - buf.writeShort(redLow); - buf.writeShort(redHigh); - buf.writeByte(priority.ordinal()); } @Override public void deserialize(ByteBuf buf) { super.deserialize(buf); - renderPack = buf.readInt(); delta = buf.readLong(); - redLow = buf.readShort(); - redHigh = buf.readShort(); - priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, buf.readByte()); - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - super.readFromNBT(nbt); - - this.redLow = nbt.getShort("redLow"); - this.redHigh = nbt.getShort("redHigh"); - this.lastRedstone = nbt.getByte("lastRedstone"); - this.priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, nbt.getByte("priority")); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); - - nbt.setShort("redLow", redLow); - nbt.setShort("redHigh", redHigh); - nbt.setByte("lastRedstone", lastRedstone); - nbt.setByte("priority", (byte) this.priority.ordinal()); } @Override @@ -178,11 +75,6 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE return false; } - @Override - public boolean isItemValidForSlot(int i, ItemStack stack) { - return stack.getItem() instanceof IBatteryItem; - } - @Override public int[] getAccessibleSlotsFromSide(int side) { return new int[] {0}; } @Override @@ -203,9 +95,6 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE return ((IBatteryItem) slots[0].getItem()).getMaxCharge(slots[0]); } - @Override public boolean allowDirectProvision() { return false; } - @Override public ConnectionPriority getPriority() { return this.priority; } - @Override public long getProviderSpeed() { if(slots[0] == null || !(slots[0].getItem() instanceof IBatteryItem)) return 0; int mode = this.getRelevantMode(true); @@ -217,7 +106,8 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE int mode = this.getRelevantMode(true); return mode == mode_input || mode == mode_buffer ? ((IBatteryItem) slots[0].getItem()).getChargeRate(slots[0]) : 0; } - + + @Override public BlockPos[] getPortPos() { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); ForgeDirection rot = dir.getRotation(ForgeDirection.UP); @@ -229,6 +119,7 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE }; } + @Override public DirPos[] getConPos() { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); ForgeDirection rot = dir.getRotation(ForgeDirection.UP); @@ -247,38 +138,8 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE }; } - private short modeCache = 0; - - public short getRelevantMode(boolean useCache) { - if(useCache) return this.modeCache; - boolean powered = false; - for(BlockPos pos : getPortPos()) if(worldObj.isBlockIndirectlyGettingPowered(pos.getX(), pos.getY(), pos.getZ())) { powered = true; break; } - this.modeCache = powered ? this.redHigh : this.redLow; - return this.modeCache; - } - @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerBatterySocket(player.inventory, this); } @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBatterySocket(player.inventory, this); } - - @Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); } - - @Override - public void receiveControl(NBTTagCompound data) { - if(data.hasKey("low")) { - this.redLow++; - if(this.redLow > 3) this.redLow = 0; - } - if(data.hasKey("high")) { - this.redHigh++; - if(this.redHigh > 3) this.redHigh = 0; - } - if(data.hasKey("priority")) { - int ordinal = this.priority.ordinal(); - ordinal++; - if(ordinal > ConnectionPriority.HIGH.ordinal()) ordinal = ConnectionPriority.LOW.ordinal(); - this.priority = EnumUtil.grabEnumSafely(ConnectionPriority.class, ordinal); - } - } AxisAlignedBB bb = null; @@ -298,10 +159,4 @@ public class TileEntityBatterySocket extends TileEntityMachineBase implements IE return bb; } - - @Override - @SideOnly(Side.CLIENT) - public double getMaxRenderDistanceSquared() { - return 65536.0D; - } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index b567812b9..f1c8ed61e 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -322,6 +322,7 @@ container.autocrafter=Automatische Werkbank container.barrel=Fass container.bat9000=Big-Ass Tank 9000 container.battery=Energiespeicher +container.batteryREDD=FEnSU container.batterySocket=Batteriesockel container.bombMulti=Mehrzweckbombe container.casingBag=Hülsentasche @@ -4056,13 +4057,13 @@ tile.c4.name=C4 tile.cable_detector.name=Redstone-Stromschalter tile.cable_diode.name=Rote Kupferdiode tile.cable_switch.name=Stromschalter -tile.capacitor_bus.name=Kondensator-Bus +tile.capacitor_bus.name=Kondensator-Bus (LEGACY) tile.capacitor_bus.desc=Output für Kondensatoren$Kann in einer geraden Linie aneinandergereit werden -tile.capacitor_copper.name=Kupferkondensator -tile.capacitor_gold.name=Goldkondensator -tile.capacitor_niobium.name=Niobkondensator -tile.capacitor_schrabidate.name=Schrabidatkondensator -tile.capacitor_tantalium.name=Tantalkondensator +tile.capacitor_copper.name=Alter Kondensator +tile.capacitor_gold.name=Goldkondensator (LEGACY) +tile.capacitor_niobium.name=Niobkondensator (LEGACY) +tile.capacitor_schrabidate.name=Schrabidatkondensator (LEGACY) +tile.capacitor_tantalium.name=Tantalkondensator (LEGACY) tile.capacitor.desc=Input: Oben$Output: Unten, über Kondensator-Bus tile.charge_c4.name=Abrissladung tile.charge_dynamite.name=Zeitbombe @@ -4469,8 +4470,9 @@ tile.machine_autosaw.name=Automatische Kreissäge tile.machine_autosaw.desc=Schneidet Pflanzen nieder, pflanzt Bäume nach$Akzeptiert:$-Holzöl$-Ethanol$-Fischöl$-Schweröl tile.machine_autosaw.suspended=Angehalten tile.machine_bat9000.name=Big-Ass Tank 9000 -tile.machine_battery.name=Energiespeicherblock -tile.machine_battery_potato.name=Kartoffelbatterieblock +tile.machine_battery.name=Energiespeicherblock (LEGACY) +tile.machine_battery_potato.name=Kartoffelbatterieblock (LEGACY) +tile.machine_battery_redd.name=FEnSU tile.machine_battery_socket.name=Batteriesockel tile.machine_boiler.name=Boiler tile.machine_boiler.desc=Großer Boiler zum Verdampfen von Wasser oder$Erhitzen von Öl. Benötigt externe Hitzequelle.$Wärmestransferrate: ΔT*0.01 TU/t @@ -4513,7 +4515,7 @@ tile.machine_difurnace_off.name=Hochofen tile.machine_difurnace_on.name=Hochofen tile.machine_difurnace_rtg_off.name=Atomarer Hochofen tile.machine_difurnace_rtg_on.name=Atomarer Hochofen -tile.machine_dineutronium_battery.name=Spark Energiespeicherblock +tile.machine_dineutronium_battery.name=Spark Energiespeicherblock (LEGACY) tile.machine_drain.name=Ausgussrohr tile.machine_drill.name=Automatischer Minenbohrer tile.machine_electric_furnace_off.name=Elektrischer Ofen @@ -4523,7 +4525,7 @@ tile.machine_epress.name=Hydraulische Presse tile.machine_exposure_chamber.name=Bestrahlungskammer tile.machine_excavator.name=Großer Minenbohrer tile.machine_fel.name=FEL -tile.machine_fensu.name=FEnSU +tile.machine_fensu.name=FEnSU (LEGACY) tile.machine_flare.name=Abfackelturm tile.machine_fluidtank.name=Tank tile.machine_forcefield.name=Kraftfeldgenerator @@ -4543,7 +4545,7 @@ tile.machine_intake.name=Lufteinlass tile.machine_keyforge.name=Schlossertisch tile.machine_large_turbine.name=Industrielle Dampfturbine tile.machine_large_turbine.desc=Effizienz: 100%% -tile.machine_lithium_battery.name=Li-Ion-Energiespeicherblock +tile.machine_lithium_battery.name=Li-Ion-Energiespeicherblock (LEGACY) tile.machine_microwave.name=Mikrowelle tile.machine_mining_laser.name=Bergbaulaser tile.machine_minirtg.name=Radioisotopenzelle @@ -4583,7 +4585,7 @@ tile.machine_rtg_yellow.name=Australium Supergenerator tile.machine_satlinker.name=Satelliten-ID-Manager tile.machine_sawmill.name=Stirling-Sägemühle tile.machine_sawmill.desc=Benötigt externe Hitzequelle.$Wärmestransferrate: T*0.1 TU/t$Minimalaufnahme: 100 TU/t, Maximalaufnahme: 300 TU/t -tile.machine_schrabidium_battery.name=Schrabidium-Energiespeicherblock +tile.machine_schrabidium_battery.name=Schrabidium-Energiespeicherblock (LEGACY) tile.machine_schrabidium_transmutator.name=Schrabidium-Transmutationsgerät (LEGACY) tile.machine_selenium.name=Hochleistungs-Sternmotor tile.machine_shredder.name=Brecher diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e7414c7e7..d36f37dfd 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -727,6 +727,7 @@ container.autocrafter=Automatic Crafting Table container.barrel=Barrel container.bat9000=Big-Ass Tank 9000 container.battery=Energy Storage +container.batteryREDD=FEnSU container.batterySocket=Battery Socket container.bombMulti=Multi Purpose Bomb container.casingBag=Bullet Casing Bag @@ -5272,13 +5273,13 @@ tile.c4.name=C-4 tile.cable_detector.name=Redstone Power Switch tile.cable_diode.name=Red Copper Diode tile.cable_switch.name=Power Switch -tile.capacitor_bus.name=Capacitor Bus +tile.capacitor_bus.name=Capacitor Bus (LEGACY) tile.capacitor_bus.desc=Output block for capacitors$Can be chained up in a straight line -tile.capacitor_copper.name=Copper Capacitor -tile.capacitor_gold.name=Golden Capacitor -tile.capacitor_niobium.name=Niobium Capacitor -tile.capacitor_schrabidate.name=Schrabidate Capacitor -tile.capacitor_tantalium.name=Tantalum Capacitor +tile.capacitor_copper.name=Old Capacitor +tile.capacitor_gold.name=Golden Capacitor (LEGACY) +tile.capacitor_niobium.name=Niobium Capacitor (LEGACY) +tile.capacitor_schrabidate.name=Schrabidate Capacitor (LEGACY) +tile.capacitor_tantalium.name=Tantalum Capacitor (LEGACY) tile.capacitor.desc=Input: Top$Output: Bottom, via Capacitor Bus tile.charge_c4.name=Demolition Charge tile.charge_dynamite.name=Time Bomb @@ -5730,8 +5731,9 @@ tile.machine_autosaw.name=Automatic Buzz Saw tile.machine_autosaw.desc=Cuts down nearby plants, re-plants trees$Accepts:$-Wood oil$-Ethanol$-Fish oil$-Heavy oil tile.machine_autosaw.suspended=Suspended tile.machine_bat9000.name=Big-Ass Tank 9000 -tile.machine_battery.name=Energy Storage Block -tile.machine_battery_potato.name=Potato Battery Block +tile.machine_battery.name=Energy Storage Block (LEGACY) +tile.machine_battery_potato.name=Potato Battery Block (LEGACY) +tile.machine_battery_redd.name=FEnSU tile.machine_battery_socket.name=Battery Socket tile.machine_boiler.name=Boiler tile.machine_boiler.desc=Large boiler that can boil water or heat up oil.$Requires external heat source.$Heat transfer rate: ΔT*0.01 TU/t @@ -5775,7 +5777,7 @@ tile.machine_difurnace_off.name=Blast Furnace tile.machine_difurnace_on.name=Blast Furnace tile.machine_difurnace_rtg_off.name=Nuclear Blast Furnace tile.machine_difurnace_rtg_on.name=Nuclear Blast Furnace -tile.machine_dineutronium_battery.name=Spark Energy Storage Block +tile.machine_dineutronium_battery.name=Spark Energy Storage Block (LEGACY) tile.machine_drain.name=Drainage Pipe tile.machine_drill.name=Automatic Mining Drill tile.machine_electric_furnace_off.name=Electric Furnace @@ -5785,7 +5787,7 @@ tile.machine_epress.name=Electric Press tile.machine_excavator.name=Large Mining Drill tile.machine_exposure_chamber.name=Exposure Chamber tile.machine_fel.name=FEL -tile.machine_fensu.name=FEnSU +tile.machine_fensu.name=FEnSU (LEGACY) tile.machine_flare.name=Flare Stack tile.machine_fluidtank.name=Tank tile.machine_forcefield.name=Forcefield Emitter @@ -5808,7 +5810,7 @@ tile.machine_large_turbine.name=Industrial Steam Turbine tile.machine_large_turbine.desc=Efficiency: 100%% tile.machine_liquefactor.name=Industrial Liquefaction Machine tile.machine_liquefactor.desc=Powerful universal machine to turn items into fluids.$Comes with versatile catalytic components, heating elements$and a built-in hydrator for petrochemical liquefaction. -tile.machine_lithium_battery.name=Li-Ion Energy Storage Block +tile.machine_lithium_battery.name=Li-Ion Energy Storage Block (LEGACY) tile.machine_microwave.name=Microwave tile.machine_mining_laser.name=Mining Laser tile.machine_minirtg.name=Radio Isotope Cell @@ -5848,7 +5850,7 @@ tile.machine_rtg_yellow.name=Australium Superfuel Reactor tile.machine_satlinker.name=Satellite ID Manager tile.machine_sawmill.name=Stirling Sawmill tile.machine_sawmill.desc=Requires external heat source.$Heat transfer rate: T*0.1 TU/t$Min intake: 100 TU/t, Max intake: 300 TU/t -tile.machine_schrabidium_battery.name=Schrabidium Energy Storage Block +tile.machine_schrabidium_battery.name=Schrabidium Energy Storage Block (LEGACY) tile.machine_schrabidium_transmutator.name=Schrabidium Transmutation Device (LEGACY) tile.machine_selenium.name=Radial Performance Engine tile.machine_shredder.name=Shredder diff --git a/src/main/resources/assets/hbm/models/machines/fensu2.obj b/src/main/resources/assets/hbm/models/machines/fensu2.obj new file mode 100644 index 000000000..2d6ace3c3 --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/fensu2.obj @@ -0,0 +1,6193 @@ +# Blender v2.79 (sub 0) OBJ File: 'fensu2.blend' +# www.blender.org +o Wheel +v 0.500000 5.500000 -4.499998 +v 0.500000 6.377907 -4.413532 +v 0.500000 7.222075 -4.157456 +v 0.500000 8.000065 -3.741611 +v 0.500000 8.681980 -3.181979 +v 0.500000 9.241613 -2.500065 +v 0.500000 9.657457 -1.722075 +v 0.500000 9.913532 -0.877905 +v 0.500000 10.000000 0.000001 +v 0.500000 9.913532 0.877907 +v 0.500000 9.657457 1.722075 +v 0.500000 9.241613 2.500067 +v 0.500000 8.681980 3.181981 +v 0.500000 8.000065 3.741614 +v 0.500000 7.222075 4.157459 +v 0.500000 6.377905 4.413535 +v 0.500000 5.499998 4.500000 +v 0.500000 4.622091 4.413535 +v 0.500000 3.777922 4.157458 +v 0.500000 2.999931 3.741612 +v 0.500000 2.318017 3.181979 +v 0.500000 1.758385 2.500064 +v 0.500000 1.342541 1.722074 +v 0.500000 1.086465 0.877904 +v 0.500000 1.000000 -0.000003 +v 0.500000 1.086467 -0.877910 +v 0.500000 1.342544 -1.722078 +v 0.500000 1.758389 -2.500070 +v 0.500000 2.318023 -3.181983 +v 0.500000 2.999939 -3.741615 +v 0.500000 3.777930 -4.157459 +v 0.500000 4.622100 -4.413533 +v -0.500000 5.500000 -4.499998 +v -0.500000 6.377907 -4.413532 +v -0.500000 7.222075 -4.157456 +v -0.500000 8.000065 -3.741611 +v -0.500000 8.681980 -3.181979 +v -0.500000 9.241613 -2.500065 +v -0.500000 9.657457 -1.722075 +v -0.500000 9.913532 -0.877905 +v -0.500000 10.000000 0.000001 +v -0.500000 9.913532 0.877907 +v -0.500000 9.657457 1.722075 +v -0.500000 9.241613 2.500067 +v -0.500000 8.681980 3.181981 +v -0.500000 8.000065 3.741614 +v -0.500000 7.222075 4.157459 +v -0.500000 6.377905 4.413535 +v -0.500000 5.499998 4.500000 +v -0.500000 4.622091 4.413535 +v -0.500000 3.777922 4.157458 +v -0.500000 2.999931 3.741612 +v -0.500000 2.318017 3.181979 +v -0.500000 1.758385 2.500064 +v -0.500000 1.342541 1.722074 +v -0.500000 1.086465 0.877904 +v -0.500000 1.000000 -0.000003 +v -0.500000 1.086467 -0.877910 +v -0.500000 1.342544 -1.722078 +v -0.500000 1.758389 -2.500070 +v -0.500000 2.318023 -3.181983 +v -0.500000 2.999939 -3.741615 +v -0.500000 3.777930 -4.157459 +v -0.500000 4.622100 -4.413533 +v 0.750000 5.500000 -3.749999 +v 0.750000 6.231590 -3.677944 +v 0.750000 6.935064 -3.464547 +v 0.750000 7.583389 -3.118011 +v 0.750000 8.151649 -2.651649 +v 0.750000 8.618011 -2.083387 +v 0.750000 8.964550 -1.435062 +v 0.750000 9.177946 -0.731588 +v 0.750000 9.250000 0.000000 +v 0.750000 9.177946 0.731588 +v 0.750000 8.964550 1.435062 +v 0.750000 8.618011 2.083388 +v 0.750000 8.151649 2.651650 +v 0.750000 7.583385 3.118011 +v 0.750000 6.935061 3.464549 +v 0.750000 6.231590 3.677945 +v 0.750000 5.500000 3.750000 +v 0.750000 4.768408 3.677945 +v 0.750000 4.064937 3.464548 +v 0.750000 3.416611 3.118011 +v 0.750000 2.848347 2.651649 +v 0.750000 2.381987 2.083386 +v 0.750000 2.035452 1.435061 +v 0.750000 1.822056 0.731586 +v 0.750000 1.750000 -0.000003 +v 0.750000 1.822056 -0.731592 +v 0.750000 2.035452 -1.435066 +v 0.750000 2.381993 -2.083391 +v 0.750000 2.848354 -2.651653 +v 0.750000 3.416615 -3.118013 +v 0.750000 4.064943 -3.464550 +v 0.750000 4.768415 -3.677945 +v 1.250000 5.500000 -3.749999 +v 1.250000 6.231590 -3.677944 +v 1.250000 6.935064 -3.464547 +v 1.250000 7.583389 -3.118011 +v 1.250000 8.151649 -2.651649 +v 1.250000 8.618011 -2.083387 +v 1.250000 8.964550 -1.435062 +v 1.250000 9.177946 -0.731588 +v 1.250000 9.250000 0.000000 +v 1.250000 9.177946 0.731588 +v 1.250000 8.964550 1.435062 +v 1.250000 8.618011 2.083388 +v 1.250000 8.151649 2.651650 +v 1.250000 7.583385 3.118011 +v 1.250000 6.935061 3.464549 +v 1.250000 6.231590 3.677945 +v 1.250000 5.500000 3.750000 +v 1.250000 4.768408 3.677945 +v 1.250000 4.064937 3.464548 +v 1.250000 3.416611 3.118011 +v 1.250000 2.848347 2.651649 +v 1.250000 2.381987 2.083386 +v 1.250000 2.035452 1.435061 +v 1.250000 1.822056 0.731586 +v 1.250000 1.750000 -0.000003 +v 1.250000 1.822056 -0.731592 +v 1.250000 2.035452 -1.435066 +v 1.250000 2.381993 -2.083391 +v 1.250000 2.848354 -2.651653 +v 1.250000 3.416615 -3.118013 +v 1.250000 4.064943 -3.464550 +v 1.250000 4.768415 -3.677945 +v 1.500000 5.500000 -1.000000 +v 1.500000 5.695091 -0.980785 +v 1.500000 5.882685 -0.923880 +v 1.500000 6.055571 -0.831470 +v 1.500000 6.207108 -0.707108 +v 1.500000 6.331470 -0.555571 +v 1.500000 6.423880 -0.382684 +v 1.500000 6.480785 -0.195091 +v 1.500000 6.500000 -0.000001 +v 1.500000 6.480785 0.195089 +v 1.500000 6.423880 0.382683 +v 1.500000 6.331470 0.555570 +v 1.500000 6.207108 0.707107 +v 1.500000 6.055571 0.831469 +v 1.500000 5.882683 0.923879 +v 1.500000 5.695091 0.980784 +v 1.500000 5.500000 0.999999 +v 1.500000 5.304909 0.980784 +v 1.500000 5.117317 0.923879 +v 1.500000 4.944429 0.831469 +v 1.500000 4.792892 0.707106 +v 1.500000 4.668530 0.555569 +v 1.500000 4.576120 0.382682 +v 1.500000 4.519215 0.195089 +v 1.500000 4.500000 -0.000002 +v 1.500000 4.519215 -0.195092 +v 1.500000 4.576120 -0.382685 +v 1.500000 4.668531 -0.555572 +v 1.500000 4.792894 -0.707108 +v 1.500000 4.944431 -0.831470 +v 1.500000 5.117319 -0.923881 +v 1.500000 5.304911 -0.980786 +v -0.750000 5.500000 -3.749999 +v -0.750000 6.231590 -3.677944 +v -0.750000 6.935064 -3.464547 +v -0.750000 7.583389 -3.118011 +v -0.750000 8.151649 -2.651649 +v -0.750000 8.618011 -2.083387 +v -0.750000 8.964550 -1.435062 +v -0.750000 9.177946 -0.731588 +v -0.750000 9.250000 0.000000 +v -0.750000 9.177946 0.731588 +v -0.750000 8.964550 1.435062 +v -0.750000 8.618011 2.083388 +v -0.750000 8.151649 2.651650 +v -0.750000 7.583385 3.118011 +v -0.750000 6.935061 3.464549 +v -0.750000 6.231590 3.677945 +v -0.750000 5.500000 3.750000 +v -0.750000 4.768408 3.677945 +v -0.750000 4.064937 3.464548 +v -0.750000 3.416611 3.118011 +v -0.750000 2.848347 2.651649 +v -0.750000 2.381987 2.083386 +v -0.750000 2.035452 1.435061 +v -0.750000 1.822056 0.731586 +v -0.750000 1.750000 -0.000003 +v -0.750000 1.822056 -0.731592 +v -0.750000 2.035452 -1.435066 +v -0.750000 2.381993 -2.083391 +v -0.750000 2.848354 -2.651653 +v -0.750000 3.416615 -3.118013 +v -0.750000 4.064943 -3.464550 +v -0.750000 4.768415 -3.677945 +v -1.250000 5.500000 -3.749999 +v -1.250000 6.231590 -3.677944 +v -1.250000 6.935064 -3.464547 +v -1.250000 7.583389 -3.118011 +v -1.250000 8.151649 -2.651649 +v -1.250000 8.618011 -2.083387 +v -1.250000 8.964550 -1.435062 +v -1.250000 9.177946 -0.731588 +v -1.250000 9.250000 0.000000 +v -1.250000 9.177946 0.731588 +v -1.250000 8.964550 1.435062 +v -1.250000 8.618011 2.083388 +v -1.250000 8.151649 2.651650 +v -1.250000 7.583385 3.118011 +v -1.250000 6.935061 3.464549 +v -1.250000 6.231590 3.677945 +v -1.250000 5.500000 3.750000 +v -1.250000 4.768408 3.677945 +v -1.250000 4.064937 3.464548 +v -1.250000 3.416611 3.118011 +v -1.250000 2.848347 2.651649 +v -1.250000 2.381987 2.083386 +v -1.250000 2.035452 1.435061 +v -1.250000 1.822056 0.731586 +v -1.250000 1.750000 -0.000003 +v -1.250000 1.822056 -0.731592 +v -1.250000 2.035452 -1.435066 +v -1.250000 2.381993 -2.083391 +v -1.250000 2.848354 -2.651653 +v -1.250000 3.416615 -3.118013 +v -1.250000 4.064943 -3.464550 +v -1.250000 4.768415 -3.677945 +v -1.500000 5.500000 -1.000000 +v -1.500000 5.695091 -0.980785 +v -1.500000 5.882685 -0.923880 +v -1.500000 6.055571 -0.831470 +v -1.500000 6.207108 -0.707108 +v -1.500000 6.331470 -0.555571 +v -1.500000 6.423880 -0.382684 +v -1.500000 6.480785 -0.195091 +v -1.500000 6.500000 -0.000001 +v -1.500000 6.480785 0.195089 +v -1.500000 6.423880 0.382683 +v -1.500000 6.331470 0.555570 +v -1.500000 6.207108 0.707107 +v -1.500000 6.055571 0.831469 +v -1.500000 5.882683 0.923879 +v -1.500000 5.695091 0.980784 +v -1.500000 5.500000 0.999999 +v -1.500000 5.304909 0.980784 +v -1.500000 5.117317 0.923879 +v -1.500000 4.944429 0.831469 +v -1.500000 4.792892 0.707106 +v -1.500000 4.668530 0.555569 +v -1.500000 4.576120 0.382682 +v -1.500000 4.519215 0.195089 +v -1.500000 4.500000 -0.000002 +v -1.500000 4.519215 -0.195092 +v -1.500000 4.576120 -0.382685 +v -1.500000 4.668531 -0.555572 +v -1.500000 4.792894 -0.707108 +v -1.500000 4.944431 -0.831470 +v -1.500000 5.117319 -0.923881 +v -1.500000 5.304911 -0.980786 +v 0.250000 5.500000 -4.499998 +v 0.250000 6.377907 -4.413532 +v 0.250000 7.222075 -4.157456 +v 0.250000 8.000065 -3.741611 +v 0.250000 8.681980 -3.181979 +v 0.250000 9.241613 -2.500065 +v 0.250000 9.657457 -1.722075 +v 0.250000 9.913532 -0.877905 +v 0.250000 10.000000 0.000001 +v 0.250000 9.913532 0.877907 +v 0.250000 9.657457 1.722075 +v 0.250000 9.241613 2.500067 +v 0.250000 8.681980 3.181981 +v 0.250000 8.000065 3.741614 +v 0.250000 7.222075 4.157459 +v 0.250000 6.377905 4.413535 +v 0.250000 5.499998 4.500000 +v 0.250000 4.622091 4.413535 +v 0.250000 3.777922 4.157458 +v 0.250000 2.999931 3.741612 +v 0.250000 2.318017 3.181979 +v 0.250000 1.758385 2.500064 +v 0.250000 1.342541 1.722074 +v 0.250000 1.086465 0.877904 +v 0.250000 1.000000 -0.000003 +v 0.250000 1.086467 -0.877910 +v 0.250000 1.342544 -1.722078 +v 0.250000 1.758389 -2.500070 +v 0.250000 2.318023 -3.181983 +v 0.250000 2.999939 -3.741615 +v 0.250000 3.777930 -4.157459 +v 0.250000 4.622100 -4.413533 +v -0.250000 5.500000 -4.499998 +v -0.250000 6.377907 -4.413532 +v -0.250000 7.222075 -4.157456 +v -0.250000 8.000065 -3.741611 +v -0.250000 8.681980 -3.181979 +v -0.250000 9.241613 -2.500065 +v -0.250000 9.657457 -1.722075 +v -0.250000 9.913532 -0.877905 +v -0.250000 10.000000 0.000001 +v -0.250000 9.913532 0.877907 +v -0.250000 9.657457 1.722075 +v -0.250000 9.241613 2.500067 +v -0.250000 8.681980 3.181981 +v -0.250000 8.000065 3.741614 +v -0.250000 7.222075 4.157459 +v -0.250000 6.377905 4.413535 +v -0.250000 5.499998 4.500000 +v -0.250000 4.622091 4.413535 +v -0.250000 3.777922 4.157458 +v -0.250000 2.999931 3.741612 +v -0.250000 2.318017 3.181979 +v -0.250000 1.758385 2.500064 +v -0.250000 1.342541 1.722074 +v -0.250000 1.086465 0.877904 +v -0.250000 1.000000 -0.000003 +v -0.250000 1.086467 -0.877910 +v -0.250000 1.342544 -1.722078 +v -0.250000 1.758389 -2.500070 +v -0.250000 2.318023 -3.181983 +v -0.250000 2.999939 -3.741615 +v -0.250000 3.777930 -4.157459 +v -0.250000 4.622100 -4.413533 +v 0.249999 5.500000 -3.999999 +v 0.249999 6.280361 -3.923140 +v 0.249999 7.030735 -3.695517 +v 0.249999 7.722279 -3.325878 +v 0.249999 8.328426 -2.828426 +v 0.249999 8.825878 -2.222281 +v 0.249999 9.195518 -1.530733 +v 0.249999 9.423141 -0.780361 +v 0.249999 9.500000 0.000000 +v 0.249999 9.423141 0.780361 +v 0.249999 9.195518 1.530734 +v 0.249999 8.825878 2.222281 +v 0.249999 8.328426 2.828427 +v 0.249999 7.722279 3.325879 +v 0.249999 7.030731 3.695519 +v 0.249999 6.280361 3.923141 +v 0.249999 5.500000 4.000000 +v 0.249999 4.719635 3.923141 +v 0.249999 3.969265 3.695518 +v 0.249999 3.277718 3.325878 +v 0.249999 2.671570 2.828426 +v 0.249999 2.174118 2.222279 +v 0.249999 1.804482 1.530731 +v 0.249999 1.576859 0.780358 +v 0.249999 1.500000 -0.000003 +v 0.249999 1.576859 -0.780365 +v 0.249999 1.804485 -1.530737 +v 0.249999 2.174122 -2.222284 +v 0.249999 2.671577 -2.828430 +v 0.249999 3.277721 -3.325880 +v 0.249999 3.969273 -3.695519 +v 0.249999 4.719643 -3.923141 +v -0.250001 5.500000 -3.999999 +v -0.250001 6.280361 -3.923140 +v -0.250001 7.030735 -3.695517 +v -0.250001 7.722279 -3.325878 +v -0.250001 8.328426 -2.828426 +v -0.250001 8.825878 -2.222281 +v -0.250001 9.195518 -1.530733 +v -0.250001 9.423141 -0.780361 +v -0.250001 9.500000 0.000000 +v -0.250001 9.423141 0.780361 +v -0.250001 9.195518 1.530734 +v -0.250001 8.825878 2.222281 +v -0.250001 8.328426 2.828427 +v -0.250001 7.722279 3.325879 +v -0.250001 7.030731 3.695519 +v -0.250001 6.280361 3.923141 +v -0.250001 5.500000 4.000000 +v -0.250001 4.719635 3.923141 +v -0.250001 3.969265 3.695518 +v -0.250001 3.277718 3.325878 +v -0.250001 2.671570 2.828426 +v -0.250001 2.174118 2.222279 +v -0.250001 1.804482 1.530731 +v -0.250001 1.576859 0.780358 +v -0.250001 1.500000 -0.000003 +v -0.250001 1.576859 -0.780365 +v -0.250001 1.804485 -1.530737 +v -0.250001 2.174122 -2.222284 +v -0.250001 2.671577 -2.828430 +v -0.250001 3.277721 -3.325880 +v -0.250001 3.969273 -3.695519 +v -0.250001 4.719643 -3.923141 +v -0.500000 5.750001 3.625001 +v -0.500000 5.250002 3.625001 +v -0.500000 5.750001 4.375002 +v -0.500000 5.250002 4.375002 +v -1.000000 5.750001 3.625001 +v -1.000000 5.250001 3.625001 +v -1.000000 5.750001 4.125002 +v -1.000000 5.250001 4.125002 +v -1.000000 5.750001 -4.125000 +v -1.000000 5.250001 -4.125000 +v -1.000000 5.750001 -3.624999 +v -1.000000 5.250001 -3.624999 +v -0.500000 5.750000 -4.375000 +v -0.500000 5.250001 -4.375000 +v -0.500000 5.750000 -3.624999 +v -0.500000 5.250001 -3.624999 +v -0.500000 1.875001 0.250001 +v -0.500000 1.875001 -0.249998 +v -0.500000 1.125000 0.250001 +v -0.500000 1.125000 -0.249998 +v -1.000000 1.875001 0.250001 +v -1.000000 1.875001 -0.249999 +v -1.000000 1.375000 0.250001 +v -1.000000 1.375000 -0.249999 +v -1.000000 9.625002 0.250001 +v -1.000000 9.625002 -0.249999 +v -1.000000 9.125001 0.250001 +v -1.000000 9.125001 -0.249999 +v -0.500000 9.875002 0.250000 +v -0.500000 9.875002 -0.249999 +v -0.500000 9.125001 0.250000 +v -0.500000 9.125001 -0.249999 +v -0.250000 9.937502 0.062502 +v -0.250000 9.937502 -0.062498 +v -0.250000 9.812502 0.062502 +v -0.250000 9.812502 -0.062498 +v 0.250000 9.937502 0.062502 +v 0.250000 9.937502 -0.062498 +v 0.250000 9.812502 0.062502 +v 0.250000 9.812502 -0.062498 +v -0.250000 1.062499 -0.062500 +v -0.250000 1.062499 0.062500 +v -0.250000 1.187499 -0.062500 +v -0.250000 1.187499 0.062500 +v 0.250000 1.062499 -0.062500 +v 0.250000 1.062499 0.062500 +v 0.250000 1.187499 -0.062500 +v 0.250000 1.187499 0.062500 +v -0.250000 5.437500 4.437502 +v -0.250000 5.562500 4.437502 +v -0.250000 5.437500 4.312502 +v -0.250000 5.562500 4.312502 +v 0.250000 5.437500 4.437502 +v 0.250000 5.562500 4.437502 +v 0.250000 5.437500 4.312502 +v 0.250000 5.562500 4.312502 +v -0.250000 5.562502 -4.437500 +v -0.250000 5.437502 -4.437500 +v -0.250000 5.562502 -4.312500 +v -0.250000 5.437502 -4.312500 +v 0.250000 5.562502 -4.437500 +v 0.250000 5.437502 -4.437500 +v 0.250000 5.562502 -4.312500 +v 0.250000 5.437502 -4.312500 +v -0.250000 8.593593 3.181983 +v -0.250000 8.681981 3.093595 +v -0.250000 8.505204 3.093595 +v -0.250000 8.593593 3.005206 +v 0.250000 8.593593 3.181983 +v 0.250000 8.681981 3.093595 +v 0.250000 8.505204 3.093595 +v 0.250000 8.593593 3.005206 +v -0.250000 2.406408 -3.181982 +v -0.250000 2.318020 -3.093593 +v -0.250000 2.494797 -3.093593 +v -0.250000 2.406408 -3.005205 +v 0.250000 2.406408 -3.181982 +v 0.250000 2.318020 -3.093593 +v 0.250000 2.494797 -3.093593 +v 0.250000 2.406408 -3.005205 +v -0.250000 2.318018 3.093593 +v -0.250000 2.406407 3.181982 +v -0.250000 2.406407 3.005205 +v -0.250000 2.494795 3.093593 +v 0.250000 2.318018 3.093593 +v 0.250000 2.406407 3.181982 +v 0.250000 2.406407 3.005205 +v 0.250000 2.494795 3.093593 +v -0.250000 8.681983 -3.093591 +v -0.250000 8.593595 -3.181980 +v -0.250000 8.593595 -3.005203 +v -0.250000 8.505206 -3.093591 +v 0.250000 8.681983 -3.093591 +v 0.250000 8.593595 -3.181980 +v 0.250000 8.593595 -3.005203 +v 0.250000 8.505206 -3.093591 +v -0.250000 7.140415 4.123636 +v -0.250000 7.255900 4.075800 +v -0.250000 7.092579 4.008151 +v -0.250000 7.208065 3.960315 +v 0.250000 7.140415 4.123636 +v 0.250000 7.255900 4.075800 +v 0.250000 7.092579 4.008151 +v 0.250000 7.208065 3.960315 +v -0.250000 3.859586 -4.123634 +v -0.250000 3.744101 -4.075799 +v -0.250000 3.907422 -4.008149 +v -0.250000 3.791937 -3.960313 +v 0.250000 3.859586 -4.123634 +v 0.250000 3.744101 -4.075799 +v 0.250000 3.907422 -4.008149 +v 0.250000 3.791937 -3.960313 +v -0.250000 1.376366 1.640416 +v -0.250000 1.424201 1.755901 +v -0.250000 1.491850 1.592580 +v -0.250000 1.539686 1.708065 +v 0.250000 1.376366 1.640416 +v 0.250000 1.424201 1.755901 +v 0.250000 1.491850 1.592580 +v 0.250000 1.539686 1.708065 +v -0.250000 9.623635 -1.640413 +v -0.250000 9.575800 -1.755898 +v -0.250000 9.508150 -1.592578 +v -0.250000 9.460315 -1.708063 +v 0.250000 9.623635 -1.640413 +v 0.250000 9.575800 -1.755898 +v 0.250000 9.508150 -1.592578 +v 0.250000 9.460315 -1.708063 +v -0.250000 3.744098 4.075799 +v -0.250000 3.859583 4.123635 +v -0.250000 3.791934 3.960314 +v -0.250000 3.907419 4.008150 +v 0.250000 3.744098 4.075799 +v 0.250000 3.859583 4.123635 +v 0.250000 3.791934 3.960314 +v 0.250000 3.907419 4.008150 +v -0.250000 7.255903 -4.075797 +v -0.250000 7.140418 -4.123633 +v -0.250000 7.208067 -3.960312 +v -0.250000 7.092582 -4.008147 +v 0.250000 7.255903 -4.075797 +v 0.250000 7.140418 -4.123633 +v 0.250000 7.208067 -3.960312 +v 0.250000 7.092582 -4.008147 +v -0.250000 1.424202 -1.755901 +v -0.250000 1.376367 -1.640416 +v -0.250000 1.539687 -1.708066 +v -0.250000 1.491852 -1.592580 +v 0.250000 1.424202 -1.755901 +v 0.250000 1.376367 -1.640416 +v 0.250000 1.539687 -1.708066 +v 0.250000 1.491852 -1.592580 +v -0.250000 9.575798 1.755903 +v -0.250000 9.623634 1.640418 +v -0.250000 9.460314 1.708067 +v -0.250000 9.508148 1.592582 +v 0.250000 9.575798 1.755903 +v 0.250000 9.623634 1.640418 +v 0.250000 9.460314 1.708067 +v 0.250000 9.508148 1.592582 +v -0.500000 3.113516 2.740040 +v -0.500000 2.759963 2.386487 +v -0.500000 2.583185 3.270370 +v -0.500000 2.229632 2.916818 +v -1.000000 3.113516 2.740040 +v -1.000000 2.759962 2.386486 +v -1.000000 2.759962 3.093594 +v -1.000000 2.406408 2.740040 +v -1.000000 8.593594 -2.740038 +v -1.000000 8.240041 -3.093591 +v -1.000000 8.240040 -2.386484 +v -1.000000 7.886487 -2.740037 +v -0.500000 8.770370 -2.916816 +v -0.500000 8.416818 -3.270368 +v -0.500000 8.240040 -2.386485 +v -0.500000 7.886487 -2.740037 +v -0.500000 2.759963 -2.386485 +v -0.500000 3.113515 -2.740037 +v -0.500000 2.229632 -2.916816 +v -0.500000 2.583184 -3.270368 +v -1.000000 2.759963 -2.386485 +v -1.000000 3.113516 -2.740038 +v -1.000000 2.406409 -2.740039 +v -1.000000 2.759962 -3.093592 +v -1.000000 8.240040 3.093594 +v -1.000000 8.593594 2.740040 +v -1.000000 7.886486 2.740040 +v -1.000000 8.240040 2.386486 +v -0.500000 8.416818 3.270370 +v -0.500000 8.770370 2.916817 +v -0.500000 7.886487 2.740039 +v -0.500000 8.240040 2.386486 +v 0.500000 5.750001 -3.625001 +v 0.500000 5.250002 -3.625001 +v 0.500000 5.750001 -4.375002 +v 0.500000 5.250002 -4.375002 +v 1.000000 5.750001 -3.625001 +v 1.000000 5.250001 -3.625001 +v 1.000000 5.750001 -4.125002 +v 1.000000 5.250001 -4.125002 +v 1.000000 5.750001 4.125000 +v 1.000000 5.250001 4.125000 +v 1.000000 5.750001 3.624999 +v 1.000000 5.250001 3.624999 +v 0.500000 5.750000 4.375000 +v 0.500000 5.250001 4.375000 +v 0.500000 5.750000 3.624999 +v 0.500000 5.250001 3.624999 +v 0.500000 1.875001 -0.250001 +v 0.500000 1.875001 0.249998 +v 0.500000 1.125000 -0.250001 +v 0.500000 1.125000 0.249998 +v 1.000000 1.875001 -0.250001 +v 1.000000 1.875001 0.249999 +v 1.000000 1.375000 -0.250001 +v 1.000000 1.375000 0.249999 +v 1.000000 9.625002 -0.250001 +v 1.000000 9.625002 0.249999 +v 1.000000 9.125001 -0.250001 +v 1.000000 9.125001 0.249999 +v 0.500000 9.875002 -0.250000 +v 0.500000 9.875002 0.249999 +v 0.500000 9.125001 -0.250000 +v 0.500000 9.125001 0.249999 +v 0.500000 3.113516 -2.740040 +v 0.500000 2.759963 -2.386487 +v 0.500000 2.583185 -3.270370 +v 0.500000 2.229632 -2.916818 +v 1.000000 3.113516 -2.740040 +v 1.000000 2.759962 -2.386486 +v 1.000000 2.759962 -3.093594 +v 1.000000 2.406408 -2.740040 +v 1.000000 8.593594 2.740038 +v 1.000000 8.240041 3.093591 +v 1.000000 8.240040 2.386484 +v 1.000000 7.886487 2.740037 +v 0.500000 8.770370 2.916816 +v 0.500000 8.416818 3.270368 +v 0.500000 8.240040 2.386485 +v 0.500000 7.886487 2.740037 +v 0.500000 2.759963 2.386485 +v 0.500000 3.113515 2.740037 +v 0.500000 2.229632 2.916816 +v 0.500000 2.583184 3.270368 +v 1.000000 2.759963 2.386485 +v 1.000000 3.113516 2.740038 +v 1.000000 2.406409 2.740039 +v 1.000000 2.759962 3.093592 +v 1.000000 8.240040 -3.093594 +v 1.000000 8.593594 -2.740040 +v 1.000000 7.886486 -2.740040 +v 1.000000 8.240040 -2.386486 +v 0.499999 8.416818 -3.270370 +v 0.500000 8.770370 -2.916817 +v 0.500000 7.886487 -2.740039 +v 0.500000 8.240040 -2.386486 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.410714 0.641791 +vt 0.428571 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.446429 0.611940 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.410714 0.641791 +vt 0.428571 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.446429 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.375000 0.582090 +vt 0.370536 0.611940 +vt 0.370536 0.582090 +vt 0.361607 0.611940 +vt 0.366071 0.582090 +vt 0.366071 0.611940 +vt 0.357143 0.582090 +vt 0.357143 0.611940 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.428571 0.641791 +vt 0.410714 0.611940 +vt 0.428571 0.611940 +vt 0.410714 0.671642 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.446429 0.611940 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.428571 0.641791 +vt 0.410714 0.611940 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.392857 0.611940 +vt 0.446429 0.611940 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.410714 0.641791 +vt 0.428571 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.446429 0.611940 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.410714 0.641791 +vt 0.428571 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.446429 0.611940 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.428571 0.641791 +vt 0.410714 0.611940 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.392857 0.611940 +vt 0.446429 0.611940 +vt 0.446429 0.611940 +vt 0.428571 0.641791 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.392857 0.611940 +vt 0.410714 0.611940 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.428571 0.641791 +vt 0.410714 0.611940 +vt 0.428571 0.611940 +vt 0.410714 0.641791 +vt 0.428571 0.671642 +vt 0.410714 0.671642 +vt 0.392857 0.611940 +vt 0.446429 0.611940 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.375000 0.611940 +vt 0.361607 0.582090 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.428571 0.671642 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.446429 0.656716 +vt 0.392857 0.656716 +vt 0.392857 0.656716 +vt 0.446429 0.656716 +vt 0.687500 0.238806 +vt 0.656250 0.253731 +vt 0.656250 0.238806 +vt 0.281250 0.238806 +vt 0.250000 0.253731 +vt 0.250000 0.238806 +vt 0.125000 0.238806 +vt 0.093750 0.253731 +vt 0.093750 0.238806 +vt 0.718750 0.238806 +vt 0.687500 0.253731 +vt 0.312500 0.238806 +vt 0.281250 0.253731 +vt 0.156250 0.238806 +vt 0.125000 0.253731 +vt 0.750000 0.253731 +vt 0.718750 0.253731 +vt 0.343750 0.253731 +vt 0.312500 0.253731 +vt 0.187500 0.253731 +vt 0.156250 0.253731 +vt 0.750000 0.238806 +vt 0.781250 0.253731 +vt 0.375000 0.238806 +vt 0.343750 0.238806 +vt 0.218750 0.238806 +vt 0.187500 0.238806 +vt 0.812500 0.238806 +vt 0.781250 0.238806 +vt 0.406250 0.238806 +vt 0.375000 0.253731 +vt 0.218750 0.253731 +vt 0.843750 0.238806 +vt 0.812500 0.253731 +vt 0.437500 0.238806 +vt 0.406250 0.253731 +vt 0.875000 0.238806 +vt 0.843750 0.253731 +vt 0.468750 0.238806 +vt 0.437500 0.253731 +vt 0.906250 0.238806 +vt 0.875000 0.253731 +vt 0.500000 0.238806 +vt 0.468750 0.253731 +vt 0.937500 0.238806 +vt 0.906250 0.253731 +vt 0.531250 0.238806 +vt 0.500000 0.253731 +vt 0.968750 0.238806 +vt 0.937500 0.253731 +vt 0.562500 0.238806 +vt 0.531250 0.253731 +vt 1.000000 0.238806 +vt 0.968750 0.253731 +vt 0.593750 0.238806 +vt 0.562500 0.253731 +vt 0.031250 0.238806 +vt 0.000000 0.253731 +vt 0.000000 0.238806 +vt 0.625000 0.238806 +vt 0.593750 0.253731 +vt 0.062500 0.238806 +vt 0.031250 0.253731 +vt 0.625000 0.253731 +vt 0.062500 0.253731 +vt 0.218750 0.194030 +vt 0.183036 0.194030 +vt 0.156250 0.194030 +vt 0.093750 0.194030 +vt 0.120536 0.194030 +vt 0.058036 0.194030 +vt 0.004464 0.194030 +vt 0.031250 0.194030 +vt 0.968750 0.194030 +vt 0.995536 0.194030 +vt 0.941964 0.194030 +vt 0.906250 0.194030 +vt 0.933036 0.194030 +vt 0.870536 0.194030 +vt 0.843750 0.194030 +vt 0.781250 0.194030 +vt 0.808036 0.194030 +vt 0.754464 0.194030 +vt 0.745536 0.194030 +vt 0.718750 0.194030 +vt 0.656250 0.194030 +vt 0.683036 0.194030 +vt 0.629464 0.194030 +vt 0.620536 0.194030 +vt 0.593750 0.194030 +vt 0.531250 0.194030 +vt 0.558036 0.194030 +vt 0.504464 0.194030 +vt 0.495536 0.194030 +vt 0.468750 0.194030 +vt 0.433036 0.194030 +vt 0.406250 0.194030 +vt 0.370536 0.194030 +vt 0.343750 0.194030 +vt 0.308036 0.194030 +vt 0.254464 0.194030 +vt 0.281250 0.194030 +vt 0.245536 0.194030 +vt 0.745536 0.164179 +vt 0.129464 0.194030 +vt 0.156250 0.164179 +vt 0.308036 0.164179 +vt 0.691964 0.194030 +vt 0.718750 0.164179 +vt 0.120536 0.164179 +vt 0.281250 0.164179 +vt 0.683036 0.164179 +vt 0.066964 0.194030 +vt 0.093750 0.164179 +vt 0.629464 0.164179 +vt 0.656250 0.164179 +vt 0.058036 0.164179 +vt 0.620536 0.164179 +vt 0.031250 0.164179 +vt 0.566964 0.194030 +vt 0.593750 0.164179 +vt 0.995536 0.164179 +vt 0.558036 0.164179 +vt 0.968750 0.164179 +vt 0.531250 0.164179 +vt 0.933036 0.164179 +vt 0.495536 0.164179 +vt 0.879464 0.194030 +vt 0.906250 0.164179 +vt 0.441964 0.194030 +vt 0.468750 0.164179 +vt 0.843750 0.164179 +vt 0.870536 0.164179 +vt 0.433036 0.164179 +vt 0.816964 0.194030 +vt 0.245536 0.164179 +vt 0.379464 0.194030 +vt 0.406250 0.164179 +vt 0.808036 0.164179 +vt 0.191964 0.194030 +vt 0.218750 0.164179 +vt 0.370536 0.164179 +vt 0.781250 0.164179 +vt 0.183036 0.164179 +vt 0.316964 0.194030 +vt 0.343750 0.164179 +vt 0.191964 0.164179 +vt 0.218750 0.000000 +vt 0.156250 0.000000 +vt 0.162946 -0.000000 +vt 0.129464 0.164179 +vt 0.100446 -0.000000 +vt 0.087054 -0.000000 +vt 0.093750 0.000000 +vt 0.031250 -0.000000 +vt 0.037946 -0.000000 +vt 0.004464 0.164179 +vt 0.968750 0.000000 +vt 0.975446 0.000000 +vt 0.941964 0.164179 +vt 0.906250 -0.000000 +vt 0.912946 -0.000000 +vt 0.899554 -0.000000 +vt 0.850446 0.000000 +vt 0.837054 0.000000 +vt 0.843750 0.000000 +vt 0.781250 0.000000 +vt 0.787946 -0.000000 +vt 0.774554 -0.000000 +vt 0.718750 0.000000 +vt 0.725446 -0.000000 +vt 0.691964 0.164179 +vt 0.656250 -0.000000 +vt 0.662946 -0.000000 +vt 0.649554 -0.000000 +vt 0.600446 0.000000 +vt 0.566964 0.164179 +vt 0.593750 -0.000000 +vt 0.531250 0.000000 +vt 0.537946 -0.000000 +vt 0.504464 0.164179 +vt 0.468750 0.000000 +vt 0.475446 -0.000000 +vt 0.462054 -0.000000 +vt 0.412946 0.000000 +vt 0.399554 -0.000000 +vt 0.406250 -0.000000 +vt 0.343750 0.000000 +vt 0.350446 -0.000000 +vt 0.316964 0.164179 +vt 0.281250 0.000000 +vt 0.287946 -0.000000 +vt 0.254464 0.164179 +vt 0.225446 -0.000000 +vt 0.062500 0.238806 +vt 0.093750 0.194030 +vt 0.093750 0.238806 +vt 0.031250 0.238806 +vt 0.058036 0.194030 +vt -0.000000 0.238806 +vt 0.031250 0.194030 +vt 0.968750 0.238806 +vt 0.995536 0.194030 +vt 1.000000 0.238806 +vt 0.941964 0.194030 +vt 0.937500 0.238806 +vt 0.906250 0.238806 +vt 0.933036 0.194030 +vt 0.875000 0.238806 +vt 0.906250 0.194030 +vt 0.843750 0.194030 +vt 0.843750 0.238806 +vt 0.816964 0.194030 +vt 0.812500 0.238806 +vt 0.781250 0.194030 +vt 0.781250 0.238806 +vt 0.754464 0.194030 +vt 0.750000 0.238806 +vt 0.718750 0.238806 +vt 0.745536 0.194030 +vt 0.691964 0.194030 +vt 0.687500 0.238806 +vt 0.656250 0.194030 +vt 0.656250 0.238806 +vt 0.629464 0.194030 +vt 0.625000 0.238806 +vt 0.593750 0.194030 +vt 0.593750 0.238806 +vt 0.566964 0.194030 +vt 0.562500 0.238806 +vt 0.531250 0.194030 +vt 0.531250 0.238806 +vt 0.504464 0.194030 +vt 0.500000 0.238806 +vt 0.468750 0.238806 +vt 0.495536 0.194030 +vt 0.441964 0.194030 +vt 0.437500 0.238806 +vt 0.406250 0.194030 +vt 0.406250 0.238806 +vt 0.379464 0.194030 +vt 0.375000 0.238806 +vt 0.343750 0.238806 +vt 0.370536 0.194030 +vt 0.312500 0.238806 +vt 0.343750 0.194030 +vt 0.281250 0.194030 +vt 0.281250 0.238806 +vt 0.250000 0.238806 +vt 0.218750 0.238806 +vt 0.245536 0.194030 +vt 0.187500 0.238806 +vt 0.218750 0.194030 +vt 0.156250 0.194030 +vt 0.156250 0.238806 +vt 0.131315 0.193995 +vt 0.125000 0.238806 +vt 0.066964 0.164179 +vt 0.066964 0.194030 +vt 0.093750 0.164179 +vt 0.120536 0.194030 +vt 0.129464 0.164179 +vt 0.156250 0.164179 +vt 0.183036 0.194030 +vt 0.191964 0.164179 +vt 0.191964 0.194030 +vt 0.218750 0.164179 +vt 0.254464 0.164179 +vt 0.254464 0.194030 +vt 0.281250 0.164179 +vt 0.308036 0.194030 +vt 0.316964 0.164179 +vt 0.316964 0.194030 +vt 0.343750 0.164179 +vt 0.379464 0.164179 +vt 0.406250 0.164179 +vt 0.433036 0.194030 +vt 0.441964 0.164179 +vt 0.468750 0.194030 +vt 0.468750 0.164179 +vt 0.504464 0.164179 +vt 0.531250 0.164179 +vt 0.558036 0.194030 +vt 0.566964 0.164179 +vt 0.593750 0.164179 +vt 0.620536 0.194030 +vt 0.656250 0.164179 +vt 0.683036 0.194030 +vt 0.691964 0.164179 +vt 0.718750 0.194030 +vt 0.718750 0.164179 +vt 0.754464 0.164179 +vt 0.781250 0.164179 +vt 0.808036 0.194030 +vt 0.816964 0.164179 +vt 0.870536 0.164179 +vt 0.870536 0.194030 +vt 0.879464 0.164179 +vt 0.879464 0.194030 +vt 0.906250 0.164179 +vt 0.941964 0.164179 +vt 0.968750 0.194030 +vt 0.968750 0.164179 +vt 0.004464 0.164179 +vt 0.004464 0.194030 +vt 0.031250 0.164179 +vt 0.462054 -0.000000 +vt 0.406250 0.000000 +vt 0.433036 0.164179 +vt 0.350446 -0.000000 +vt 0.370536 0.164179 +vt 0.337054 0.000000 +vt 0.281250 0.000000 +vt 0.308036 0.164179 +vt 0.274554 -0.000000 +vt 0.218750 -0.000000 +vt 0.245536 0.164179 +vt 0.162946 -0.000000 +vt 0.183036 0.164179 +vt 0.149554 0.000000 +vt 0.093750 0.000000 +vt 0.120536 0.164179 +vt 0.031250 -0.000000 +vt 0.058036 0.164179 +vt 0.968750 -0.000000 +vt 0.995536 0.164179 +vt 0.962054 -0.000000 +vt 0.912946 -0.000000 +vt 0.933036 0.164179 +vt 0.899554 -0.000000 +vt 0.843750 0.000000 +vt 0.843750 0.164179 +vt 0.781250 0.000000 +vt 0.808036 0.164179 +vt 0.774554 -0.000000 +vt 0.718750 0.000000 +vt 0.745536 0.164179 +vt 0.656250 0.000000 +vt 0.683036 0.164179 +vt 0.649554 -0.000000 +vt 0.629464 0.164179 +vt 0.593750 -0.000000 +vt 0.620536 0.164179 +vt 0.587054 -0.000000 +vt 0.537946 0.000000 +vt 0.558036 0.164179 +vt 0.531250 0.000000 +vt 0.468750 -0.000000 +vt 0.495536 0.164179 +vt 0.156250 0.253731 +vt 0.750000 0.253731 +vt 0.593750 0.253731 +vt 0.218750 0.253731 +vt 0.187500 0.253731 +vt 0.781250 0.253731 +vt 0.625000 0.253731 +vt 0.843750 0.253731 +vt 0.812500 0.253731 +vt 0.687500 0.253731 +vt 0.656250 0.253731 +vt 0.281250 0.253731 +vt 0.250000 0.253731 +vt 0.875000 0.253731 +vt 0.718750 0.253731 +vt 0.312500 0.253731 +vt 0.906250 0.253731 +vt 0.375000 0.253731 +vt 0.343750 0.253731 +vt 0.937500 0.253731 +vt 0.968750 0.253731 +vt 0.406250 0.253731 +vt -0.000000 0.253731 +vt 0.437500 0.253731 +vt 0.031250 0.253731 +vt 0.468750 0.253731 +vt 0.062500 0.253731 +vt 0.500000 0.253731 +vt 0.093750 0.253731 +vt 0.531250 0.253731 +vt 0.125000 0.253731 +vt 0.562500 0.253731 +vt 0.093750 0.283582 +vt 0.066964 0.283582 +vt 0.031250 0.283582 +vt 0.004464 0.283582 +vt 1.000000 0.253731 +vt 0.968750 0.283582 +vt 0.941964 0.283582 +vt 0.933036 0.283582 +vt 0.906250 0.283582 +vt 0.870536 0.283582 +vt 0.843750 0.283582 +vt 0.781250 0.283582 +vt 0.754464 0.283582 +vt 0.718750 0.283582 +vt 0.656250 0.283582 +vt 0.629464 0.283582 +vt 0.620536 0.283582 +vt 0.593750 0.283582 +vt 0.558036 0.283582 +vt 0.531250 0.283582 +vt 0.495536 0.283582 +vt 0.468750 0.283582 +vt 0.406250 0.283582 +vt 0.343750 0.283582 +vt 0.281250 0.283582 +vt 0.254464 0.283582 +vt 0.218750 0.283582 +vt 0.183036 0.283582 +vt 0.129464 0.283582 +vt 0.919643 0.373134 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 0.973214 0.373134 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.973214 0.343284 +vt 0.973214 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 0.919643 0.373134 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 0.919643 0.373134 +vt 0.973214 0.343284 +vt 0.973214 0.373134 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.973214 0.343284 +vt 0.973214 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 0.919643 0.373134 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 0.919643 0.373134 +vt 0.973214 0.343284 +vt 0.973214 0.373134 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 0.919643 0.373134 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.973214 0.373134 +vt 0.973214 0.343284 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 0.919643 0.373134 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.973214 0.343284 +vt 0.973214 0.373134 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 0.919643 0.373134 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.973214 0.343284 +vt 0.973214 0.373134 +vt 0.946429 0.343284 +vt 0.946429 0.373134 +vt 0.892857 0.373134 +vt 0.919643 0.343284 +vt 1.000000 0.343284 +vt 1.000000 0.373134 +vt 0.973214 0.343284 +vt 0.906250 0.283582 +vt 0.879464 0.283582 +vt 0.933036 0.283582 +vt 0.968750 0.283582 +vt 0.941964 0.283582 +vt 0.995536 0.283582 +vt 0.031250 0.283582 +vt 0.004464 0.283582 +vt 0.058036 0.283582 +vt 0.093750 0.283582 +vt 0.066964 0.283582 +vt 0.129464 0.283582 +vt 0.156250 0.283582 +vt 0.191964 0.283582 +vt 0.245536 0.283582 +vt 0.218750 0.283582 +vt 0.281250 0.283582 +vt 0.254464 0.283582 +vt 0.343750 0.283582 +vt 0.316964 0.283582 +vt 0.370536 0.283582 +vt 0.379464 0.283582 +vt 0.406250 0.283582 +vt 0.441964 0.283582 +vt 0.468750 0.283582 +vt 0.504464 0.283582 +vt 0.531250 0.283582 +vt 0.593750 0.283582 +vt 0.566964 0.283582 +vt 0.656250 0.283582 +vt 0.629464 0.283582 +vt 0.718750 0.283582 +vt 0.691964 0.283582 +vt 0.745536 0.283582 +vt 0.781250 0.283582 +vt 0.754464 0.283582 +vt 0.816964 0.283582 +vt 0.870536 0.283582 +vt 0.843750 0.283582 +vt 0.066964 0.164179 +vt 0.879464 0.164179 +vt 0.441964 0.164179 +vt 0.816964 0.164179 +vt 0.379464 0.164179 +vt 0.754464 0.164179 +vt 0.212054 0.000000 +vt 0.149554 -0.000000 +vt 0.024554 -0.000000 +vt 0.962054 -0.000000 +vt 0.712054 -0.000000 +vt 0.587054 -0.000000 +vt 0.524554 -0.000000 +vt 0.337054 -0.000000 +vt 0.274554 -0.000000 +vt 0.412946 -0.000000 +vt 0.399554 -0.000000 +vt 0.343750 0.000000 +vt 0.287946 -0.000000 +vt 0.225446 -0.000000 +vt 0.212054 0.000000 +vt 0.156250 0.000000 +vt 0.100446 0.000000 +vt 0.087054 -0.000000 +vt 0.037946 0.000000 +vt 0.024554 -0.000000 +vt 0.975446 -0.000000 +vt 0.906250 0.000000 +vt 0.850446 -0.000000 +vt 0.837054 -0.000000 +vt 0.787946 0.000000 +vt 0.725446 0.000000 +vt 0.712054 0.000000 +vt 0.662946 -0.000000 +vt 0.600446 0.000000 +vt 0.524554 0.000000 +vt 0.475446 -0.000000 +vt 1.000000 0.253731 +vt 0.120536 0.283582 +vt 0.058036 0.283582 +vt 0.995536 0.283582 +vt 0.879464 0.283582 +vt 0.816964 0.283582 +vt 0.808036 0.283582 +vt 0.745536 0.283582 +vt 0.691964 0.283582 +vt 0.683036 0.283582 +vt 0.566964 0.283582 +vt 0.504464 0.283582 +vt 0.441964 0.283582 +vt 0.433036 0.283582 +vt 0.379464 0.283582 +vt 0.370536 0.283582 +vt 0.316964 0.283582 +vt 0.308036 0.283582 +vt 0.245536 0.283582 +vt 0.191964 0.283582 +vt 0.156250 0.283582 +vt 0.892857 0.343284 +vt 0.892857 0.343284 +vt 0.892857 0.343284 +vt 0.892857 0.343284 +vt 0.892857 0.343284 +vt 0.892857 0.343284 +vt 0.892857 0.343284 +vt 0.892857 0.343284 +vt 0.120536 0.283582 +vt 0.183036 0.283582 +vt 0.308036 0.283582 +vt 0.433036 0.283582 +vt 0.495536 0.283582 +vt 0.558036 0.283582 +vt 0.620536 0.283582 +vt 0.683036 0.283582 +vt 0.808036 0.283582 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -0.4472 0.0000 0.8944 +vn -1.0000 0.0000 0.0000 +vn -0.4472 0.0000 -0.8944 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +vn -0.4472 -0.8944 0.0000 +vn -0.4472 0.8944 0.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 0.3827 0.9239 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 0.9239 0.3827 +vn -0.4472 -0.6325 0.6325 +vn -0.4472 0.6325 -0.6325 +vn -0.4472 -0.6325 -0.6325 +vn -0.4472 0.6325 0.6325 +vn 0.4472 0.0000 -0.8944 +vn 1.0000 0.0000 -0.0000 +vn 0.4472 0.0000 0.8944 +vn 0.4472 -0.8944 0.0000 +vn 0.4472 0.8944 0.0000 +vn 0.4472 -0.6325 -0.6325 +vn 0.4472 0.6325 0.6325 +vn 0.4472 -0.6325 0.6325 +vn 0.4472 0.6325 -0.6325 +vn 0.0000 -0.5556 0.8315 +vn 0.0000 -0.1951 -0.9808 +vn 0.0000 0.8315 -0.5556 +vn 0.0000 -0.1951 0.9808 +vn 0.0000 0.5556 -0.8315 +vn 0.0000 -0.5556 -0.8315 +vn 0.0000 0.1951 0.9808 +vn 0.0000 0.1951 -0.9808 +vn 0.0000 -0.8315 -0.5556 +vn 0.0000 0.5556 0.8315 +vn 0.0000 -0.9808 -0.1951 +vn 0.0000 0.8315 0.5556 +vn 0.0000 -0.9808 0.1951 +vn 0.0000 0.9808 0.1951 +vn 0.0000 -0.8315 0.5556 +vn 0.0000 0.9808 -0.1951 +vn 0.9487 0.1210 -0.2922 +vn 0.9487 0.0617 -0.3102 +vn 0.9487 0.1757 -0.2629 +vn 0.9487 0.2236 -0.2236 +vn 0.9487 0.2629 -0.1757 +vn 0.9487 0.2922 -0.1210 +vn 0.9487 0.3102 -0.0617 +vn 0.9487 0.3162 -0.0000 +vn 0.9487 0.3102 0.0617 +vn 0.9487 0.2922 0.1210 +vn 0.9487 0.2629 0.1757 +vn 0.9487 0.2236 0.2236 +vn 0.9487 0.1757 0.2629 +vn 0.9487 0.1210 0.2922 +vn 0.9487 0.0617 0.3102 +vn 0.9487 -0.0000 0.3162 +vn 0.9487 -0.0617 0.3102 +vn 0.9487 -0.1210 0.2922 +vn 0.9487 -0.1757 0.2629 +vn 0.9487 -0.2236 0.2236 +vn 0.9487 -0.2629 0.1757 +vn 0.9487 -0.2922 0.1210 +vn 0.9487 -0.3102 0.0617 +vn 0.9487 -0.3162 -0.0000 +vn 0.9487 -0.3102 -0.0617 +vn 0.9487 -0.2922 -0.1210 +vn 0.9487 -0.2629 -0.1757 +vn 0.9487 -0.2236 -0.2236 +vn 0.9487 -0.1757 -0.2629 +vn 0.9487 -0.1210 -0.2922 +vn 0.9487 -0.0617 -0.3102 +vn 0.9487 0.0000 -0.3162 +vn 0.9959 0.0346 -0.0836 +vn 0.9959 0.0177 -0.0888 +vn 0.9959 0.0503 -0.0753 +vn 0.9959 0.0640 -0.0640 +vn 0.9959 0.0753 -0.0503 +vn 0.9959 0.0836 -0.0346 +vn 0.9959 0.0888 -0.0177 +vn 0.9959 0.0905 0.0000 +vn 0.9959 0.0888 0.0177 +vn 0.9959 0.0836 0.0346 +vn 0.9959 0.0753 0.0503 +vn 0.9959 0.0640 0.0640 +vn 0.9959 0.0503 0.0753 +vn 0.9959 0.0346 0.0836 +vn 0.9959 0.0177 0.0888 +vn 0.9959 0.0000 0.0905 +vn 0.9959 -0.0177 0.0888 +vn 0.9959 -0.0346 0.0836 +vn 0.9959 -0.0503 0.0753 +vn 0.9959 -0.0640 0.0640 +vn 0.9959 -0.0753 0.0503 +vn 0.9959 -0.0836 0.0346 +vn 0.9959 -0.0888 0.0177 +vn 0.9959 -0.0905 0.0000 +vn 0.9959 -0.0888 -0.0177 +vn 0.9959 -0.0836 -0.0346 +vn 0.9959 -0.0753 -0.0503 +vn 0.9959 -0.0640 -0.0640 +vn 0.9959 -0.0503 -0.0753 +vn 0.9959 -0.0346 -0.0836 +vn 0.9959 -0.0177 -0.0888 +vn 0.9959 -0.0000 -0.0905 +vn -0.9487 0.2922 0.1210 +vn -0.9487 0.2629 0.1757 +vn -0.9487 0.3102 0.0617 +vn -0.9487 0.3162 -0.0000 +vn -0.9487 0.3102 -0.0617 +vn -0.9487 0.2922 -0.1210 +vn -0.9487 0.2629 -0.1757 +vn -0.9487 0.2236 -0.2236 +vn -0.9487 0.1757 -0.2629 +vn -0.9487 0.1210 -0.2922 +vn -0.9487 0.0617 -0.3102 +vn -0.9487 0.0000 -0.3162 +vn -0.9487 -0.0617 -0.3102 +vn -0.9487 -0.1210 -0.2922 +vn -0.9487 -0.1757 -0.2629 +vn -0.9487 -0.2236 -0.2236 +vn -0.9487 -0.2629 -0.1757 +vn -0.9487 -0.2922 -0.1210 +vn -0.9487 -0.3102 -0.0617 +vn -0.9487 -0.3162 -0.0000 +vn -0.9487 -0.3102 0.0617 +vn -0.9487 -0.2922 0.1210 +vn -0.9487 -0.2629 0.1757 +vn -0.9487 -0.2236 0.2236 +vn -0.9487 -0.1757 0.2629 +vn -0.9487 -0.1210 0.2922 +vn -0.9487 -0.0617 0.3102 +vn -0.9487 -0.0000 0.3162 +vn -0.9487 0.0617 0.3102 +vn -0.9487 0.1210 0.2922 +vn -0.9487 0.1757 0.2629 +vn -0.9487 0.2236 0.2236 +vn -0.9959 -0.0836 0.0346 +vn -0.9959 -0.0888 0.0177 +vn -0.9959 -0.0753 0.0503 +vn -0.9959 -0.0640 0.0640 +vn -0.9959 -0.0503 0.0753 +vn -0.9959 -0.0346 0.0836 +vn -0.9959 -0.0177 0.0888 +vn -0.9959 -0.0000 0.0905 +vn -0.9959 0.0177 0.0888 +vn -0.9959 0.0346 0.0836 +vn -0.9959 0.0503 0.0753 +vn -0.9959 0.0640 0.0640 +vn -0.9959 0.0753 0.0503 +vn -0.9959 0.0836 0.0346 +vn -0.9959 0.0888 0.0177 +vn -0.9959 0.0905 0.0000 +vn -0.9959 0.0888 -0.0177 +vn -0.9959 0.0836 -0.0346 +vn -0.9959 0.0753 -0.0503 +vn -0.9959 0.0640 -0.0640 +vn -0.9959 0.0503 -0.0753 +vn -0.9959 0.0346 -0.0836 +vn -0.9959 0.0177 -0.0888 +vn -0.9959 -0.0000 -0.0905 +vn -0.9959 -0.0177 -0.0888 +vn -0.9959 -0.0346 -0.0836 +vn -0.9959 -0.0503 -0.0753 +vn -0.9959 -0.0640 -0.0640 +vn -0.9959 -0.0753 -0.0503 +vn -0.9959 -0.0836 -0.0346 +vn -0.9959 -0.0888 -0.0177 +vn -0.9959 -0.0905 0.0000 +s off +f 386/1/1 392/2/1 390/3/1 +f 391/4/2 385/5/2 389/6/2 +f 391/4/3 388/7/3 387/8/3 +f 391/4/4 390/3/4 392/2/4 +f 394/9/4 395/10/4 393/11/4 +f 394/9/5 397/12/5 398/13/5 +f 394/9/1 400/14/1 396/15/1 +f 399/16/2 393/11/2 395/10/2 +f 402/17/6 408/18/6 406/19/6 +f 407/20/7 401/21/7 405/22/7 +f 407/20/8 404/23/8 403/24/8 +f 407/20/4 406/19/4 408/18/4 +f 410/25/4 411/26/4 409/27/4 +f 410/25/9 413/28/9 414/29/9 +f 410/25/6 416/30/6 412/31/6 +f 415/32/7 409/27/7 411/26/7 +f 420/33/1 423/34/1 419/35/1 +f 422/36/2 417/37/2 421/38/2 +f 423/34/7 417/37/7 419/35/7 +f 420/39/6 422/36/6 424/40/6 +f 428/41/2 431/42/2 427/43/2 +f 430/44/1 425/45/1 429/46/1 +f 431/42/6 425/45/6 427/43/6 +f 428/47/7 430/44/7 432/48/7 +f 436/49/6 439/50/6 435/51/6 +f 438/52/7 433/53/7 437/54/7 +f 439/50/1 433/53/1 435/51/1 +f 436/55/2 438/52/2 440/56/2 +f 444/57/7 447/58/7 443/59/7 +f 446/60/6 441/61/6 445/62/6 +f 447/58/2 441/61/2 443/59/2 +f 444/63/1 446/60/1 448/64/1 +f 452/65/10 455/66/10 451/67/10 +f 454/68/11 449/69/11 453/70/11 +f 455/66/12 449/69/12 451/67/12 +f 452/71/13 454/68/13 456/72/13 +f 460/73/11 463/74/11 459/75/11 +f 462/76/10 457/77/10 461/78/10 +f 463/74/13 457/77/13 459/75/13 +f 460/79/12 462/76/12 464/80/12 +f 468/81/13 471/82/13 467/83/13 +f 470/84/12 465/85/12 469/86/12 +f 471/82/10 465/85/10 467/83/10 +f 468/87/11 470/84/11 472/88/11 +f 476/89/12 479/90/12 475/91/12 +f 478/92/13 473/93/13 477/94/13 +f 479/90/11 473/93/11 475/91/11 +f 476/95/10 478/92/10 480/96/10 +f 484/97/14 487/98/14 483/99/14 +f 486/100/15 481/101/15 485/102/15 +f 487/98/16 481/101/16 483/99/16 +f 484/103/17 486/100/17 488/104/17 +f 492/105/15 495/106/15 491/107/15 +f 494/108/14 489/109/14 493/110/14 +f 495/106/17 489/109/17 491/107/17 +f 492/111/16 494/108/16 496/112/16 +f 500/113/17 503/114/17 499/115/17 +f 502/116/16 497/117/16 501/118/16 +f 503/114/14 497/117/14 499/115/14 +f 500/119/15 502/116/15 504/120/15 +f 508/121/16 511/122/16 507/123/16 +f 510/124/17 505/125/17 509/126/17 +f 511/122/15 505/125/15 507/123/15 +f 508/127/14 510/124/14 512/128/14 +f 516/129/18 519/130/18 515/131/18 +f 518/132/19 513/133/19 517/134/19 +f 519/130/20 513/133/20 515/131/20 +f 516/135/21 518/132/21 520/136/21 +f 524/137/19 527/138/19 523/139/19 +f 526/140/18 521/141/18 525/142/18 +f 527/138/21 521/141/21 523/139/21 +f 524/143/20 526/140/20 528/144/20 +f 532/145/21 535/146/21 531/147/21 +f 534/148/20 529/149/20 533/150/20 +f 535/146/18 529/149/18 531/147/18 +f 532/151/19 534/148/19 536/152/19 +f 540/153/20 543/154/20 539/155/20 +f 542/156/21 537/157/21 541/158/21 +f 543/154/19 537/157/19 539/155/19 +f 540/159/18 542/156/18 544/160/18 +f 546/161/10 552/162/10 550/163/10 +f 551/164/11 545/165/11 549/166/11 +f 551/164/22 548/167/22 547/168/22 +f 551/164/4 550/163/4 552/162/4 +f 553/169/4 556/170/4 555/171/4 +f 553/169/23 558/172/23 554/173/23 +f 554/173/10 560/174/10 556/170/10 +f 559/175/11 553/169/11 555/171/11 +f 562/176/13 568/177/13 566/178/13 +f 567/179/12 561/180/12 565/181/12 +f 567/179/24 564/182/24 563/183/24 +f 567/179/4 566/178/4 568/177/4 +f 569/184/4 572/185/4 571/186/4 +f 570/187/25 573/188/25 574/189/25 +f 570/187/13 576/190/13 572/185/13 +f 575/191/12 569/184/12 571/186/12 +f 578/192/1 584/193/1 582/194/1 +f 583/195/2 577/196/2 581/197/2 +f 583/195/26 580/198/26 579/199/26 +f 583/195/27 582/194/27 584/193/27 +f 586/200/27 587/201/27 585/202/27 +f 586/200/28 589/203/28 590/204/28 +f 586/200/1 592/205/1 588/206/1 +f 591/207/2 585/202/2 587/201/2 +f 594/208/7 600/209/7 598/210/7 +f 599/211/6 593/212/6 597/213/6 +f 599/211/29 596/214/29 595/215/29 +f 599/211/27 598/210/27 600/209/27 +f 602/216/27 603/217/27 601/218/27 +f 602/216/30 605/219/30 606/220/30 +f 602/216/7 608/221/7 604/222/7 +f 607/223/6 601/218/6 603/217/6 +f 610/224/12 616/225/12 614/226/12 +f 615/227/13 609/228/13 613/229/13 +f 615/227/31 612/230/31 611/231/31 +f 615/227/27 614/226/27 616/225/27 +f 617/232/27 620/233/27 619/234/27 +f 618/235/32 621/236/32 622/237/32 +f 618/235/12 624/238/12 620/233/12 +f 623/239/13 617/232/13 619/234/13 +f 626/240/11 632/241/11 630/242/11 +f 631/243/10 625/244/10 629/245/10 +f 631/243/33 628/246/33 627/247/33 +f 631/243/27 630/242/27 632/241/27 +f 633/248/27 636/249/27 635/250/27 +f 634/251/34 637/252/34 638/253/34 +f 634/251/11 640/254/11 636/249/11 +f 639/255/10 633/248/10 635/250/10 +f 386/1/1 388/256/1 392/2/1 +f 391/4/2 387/257/2 385/5/2 +f 391/4/3 392/2/3 388/7/3 +f 391/4/4 389/6/4 390/3/4 +f 394/9/4 396/15/4 395/10/4 +f 394/9/5 393/11/5 397/12/5 +f 394/9/1 398/258/1 400/14/1 +f 399/16/2 397/259/2 393/11/2 +f 402/17/6 404/260/6 408/18/6 +f 407/20/7 403/261/7 401/21/7 +f 407/20/8 408/18/8 404/23/8 +f 407/20/4 405/22/4 406/19/4 +f 410/25/4 412/31/4 411/26/4 +f 410/25/9 409/27/9 413/28/9 +f 410/25/6 414/262/6 416/30/6 +f 415/32/7 413/263/7 409/27/7 +f 420/33/1 424/264/1 423/34/1 +f 422/36/2 418/265/2 417/37/2 +f 423/34/7 421/38/7 417/37/7 +f 420/39/6 418/265/6 422/36/6 +f 428/41/2 432/266/2 431/42/2 +f 430/44/1 426/267/1 425/45/1 +f 431/42/6 429/46/6 425/45/6 +f 428/47/7 426/267/7 430/44/7 +f 436/49/6 440/268/6 439/50/6 +f 438/52/7 434/269/7 433/53/7 +f 439/50/1 437/54/1 433/53/1 +f 436/55/2 434/269/2 438/52/2 +f 444/57/7 448/270/7 447/58/7 +f 446/60/6 442/271/6 441/61/6 +f 447/58/2 445/62/2 441/61/2 +f 444/63/1 442/271/1 446/60/1 +f 452/65/10 456/272/10 455/66/10 +f 454/68/11 450/273/11 449/69/11 +f 455/66/12 453/70/12 449/69/12 +f 452/71/13 450/273/13 454/68/13 +f 460/73/11 464/274/11 463/74/11 +f 462/76/10 458/275/10 457/77/10 +f 463/74/13 461/78/13 457/77/13 +f 460/79/12 458/275/12 462/76/12 +f 468/81/13 472/276/13 471/82/13 +f 470/84/12 466/277/12 465/85/12 +f 471/82/10 469/86/10 465/85/10 +f 468/87/11 466/277/11 470/84/11 +f 476/89/12 480/278/12 479/90/12 +f 478/92/13 474/279/13 473/93/13 +f 479/90/11 477/94/11 473/93/11 +f 476/95/10 474/279/10 478/92/10 +f 484/97/14 488/280/14 487/98/14 +f 486/100/15 482/281/15 481/101/15 +f 487/98/16 485/102/16 481/101/16 +f 484/103/17 482/281/17 486/100/17 +f 492/105/15 496/282/15 495/106/15 +f 494/108/14 490/283/14 489/109/14 +f 495/106/17 493/110/17 489/109/17 +f 492/111/16 490/283/16 494/108/16 +f 500/113/17 504/284/17 503/114/17 +f 502/116/16 498/285/16 497/117/16 +f 503/114/14 501/118/14 497/117/14 +f 500/119/15 498/285/15 502/116/15 +f 508/121/16 512/286/16 511/122/16 +f 510/124/17 506/287/17 505/125/17 +f 511/122/15 509/126/15 505/125/15 +f 508/127/14 506/287/14 510/124/14 +f 516/129/18 520/288/18 519/130/18 +f 518/132/19 514/289/19 513/133/19 +f 519/130/20 517/134/20 513/133/20 +f 516/135/21 514/289/21 518/132/21 +f 524/137/19 528/290/19 527/138/19 +f 526/140/18 522/291/18 521/141/18 +f 527/138/21 525/142/21 521/141/21 +f 524/143/20 522/291/20 526/140/20 +f 532/145/21 536/292/21 535/146/21 +f 534/148/20 530/293/20 529/149/20 +f 535/146/18 533/150/18 529/149/18 +f 532/151/19 530/293/19 534/148/19 +f 540/153/20 544/294/20 543/154/20 +f 542/156/21 538/295/21 537/157/21 +f 543/154/19 541/158/19 537/157/19 +f 540/159/18 538/295/18 542/156/18 +f 546/161/10 548/296/10 552/162/10 +f 551/164/11 547/297/11 545/165/11 +f 551/164/22 552/162/22 548/167/22 +f 551/164/4 549/166/4 550/163/4 +f 553/169/4 554/173/4 556/170/4 +f 553/169/23 557/298/23 558/172/23 +f 554/173/10 558/299/10 560/174/10 +f 559/175/11 557/300/11 553/169/11 +f 562/176/13 564/301/13 568/177/13 +f 567/179/12 563/302/12 561/180/12 +f 567/179/24 568/177/24 564/182/24 +f 567/179/4 565/181/4 566/178/4 +f 569/184/4 570/187/4 572/185/4 +f 570/187/25 569/184/25 573/188/25 +f 570/187/13 574/303/13 576/190/13 +f 575/191/12 573/304/12 569/184/12 +f 578/192/1 580/305/1 584/193/1 +f 583/195/2 579/306/2 577/196/2 +f 583/195/26 584/193/26 580/198/26 +f 583/195/27 581/197/27 582/194/27 +f 586/200/27 588/206/27 587/201/27 +f 586/200/28 585/202/28 589/203/28 +f 586/200/1 590/307/1 592/205/1 +f 591/207/2 589/308/2 585/202/2 +f 594/208/7 596/309/7 600/209/7 +f 599/211/6 595/310/6 593/212/6 +f 599/211/29 600/209/29 596/214/29 +f 599/211/27 597/213/27 598/210/27 +f 602/216/27 604/222/27 603/217/27 +f 602/216/30 601/218/30 605/219/30 +f 602/216/7 606/311/7 608/221/7 +f 607/223/6 605/312/6 601/218/6 +f 610/224/12 612/313/12 616/225/12 +f 615/227/13 611/314/13 609/228/13 +f 615/227/31 616/225/31 612/230/31 +f 615/227/27 613/229/27 614/226/27 +f 617/232/27 618/235/27 620/233/27 +f 618/235/32 617/232/32 621/236/32 +f 618/235/12 622/315/12 624/238/12 +f 623/239/13 621/316/13 617/232/13 +f 626/240/11 628/317/11 632/241/11 +f 631/243/10 627/318/10 625/244/10 +f 631/243/33 632/241/33 628/246/33 +f 631/243/27 629/245/27 630/242/27 +f 633/248/27 634/251/27 636/249/27 +f 634/251/34 633/248/34 637/252/34 +f 634/251/11 638/319/11 640/254/11 +f 639/255/10 637/320/10 633/248/10 +s 1 +f 19/321/19 276/322/35 20/323/35 +f 32/324/36 257/325/6 1/326/6 +f 5/327/13 262/328/37 6/329/37 +f 18/330/38 275/331/19 19/321/19 +f 31/332/14 288/333/36 32/324/36 +f 4/334/39 261/335/13 5/327/13 +f 18/330/38 273/336/7 274/337/38 +f 31/332/14 286/338/40 287/339/14 +f 4/334/39 259/340/18 260/341/39 +f 17/342/7 272/343/41 273/336/7 +f 29/344/10 286/338/40 30/345/40 +f 2/346/42 259/340/18 3/347/18 +f 15/348/15 272/343/41 16/349/41 +f 28/350/43 285/351/10 29/344/10 +f 2/346/42 257/325/6 258/352/42 +f 14/353/44 271/354/15 15/348/15 +f 27/355/20 284/356/43 28/350/43 +f 13/357/11 270/358/44 14/353/44 +f 26/359/45 283/360/20 27/355/20 +f 12/361/46 269/362/11 13/357/11 +f 25/363/1 282/364/45 26/359/45 +f 11/365/21 268/366/46 12/361/46 +f 24/367/47 281/368/1 25/363/1 +f 10/369/48 267/370/21 11/365/21 +f 23/371/16 280/372/47 24/367/47 +f 9/373/2 266/374/48 10/369/48 +f 22/375/49 279/376/16 23/371/16 +f 8/377/50 265/378/2 9/379/2 +f 21/380/12 278/381/49 22/375/49 +f 7/382/17 264/383/50 8/377/50 +f 21/380/12 276/322/35 277/384/12 +f 6/329/37 263/385/17 7/382/17 +f 3/347/51 66/386/52 2/346/52 +f 4/334/53 67/387/51 3/347/51 +f 5/327/54 68/388/53 4/334/53 +f 5/327/54 70/389/55 69/390/54 +f 7/382/56 70/389/55 6/329/55 +f 8/377/57 71/391/56 7/382/56 +f 8/377/57 73/392/58 72/393/57 +f 9/373/58 74/394/59 73/395/58 +f 10/369/59 75/396/60 74/394/59 +f 11/365/60 76/397/61 75/398/60 +f 13/357/62 76/397/61 12/361/61 +f 14/353/63 77/399/62 13/357/62 +f 15/348/64 78/400/63 14/353/63 +f 15/348/64 80/401/65 79/402/64 +f 16/349/65 81/403/66 80/401/65 +f 18/330/67 81/404/66 17/342/66 +f 19/321/68 82/405/67 18/330/67 +f 19/321/68 84/406/69 83/407/68 +f 20/323/69 85/408/70 84/406/69 +f 22/375/71 85/409/70 21/380/70 +f 23/371/72 86/410/71 22/375/71 +f 23/371/72 88/411/73 87/412/72 +f 24/367/73 89/413/74 88/411/73 +f 26/359/75 89/414/74 25/363/74 +f 27/355/76 90/415/75 26/359/75 +f 28/350/77 91/416/76 27/355/76 +f 29/344/78 92/417/77 28/350/77 +f 30/345/79 93/418/78 29/344/78 +f 31/332/80 94/419/79 30/345/79 +f 32/324/81 95/420/80 31/332/80 +f 32/324/81 65/421/82 96/422/81 +f 2/346/52 65/423/82 1/326/82 +f 82/405/38 113/424/7 81/404/7 +f 69/425/13 100/426/39 68/388/39 +f 96/422/36 127/427/14 95/420/14 +f 83/428/19 114/429/38 82/405/38 +f 70/389/37 101/430/13 69/390/13 +f 65/421/6 128/431/36 96/422/36 +f 84/406/35 115/432/19 83/407/19 +f 71/433/17 102/434/37 70/389/37 +f 84/406/35 117/435/12 116/436/35 +f 72/393/50 103/437/17 71/391/17 +f 86/410/49 117/438/12 85/409/12 +f 73/392/2 104/439/50 72/393/50 +f 87/440/16 118/441/49 86/410/49 +f 74/394/48 105/442/2 73/395/2 +f 88/411/47 119/443/16 87/412/16 +f 75/396/21 106/444/48 74/394/48 +f 89/413/1 120/445/47 88/411/47 +f 76/397/46 107/446/21 75/398/21 +f 90/415/45 121/447/1 89/414/1 +f 77/448/11 108/449/46 76/397/46 +f 91/450/20 122/451/45 90/415/45 +f 77/399/11 110/452/44 109/453/11 +f 92/417/43 123/454/20 91/416/20 +f 79/455/15 110/452/44 78/400/44 +f 66/386/42 97/456/6 65/423/6 +f 93/457/10 124/458/43 92/417/43 +f 80/401/41 111/459/15 79/402/15 +f 67/460/18 98/461/42 66/386/42 +f 94/419/40 125/462/10 93/418/10 +f 81/403/7 112/463/41 80/401/41 +f 68/388/39 99/464/18 67/387/18 +f 95/465/14 126/466/40 94/419/40 +f 99/467/83 130/468/84 98/461/84 +f 99/464/83 132/469/85 131/470/83 +f 101/471/86 132/469/85 100/426/85 +f 102/434/87 133/472/86 101/430/86 +f 102/434/87 135/473/88 134/474/87 +f 103/437/88 136/475/89 135/476/88 +f 105/477/90 136/475/89 104/439/89 +f 105/442/90 138/478/91 137/479/90 +f 107/480/92 138/478/91 106/444/91 +f 107/446/92 140/481/93 139/482/92 +f 108/449/93 141/483/94 140/481/93 +f 110/452/95 141/484/94 109/453/94 +f 110/452/95 143/485/96 142/486/95 +f 111/459/96 144/487/97 143/488/96 +f 112/463/97 145/489/98 144/487/97 +f 113/424/98 146/490/99 145/491/98 +f 115/492/100 146/490/99 114/429/99 +f 115/432/100 148/493/101 147/494/100 +f 116/436/101 149/495/102 148/493/101 +f 118/441/103 149/496/102 117/438/102 +f 119/497/104 150/498/103 118/441/103 +f 119/443/104 152/499/105 151/500/104 +f 121/501/106 152/499/105 120/445/105 +f 121/447/106 154/502/107 153/503/106 +f 122/451/107 155/504/108 154/502/107 +f 124/458/109 155/505/108 123/454/108 +f 124/458/109 157/506/110 156/507/109 +f 125/462/110 158/508/111 157/509/110 +f 127/510/112 158/508/111 126/466/111 +f 127/427/112 160/511/113 159/512/112 +f 97/513/114 160/511/113 128/431/113 +f 97/456/114 130/468/84 129/514/114 +f 43/515/115 172/516/116 44/517/116 +f 42/518/117 171/519/115 43/515/115 +f 41/520/118 170/521/117 42/518/117 +f 40/522/119 169/523/118 41/524/118 +f 167/525/120 40/522/119 39/526/120 +f 38/527/121 167/528/120 39/526/120 +f 37/529/122 166/530/121 38/527/121 +f 164/531/123 37/529/122 36/532/123 +f 163/533/124 36/532/123 35/534/124 +f 162/535/125 35/534/124 34/536/125 +f 161/537/126 34/536/125 33/538/126 +f 64/539/127 161/540/126 33/538/126 +f 191/541/128 64/539/127 63/542/128 +f 190/543/129 63/542/128 62/544/129 +f 189/545/130 62/544/129 61/546/130 +f 188/547/131 61/546/130 60/548/131 +f 187/549/132 60/548/131 59/550/132 +f 186/551/133 59/550/132 58/552/133 +f 185/553/134 58/552/133 57/554/134 +f 56/555/135 185/556/134 57/554/134 +f 183/557/136 56/555/135 55/558/136 +f 182/559/137 55/558/136 54/560/137 +f 181/561/138 54/560/137 53/562/138 +f 52/563/139 181/564/138 53/562/138 +f 51/565/140 180/566/139 52/563/139 +f 178/567/141 51/565/140 50/568/141 +f 49/569/142 178/567/141 50/568/141 +f 48/570/143 177/571/142 49/569/142 +f 47/572/144 176/573/143 48/570/143 +f 174/574/145 47/572/144 46/575/145 +f 173/576/146 46/575/145 45/577/146 +f 172/516/116 45/577/146 44/517/116 +f 203/578/21 172/516/46 171/579/21 +f 204/580/46 173/581/11 172/516/46 +f 205/582/11 174/574/44 173/576/11 +f 206/583/44 175/584/15 174/574/44 +f 207/585/15 176/573/41 175/586/15 +f 208/587/41 177/571/7 176/573/41 +f 209/588/7 178/567/38 177/589/7 +f 210/590/38 179/591/19 178/567/38 +f 211/592/19 180/566/35 179/593/19 +f 212/594/35 181/564/12 180/566/35 +f 213/595/12 182/559/49 181/561/12 +f 214/596/49 183/597/16 182/559/49 +f 215/598/16 184/599/47 183/557/16 +f 216/600/47 185/556/1 184/599/47 +f 217/601/1 186/551/45 185/553/1 +f 218/602/45 187/603/20 186/551/45 +f 219/604/20 188/547/43 187/549/20 +f 220/605/43 189/606/10 188/547/43 +f 189/545/10 222/607/40 190/543/40 +f 222/607/40 191/608/14 190/543/40 +f 223/609/14 192/610/36 191/541/14 +f 224/611/36 161/540/6 192/610/36 +f 193/612/6 162/535/42 161/537/6 +f 194/613/42 163/614/18 162/535/42 +f 195/615/18 164/531/39 163/533/18 +f 164/531/39 197/616/13 165/617/13 +f 197/618/13 166/530/37 165/619/13 +f 198/620/37 167/528/17 166/530/37 +f 199/621/17 168/622/50 167/525/17 +f 200/623/50 169/523/2 168/622/50 +f 201/624/2 170/521/48 169/625/2 +f 202/626/48 171/519/21 170/521/48 +f 247/627/147 216/600/148 215/598/147 +f 246/628/149 215/629/147 214/596/149 +f 213/595/150 246/628/149 214/596/149 +f 212/594/151 245/630/150 213/631/150 +f 243/632/152 212/594/151 211/592/152 +f 242/633/153 211/634/152 210/590/153 +f 241/635/154 210/590/153 209/588/154 +f 240/636/155 209/637/154 208/587/155 +f 207/585/156 240/636/155 208/587/155 +f 206/583/157 239/638/156 207/639/156 +f 237/640/158 206/583/157 205/582/158 +f 236/641/159 205/642/158 204/580/159 +f 203/578/160 236/641/159 204/580/159 +f 234/643/161 203/644/160 202/626/161 +f 201/624/162 234/643/161 202/626/161 +f 232/645/163 201/646/162 200/623/163 +f 231/647/164 200/623/163 199/621/164 +f 198/620/165 231/648/164 199/649/164 +f 229/650/166 198/620/165 197/618/166 +f 228/651/167 197/616/166 196/652/167 +f 195/615/168 228/651/167 196/652/167 +f 226/653/169 195/654/168 194/613/169 +f 225/655/170 194/613/169 193/612/170 +f 256/656/171 193/657/170 224/611/171 +f 223/609/172 256/656/171 224/611/171 +f 254/658/173 223/659/172 222/607/173 +f 253/660/174 222/607/173 221/661/174 +f 252/662/175 221/663/174 220/605/175 +f 251/664/176 220/605/175 219/604/176 +f 218/602/177 251/665/176 219/666/176 +f 217/601/178 250/667/177 218/602/177 +f 248/668/148 217/669/178 216/600/148 +f 47/572/15 302/670/44 46/575/44 +f 34/536/42 289/671/6 33/538/6 +f 61/546/10 316/672/43 60/548/43 +f 47/572/15 304/673/41 303/674/15 +f 35/534/18 290/675/42 34/536/42 +f 62/544/40 317/676/10 61/546/10 +f 49/569/7 304/673/41 48/570/41 +f 35/534/18 292/677/39 291/678/18 +f 62/544/40 319/679/14 318/680/40 +f 49/569/7 306/681/38 305/682/7 +f 37/529/13 292/677/39 36/532/39 +f 64/539/36 319/679/14 63/542/14 +f 51/565/19 306/681/38 50/568/38 +f 38/527/37 293/683/13 37/529/13 +f 33/538/6 320/684/36 64/539/36 +f 52/563/35 307/685/19 51/565/19 +f 39/526/17 294/686/37 38/527/37 +f 52/563/35 309/687/12 308/688/35 +f 40/522/50 295/689/17 39/526/17 +f 54/560/49 309/687/12 53/562/12 +f 41/524/2 296/690/50 40/522/50 +f 55/558/16 310/691/49 54/560/49 +f 42/518/48 297/692/2 41/520/2 +f 56/555/47 311/693/16 55/558/16 +f 43/515/21 298/694/48 42/518/48 +f 57/554/1 312/695/47 56/555/47 +f 44/517/46 299/696/21 43/515/21 +f 58/552/45 313/697/1 57/554/1 +f 45/577/11 300/698/46 44/517/46 +f 59/550/20 314/699/45 58/552/45 +f 46/575/44 301/700/11 45/577/11 +f 60/548/43 315/701/20 59/550/20 +f 261/335/4 326/702/4 262/328/4 +f 262/328/4 327/703/4 263/385/4 +f 263/385/4 328/704/4 264/383/4 +f 264/383/4 329/705/4 265/378/4 +f 265/706/4 330/707/4 266/374/4 +f 266/374/4 331/708/4 267/370/4 +f 331/709/4 268/366/4 267/370/4 +f 332/710/4 269/362/4 268/366/4 +f 333/711/4 270/358/4 269/362/4 +f 334/712/4 271/354/4 270/358/4 +f 271/354/4 336/713/4 272/343/4 +f 272/343/4 337/714/4 273/336/4 +f 273/336/4 338/715/4 274/337/4 +f 338/715/4 275/331/4 274/337/4 +f 275/331/4 340/716/4 276/322/4 +f 276/322/4 341/717/4 277/384/4 +f 341/718/4 278/381/4 277/384/4 +f 342/719/4 279/376/4 278/381/4 +f 343/720/4 280/372/4 279/376/4 +f 344/721/4 281/368/4 280/372/4 +f 345/722/4 282/364/4 281/368/4 +f 346/723/4 283/360/4 282/364/4 +f 283/360/4 348/724/4 284/356/4 +f 348/724/4 285/351/4 284/356/4 +f 285/351/4 350/725/4 286/338/4 +f 350/725/4 287/339/4 286/338/4 +f 287/339/4 352/726/4 288/333/4 +f 288/333/4 321/727/4 257/325/4 +f 257/325/4 322/728/4 258/352/4 +f 322/728/4 259/340/4 258/352/4 +f 323/729/4 260/341/4 259/340/4 +f 260/341/4 325/730/4 261/335/4 +f 326/731/37 359/732/17 327/733/17 +f 340/734/35 373/735/12 341/736/12 +f 327/733/17 360/737/50 328/738/50 +f 341/739/12 374/740/49 342/741/49 +f 328/738/50 361/742/2 329/743/2 +f 342/741/49 375/744/16 343/745/16 +f 329/746/2 362/747/48 330/748/48 +f 343/745/16 376/749/47 344/750/47 +f 330/748/48 363/751/21 331/752/21 +f 344/750/47 377/753/1 345/754/1 +f 331/752/21 364/755/46 332/756/46 +f 345/757/1 378/758/45 346/759/45 +f 332/756/46 365/760/11 333/761/11 +f 346/759/45 379/762/20 347/763/20 +f 333/764/11 366/765/44 334/766/44 +f 347/763/20 380/767/43 348/768/43 +f 334/766/44 367/769/15 335/770/15 +f 321/771/6 354/772/42 322/773/42 +f 348/768/43 381/774/10 349/775/10 +f 336/776/41 367/769/15 368/777/41 +f 322/773/42 355/778/18 323/779/18 +f 349/780/10 382/781/40 350/782/40 +f 336/776/41 369/783/7 337/784/7 +f 323/779/18 356/785/39 324/786/39 +f 350/782/40 383/787/14 351/788/14 +f 337/789/7 370/790/38 338/791/38 +f 324/786/39 357/792/13 325/793/13 +f 351/788/14 384/794/36 352/795/36 +f 338/791/38 371/796/19 339/797/19 +f 325/798/13 358/799/37 326/731/37 +f 352/795/36 353/800/6 321/801/6 +f 339/797/19 372/802/35 340/734/35 +f 293/683/27 358/803/27 357/804/27 +f 294/686/27 359/805/27 358/803/27 +f 295/689/27 360/806/27 359/807/27 +f 296/690/27 361/808/27 360/806/27 +f 297/692/27 362/809/27 361/810/27 +f 298/694/27 363/811/27 362/809/27 +f 299/696/27 364/812/27 363/813/27 +f 301/700/27 364/812/27 300/698/27 +f 302/670/27 365/814/27 301/700/27 +f 303/674/27 366/815/27 302/670/27 +f 304/673/27 367/816/27 303/674/27 +f 304/673/27 369/817/27 368/818/27 +f 305/682/27 370/819/27 369/820/27 +f 307/685/27 370/819/27 306/681/27 +f 307/685/27 372/821/27 371/822/27 +f 308/688/27 373/823/27 372/821/27 +f 310/691/27 373/824/27 309/687/27 +f 311/693/27 374/825/27 310/691/27 +f 312/695/27 375/826/27 311/693/27 +f 313/697/27 376/827/27 312/695/27 +f 314/699/27 377/828/27 313/697/27 +f 315/701/27 378/829/27 314/699/27 +f 315/701/27 380/830/27 379/831/27 +f 317/676/27 380/830/27 316/672/27 +f 317/676/27 382/832/27 381/833/27 +f 319/679/27 382/832/27 318/680/27 +f 319/679/27 384/834/27 383/835/27 +f 320/684/27 353/836/27 384/834/27 +f 289/671/27 354/837/27 353/838/27 +f 291/678/27 354/837/27 290/675/27 +f 292/677/27 355/839/27 291/678/27 +f 292/677/27 357/840/27 356/841/27 +f 19/321/19 275/331/19 276/322/35 +f 32/324/36 288/333/36 257/325/6 +f 5/327/13 261/335/13 262/328/37 +f 18/330/38 274/337/38 275/331/19 +f 31/332/14 287/339/14 288/333/36 +f 4/334/39 260/341/39 261/335/13 +f 18/330/38 17/342/7 273/336/7 +f 31/332/14 30/345/40 286/338/40 +f 4/334/39 3/347/18 259/340/18 +f 17/342/7 16/349/41 272/343/41 +f 29/344/10 285/351/10 286/338/40 +f 2/346/42 258/352/42 259/340/18 +f 15/348/15 271/354/15 272/343/41 +f 28/350/43 284/356/43 285/351/10 +f 2/346/42 1/326/6 257/325/6 +f 14/353/44 270/358/44 271/354/15 +f 27/355/20 283/360/20 284/356/43 +f 13/357/11 269/362/11 270/358/44 +f 26/359/45 282/364/45 283/360/20 +f 12/361/46 268/366/46 269/362/11 +f 25/363/1 281/368/1 282/364/45 +f 11/365/21 267/370/21 268/366/46 +f 24/367/47 280/372/47 281/368/1 +f 10/369/48 266/374/48 267/370/21 +f 23/371/16 279/376/16 280/372/47 +f 9/373/2 265/706/2 266/374/48 +f 22/375/49 278/381/49 279/376/16 +f 8/377/50 264/383/50 265/378/2 +f 21/380/12 277/384/12 278/381/49 +f 7/382/17 263/385/17 264/383/50 +f 21/380/12 20/323/35 276/322/35 +f 6/329/37 262/328/37 263/385/17 +f 3/347/51 67/460/51 66/386/52 +f 4/334/53 68/388/53 67/387/51 +f 5/327/54 69/425/54 68/388/53 +f 5/327/54 6/329/55 70/389/55 +f 7/382/56 71/433/56 70/389/55 +f 8/377/57 72/393/57 71/391/56 +f 8/377/57 9/379/58 73/392/58 +f 9/373/58 10/369/59 74/394/59 +f 10/369/59 11/365/60 75/396/60 +f 11/365/60 12/361/61 76/397/61 +f 13/357/62 77/448/62 76/397/61 +f 14/353/63 78/400/63 77/399/62 +f 15/348/64 79/455/64 78/400/63 +f 15/348/64 16/349/65 80/401/65 +f 16/349/65 17/342/66 81/403/66 +f 18/330/67 82/405/67 81/404/66 +f 19/321/68 83/428/68 82/405/67 +f 19/321/68 20/323/69 84/406/69 +f 20/323/69 21/380/70 85/408/70 +f 22/375/71 86/410/71 85/409/70 +f 23/371/72 87/440/72 86/410/71 +f 23/371/72 24/367/73 88/411/73 +f 24/367/73 25/363/74 89/413/74 +f 26/359/75 90/415/75 89/414/74 +f 27/355/76 91/450/76 90/415/75 +f 28/350/77 92/417/77 91/416/76 +f 29/344/78 93/457/78 92/417/77 +f 30/345/79 94/419/79 93/418/78 +f 31/332/80 95/465/80 94/419/79 +f 32/324/81 96/422/81 95/420/80 +f 32/324/81 1/326/82 65/421/82 +f 2/346/52 66/386/52 65/423/82 +f 82/405/38 114/429/38 113/424/7 +f 69/425/13 101/471/13 100/426/39 +f 96/422/36 128/431/36 127/427/14 +f 83/428/19 115/492/19 114/429/38 +f 70/389/37 102/434/37 101/430/13 +f 65/421/6 97/513/6 128/431/36 +f 84/406/35 116/436/35 115/432/19 +f 71/433/17 103/842/17 102/434/37 +f 84/406/35 85/408/12 117/435/12 +f 72/393/50 104/439/50 103/437/17 +f 86/410/49 118/441/49 117/438/12 +f 73/392/2 105/477/2 104/439/50 +f 87/440/16 119/497/16 118/441/49 +f 74/394/48 106/444/48 105/442/2 +f 88/411/47 120/445/47 119/443/16 +f 75/396/21 107/480/21 106/444/48 +f 89/413/1 121/501/1 120/445/47 +f 76/397/46 108/449/46 107/446/21 +f 90/415/45 122/451/45 121/447/1 +f 77/448/11 109/843/11 108/449/46 +f 91/450/20 123/844/20 122/451/45 +f 77/399/11 78/400/44 110/452/44 +f 92/417/43 124/458/43 123/454/20 +f 79/455/15 111/845/15 110/452/44 +f 66/386/42 98/461/42 97/456/6 +f 93/457/10 125/846/10 124/458/43 +f 80/401/41 112/463/41 111/459/15 +f 67/460/18 99/467/18 98/461/42 +f 94/419/40 126/466/40 125/462/10 +f 81/403/7 113/847/7 112/463/41 +f 68/388/39 100/426/39 99/464/18 +f 95/465/14 127/510/14 126/466/40 +f 99/467/83 131/848/83 130/468/84 +f 99/464/83 100/426/85 132/469/85 +f 101/471/86 133/849/86 132/469/85 +f 102/434/87 134/474/87 133/472/86 +f 102/434/87 103/842/88 135/473/88 +f 103/437/88 104/439/89 136/475/89 +f 105/477/90 137/850/90 136/475/89 +f 105/442/90 106/444/91 138/478/91 +f 107/480/92 139/851/92 138/478/91 +f 107/446/92 108/449/93 140/481/93 +f 108/449/93 109/843/94 141/483/94 +f 110/452/95 142/486/95 141/484/94 +f 110/452/95 111/845/96 143/485/96 +f 111/459/96 112/463/97 144/487/97 +f 112/463/97 113/847/98 145/489/98 +f 113/424/98 114/429/99 146/490/99 +f 115/492/100 147/852/100 146/490/99 +f 115/432/100 116/436/101 148/493/101 +f 116/436/101 117/435/102 149/495/102 +f 118/441/103 150/498/103 149/496/102 +f 119/497/104 151/853/104 150/498/103 +f 119/443/104 120/445/105 152/499/105 +f 121/501/106 153/854/106 152/499/105 +f 121/447/106 122/451/107 154/502/107 +f 122/451/107 123/844/108 155/504/108 +f 124/458/109 156/507/109 155/505/108 +f 124/458/109 125/846/110 157/506/110 +f 125/462/110 126/466/111 158/508/111 +f 127/510/112 159/855/112 158/508/111 +f 127/427/112 128/431/113 160/511/113 +f 97/513/114 129/856/114 160/511/113 +f 97/456/114 98/461/84 130/468/84 +f 43/515/115 171/579/115 172/516/116 +f 42/518/117 170/521/117 171/519/115 +f 41/520/118 169/625/118 170/521/117 +f 40/522/119 168/622/119 169/523/118 +f 167/525/120 168/622/119 40/522/119 +f 38/527/121 166/530/121 167/528/120 +f 37/529/122 165/619/122 166/530/121 +f 164/531/123 165/617/122 37/529/122 +f 163/533/124 164/531/123 36/532/123 +f 162/535/125 163/614/124 35/534/124 +f 161/537/126 162/535/125 34/536/125 +f 64/539/127 192/610/127 161/540/126 +f 191/541/128 192/610/127 64/539/127 +f 190/543/129 191/608/128 63/542/128 +f 189/545/130 190/543/129 62/544/129 +f 188/547/131 189/606/130 61/546/130 +f 187/549/132 188/547/131 60/548/131 +f 186/551/133 187/603/132 59/550/132 +f 185/553/134 186/551/133 58/552/133 +f 56/555/135 184/599/135 185/556/134 +f 183/557/136 184/599/135 56/555/135 +f 182/559/137 183/597/136 55/558/136 +f 181/561/138 182/559/137 54/560/137 +f 52/563/139 180/566/139 181/564/138 +f 51/565/140 179/593/140 180/566/139 +f 178/567/141 179/591/140 51/565/140 +f 49/569/142 177/589/142 178/567/141 +f 48/570/143 176/573/143 177/571/142 +f 47/572/144 175/586/144 176/573/143 +f 174/574/145 175/584/144 47/572/144 +f 173/576/146 174/574/145 46/575/145 +f 172/516/116 173/581/146 45/577/146 +f 203/578/21 204/580/46 172/516/46 +f 204/580/46 205/642/11 173/581/11 +f 205/582/11 206/583/44 174/574/44 +f 206/583/44 207/639/15 175/584/15 +f 207/585/15 208/587/41 176/573/41 +f 208/587/41 209/637/7 177/571/7 +f 209/588/7 210/590/38 178/567/38 +f 210/590/38 211/634/19 179/591/19 +f 211/592/19 212/594/35 180/566/35 +f 212/594/35 213/631/12 181/564/12 +f 213/595/12 214/596/49 182/559/49 +f 214/596/49 215/629/16 183/597/16 +f 215/598/16 216/600/47 184/599/47 +f 216/600/47 217/669/1 185/556/1 +f 217/601/1 218/602/45 186/551/45 +f 218/602/45 219/666/20 187/603/20 +f 219/604/20 220/605/43 188/547/43 +f 220/605/43 221/663/10 189/606/10 +f 189/545/10 221/661/10 222/607/40 +f 222/607/40 223/659/14 191/608/14 +f 223/609/14 224/611/36 192/610/36 +f 224/611/36 193/657/6 161/540/6 +f 193/612/6 194/613/42 162/535/42 +f 194/613/42 195/654/18 163/614/18 +f 195/615/18 196/652/39 164/531/39 +f 164/531/39 196/652/39 197/616/13 +f 197/618/13 198/620/37 166/530/37 +f 198/620/37 199/649/17 167/528/17 +f 199/621/17 200/623/50 168/622/50 +f 200/623/50 201/646/2 169/523/2 +f 201/624/2 202/626/48 170/521/48 +f 202/626/48 203/644/21 171/519/21 +f 247/627/147 248/668/148 216/600/148 +f 246/628/149 247/857/147 215/629/147 +f 213/595/150 245/858/150 246/628/149 +f 212/594/151 244/859/151 245/630/150 +f 243/632/152 244/859/151 212/594/151 +f 242/633/153 243/860/152 211/634/152 +f 241/635/154 242/633/153 210/590/153 +f 240/636/155 241/861/154 209/637/154 +f 207/585/156 239/862/156 240/636/155 +f 206/583/157 238/863/157 239/638/156 +f 237/640/158 238/863/157 206/583/157 +f 236/641/159 237/864/158 205/642/158 +f 203/578/160 235/865/160 236/641/159 +f 234/643/161 235/866/160 203/644/160 +f 201/624/162 233/867/162 234/643/161 +f 232/645/163 233/868/162 201/646/162 +f 231/647/164 232/645/163 200/623/163 +f 198/620/165 230/869/165 231/648/164 +f 229/650/166 230/869/165 198/620/165 +f 228/651/167 229/870/166 197/616/166 +f 195/615/168 227/871/168 228/651/167 +f 226/653/169 227/872/168 195/654/168 +f 225/655/170 226/653/169 194/613/169 +f 256/656/171 225/873/170 193/657/170 +f 223/609/172 255/874/172 256/656/171 +f 254/658/173 255/875/172 223/659/172 +f 253/660/174 254/658/173 222/607/173 +f 252/662/175 253/876/174 221/663/174 +f 251/664/176 252/662/175 220/605/175 +f 218/602/177 250/667/177 251/665/176 +f 217/601/178 249/877/178 250/667/177 +f 248/668/148 249/878/178 217/669/178 +f 47/572/15 303/674/15 302/670/44 +f 34/536/42 290/675/42 289/671/6 +f 61/546/10 317/676/10 316/672/43 +f 47/572/15 48/570/41 304/673/41 +f 35/534/18 291/678/18 290/675/42 +f 62/544/40 318/680/40 317/676/10 +f 49/569/7 305/682/7 304/673/41 +f 35/534/18 36/532/39 292/677/39 +f 62/544/40 63/542/14 319/679/14 +f 49/569/7 50/568/38 306/681/38 +f 37/529/13 293/683/13 292/677/39 +f 64/539/36 320/684/36 319/679/14 +f 51/565/19 307/685/19 306/681/38 +f 38/527/37 294/686/37 293/683/13 +f 33/538/6 289/671/6 320/684/36 +f 52/563/35 308/688/35 307/685/19 +f 39/526/17 295/689/17 294/686/37 +f 52/563/35 53/562/12 309/687/12 +f 40/522/50 296/690/50 295/689/17 +f 54/560/49 310/691/49 309/687/12 +f 41/524/2 297/879/2 296/690/50 +f 55/558/16 311/693/16 310/691/49 +f 42/518/48 298/694/48 297/692/2 +f 56/555/47 312/695/47 311/693/16 +f 43/515/21 299/696/21 298/694/48 +f 57/554/1 313/697/1 312/695/47 +f 44/517/46 300/698/46 299/696/21 +f 58/552/45 314/699/45 313/697/1 +f 45/577/11 301/700/11 300/698/46 +f 59/550/20 315/701/20 314/699/45 +f 46/575/44 302/670/44 301/700/11 +f 60/548/43 316/672/43 315/701/20 +f 261/335/4 325/880/4 326/702/4 +f 262/328/4 326/702/4 327/703/4 +f 263/385/4 327/881/4 328/704/4 +f 264/383/4 328/704/4 329/705/4 +f 265/706/4 329/882/4 330/707/4 +f 266/374/4 330/707/4 331/708/4 +f 331/709/4 332/710/4 268/366/4 +f 332/710/4 333/883/4 269/362/4 +f 333/711/4 334/712/4 270/358/4 +f 334/712/4 335/884/4 271/354/4 +f 271/354/4 335/885/4 336/713/4 +f 272/343/4 336/713/4 337/714/4 +f 273/336/4 337/886/4 338/715/4 +f 338/715/4 339/887/4 275/331/4 +f 275/331/4 339/888/4 340/716/4 +f 276/322/4 340/716/4 341/717/4 +f 341/718/4 342/719/4 278/381/4 +f 342/719/4 343/889/4 279/376/4 +f 343/720/4 344/721/4 280/372/4 +f 344/721/4 345/890/4 281/368/4 +f 345/722/4 346/723/4 282/364/4 +f 346/723/4 347/891/4 283/360/4 +f 283/360/4 347/892/4 348/724/4 +f 348/724/4 349/893/4 285/351/4 +f 285/351/4 349/894/4 350/725/4 +f 350/725/4 351/895/4 287/339/4 +f 287/339/4 351/896/4 352/726/4 +f 288/333/4 352/726/4 321/727/4 +f 257/325/4 321/897/4 322/728/4 +f 322/728/4 323/898/4 259/340/4 +f 323/729/4 324/899/4 260/341/4 +f 260/341/4 324/899/4 325/730/4 +f 326/731/37 358/799/37 359/732/17 +f 340/734/35 372/802/35 373/735/12 +f 327/733/17 359/732/17 360/737/50 +f 341/739/12 373/900/12 374/740/49 +f 328/738/50 360/737/50 361/742/2 +f 342/741/49 374/740/49 375/744/16 +f 329/746/2 361/901/2 362/747/48 +f 343/745/16 375/744/16 376/749/47 +f 330/748/48 362/747/48 363/751/21 +f 344/750/47 376/749/47 377/753/1 +f 331/752/21 363/751/21 364/755/46 +f 345/757/1 377/902/1 378/758/45 +f 332/756/46 364/755/46 365/760/11 +f 346/759/45 378/758/45 379/762/20 +f 333/764/11 365/903/11 366/765/44 +f 347/763/20 379/762/20 380/767/43 +f 334/766/44 366/765/44 367/769/15 +f 321/771/6 353/904/6 354/772/42 +f 348/768/43 380/767/43 381/774/10 +f 336/776/41 335/770/15 367/769/15 +f 322/773/42 354/772/42 355/778/18 +f 349/780/10 381/905/10 382/781/40 +f 336/776/41 368/777/41 369/783/7 +f 323/779/18 355/778/18 356/785/39 +f 350/782/40 382/781/40 383/787/14 +f 337/789/7 369/906/7 370/790/38 +f 324/786/39 356/785/39 357/792/13 +f 351/788/14 383/787/14 384/794/36 +f 338/791/38 370/790/38 371/796/19 +f 325/798/13 357/907/13 358/799/37 +f 352/795/36 384/794/36 353/800/6 +f 339/797/19 371/796/19 372/802/35 +f 293/683/27 294/686/27 358/803/27 +f 294/686/27 295/689/27 359/805/27 +f 295/689/27 296/690/27 360/806/27 +f 296/690/27 297/879/27 361/808/27 +f 297/692/27 298/694/27 362/809/27 +f 298/694/27 299/696/27 363/811/27 +f 299/696/27 300/698/27 364/812/27 +f 301/700/27 365/908/27 364/812/27 +f 302/670/27 366/815/27 365/814/27 +f 303/674/27 367/909/27 366/815/27 +f 304/673/27 368/818/27 367/816/27 +f 304/673/27 305/682/27 369/817/27 +f 305/682/27 306/681/27 370/819/27 +f 307/685/27 371/910/27 370/819/27 +f 307/685/27 308/688/27 372/821/27 +f 308/688/27 309/687/27 373/823/27 +f 310/691/27 374/825/27 373/824/27 +f 311/693/27 375/911/27 374/825/27 +f 312/695/27 376/827/27 375/826/27 +f 313/697/27 377/912/27 376/827/27 +f 314/699/27 378/829/27 377/828/27 +f 315/701/27 379/913/27 378/829/27 +f 315/701/27 316/672/27 380/830/27 +f 317/676/27 381/914/27 380/830/27 +f 317/676/27 318/680/27 382/832/27 +f 319/679/27 383/915/27 382/832/27 +f 319/679/27 320/684/27 384/834/27 +f 320/684/27 289/671/27 353/836/27 +f 289/671/27 290/675/27 354/837/27 +f 291/678/27 355/916/27 354/837/27 +f 292/677/27 356/841/27 355/839/27 +f 292/677/27 293/683/27 357/840/27 +o Lights +v -0.937500 2.494797 3.181982 +v -0.937500 2.318020 3.005205 +v -0.937500 2.671573 3.005205 +v -0.937500 2.494797 2.828429 +v -0.937500 5.375001 4.125002 +v -0.937500 5.625001 4.125002 +v -0.937500 5.375001 4.375002 +v -0.937500 5.625001 4.375002 +v -0.687500 5.375001 4.125002 +v -0.687500 5.625001 4.125002 +v -0.687500 5.375001 4.375002 +v -0.687500 5.625001 4.375002 +v -0.687500 5.375001 -4.375000 +v -0.687500 5.625001 -4.375000 +v -0.687500 5.375001 -4.125000 +v -0.687500 5.625001 -4.125000 +v -0.937500 5.375001 -4.375000 +v -0.937500 5.625001 -4.375000 +v -0.937500 5.375001 -4.125000 +v -0.937500 5.625001 -4.125000 +v -0.937500 1.375000 -0.124999 +v -0.937500 1.375000 0.125001 +v -0.937500 1.125000 -0.124999 +v -0.937500 1.125000 0.125001 +v -0.687500 1.375000 -0.124999 +v -0.687500 1.375000 0.125001 +v -0.687500 1.125000 -0.124999 +v -0.687500 1.125000 0.125001 +v -0.687500 9.875002 -0.124999 +v -0.687500 9.875002 0.125001 +v -0.687500 9.625002 -0.124999 +v -0.687500 9.625002 0.125001 +v -0.937500 9.875002 -0.124999 +v -0.937500 9.875002 0.125001 +v -0.937500 9.625002 -0.124999 +v -0.937500 9.625002 0.125001 +v -0.687500 2.494797 2.828429 +v -0.687500 2.671573 3.005205 +v -0.687500 2.318020 3.005205 +v -0.687500 2.494797 3.181982 +v -0.687500 8.505206 -3.181980 +v -0.687500 8.681982 -3.005203 +v -0.687500 8.328429 -3.005203 +v -0.687500 8.505205 -2.828426 +v -0.937500 8.505206 -3.181980 +v -0.937500 8.681982 -3.005203 +v -0.937500 8.328429 -3.005203 +v -0.937500 8.505205 -2.828426 +v -0.937500 2.671574 -3.005204 +v -0.937500 2.494797 -2.828427 +v -0.937500 2.494797 -3.181981 +v -0.937500 2.318020 -3.005204 +v -0.687500 2.671574 -3.005204 +v -0.687500 2.494797 -2.828427 +v -0.687500 2.494797 -3.181981 +v -0.687500 2.318020 -3.005204 +v -0.687500 8.681982 3.005205 +v -0.687500 8.505205 3.181982 +v -0.687500 8.505205 2.828429 +v -0.687500 8.328428 3.005205 +v -0.937500 8.681982 3.005205 +v -0.937500 8.505205 3.181982 +v -0.937500 8.505205 2.828429 +v -0.937500 8.328428 3.005205 +v 0.937500 2.494797 -3.181982 +v 0.937500 2.318020 -3.005205 +v 0.937500 2.671573 -3.005205 +v 0.937500 2.494797 -2.828429 +v 0.937500 5.375001 -4.125002 +v 0.937500 5.625001 -4.125002 +v 0.937500 5.375001 -4.375002 +v 0.937500 5.625001 -4.375002 +v 0.687500 5.375001 -4.125002 +v 0.687500 5.625001 -4.125002 +v 0.687500 5.375001 -4.375002 +v 0.687500 5.625001 -4.375002 +v 0.687500 5.375001 4.375000 +v 0.687500 5.625001 4.375000 +v 0.687500 5.375001 4.125000 +v 0.687500 5.625001 4.125000 +v 0.937500 5.375001 4.375000 +v 0.937500 5.625001 4.375000 +v 0.937500 5.375001 4.125000 +v 0.937500 5.625001 4.125000 +v 0.937500 1.375000 0.124999 +v 0.937500 1.375000 -0.125001 +v 0.937500 1.125000 0.124999 +v 0.937500 1.125000 -0.125001 +v 0.687500 1.375000 0.124999 +v 0.687500 1.375000 -0.125001 +v 0.687500 1.125000 0.124999 +v 0.687500 1.125000 -0.125001 +v 0.687500 9.875002 0.124999 +v 0.687500 9.875002 -0.125001 +v 0.687500 9.625002 0.124999 +v 0.687500 9.625002 -0.125001 +v 0.937500 9.875002 0.124999 +v 0.937500 9.875002 -0.125001 +v 0.937500 9.625002 0.124999 +v 0.937500 9.625002 -0.125001 +v 0.687500 2.494797 -2.828429 +v 0.687500 2.671573 -3.005205 +v 0.687500 2.318020 -3.005205 +v 0.687500 2.494797 -3.181982 +v 0.687500 8.505206 3.181980 +v 0.687500 8.681982 3.005203 +v 0.687500 8.328429 3.005203 +v 0.687500 8.505205 2.828426 +v 0.937500 8.505206 3.181980 +v 0.937500 8.681982 3.005203 +v 0.937500 8.328429 3.005203 +v 0.937500 8.505205 2.828426 +v 0.937500 2.671574 3.005204 +v 0.937500 2.494797 2.828427 +v 0.937500 2.494797 3.181981 +v 0.937500 2.318020 3.005204 +v 0.687500 2.671574 3.005204 +v 0.687500 2.494797 2.828427 +v 0.687500 2.494797 3.181981 +v 0.687500 2.318020 3.005204 +v 0.687500 8.681982 -3.005205 +v 0.687500 8.505205 -3.181982 +v 0.687500 8.505205 -2.828429 +v 0.687500 8.328428 -3.005205 +v 0.937500 8.681982 -3.005205 +v 0.937500 8.505205 -3.181982 +v 0.937500 8.505205 -2.828429 +v 0.937500 8.328428 -3.005205 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.464286 0.611940 +vt 0.455357 0.626866 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.656716 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.464286 0.611940 +vt 0.455357 0.626866 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.455357 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.656716 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.464286 0.611940 +vt 0.455357 0.626866 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.464286 0.611940 +vt 0.455357 0.626866 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.656716 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.464286 0.611940 +vt 0.455357 0.626866 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.455357 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.473214 0.641791 +vt 0.464286 0.626866 +vt 0.473214 0.626866 +vt 0.446429 0.626866 +vt 0.455357 0.641791 +vt 0.446429 0.641791 +vt 0.455357 0.626866 +vt 0.464286 0.611940 +vt 0.455357 0.611940 +vt 0.464286 0.656716 +vt 0.455357 0.656716 +vt 0.464286 0.641791 +vt 0.455357 0.656716 +vt 0.455357 0.641791 +vt 0.464286 0.611940 +vt 0.455357 0.626866 +vt 0.455357 0.611940 +vt 0.464286 0.626866 +vt 0.446429 0.626866 +vt 0.446429 0.641791 +vt 0.473214 0.641791 +vt 0.473214 0.626866 +vt 0.464286 0.656716 +vt 0.464286 0.656716 +vt 0.464286 0.641791 +vt 0.464286 0.656716 +vt 0.464286 0.656716 +vt 0.464286 0.656716 +vt 0.464286 0.611940 +vt 0.464286 0.641791 +vt 0.464286 0.656716 +vt 0.464286 0.656716 +vt 0.464286 0.656716 +vt 0.464286 0.641791 +vt 0.464286 0.656716 +vt 0.464286 0.656716 +vt 0.464286 0.656716 +vt 0.464286 0.611940 +vt 0.464286 0.641791 +vt 0.464286 0.656716 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +s off +f 649/917/179 647/918/179 645/919/179 +f 646/920/180 652/921/180 650/922/180 +f 647/918/181 652/921/181 648/923/181 +f 645/924/182 648/923/182 646/925/182 +f 651/926/183 650/927/183 652/921/183 +f 654/928/183 655/929/183 653/930/183 +f 660/931/182 657/932/182 659/933/182 +f 658/934/184 653/930/184 657/932/184 +f 659/935/179 653/930/179 655/936/179 +f 656/937/180 658/934/180 660/938/180 +f 665/939/184 663/940/184 661/941/184 +f 662/942/181 668/943/181 666/944/181 +f 663/940/179 668/943/179 664/945/179 +f 661/946/182 664/945/182 662/947/182 +f 668/943/183 665/948/183 666/949/183 +f 670/950/183 671/951/183 669/952/183 +f 676/953/182 673/954/182 675/955/182 +f 674/956/180 669/952/180 673/954/180 +f 675/957/184 669/952/184 671/958/184 +f 672/959/181 674/956/181 676/960/181 +f 677/961/185 642/962/185 644/963/185 +f 643/964/186 680/965/186 678/966/186 +f 642/962/187 680/965/187 641/967/187 +f 644/968/182 641/967/182 643/969/182 +f 679/970/183 678/971/183 680/965/183 +f 682/972/183 683/973/183 681/974/183 +f 687/975/182 686/976/182 685/977/182 +f 686/976/188 681/974/188 685/977/188 +f 687/978/185 681/974/185 683/979/185 +f 684/980/186 686/976/186 688/981/186 +f 693/982/188 691/983/188 689/984/188 +f 690/985/187 696/986/187 694/987/187 +f 691/983/185 696/986/185 692/988/185 +f 689/989/182 692/988/182 690/990/182 +f 696/986/183 693/991/183 694/992/183 +f 698/993/183 699/994/183 697/995/183 +f 704/996/182 701/997/182 703/998/182 +f 702/999/186 697/995/186 701/997/186 +f 703/1000/188 697/995/188 699/1001/188 +f 700/1002/187 702/999/187 704/1003/187 +f 713/1004/179 711/1005/179 709/1006/179 +f 710/1007/180 716/1008/180 714/1009/180 +f 711/1005/184 716/1008/184 712/1010/184 +f 709/1011/183 712/1010/183 710/1012/183 +f 715/1013/182 714/1014/182 716/1008/182 +f 718/1015/182 719/1016/182 717/1017/182 +f 724/1018/183 721/1019/183 723/1020/183 +f 722/1021/181 717/1017/181 721/1019/181 +f 723/1022/179 717/1017/179 719/1023/179 +f 720/1024/180 722/1021/180 724/1025/180 +f 729/1026/181 727/1027/181 725/1028/181 +f 726/1029/184 732/1030/184 730/1031/184 +f 727/1027/179 732/1030/179 728/1032/179 +f 725/1033/183 728/1032/183 726/1034/183 +f 732/1030/182 729/1035/182 730/1036/182 +f 734/1037/182 735/1038/182 733/1039/182 +f 740/1040/183 737/1041/183 739/1042/183 +f 738/1043/180 733/1039/180 737/1041/180 +f 739/1044/181 733/1039/181 735/1045/181 +f 736/1046/184 738/1043/184 740/1047/184 +f 741/1048/187 706/1049/187 708/1050/187 +f 707/1051/188 744/1052/188 742/1053/188 +f 706/1049/185 744/1052/185 705/1054/185 +f 708/1055/183 705/1054/183 707/1056/183 +f 743/1057/182 742/1058/182 744/1052/182 +f 746/1059/182 747/1060/182 745/1061/182 +f 751/1062/183 750/1063/183 749/1064/183 +f 750/1063/186 745/1061/186 749/1064/186 +f 751/1065/187 745/1061/187 747/1066/187 +f 748/1067/188 750/1063/188 752/1068/188 +f 757/1069/186 755/1070/186 753/1071/186 +f 754/1072/185 760/1073/185 758/1074/185 +f 755/1070/187 760/1073/187 756/1075/187 +f 753/1076/183 756/1075/183 754/1077/183 +f 760/1073/182 757/1078/182 758/1079/182 +f 762/1080/182 763/1081/182 761/1082/182 +f 768/1083/183 765/1084/183 767/1085/183 +f 766/1086/188 761/1082/188 765/1084/188 +f 767/1087/186 761/1082/186 763/1088/186 +f 764/1089/185 766/1086/185 768/1090/185 +f 649/917/179 651/926/179 647/918/179 +f 646/920/180 648/923/180 652/921/180 +f 647/918/181 651/926/181 652/921/181 +f 645/924/182 647/918/182 648/923/182 +f 651/926/183 649/1091/183 650/927/183 +f 654/928/183 656/1092/183 655/929/183 +f 660/931/182 658/934/182 657/932/182 +f 658/934/184 654/928/184 653/930/184 +f 659/935/179 657/932/179 653/930/179 +f 656/937/180 654/928/180 658/934/180 +f 665/939/184 667/1093/184 663/940/184 +f 662/942/181 664/945/181 668/943/181 +f 663/940/179 667/1093/179 668/943/179 +f 661/946/182 663/940/182 664/945/182 +f 668/943/183 667/1093/183 665/948/183 +f 670/950/183 672/1094/183 671/951/183 +f 676/953/182 674/956/182 673/954/182 +f 674/956/180 670/950/180 669/952/180 +f 675/957/184 673/954/184 669/952/184 +f 672/959/181 670/950/181 674/956/181 +f 677/961/185 679/970/185 642/962/185 +f 643/964/186 641/967/186 680/965/186 +f 642/962/187 679/970/187 680/965/187 +f 644/968/182 642/962/182 641/967/182 +f 679/970/183 677/1095/183 678/971/183 +f 682/972/183 684/1096/183 683/973/183 +f 687/975/182 688/1097/182 686/976/182 +f 686/976/188 682/972/188 681/974/188 +f 687/978/185 685/977/185 681/974/185 +f 684/980/186 682/972/186 686/976/186 +f 693/982/188 695/1098/188 691/983/188 +f 690/985/187 692/988/187 696/986/187 +f 691/983/185 695/1098/185 696/986/185 +f 689/989/182 691/983/182 692/988/182 +f 696/986/183 695/1098/183 693/991/183 +f 698/993/183 700/1099/183 699/994/183 +f 704/996/182 702/999/182 701/997/182 +f 702/999/186 698/993/186 697/995/186 +f 703/1000/188 701/997/188 697/995/188 +f 700/1002/187 698/993/187 702/999/187 +f 713/1004/179 715/1013/179 711/1005/179 +f 710/1007/180 712/1010/180 716/1008/180 +f 711/1005/184 715/1013/184 716/1008/184 +f 709/1011/183 711/1005/183 712/1010/183 +f 715/1013/182 713/1100/182 714/1014/182 +f 718/1015/182 720/1101/182 719/1016/182 +f 724/1018/183 722/1021/183 721/1019/183 +f 722/1021/181 718/1015/181 717/1017/181 +f 723/1022/179 721/1019/179 717/1017/179 +f 720/1024/180 718/1015/180 722/1021/180 +f 729/1026/181 731/1102/181 727/1027/181 +f 726/1029/184 728/1032/184 732/1030/184 +f 727/1027/179 731/1102/179 732/1030/179 +f 725/1033/183 727/1027/183 728/1032/183 +f 732/1030/182 731/1102/182 729/1035/182 +f 734/1037/182 736/1103/182 735/1038/182 +f 740/1040/183 738/1043/183 737/1041/183 +f 738/1043/180 734/1037/180 733/1039/180 +f 739/1044/181 737/1041/181 733/1039/181 +f 736/1046/184 734/1037/184 738/1043/184 +f 741/1048/187 743/1057/187 706/1049/187 +f 707/1051/188 705/1054/188 744/1052/188 +f 706/1049/185 743/1057/185 744/1052/185 +f 708/1055/183 706/1049/183 705/1054/183 +f 743/1057/182 741/1104/182 742/1058/182 +f 746/1059/182 748/1105/182 747/1060/182 +f 751/1062/183 752/1106/183 750/1063/183 +f 750/1063/186 746/1059/186 745/1061/186 +f 751/1065/187 749/1064/187 745/1061/187 +f 748/1067/188 746/1059/188 750/1063/188 +f 757/1069/186 759/1107/186 755/1070/186 +f 754/1072/185 756/1075/185 760/1073/185 +f 755/1070/187 759/1107/187 760/1073/187 +f 753/1076/183 755/1070/183 756/1075/183 +f 760/1073/182 759/1107/182 757/1078/182 +f 762/1080/182 764/1108/182 763/1081/182 +f 768/1083/183 766/1086/183 765/1084/183 +f 766/1086/188 762/1080/188 761/1082/188 +f 767/1087/186 765/1084/186 761/1082/186 +f 764/1089/185 762/1080/185 766/1086/185 +o Plasma +v -0.250000 5.500000 -4.250000 +v -0.250000 6.329134 -4.168337 +v -0.249999 7.126407 -3.926488 +v -0.250000 7.861172 -3.533745 +v -0.250000 8.505203 -3.005203 +v -0.250000 9.033746 -2.361173 +v -0.250000 9.426489 -1.626404 +v -0.250000 9.668339 -0.829134 +v -0.250000 9.750000 0.000000 +v -0.250000 9.668339 0.829134 +v -0.250000 9.426489 1.626404 +v -0.250000 9.033746 2.361174 +v -0.250000 8.505203 3.005203 +v -0.250000 7.861172 3.533746 +v -0.249999 7.126402 3.926488 +v -0.250000 6.329134 4.168338 +v -0.250000 5.500000 4.250000 +v -0.250000 4.670863 4.168337 +v -0.250000 3.873595 3.926487 +v -0.250000 3.138825 3.533745 +v -0.250000 2.494793 3.005201 +v -0.250000 1.966251 2.361171 +v -0.250000 1.573512 1.626402 +v -0.250000 1.331663 0.829130 +v -0.250000 1.250000 -0.000004 +v -0.250000 1.331663 -0.829138 +v -0.250000 1.573512 -1.626409 +v -0.250000 1.966255 -2.361177 +v -0.250000 2.494802 -3.005207 +v -0.250000 3.138829 -3.533749 +v -0.250000 3.873603 -3.926490 +v -0.250000 4.670871 -4.168338 +v 0.250000 5.500000 -4.250000 +v 0.250000 6.329134 -4.168337 +v 0.250001 7.126407 -3.926488 +v 0.250000 7.861172 -3.533745 +v 0.250000 8.505203 -3.005203 +v 0.250000 9.033746 -2.361173 +v 0.250000 9.426489 -1.626404 +v 0.250000 9.668339 -0.829134 +v 0.250000 9.750000 0.000000 +v 0.250000 9.668339 0.829134 +v 0.250000 9.426489 1.626404 +v 0.250000 9.033746 2.361174 +v 0.250000 8.505203 3.005203 +v 0.250000 7.861172 3.533746 +v 0.250001 7.126402 3.926488 +v 0.250000 6.329134 4.168338 +v 0.250000 5.500000 4.250000 +v 0.250000 4.670863 4.168337 +v 0.250000 3.873595 3.926487 +v 0.250000 3.138825 3.533745 +v 0.250000 2.494793 3.005201 +v 0.250000 1.966251 2.361171 +v 0.250000 1.573512 1.626402 +v 0.250000 1.331663 0.829130 +v 0.250000 1.250000 -0.000004 +v 0.250000 1.331663 -0.829138 +v 0.250000 1.573512 -1.626409 +v 0.250000 1.966255 -2.361177 +v 0.250000 2.494802 -3.005207 +v 0.250000 3.138829 -3.533749 +v 0.250000 3.873603 -3.926490 +v 0.250000 4.670871 -4.168338 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 0.000000 0.249958 +vt 0.500000 0.749958 +vt 0.000000 0.749958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 1.000000 0.249958 +vt 0.500000 0.249958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.000000 0.249958 +vt 0.500000 0.749958 +vt 0.000000 0.749958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.000000 0.249958 +vt 0.500000 0.749958 +vt 0.000000 0.749958 +vt 1.000000 0.249958 +vt 0.500000 0.249958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.249958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 0.500000 0.249958 +vt 0.000000 0.749958 +vt 0.000000 0.249958 +vt 1.000000 0.249958 +vt 0.500000 0.749958 +vt 1.000000 0.749958 +vt 0.500000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.749958 +vt 1.000000 0.249958 +vn 0.0000 0.9808 -0.1951 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 -0.8315 0.5556 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 0.9808 0.1951 +vn 0.0000 -0.9808 0.1951 +vn 0.0000 0.9239 0.3827 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.8315 0.5556 +vn 0.0000 -0.9808 -0.1951 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 0.5556 0.8315 +vn 0.0000 -0.8315 -0.5556 +vn 0.0000 0.3827 0.9239 +vn 0.0000 0.1951 -0.9808 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.1951 0.9808 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 -0.5556 -0.8315 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.5556 -0.8315 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 -0.1951 0.9808 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.1951 -0.9808 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 0.8315 -0.5556 +vn 0.0000 -0.5556 0.8315 +s 1 +f 776/1109/189 807/1110/190 775/1111/190 +f 790/1112/191 821/1113/192 789/1114/192 +f 777/1115/193 808/1116/189 776/1109/189 +f 791/1117/194 822/1118/191 790/1112/191 +f 778/1119/195 809/1120/193 777/1121/193 +f 792/1122/196 823/1123/194 791/1124/194 +f 779/1125/197 810/1126/195 778/1119/195 +f 793/1127/198 824/1128/196 792/1122/196 +f 780/1129/199 811/1130/197 779/1131/197 +f 793/1132/198 826/1133/200 825/1134/198 +f 781/1135/201 812/1136/199 780/1129/199 +f 795/1137/202 826/1133/200 794/1138/200 +f 782/1139/203 813/1140/201 781/1141/201 +f 796/1142/204 827/1143/202 795/1144/202 +f 783/1145/205 814/1146/203 782/1139/203 +f 770/1147/206 801/1148/207 769/1149/207 +f 797/1150/208 828/1151/204 796/1142/204 +f 783/1152/205 816/1153/209 815/1154/205 +f 771/1155/210 802/1156/206 770/1147/206 +f 797/1157/208 830/1158/211 829/1159/208 +f 785/1160/212 816/1153/209 784/1161/209 +f 772/1162/213 803/1163/210 771/1164/210 +f 799/1165/214 830/1158/211 798/1166/211 +f 786/1167/215 817/1168/212 785/1169/212 +f 773/1170/216 804/1171/213 772/1162/213 +f 800/1172/217 831/1173/214 799/1174/214 +f 787/1175/218 818/1176/215 786/1167/215 +f 774/1177/219 805/1178/216 773/1179/216 +f 769/1180/207 832/1181/217 800/1172/217 +f 788/1182/220 819/1183/218 787/1184/218 +f 775/1185/190 806/1186/219 774/1177/219 +f 788/1182/220 821/1187/192 820/1188/220 +f 776/1109/189 808/1116/189 807/1110/190 +f 790/1112/191 822/1118/191 821/1113/192 +f 777/1115/193 809/1189/193 808/1116/189 +f 791/1117/194 823/1190/194 822/1118/191 +f 778/1119/195 810/1126/195 809/1120/193 +f 792/1122/196 824/1128/196 823/1123/194 +f 779/1125/197 811/1191/197 810/1126/195 +f 793/1127/198 825/1192/198 824/1128/196 +f 780/1129/199 812/1136/199 811/1130/197 +f 793/1132/198 794/1138/200 826/1133/200 +f 781/1135/201 813/1193/201 812/1136/199 +f 795/1137/202 827/1194/202 826/1133/200 +f 782/1139/203 814/1146/203 813/1140/201 +f 796/1142/204 828/1151/204 827/1143/202 +f 783/1145/205 815/1195/205 814/1146/203 +f 770/1147/206 802/1156/206 801/1148/207 +f 797/1150/208 829/1196/208 828/1151/204 +f 783/1152/205 784/1161/209 816/1153/209 +f 771/1155/210 803/1197/210 802/1156/206 +f 797/1157/208 798/1166/211 830/1158/211 +f 785/1160/212 817/1198/212 816/1153/209 +f 772/1162/213 804/1171/213 803/1163/210 +f 799/1165/214 831/1199/214 830/1158/211 +f 786/1167/215 818/1176/215 817/1168/212 +f 773/1170/216 805/1200/216 804/1171/213 +f 800/1172/217 832/1181/217 831/1173/214 +f 787/1175/218 819/1201/218 818/1176/215 +f 774/1177/219 806/1186/219 805/1178/216 +f 769/1180/207 801/1202/207 832/1181/217 +f 788/1182/220 820/1188/220 819/1183/218 +f 775/1185/190 807/1203/190 806/1186/219 +f 788/1182/220 789/1204/192 821/1187/192 +o Base +v -2.500000 0.000000 4.500000 +v 2.500000 0.000000 4.500000 +v -2.500000 0.000000 -4.500000 +v 2.500000 0.000000 -4.500000 +v 1.750000 9.750000 -0.499999 +v 1.250000 10.250000 -0.499999 +v 1.250000 10.250000 0.500001 +v 1.750000 9.750000 0.500001 +v -1.250000 10.250000 -0.499999 +v -1.750000 9.750000 -0.499999 +v -1.750000 9.750000 0.500001 +v -1.250000 10.250000 0.500001 +v 1.750000 6.500000 -0.499999 +v 1.750000 6.500000 0.500001 +v -1.750000 6.500000 -0.499999 +v -1.750000 6.500000 0.500001 +v -2.500000 1.000000 -4.500000 +v -2.500000 1.000000 4.500000 +v 2.500000 1.000000 4.500000 +v 2.500000 1.000000 -4.500000 +v -2.000000 2.000000 0.500000 +v -1.500000 2.000000 0.500000 +v -2.000000 2.000000 -0.500000 +v -1.500000 2.000000 -0.500000 +v -2.000000 4.500000 -0.500000 +v -2.000000 4.500000 0.500000 +v -1.500000 4.500000 0.500000 +v -1.500000 4.500000 -0.500000 +v -2.500000 1.000000 0.500000 +v -1.000000 1.000000 0.500000 +v -2.500000 1.000000 -0.500000 +v -1.000000 1.000000 -0.500000 +v -1.250000 5.500000 1.250001 +v -1.250000 5.978355 1.154850 +v -1.250000 6.383883 0.883884 +v -1.250000 6.654850 0.478355 +v -1.250000 6.750000 0.000001 +v -1.250000 6.654850 -0.478354 +v -1.250000 6.383883 -0.883883 +v -1.250000 5.978355 -1.154848 +v -1.250000 5.500000 -1.249999 +v -1.250000 5.021646 -1.154849 +v -1.250000 4.616117 -0.883883 +v -1.250000 4.345151 -0.478354 +v -1.250000 4.250000 0.000001 +v -1.250000 4.345151 0.478355 +v -1.250000 4.616117 0.883884 +v -1.250000 5.021647 1.154850 +v -2.250000 5.500000 1.250001 +v -2.250000 5.978355 1.154850 +v -2.250000 6.383883 0.883884 +v -2.250000 6.654850 0.478355 +v -2.250000 6.750000 0.000001 +v -2.250000 6.654850 -0.478354 +v -2.250000 6.383883 -0.883883 +v -2.250000 5.978355 -1.154848 +v -2.250000 5.500000 -1.249999 +v -2.250000 5.021646 -1.154848 +v -2.250000 4.616117 -0.883883 +v -2.250000 4.345151 -0.478354 +v -2.250000 4.250000 0.000001 +v -2.250000 4.345151 0.478355 +v -2.250000 4.616117 0.883884 +v -2.250000 5.021647 1.154850 +v -2.250000 5.500001 1.000001 +v -2.250000 5.882684 0.923881 +v -2.250000 6.207108 0.707108 +v -2.250000 6.423881 0.382685 +v -2.250000 6.500001 0.000001 +v -2.250000 6.423881 -0.382683 +v -2.250000 6.207108 -0.707106 +v -2.250000 5.882684 -0.923879 +v -2.250000 5.500001 -0.999999 +v -2.250000 5.117317 -0.923879 +v -2.250000 4.792893 -0.707106 +v -2.250000 4.576121 -0.382683 +v -2.250000 4.500001 0.000001 +v -2.250000 4.576121 0.382685 +v -2.250000 4.792893 0.707108 +v -2.250000 5.117318 0.923881 +v -2.250000 5.500000 0.750001 +v -2.250000 5.787013 0.692910 +v -2.250000 6.030331 0.530331 +v -2.250000 6.192910 0.287013 +v -2.250000 6.250000 0.000001 +v -2.250000 6.192910 -0.287012 +v -2.250000 6.030331 -0.530329 +v -2.250000 5.787013 -0.692909 +v -2.250000 5.500000 -0.749999 +v -2.250000 5.212988 -0.692909 +v -2.250000 4.969670 -0.530330 +v -2.250000 4.807091 -0.287012 +v -2.250000 4.750000 0.000001 +v -2.250000 4.807091 0.287013 +v -2.250000 4.969670 0.530331 +v -2.250000 5.212988 0.692910 +v -2.000000 5.882684 0.923881 +v -2.000000 5.500001 1.000001 +v -2.000000 6.207108 0.707108 +v -2.000000 6.423881 0.382685 +v -2.000000 6.500001 0.000001 +v -2.000000 6.423881 -0.382683 +v -2.000000 6.207108 -0.707106 +v -2.000000 5.882684 -0.923879 +v -2.000000 5.500001 -0.999999 +v -2.000000 5.117317 -0.923879 +v -2.000000 4.792893 -0.707106 +v -2.000000 4.576121 -0.382683 +v -2.000000 4.500001 0.000001 +v -2.000000 4.576121 0.382685 +v -2.000000 4.792893 0.707108 +v -2.000000 5.117318 0.923881 +v -2.000000 5.787013 0.692910 +v -2.000000 5.500000 0.750001 +v -2.000000 6.030331 0.530331 +v -2.000000 6.192910 0.287013 +v -2.000000 6.250000 0.000001 +v -2.000000 6.192910 -0.287012 +v -2.000000 6.030331 -0.530329 +v -2.000000 5.787013 -0.692909 +v -2.000000 5.500000 -0.749999 +v -2.000000 5.212988 -0.692909 +v -2.000000 4.969670 -0.530330 +v -2.000000 4.807091 -0.287012 +v -2.000000 4.750000 0.000001 +v -2.000000 4.807091 0.287013 +v -2.000000 4.969670 0.530331 +v -2.000000 5.212988 0.692910 +v -1.250000 1.000000 -4.250000 +v -2.250000 1.000000 -4.250000 +v -1.250000 1.000000 -2.250000 +v -2.250000 1.000000 -2.250000 +v -1.250000 2.000000 -2.250000 +v -1.250000 2.000000 -4.250000 +v -2.250000 2.000000 -4.250000 +v -2.250000 2.000000 -2.250000 +v -1.500000 2.000000 -4.000000 +v -2.000000 2.000000 -4.000000 +v -1.500000 2.000000 -3.500000 +v -2.000000 2.000000 -3.500000 +v -1.500000 2.125000 -3.500000 +v -1.500000 2.125000 -4.000000 +v -2.000000 2.125000 -4.000000 +v -2.000000 2.125000 -3.500000 +v -1.625000 2.250000 -3.625000 +v -1.625000 2.250000 -3.875000 +v -1.875000 2.250000 -3.875000 +v -1.875000 2.250000 -3.625000 +v -1.875000 3.125000 -3.625000 +v -2.000000 3.000000 -3.625000 +v -1.875000 3.000000 -3.500000 +v -1.875000 2.625000 -3.625000 +v -1.875000 2.750000 -3.500000 +v -2.000000 2.750000 -3.625000 +v -1.875000 3.125000 -3.875000 +v -1.875000 3.000000 -4.000000 +v -2.000000 3.000000 -3.875000 +v -1.875000 2.625000 -3.875000 +v -2.000000 2.750000 -3.875000 +v -1.875000 2.750000 -4.000000 +v -1.625000 3.125000 -3.625000 +v -1.625000 3.000000 -3.500000 +v -1.500000 3.000000 -3.625000 +v -1.625000 2.625000 -3.625000 +v -1.500000 2.750000 -3.625000 +v -1.625000 2.750000 -3.500000 +v -1.625000 3.000000 -4.000000 +v -1.625000 3.125000 -3.875000 +v -1.500000 3.000000 -3.875000 +v -1.625000 2.625000 -3.875000 +v -1.625000 2.750000 -4.000000 +v -1.500000 2.750000 -3.875000 +v -2.000000 1.000000 1.000000 +v -1.500000 1.000000 1.000000 +v -2.000000 1.500000 0.500000 +v -1.500000 1.500000 0.500000 +v -2.000000 1.000000 0.500000 +v -1.500000 1.000000 0.500000 +v -1.500000 1.000000 -1.000000 +v -2.000000 1.000000 -1.000000 +v -1.500000 1.500000 -0.500000 +v -2.000000 1.500000 -0.500000 +v -1.500000 1.000000 -0.500000 +v -2.000000 1.000000 -0.500000 +v -1.625000 1.375000 -2.250000 +v -1.875000 1.375000 -2.250000 +v -1.625000 1.625000 -2.250000 +v -1.875000 1.625000 -2.250000 +v -1.625000 2.875000 -0.500000 +v -1.875000 2.875000 -0.500000 +v -1.625000 3.125000 -0.500000 +v -1.875000 3.125000 -0.500000 +v -1.625000 2.500000 -0.937500 +v -1.625000 2.000000 -1.375000 +v -1.625000 1.750000 -1.812500 +v -1.875000 1.750000 -1.812500 +v -1.875000 2.000000 -1.375000 +v -1.875000 2.500000 -0.937500 +v -1.875000 2.250000 -0.937500 +v -1.875000 1.750000 -1.375000 +v -1.875000 1.500000 -1.812500 +v -1.625000 1.500000 -1.812500 +v -1.625000 1.750000 -1.375000 +v -1.625000 2.250000 -0.937500 +v -0.500000 1.000000 -2.250000 +v 0.500000 1.000000 -2.250000 +v -0.500000 1.000000 -4.250000 +v 0.500000 1.000000 -4.250000 +v -0.500000 1.500000 -3.750000 +v -0.500000 1.500000 -2.750000 +v 0.500000 1.500000 -2.750000 +v 0.500000 1.500000 -3.750000 +v -1.750000 6.500000 0.500001 +v -1.750000 6.500000 -0.499999 +v 1.750000 6.500000 0.500001 +v 1.750000 6.500000 -0.499999 +v -1.250000 10.250000 0.500001 +v -1.750000 9.750000 0.500001 +v -1.750000 9.750000 -0.499999 +v -1.250000 10.250000 -0.499999 +v 1.750000 9.750000 0.500001 +v 1.250000 10.250000 0.500001 +v 1.250000 10.250000 -0.499999 +v 1.750000 9.750000 -0.499999 +v 2.000000 2.000000 -0.500000 +v 1.500000 2.000000 -0.500000 +v 2.000000 2.000000 0.500000 +v 1.500000 2.000000 0.500000 +v 2.000000 4.500000 0.500000 +v 2.000000 4.500000 -0.500000 +v 1.500000 4.500000 -0.500000 +v 1.500000 4.500000 0.500000 +v 2.500000 1.000000 -0.500000 +v 1.000000 1.000000 -0.500000 +v 2.500000 1.000000 0.500000 +v 1.000000 1.000000 0.500000 +v 1.250000 5.500000 -1.250001 +v 1.250000 5.978355 -1.154850 +v 1.250000 6.383883 -0.883885 +v 1.250000 6.654850 -0.478356 +v 1.250000 6.750000 -0.000001 +v 1.250000 6.654850 0.478353 +v 1.250000 6.383883 0.883882 +v 1.250000 5.978355 1.154848 +v 1.250000 5.500000 1.249999 +v 1.250000 5.021646 1.154849 +v 1.250000 4.616117 0.883882 +v 1.250000 4.345151 0.478353 +v 1.250000 4.250000 -0.000001 +v 1.250000 4.345151 -0.478356 +v 1.250000 4.616117 -0.883885 +v 1.250000 5.021647 -1.154850 +v 2.250000 5.500000 -1.250001 +v 2.250000 5.978355 -1.154850 +v 2.250000 6.383883 -0.883885 +v 2.250000 6.654850 -0.478356 +v 2.250000 6.750000 -0.000001 +v 2.250000 6.654850 0.478353 +v 2.250000 6.383883 0.883882 +v 2.250000 5.978355 1.154848 +v 2.250000 5.500000 1.249999 +v 2.250000 5.021646 1.154848 +v 2.250000 4.616117 0.883882 +v 2.250000 4.345151 0.478353 +v 2.250000 4.250000 -0.000001 +v 2.250000 4.345151 -0.478356 +v 2.250000 4.616117 -0.883885 +v 2.250000 5.021647 -1.154850 +v 2.250000 5.500001 -1.000001 +v 2.250000 5.882684 -0.923881 +v 2.250000 6.207108 -0.707108 +v 2.250000 6.423881 -0.382685 +v 2.250000 6.500001 -0.000001 +v 2.250000 6.423881 0.382683 +v 2.250000 6.207108 0.707105 +v 2.250000 5.882684 0.923878 +v 2.250000 5.500001 0.999999 +v 2.250000 5.117317 0.923878 +v 2.250000 4.792893 0.707105 +v 2.250000 4.576121 0.382683 +v 2.250000 4.500001 -0.000001 +v 2.250000 4.576121 -0.382685 +v 2.250000 4.792893 -0.707108 +v 2.250000 5.117318 -0.923881 +v 2.250000 5.500000 -0.750001 +v 2.250000 5.787013 -0.692910 +v 2.250000 6.030331 -0.530331 +v 2.250000 6.192910 -0.287013 +v 2.250000 6.250000 -0.000001 +v 2.250000 6.192910 0.287012 +v 2.250000 6.030331 0.530329 +v 2.250000 5.787013 0.692909 +v 2.250000 5.500000 0.749999 +v 2.250000 5.212988 0.692909 +v 2.250000 4.969670 0.530329 +v 2.250000 4.807091 0.287012 +v 2.250000 4.750000 -0.000001 +v 2.250000 4.807091 -0.287013 +v 2.250000 4.969670 -0.530331 +v 2.250000 5.212988 -0.692910 +v 2.000000 5.882684 -0.923881 +v 2.000000 5.500001 -1.000001 +v 2.000000 6.207108 -0.707108 +v 2.000000 6.423881 -0.382685 +v 2.000000 6.500001 -0.000001 +v 2.000000 6.423881 0.382683 +v 2.000000 6.207108 0.707105 +v 2.000000 5.882684 0.923878 +v 2.000000 5.500001 0.999999 +v 2.000000 5.117317 0.923878 +v 2.000000 4.792893 0.707105 +v 2.000000 4.576121 0.382683 +v 2.000000 4.500001 -0.000001 +v 2.000000 4.576121 -0.382685 +v 2.000000 4.792893 -0.707108 +v 2.000000 5.117318 -0.923881 +v 2.000000 5.787013 -0.692910 +v 2.000000 5.500000 -0.750001 +v 2.000000 6.030331 -0.530331 +v 2.000000 6.192910 -0.287013 +v 2.000000 6.250000 -0.000001 +v 2.000000 6.192910 0.287012 +v 2.000000 6.030331 0.530329 +v 2.000000 5.787013 0.692909 +v 2.000000 5.500000 0.749999 +v 2.000000 5.212988 0.692909 +v 2.000000 4.969670 0.530329 +v 2.000000 4.807091 0.287012 +v 2.000000 4.750000 -0.000001 +v 2.000000 4.807091 -0.287013 +v 2.000000 4.969670 -0.530331 +v 2.000000 5.212988 -0.692910 +v 1.250001 1.000000 4.250000 +v 2.250001 1.000000 4.250000 +v 1.250000 1.000000 2.250000 +v 2.250000 1.000000 2.250000 +v 1.250000 2.000000 2.250000 +v 1.250001 2.000000 4.250000 +v 2.250001 2.000000 4.250000 +v 2.250000 2.000000 2.250000 +v 1.500001 2.000000 4.000000 +v 2.000000 2.000000 4.000000 +v 1.500001 2.000000 3.500000 +v 2.000000 2.000000 3.500000 +v 1.500001 2.125000 3.500000 +v 1.500001 2.125000 4.000000 +v 2.000000 2.125000 4.000000 +v 2.000000 2.125000 3.500000 +v 1.625001 2.250000 3.625000 +v 1.625001 2.250000 3.875000 +v 1.875001 2.250000 3.875000 +v 1.875001 2.250000 3.625000 +v 1.875001 3.125000 3.625000 +v 2.000000 3.000000 3.625000 +v 1.875001 3.000000 3.500000 +v 1.875001 2.625000 3.625000 +v 1.875001 2.750000 3.500000 +v 2.000000 2.750000 3.625000 +v 1.875001 3.125000 3.875000 +v 1.875001 3.000000 4.000000 +v 2.000000 3.000000 3.875000 +v 1.875001 2.625000 3.875000 +v 2.000000 2.750000 3.875000 +v 1.875001 2.750000 4.000000 +v 1.625001 3.125000 3.625000 +v 1.625001 3.000000 3.500000 +v 1.500001 3.000000 3.625000 +v 1.625001 2.625000 3.625000 +v 1.500001 2.750000 3.625000 +v 1.625001 2.750000 3.500000 +v 1.625001 3.000000 4.000000 +v 1.625001 3.125000 3.875000 +v 1.500001 3.000000 3.875000 +v 1.625001 2.625000 3.875000 +v 1.625001 2.750000 4.000000 +v 1.500001 2.750000 3.875000 +v 2.000000 1.000000 -1.000000 +v 1.500000 1.000000 -1.000000 +v 2.000000 1.500000 -0.500000 +v 1.500000 1.500000 -0.500000 +v 2.000000 1.000000 -0.500000 +v 1.500000 1.000000 -0.500000 +v 1.500000 1.000000 1.000000 +v 2.000000 1.000000 1.000000 +v 1.500000 1.500000 0.500000 +v 2.000000 1.500000 0.500000 +v 1.500000 1.000000 0.500000 +v 2.000000 1.000000 0.500000 +v 1.625000 1.375000 2.250000 +v 1.875000 1.375000 2.250000 +v 1.625000 1.625000 2.250000 +v 1.875000 1.625000 2.250000 +v 1.625000 2.875000 0.500000 +v 1.875000 2.875000 0.500000 +v 1.625000 3.125000 0.500000 +v 1.875000 3.125000 0.500000 +v 1.625000 2.500000 0.937500 +v 1.625000 2.000000 1.375000 +v 1.625000 1.750000 1.812500 +v 1.875000 1.750000 1.812500 +v 1.875000 2.000000 1.375000 +v 1.875000 2.500000 0.937500 +v 1.875000 2.250000 0.937500 +v 1.875000 1.750000 1.375000 +v 1.875000 1.500000 1.812500 +v 1.625000 1.500000 1.812500 +v 1.625000 1.750000 1.375000 +v 1.625000 2.250000 0.937500 +v 0.500000 1.000000 2.250000 +v -0.500000 1.000000 2.250000 +v 0.500000 1.000000 4.250000 +v -0.500000 1.000000 4.250000 +v 0.500000 1.500000 3.750000 +v 0.500000 1.500000 2.750000 +v -0.500000 1.500000 2.750000 +v -0.500000 1.500000 3.750000 +v 2.250000 1.000000 -4.250000 +v 1.250000 1.000000 -4.250000 +v 2.250000 1.000000 -2.250000 +v 1.250000 1.000000 -2.250000 +v 2.250000 2.000000 -2.250000 +v 2.250000 2.000000 -4.250000 +v 1.250000 2.000000 -4.250000 +v 1.250000 2.000000 -2.250000 +v 2.000000 2.000000 -4.000000 +v 1.500000 2.000000 -4.000000 +v 2.000000 2.000000 -3.500000 +v 1.500000 2.000000 -3.500000 +v 2.000000 2.125000 -3.500000 +v 2.000000 2.125000 -4.000000 +v 1.500000 2.125000 -4.000000 +v 1.500000 2.125000 -3.500000 +v 1.875000 2.250000 -3.625000 +v 1.875000 2.250000 -3.875000 +v 1.625000 2.250000 -3.875000 +v 1.625000 2.250000 -3.625000 +v 1.625000 3.125000 -3.625000 +v 1.500000 3.000000 -3.625000 +v 1.625000 3.000000 -3.500000 +v 1.625000 2.625000 -3.625000 +v 1.625000 2.750000 -3.500000 +v 1.500000 2.750000 -3.625000 +v 1.625000 3.125000 -3.875000 +v 1.625000 3.000000 -4.000000 +v 1.500000 3.000000 -3.875000 +v 1.625000 2.625000 -3.875000 +v 1.500000 2.750000 -3.875000 +v 1.625000 2.750000 -4.000000 +v 1.875000 3.125000 -3.625000 +v 1.875000 3.000000 -3.500000 +v 2.000000 3.000000 -3.625000 +v 1.875000 2.625000 -3.625000 +v 2.000000 2.750000 -3.625000 +v 1.875000 2.750000 -3.500000 +v 1.875000 3.000000 -4.000000 +v 1.875000 3.125000 -3.875000 +v 2.000000 3.000000 -3.875000 +v 1.875000 2.625000 -3.875000 +v 1.875000 2.750000 -4.000000 +v 2.000000 2.750000 -3.875000 +v 1.875000 1.375000 -2.250000 +v 1.625000 1.375000 -2.250000 +v 1.875000 1.625000 -2.250000 +v 1.625000 1.625000 -2.250000 +v 1.875000 2.875000 -0.500000 +v 1.625000 2.875000 -0.500000 +v 1.875000 3.125000 -0.500000 +v 1.625000 3.125000 -0.500000 +v 1.875000 2.500000 -0.937500 +v 1.875000 2.000000 -1.375000 +v 1.875000 1.750000 -1.812500 +v 1.625000 1.750000 -1.812500 +v 1.625000 2.000000 -1.375000 +v 1.625000 2.500000 -0.937500 +v 1.625000 2.250000 -0.937500 +v 1.625000 1.750000 -1.375000 +v 1.625000 1.500000 -1.812500 +v 1.875000 1.500000 -1.812500 +v 1.875000 1.750000 -1.375000 +v 1.875000 2.250000 -0.937500 +v -2.249999 1.000000 4.250000 +v -1.249999 1.000000 4.250000 +v -2.250000 1.000000 2.250000 +v -1.250000 1.000000 2.250000 +v -2.250000 2.000000 2.250000 +v -2.249999 2.000000 4.250000 +v -1.249999 2.000000 4.250000 +v -1.250000 2.000000 2.250000 +v -1.999999 2.000000 4.000000 +v -1.500000 2.000000 4.000000 +v -1.999999 2.000000 3.500000 +v -1.500000 2.000000 3.500000 +v -1.999999 2.125000 3.500000 +v -1.999999 2.125000 4.000000 +v -1.500000 2.125000 4.000000 +v -1.500000 2.125000 3.500000 +v -1.874999 2.250000 3.625000 +v -1.874999 2.250000 3.875000 +v -1.624999 2.250000 3.875000 +v -1.624999 2.250000 3.625000 +v -1.624999 3.125000 3.625000 +v -1.500000 3.000000 3.625000 +v -1.624999 3.000000 3.500000 +v -1.624999 2.625000 3.625000 +v -1.624999 2.750000 3.500000 +v -1.500000 2.750000 3.625000 +v -1.624999 3.125000 3.875000 +v -1.624999 3.000000 4.000000 +v -1.500000 3.000000 3.875000 +v -1.624999 2.625000 3.875000 +v -1.500000 2.750000 3.875000 +v -1.624999 2.750000 4.000000 +v -1.874999 3.125000 3.625000 +v -1.874999 3.000000 3.500000 +v -1.999999 3.000000 3.625000 +v -1.874999 2.625000 3.625000 +v -1.999999 2.750000 3.625000 +v -1.874999 2.750000 3.500000 +v -1.874999 3.000000 4.000000 +v -1.874999 3.125000 3.875000 +v -1.999999 3.000000 3.875000 +v -1.874999 2.625000 3.875000 +v -1.874999 2.750000 4.000000 +v -1.999999 2.750000 3.875000 +v -1.875000 1.375000 2.250000 +v -1.625000 1.375000 2.250000 +v -1.875000 1.625000 2.250000 +v -1.625000 1.625000 2.250000 +v -1.875000 2.875000 0.500000 +v -1.625000 2.875000 0.500000 +v -1.875000 3.125000 0.500000 +v -1.625000 3.125000 0.500000 +v -1.875000 2.500000 0.937500 +v -1.875000 2.000000 1.375000 +v -1.875000 1.750000 1.812500 +v -1.625000 1.750000 1.812500 +v -1.625000 2.000000 1.375000 +v -1.625000 2.500000 0.937500 +v -1.625000 2.250000 0.937500 +v -1.625000 1.750000 1.375000 +v -1.625000 1.500000 1.812500 +v -1.875000 1.500000 1.812500 +v -1.875000 1.750000 1.375000 +v -1.875000 2.250000 0.937500 +v -2.250000 5.750000 -0.250000 +v -2.250000 5.250000 -0.250000 +v -2.250000 5.750000 0.250000 +v -2.250000 5.250000 0.250000 +v -2.375000 5.750000 0.250000 +v -2.375000 5.750000 -0.250000 +v -2.375000 5.250000 -0.250000 +v -2.375000 5.250000 0.250000 +v -2.500000 5.625000 0.125000 +v -2.500000 5.625000 -0.125000 +v -2.500000 5.375000 -0.125000 +v -2.500000 5.375000 0.125000 +v -3.375000 5.375000 0.125000 +v -3.250000 5.250000 0.125000 +v -3.250000 5.375000 0.250000 +v -2.875000 5.375000 0.125000 +v -3.000000 5.375000 0.250000 +v -3.000000 5.250000 0.125000 +v -3.375000 5.375000 -0.125000 +v -3.250000 5.375000 -0.250000 +v -3.250000 5.250000 -0.125000 +v -2.875000 5.375000 -0.125000 +v -3.000000 5.250000 -0.125000 +v -3.000000 5.375000 -0.250000 +v -3.375000 5.625000 0.125000 +v -3.250000 5.625000 0.250000 +v -3.250000 5.750000 0.125000 +v -2.875000 5.625000 0.125000 +v -3.000000 5.750000 0.125000 +v -3.000000 5.625000 0.250000 +v -3.250000 5.625000 -0.250000 +v -3.375000 5.625000 -0.125000 +v -3.250000 5.750000 -0.125000 +v -2.875000 5.625000 -0.125000 +v -3.000000 5.625000 -0.250000 +v -3.000000 5.750000 -0.125000 +v 2.250000 5.750000 0.250000 +v 2.250000 5.250000 0.250000 +v 2.250000 5.750000 -0.250000 +v 2.250000 5.250000 -0.250000 +v 2.375000 5.750000 -0.250000 +v 2.375000 5.750000 0.250000 +v 2.375000 5.250000 0.250000 +v 2.375000 5.250000 -0.250000 +v 2.500000 5.625000 -0.125000 +v 2.500000 5.625000 0.125000 +v 2.500000 5.375000 0.125000 +v 2.500000 5.375000 -0.125000 +v 3.375000 5.375000 -0.125000 +v 3.250000 5.250000 -0.125000 +v 3.250000 5.375000 -0.250000 +v 2.875000 5.375000 -0.125000 +v 3.000000 5.375000 -0.250000 +v 3.000000 5.250000 -0.125000 +v 3.375000 5.375000 0.125000 +v 3.250000 5.375000 0.250000 +v 3.250000 5.250000 0.125000 +v 2.875000 5.375000 0.125000 +v 3.000000 5.250000 0.125000 +v 3.000000 5.375000 0.250000 +v 3.375000 5.625000 -0.125000 +v 3.250000 5.625000 -0.250000 +v 3.250000 5.750000 -0.125000 +v 2.875000 5.625000 -0.125000 +v 3.000000 5.750000 -0.125000 +v 3.000000 5.625000 -0.250000 +v 3.250000 5.625000 0.250000 +v 3.375000 5.625000 0.125000 +v 3.250000 5.750000 0.125000 +v 2.875000 5.625000 0.125000 +v 3.000000 5.625000 0.250000 +v 3.000000 5.750000 0.125000 +vt 0.035714 0.582090 +vt 0.357143 0.283582 +vt 0.357143 0.582090 +vt 0.642857 0.656716 +vt 0.678571 0.507463 +vt 0.642857 0.507463 +vt 0.642857 0.686567 +vt 0.678571 0.656716 +vt 0.678571 0.477612 +vt 0.642857 0.477612 +vt 0.678571 0.283582 +vt 0.642857 0.880597 +vt 0.678571 0.686567 +vt 0.357143 0.940298 +vt 0.035714 0.641791 +vt 0.357143 0.641791 +vt 0.035714 1.000000 +vt 0.357143 1.000000 +vt 0.000000 0.641791 +vt 0.035714 0.940298 +vt -0.000000 0.940298 +vt 0.392857 0.940298 +vt 0.392857 0.641791 +vt 0.428571 0.462687 +vt 0.464286 0.402985 +vt 0.446429 0.462687 +vt 0.517857 0.462687 +vt 0.553571 0.402985 +vt 0.535714 0.462687 +vt 0.428571 0.611940 +vt 0.517857 0.611940 +vt 0.589286 0.462687 +vt 0.553571 0.611940 +vt 0.553571 0.462687 +vt 0.500000 0.462687 +vt 0.464286 0.611940 +vt 0.464286 0.462687 +vt 0.589286 0.402985 +vt 0.500000 0.402985 +vt 0.428571 0.343284 +vt 0.444196 0.358209 +vt 0.430804 0.358209 +vt 0.464286 0.343284 +vt 0.448661 0.358209 +vt 0.446429 0.343284 +vt 0.482143 0.343284 +vt 0.466518 0.358209 +vt 0.500000 0.343284 +vt 0.484375 0.358209 +vt 0.515625 0.358209 +vt 0.502232 0.358209 +vt 0.535714 0.343284 +vt 0.520089 0.358209 +vt 0.517857 0.343284 +vt 0.553571 0.343284 +vt 0.537946 0.358209 +vt 0.571429 0.343284 +vt 0.555804 0.358209 +vt 0.587054 0.358209 +vt 0.573661 0.358209 +vt 0.607143 0.343284 +vt 0.591518 0.358209 +vt 0.589286 0.343284 +vt 0.625000 0.343284 +vt 0.609375 0.358209 +vt 0.640625 0.358209 +vt 0.627232 0.358209 +vt 0.375000 0.343284 +vt 0.359375 0.358209 +vt 0.357143 0.343284 +vt 0.390625 0.358209 +vt 0.377232 0.358209 +vt 0.410714 0.343284 +vt 0.395089 0.358209 +vt 0.392857 0.343284 +vt 0.412946 0.358209 +vt 0.357194 0.447761 +vt 0.383929 0.403071 +vt 0.410663 0.447761 +vt 0.462054 0.373134 +vt 0.450893 0.388060 +vt 0.448661 0.373134 +vt 0.479911 0.373134 +vt 0.468750 0.388060 +vt 0.466518 0.373134 +vt 0.497768 0.373134 +vt 0.486607 0.388060 +vt 0.484375 0.373134 +vt 0.515625 0.373134 +vt 0.504464 0.388060 +vt 0.502232 0.373134 +vt 0.533482 0.373134 +vt 0.522321 0.388060 +vt 0.520089 0.373134 +vt 0.537946 0.373134 +vt 0.549107 0.388060 +vt 0.540179 0.388060 +vt 0.569196 0.373134 +vt 0.558036 0.388060 +vt 0.555804 0.373134 +vt 0.573661 0.373134 +vt 0.584821 0.388060 +vt 0.575893 0.388060 +vt 0.591518 0.373134 +vt 0.602679 0.388060 +vt 0.593750 0.388060 +vt 0.609375 0.373134 +vt 0.620536 0.388060 +vt 0.611607 0.388060 +vt 0.640625 0.373134 +vt 0.629464 0.388060 +vt 0.627232 0.373134 +vt 0.359375 0.373134 +vt 0.370536 0.388060 +vt 0.361607 0.388060 +vt 0.377232 0.373134 +vt 0.388393 0.388060 +vt 0.379464 0.388060 +vt 0.395089 0.373134 +vt 0.406250 0.388060 +vt 0.397321 0.388060 +vt 0.412946 0.373134 +vt 0.424107 0.388060 +vt 0.415179 0.388060 +vt 0.444196 0.373134 +vt 0.433036 0.388060 +vt 0.430804 0.373134 +vt 0.816964 0.440298 +vt 0.808036 0.417910 +vt 0.816964 0.417910 +vt 0.714286 0.343284 +vt 0.785714 0.402985 +vt 0.714286 0.402985 +vt 0.821429 0.402985 +vt 0.785714 0.343284 +vt 0.821429 0.343284 +vt 0.678571 0.343284 +vt 0.678571 0.402985 +vt 0.785714 0.283582 +vt 0.714286 0.283582 +vt 0.714286 0.462687 +vt 0.785714 0.462687 +vt 0.839286 0.410448 +vt 0.825893 0.417910 +vt 0.821429 0.410448 +vt 0.839286 0.402985 +vt 0.821429 0.402985 +vt 0.803571 0.402985 +vt 0.785714 0.410448 +vt 0.785714 0.402985 +vt 0.857143 0.402985 +vt 0.803571 0.410448 +vt 0.790179 0.417910 +vt 0.852679 0.417910 +vt 0.843750 0.417910 +vt 0.799107 0.440298 +vt 0.799107 0.417910 +vt 0.852679 0.440298 +vt 0.834821 0.440298 +vt 0.834821 0.417910 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.447761 +vt 0.861607 0.432836 +vt 0.870536 0.432836 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.861607 0.410448 +vt 0.857143 0.410448 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.861607 0.425373 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.425373 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.410448 +vt 0.392857 0.552239 +vt 0.375000 0.522388 +vt 0.392857 0.522388 +vt 0.375000 0.552239 +vt 0.392857 0.582090 +vt 0.375000 0.582090 +vt 0.375000 0.492537 +vt 0.392857 0.492537 +vt 0.357143 0.522388 +vt 0.375000 0.552239 +vt 0.357143 0.552239 +vt 0.375000 0.522388 +vt 0.357143 0.492537 +vt 0.375000 0.492537 +vt 0.375000 0.582090 +vt 0.357143 0.582090 +vt 0.939732 0.313433 +vt 0.955357 0.298507 +vt 0.955357 0.313433 +vt 0.939732 0.328358 +vt 0.955357 0.343284 +vt 0.939732 0.343284 +vt 0.892857 0.328358 +vt 0.908482 0.343284 +vt 0.892857 0.343284 +vt 0.908482 0.328358 +vt 0.924107 0.343284 +vt 0.924107 0.328358 +vt 0.892857 0.313433 +vt 0.908482 0.298507 +vt 0.908482 0.313433 +vt 0.924107 0.298507 +vt 0.924107 0.313433 +vt 0.939732 0.298507 +vt 0.875000 0.373134 +vt 0.839286 0.313433 +vt 0.875000 0.313433 +vt 0.892857 0.283582 +vt 0.821429 0.283582 +vt 0.821429 0.313433 +vt 0.839286 0.373134 +vt 0.821429 0.373134 +vt 0.892857 0.373134 +vt 0.892857 0.313433 +vt 0.821429 0.402985 +vt 0.892857 0.402985 +vt 0.678571 0.686567 +vt 0.642857 0.880597 +vt 0.642857 0.686567 +vt 0.642857 0.477612 +vt 0.678571 0.283582 +vt 0.678571 0.477612 +vt 0.642857 0.507463 +vt 0.678571 0.656716 +vt 0.642857 0.656716 +vt 0.678571 0.507463 +vt 0.428571 0.462687 +vt 0.464286 0.402985 +vt 0.446429 0.462687 +vt 0.517857 0.462687 +vt 0.553571 0.402985 +vt 0.535714 0.462687 +vt 0.428571 0.611940 +vt 0.517857 0.611940 +vt 0.589286 0.462687 +vt 0.553571 0.611940 +vt 0.553571 0.462687 +vt 0.500000 0.462687 +vt 0.464286 0.611940 +vt 0.464286 0.462687 +vt 0.589286 0.402985 +vt 0.500000 0.402985 +vt 0.428571 0.343284 +vt 0.444196 0.358209 +vt 0.430804 0.358209 +vt 0.464286 0.343284 +vt 0.448661 0.358209 +vt 0.446429 0.343284 +vt 0.482143 0.343284 +vt 0.466518 0.358209 +vt 0.500000 0.343284 +vt 0.484375 0.358209 +vt 0.515625 0.358209 +vt 0.502232 0.358209 +vt 0.535714 0.343284 +vt 0.520089 0.358209 +vt 0.517857 0.343284 +vt 0.553571 0.343284 +vt 0.537946 0.358209 +vt 0.571429 0.343284 +vt 0.555804 0.358209 +vt 0.587054 0.358209 +vt 0.573661 0.358209 +vt 0.607143 0.343284 +vt 0.591518 0.358209 +vt 0.589286 0.343284 +vt 0.625000 0.343284 +vt 0.609375 0.358209 +vt 0.640625 0.358209 +vt 0.627232 0.358209 +vt 0.375000 0.343284 +vt 0.359375 0.358209 +vt 0.357143 0.343284 +vt 0.390625 0.358209 +vt 0.377232 0.358209 +vt 0.410714 0.343284 +vt 0.395089 0.358209 +vt 0.392857 0.343284 +vt 0.412946 0.358209 +vt 0.357194 0.447761 +vt 0.383929 0.403071 +vt 0.410663 0.447761 +vt 0.462054 0.373134 +vt 0.450893 0.388060 +vt 0.448661 0.373134 +vt 0.479911 0.373134 +vt 0.468750 0.388060 +vt 0.466518 0.373134 +vt 0.497768 0.373134 +vt 0.486607 0.388060 +vt 0.484375 0.373134 +vt 0.515625 0.373134 +vt 0.504464 0.388060 +vt 0.502232 0.373134 +vt 0.533482 0.373134 +vt 0.522321 0.388060 +vt 0.520089 0.373134 +vt 0.537946 0.373134 +vt 0.549107 0.388060 +vt 0.540179 0.388060 +vt 0.569196 0.373134 +vt 0.558036 0.388060 +vt 0.555804 0.373134 +vt 0.573661 0.373134 +vt 0.584821 0.388060 +vt 0.575893 0.388060 +vt 0.591518 0.373134 +vt 0.602679 0.388060 +vt 0.593750 0.388060 +vt 0.609375 0.373134 +vt 0.620536 0.388060 +vt 0.611607 0.388060 +vt 0.640625 0.373134 +vt 0.629464 0.388060 +vt 0.627232 0.373134 +vt 0.359375 0.373134 +vt 0.370536 0.388060 +vt 0.361607 0.388060 +vt 0.377232 0.373134 +vt 0.388393 0.388060 +vt 0.379464 0.388060 +vt 0.395089 0.373134 +vt 0.406250 0.388060 +vt 0.397321 0.388060 +vt 0.412946 0.373134 +vt 0.424107 0.388060 +vt 0.415179 0.388060 +vt 0.444196 0.373134 +vt 0.433036 0.388060 +vt 0.430804 0.373134 +vt 0.816964 0.440298 +vt 0.808036 0.417910 +vt 0.816964 0.417910 +vt 0.714286 0.402985 +vt 0.785714 0.343284 +vt 0.785714 0.402985 +vt 0.821429 0.402985 +vt 0.821429 0.343284 +vt 0.678571 0.343284 +vt 0.678571 0.402985 +vt 0.785714 0.283582 +vt 0.714286 0.343284 +vt 0.714286 0.283582 +vt 0.714286 0.462687 +vt 0.785714 0.462687 +vt 0.839286 0.410448 +vt 0.825893 0.417910 +vt 0.821429 0.410448 +vt 0.839286 0.402985 +vt 0.821429 0.402985 +vt 0.803571 0.402985 +vt 0.785714 0.410448 +vt 0.785714 0.402985 +vt 0.857143 0.402985 +vt 0.803571 0.410448 +vt 0.790179 0.417910 +vt 0.852679 0.417910 +vt 0.843750 0.417910 +vt 0.799107 0.440298 +vt 0.799107 0.417910 +vt 0.852679 0.440298 +vt 0.834821 0.440298 +vt 0.834821 0.417910 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.447761 +vt 0.861607 0.432836 +vt 0.870536 0.432836 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.861607 0.410448 +vt 0.857143 0.410448 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.861607 0.425373 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.425373 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.410448 +vt 0.392857 0.552239 +vt 0.375000 0.522388 +vt 0.392857 0.522388 +vt 0.375000 0.552239 +vt 0.392857 0.582090 +vt 0.375000 0.582090 +vt 0.375000 0.492537 +vt 0.392857 0.492537 +vt 0.357143 0.522388 +vt 0.375000 0.552239 +vt 0.357143 0.552239 +vt 0.375000 0.522388 +vt 0.357143 0.492537 +vt 0.375000 0.492537 +vt 0.375000 0.582090 +vt 0.357143 0.582090 +vt 0.939732 0.313433 +vt 0.955357 0.298507 +vt 0.955357 0.313433 +vt 0.939732 0.328358 +vt 0.955357 0.343284 +vt 0.939732 0.343284 +vt 0.892857 0.328358 +vt 0.908482 0.343284 +vt 0.892857 0.343284 +vt 0.908482 0.328358 +vt 0.924107 0.343284 +vt 0.924107 0.328358 +vt 0.892857 0.313433 +vt 0.908482 0.298507 +vt 0.908482 0.313433 +vt 0.924107 0.298507 +vt 0.924107 0.313433 +vt 0.939732 0.298507 +vt 0.875000 0.313433 +vt 0.839286 0.373134 +vt 0.839286 0.313433 +vt 0.892857 0.283582 +vt 0.821429 0.283582 +vt 0.821429 0.313433 +vt 0.821429 0.373134 +vt 0.892857 0.373134 +vt 0.892857 0.313433 +vt 0.821429 0.402985 +vt 0.875000 0.373134 +vt 0.892857 0.402985 +vt 0.816964 0.440298 +vt 0.808036 0.417910 +vt 0.816964 0.417910 +vt 0.714286 0.343284 +vt 0.785714 0.402985 +vt 0.714286 0.402985 +vt 0.821429 0.402985 +vt 0.785714 0.343284 +vt 0.821429 0.343284 +vt 0.678571 0.343284 +vt 0.678571 0.402985 +vt 0.785714 0.283582 +vt 0.714286 0.283582 +vt 0.714286 0.462687 +vt 0.785714 0.462687 +vt 0.839286 0.410448 +vt 0.825893 0.417910 +vt 0.821429 0.410448 +vt 0.839286 0.402985 +vt 0.821429 0.402985 +vt 0.803571 0.402985 +vt 0.785714 0.410448 +vt 0.785714 0.402985 +vt 0.857143 0.402985 +vt 0.803571 0.410448 +vt 0.790179 0.417910 +vt 0.852679 0.417910 +vt 0.843750 0.417910 +vt 0.799107 0.440298 +vt 0.799107 0.417910 +vt 0.852679 0.440298 +vt 0.834821 0.440298 +vt 0.834821 0.417910 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.447761 +vt 0.861607 0.432836 +vt 0.870536 0.432836 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.861607 0.410448 +vt 0.857143 0.410448 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.861607 0.425373 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.425373 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.410448 +vt 0.939732 0.313433 +vt 0.955357 0.298507 +vt 0.955357 0.313433 +vt 0.939732 0.328358 +vt 0.955357 0.343284 +vt 0.939732 0.343284 +vt 0.892857 0.328358 +vt 0.908482 0.343284 +vt 0.892857 0.343284 +vt 0.908482 0.328358 +vt 0.924107 0.343284 +vt 0.924107 0.328358 +vt 0.892857 0.313433 +vt 0.908482 0.298507 +vt 0.908482 0.313433 +vt 0.924107 0.298507 +vt 0.924107 0.313433 +vt 0.939732 0.298507 +vt 0.816964 0.440298 +vt 0.808036 0.417910 +vt 0.816964 0.417910 +vt 0.714286 0.402985 +vt 0.785714 0.343284 +vt 0.785714 0.402985 +vt 0.821429 0.402985 +vt 0.821429 0.343284 +vt 0.678571 0.343284 +vt 0.678571 0.402985 +vt 0.785714 0.283582 +vt 0.714286 0.343284 +vt 0.714286 0.283582 +vt 0.714286 0.462687 +vt 0.785714 0.462687 +vt 0.839286 0.410448 +vt 0.825893 0.417910 +vt 0.821429 0.410448 +vt 0.839286 0.402985 +vt 0.821429 0.402985 +vt 0.803571 0.402985 +vt 0.785714 0.410448 +vt 0.785714 0.402985 +vt 0.857143 0.402985 +vt 0.803571 0.410448 +vt 0.790179 0.417910 +vt 0.852679 0.417910 +vt 0.843750 0.417910 +vt 0.799107 0.440298 +vt 0.799107 0.417910 +vt 0.852679 0.440298 +vt 0.834821 0.440298 +vt 0.834821 0.417910 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.447761 +vt 0.861607 0.432836 +vt 0.870536 0.432836 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.861607 0.410448 +vt 0.857143 0.410448 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.861607 0.425373 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.425373 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.410448 +vt 0.939732 0.313433 +vt 0.955357 0.298507 +vt 0.955357 0.313433 +vt 0.939732 0.328358 +vt 0.955357 0.343284 +vt 0.939732 0.343284 +vt 0.892857 0.328358 +vt 0.908482 0.343284 +vt 0.892857 0.343284 +vt 0.908482 0.328358 +vt 0.924107 0.343284 +vt 0.924107 0.328358 +vt 0.892857 0.313433 +vt 0.908482 0.298507 +vt 0.908482 0.313433 +vt 0.924107 0.298507 +vt 0.924107 0.313433 +vt 0.939732 0.298507 +vt 0.816964 0.440298 +vt 0.808036 0.417910 +vt 0.816964 0.417910 +vt 0.839286 0.410448 +vt 0.825893 0.417910 +vt 0.821429 0.410448 +vt 0.839286 0.402985 +vt 0.821429 0.402985 +vt 0.803571 0.402985 +vt 0.785714 0.410448 +vt 0.785714 0.402985 +vt 0.857143 0.402985 +vt 0.803571 0.410448 +vt 0.790179 0.417910 +vt 0.857143 0.410448 +vt 0.843750 0.417910 +vt 0.799107 0.440298 +vt 0.799107 0.417910 +vt 0.852679 0.440298 +vt 0.852679 0.417910 +vt 0.834821 0.440298 +vt 0.834821 0.417910 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.447761 +vt 0.861607 0.432836 +vt 0.870536 0.432836 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.861607 0.410448 +vt 0.857143 0.410448 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.861607 0.425373 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.425373 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.410448 +vt 0.816964 0.440298 +vt 0.808036 0.417910 +vt 0.816964 0.417910 +vt 0.839286 0.410448 +vt 0.825893 0.417910 +vt 0.821429 0.410448 +vt 0.839286 0.402985 +vt 0.821429 0.402985 +vt 0.803571 0.402985 +vt 0.785714 0.410448 +vt 0.785714 0.402985 +vt 0.857143 0.402985 +vt 0.803571 0.410448 +vt 0.790179 0.417910 +vt 0.857143 0.410448 +vt 0.843750 0.417910 +vt 0.799107 0.440298 +vt 0.799107 0.417910 +vt 0.852679 0.440298 +vt 0.852679 0.417910 +vt 0.834821 0.440298 +vt 0.834821 0.417910 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.425373 +vt 0.861607 0.410448 +vt 0.870536 0.410448 +vt 0.870536 0.447761 +vt 0.861607 0.432836 +vt 0.870536 0.432836 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.861607 0.410448 +vt 0.857143 0.410448 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.861607 0.425373 +vt 0.861607 0.432836 +vt 0.857143 0.425373 +vt 0.861607 0.402985 +vt 0.857143 0.410448 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.425373 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.402985 +vt 0.870536 0.432836 +vt 0.870536 0.410448 +vt 0.035714 0.283582 +vt 0.642857 0.283582 +vt 0.678571 0.880597 +vt 0.410714 0.402985 +vt 0.446429 0.611940 +vt 0.535714 0.611940 +vt 0.589286 0.611940 +vt 0.500000 0.611940 +vt 0.462054 0.358209 +vt 0.479911 0.358209 +vt 0.497768 0.358209 +vt 0.533482 0.358209 +vt 0.551339 0.358209 +vt 0.569196 0.358209 +vt 0.604911 0.358209 +vt 0.622768 0.358209 +vt 0.642857 0.343284 +vt 0.372768 0.358209 +vt 0.408482 0.358209 +vt 0.426339 0.358209 +vt 0.408628 0.464863 +vt 0.383929 0.492452 +vt 0.402833 0.479362 +vt 0.394160 0.489050 +vt 0.373698 0.489050 +vt 0.365025 0.479362 +vt 0.359229 0.464863 +vt 0.359229 0.430659 +vt 0.365025 0.416160 +vt 0.373698 0.406473 +vt 0.394160 0.406473 +vt 0.402833 0.416160 +vt 0.408628 0.430659 +vt 0.459821 0.388060 +vt 0.477679 0.388060 +vt 0.495536 0.388060 +vt 0.513393 0.388060 +vt 0.531250 0.388060 +vt 0.551339 0.373134 +vt 0.566964 0.388060 +vt 0.587054 0.373134 +vt 0.604911 0.373134 +vt 0.622768 0.373134 +vt 0.638393 0.388060 +vt 0.372768 0.373134 +vt 0.390625 0.373134 +vt 0.408482 0.373134 +vt 0.426339 0.373134 +vt 0.441964 0.388060 +vt 0.808036 0.440298 +vt 0.857143 0.410448 +vt 0.790179 0.440298 +vt 0.843750 0.440298 +vt 0.825893 0.440298 +vt 0.861607 0.447761 +vt 0.955357 0.328358 +vt 0.892857 0.298507 +vt 0.678571 0.880597 +vt 0.642857 0.283582 +vt 0.410714 0.402985 +vt 0.446429 0.611940 +vt 0.535714 0.611940 +vt 0.589286 0.611940 +vt 0.500000 0.611940 +vt 0.462054 0.358209 +vt 0.479911 0.358209 +vt 0.497768 0.358209 +vt 0.533482 0.358209 +vt 0.551339 0.358209 +vt 0.569196 0.358209 +vt 0.604911 0.358209 +vt 0.622768 0.358209 +vt 0.642857 0.343284 +vt 0.372768 0.358209 +vt 0.408482 0.358209 +vt 0.426339 0.358209 +vt 0.408628 0.464863 +vt 0.383929 0.492452 +vt 0.402833 0.479362 +vt 0.394160 0.489050 +vt 0.373698 0.489050 +vt 0.365025 0.479362 +vt 0.359229 0.464863 +vt 0.359229 0.430659 +vt 0.365025 0.416160 +vt 0.373698 0.406473 +vt 0.394160 0.406473 +vt 0.402833 0.416160 +vt 0.408628 0.430659 +vt 0.459821 0.388060 +vt 0.477679 0.388060 +vt 0.495536 0.388060 +vt 0.513393 0.388060 +vt 0.531250 0.388060 +vt 0.551339 0.373134 +vt 0.566964 0.388060 +vt 0.587054 0.373134 +vt 0.604911 0.373134 +vt 0.622768 0.373134 +vt 0.638393 0.388060 +vt 0.372768 0.373134 +vt 0.390625 0.373134 +vt 0.408482 0.373134 +vt 0.426339 0.373134 +vt 0.441964 0.388060 +vt 0.808036 0.440298 +vt 0.857143 0.410448 +vt 0.790179 0.440298 +vt 0.843750 0.440298 +vt 0.825893 0.440298 +vt 0.861607 0.447761 +vt 0.955357 0.328358 +vt 0.892857 0.298507 +vt 0.808036 0.440298 +vt 0.857143 0.410448 +vt 0.790179 0.440298 +vt 0.843750 0.440298 +vt 0.825893 0.440298 +vt 0.861607 0.447761 +vt 0.955357 0.328358 +vt 0.892857 0.298507 +vt 0.808036 0.440298 +vt 0.857143 0.410448 +vt 0.790179 0.440298 +vt 0.843750 0.440298 +vt 0.825893 0.440298 +vt 0.861607 0.447761 +vt 0.955357 0.328358 +vt 0.892857 0.298507 +vt 0.808036 0.440298 +vt 0.790179 0.440298 +vt 0.843750 0.440298 +vt 0.825893 0.440298 +vt 0.861607 0.447761 +vt 0.808036 0.440298 +vt 0.790179 0.440298 +vt 0.843750 0.440298 +vt 0.825893 0.440298 +vt 0.861607 0.447761 +vt 0.870536 0.402985 +vt 0.625000 0.283582 +vt 0.607143 0.283582 +vt 0.500000 0.283582 +vt 0.482143 0.283582 +vt 0.642857 0.283582 +vt 0.517857 0.283582 +vt 0.375000 0.283582 +vt 0.357143 0.283582 +vt 0.535714 0.283582 +vt 0.392857 0.283582 +vt 0.553571 0.283582 +vt 0.410714 0.283582 +vt 0.571429 0.283582 +vt 0.446429 0.283582 +vt 0.428571 0.283582 +vt 0.589286 0.283582 +vt 0.464286 0.283582 +vt 0.433036 0.402985 +vt 0.441964 0.402985 +vt 0.379464 0.402985 +vt 0.388393 0.402985 +vt 0.361607 0.402985 +vt 0.370536 0.402985 +vt 0.629464 0.402985 +vt 0.638393 0.402985 +vt 0.611607 0.402985 +vt 0.620536 0.402985 +vt 0.593750 0.402985 +vt 0.602679 0.402985 +vt 0.575893 0.402985 +vt 0.584821 0.402985 +vt 0.397321 0.402985 +vt 0.406250 0.402985 +vt 0.450893 0.402985 +vt 0.459821 0.402985 +vt 0.415179 0.402985 +vt 0.424107 0.402985 +vt 0.468750 0.402985 +vt 0.477679 0.402985 +vt 0.486607 0.402985 +vt 0.495536 0.402985 +vt 0.504464 0.402985 +vt 0.513393 0.402985 +vt 0.522321 0.402985 +vt 0.531250 0.402985 +vt 0.540179 0.402985 +vt 0.549107 0.402985 +vt 0.558036 0.402985 +vt 0.566964 0.402985 +vt 0.939732 0.283582 +vt 0.892857 0.283582 +vt 0.908482 0.283582 +vt 0.924107 0.283582 +vt 0.607143 0.283582 +vt 0.500000 0.283582 +vt 0.482143 0.283582 +vt 0.642857 0.283582 +vt 0.625000 0.283582 +vt 0.517857 0.283582 +vt 0.375000 0.283582 +vt 0.357143 0.283582 +vt 0.535714 0.283582 +vt 0.392857 0.283582 +vt 0.410714 0.283582 +vt 0.571429 0.283582 +vt 0.553571 0.283582 +vt 0.446429 0.283582 +vt 0.428571 0.283582 +vt 0.589286 0.283582 +vt 0.464286 0.283582 +vt 0.433036 0.402985 +vt 0.441964 0.402985 +vt 0.388393 0.402985 +vt 0.361607 0.402985 +vt 0.370536 0.402985 +vt 0.638393 0.402985 +vt 0.611607 0.402985 +vt 0.620536 0.402985 +vt 0.593750 0.402985 +vt 0.602679 0.402985 +vt 0.575893 0.402985 +vt 0.584821 0.402985 +vt 0.397321 0.402985 +vt 0.406250 0.402985 +vt 0.450893 0.402985 +vt 0.459821 0.402985 +vt 0.415179 0.402985 +vt 0.424107 0.402985 +vt 0.468750 0.402985 +vt 0.477679 0.402985 +vt 0.486607 0.402985 +vt 0.495536 0.402985 +vt 0.504464 0.402985 +vt 0.513393 0.402985 +vt 0.522321 0.402985 +vt 0.531250 0.402985 +vt 0.540179 0.402985 +vt 0.549107 0.402985 +vt 0.558036 0.402985 +vt 0.566964 0.402985 +vt 0.955357 0.283582 +vt 0.892857 0.283582 +vt 0.908482 0.283582 +vt 0.939732 0.283582 +vt 0.939732 0.283582 +vt 0.892857 0.283582 +vt 0.908482 0.283582 +vt 0.924107 0.283582 +vt 0.955357 0.283582 +vt 0.892857 0.283582 +vt 0.908482 0.283582 +vt 0.924107 0.283582 +vt 0.955357 0.283582 +vt 0.379464 0.402985 +vt 0.629464 0.402985 +vt 0.924107 0.283582 +vt 0.955357 0.283582 +vt 0.939732 0.283582 +vn 0.0000 -1.0000 0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.8944 0.4472 0.0000 +vn -0.8944 0.4472 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.0000 0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +vn -0.5774 0.5773 0.5773 +vn -0.5774 -0.5773 0.5773 +vn -0.5774 0.5773 -0.5773 +vn -0.5774 -0.5773 -0.5773 +vn 0.5774 0.5774 0.5774 +vn 0.5774 -0.5774 0.5774 +vn 0.5774 0.5774 -0.5774 +vn 0.5774 -0.5774 -0.5774 +vn 0.0000 -0.7071 -0.7071 +vn -0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.5774 0.5773 -0.5773 +vn 0.5774 -0.5773 -0.5773 +vn 0.5774 0.5773 0.5773 +vn 0.5774 -0.5773 0.5773 +vn -0.5774 0.5774 -0.5774 +vn -0.5774 -0.5774 -0.5774 +vn -0.5774 0.5774 0.5774 +vn -0.5774 -0.5774 0.5774 +vn 0.5773 0.5774 0.5774 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 0.9239 0.3827 +vn 0.0000 0.9239 -0.3827 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 0.3827 -0.9239 +vn 0.0000 -0.3827 0.9239 +vn 0.0000 0.3827 0.9239 +vn -0.0000 -0.3827 -0.9239 +vn 0.0000 0.6169 -0.7871 +vn 0.0000 0.5735 -0.8192 +vn 0.0000 -0.6169 0.7871 +vn 0.0000 -0.5735 0.8192 +vn 0.0000 -0.9615 0.2747 +vn 0.0000 -0.9216 0.3882 +vn 0.0000 -0.7741 0.6331 +vn 0.0000 0.9615 -0.2747 +vn 0.0000 0.9216 -0.3882 +vn 0.0000 0.7741 -0.6331 +vn 0.0000 0.6169 0.7871 +vn 0.0000 0.5735 0.8192 +vn -0.0000 -0.6169 -0.7871 +vn -0.0000 -0.5735 -0.8192 +vn 0.0000 -0.9615 -0.2747 +vn 0.0000 -0.9216 -0.3882 +vn -0.0000 -0.7741 -0.6331 +vn 0.0000 0.9615 0.2747 +vn 0.0000 0.9216 0.3882 +vn 0.0000 0.7741 0.6331 +s off +f 835/1205/221 834/1206/221 833/1207/221 +f 838/1208/221 844/1209/221 841/1210/221 +f 837/1211/222 839/1212/222 838/1208/222 +f 841/1210/223 843/1213/223 842/1214/223 +f 848/1215/224 842/1214/224 843/1213/224 +f 845/1216/225 840/1217/225 837/1211/225 +f 851/1218/226 849/1219/226 850/1220/226 +f 836/1221/224 851/1218/224 834/1222/224 +f 833/1207/225 849/1219/225 835/1205/225 +f 835/1223/227 852/1224/227 836/1225/227 +f 834/1226/228 850/1220/228 833/1227/228 +f 856/1228/227 863/1229/227 855/1230/227 +f 853/1231/228 862/1232/228 854/1233/228 +f 855/1230/227 860/1234/227 856/1228/227 +f 854/1233/228 858/1235/228 853/1231/228 +f 856/1236/224 859/1237/224 854/1238/224 +f 853/1239/225 857/1240/225 855/1241/225 +f 854/1238/229 864/1242/229 856/1236/229 +f 855/1241/230 861/1243/230 853/1239/230 +f 881/1244/225 898/1245/225 897/1246/225 +f 883/1247/225 898/1248/225 882/1249/225 +f 884/1250/225 899/1251/225 883/1247/225 +f 885/1252/225 900/1253/225 884/1250/225 +f 885/1252/225 902/1254/225 901/1255/225 +f 887/1256/225 902/1257/225 886/1258/225 +f 888/1259/225 903/1260/225 887/1256/225 +f 889/1261/225 904/1262/225 888/1259/225 +f 889/1261/225 906/1263/225 905/1264/225 +f 891/1265/225 906/1266/225 890/1267/225 +f 892/1268/225 907/1269/225 891/1265/225 +f 892/1268/225 909/1270/225 908/1271/225 +f 894/1272/225 909/1273/225 893/1274/225 +f 894/1272/225 911/1275/225 910/1276/225 +f 896/1277/225 911/1278/225 895/1279/225 +f 881/1244/225 912/1280/225 896/1277/225 +f 921/1281/225 925/1282/225 913/1283/225 +f 931/1284/225 945/1285/225 929/1286/225 +f 932/1287/225 947/1288/225 931/1289/225 +f 933/1290/225 948/1291/225 932/1292/225 +f 934/1293/225 949/1294/225 933/1295/225 +f 935/1296/225 950/1297/225 934/1298/225 +f 935/1299/225 952/1300/225 951/1301/225 +f 937/1302/225 952/1303/225 936/1304/225 +f 937/1305/225 954/1306/225 953/1307/225 +f 938/1308/225 955/1309/225 954/1310/225 +f 939/1311/225 956/1312/225 955/1313/225 +f 941/1314/225 956/1315/225 940/1316/225 +f 941/1317/225 958/1318/225 957/1319/225 +f 942/1320/225 959/1321/225 958/1322/225 +f 943/1323/225 960/1324/225 959/1325/225 +f 944/1326/225 946/1327/225 960/1328/225 +f 929/1329/225 946/1330/225 930/1331/225 +f 990/1332/227 978/1333/227 979/1334/227 +f 967/1335/226 965/1336/226 966/1337/226 +f 963/1338/228 968/1339/228 964/1340/228 +f 962/1341/227 966/1337/227 961/1342/227 +f 964/1343/225 967/1335/225 962/1344/225 +f 961/1345/224 965/1336/224 963/1346/224 +f 976/1347/231 979/1348/231 975/1349/231 +f 972/1350/225 975/1349/225 970/1351/225 +f 969/1352/224 973/1353/224 971/1354/224 +f 971/1355/228 976/1347/228 972/1350/228 +f 970/1351/227 974/1356/227 969/1352/227 +f 974/1356/232 977/1357/232 973/1353/232 +f 976/1347/233 977/1358/233 980/1359/233 +f 975/1349/234 978/1333/234 974/1356/234 +f 1002/1360/224 977/1357/224 978/1361/224 +f 996/1362/228 980/1359/228 977/1358/228 +f 984/1363/225 979/1348/225 980/1364/225 +f 988/1365/227 1003/1366/227 992/1367/227 +f 1001/1368/224 997/1369/224 1004/1370/224 +f 994/1371/228 985/1372/228 998/1373/228 +f 993/1374/226 987/1375/226 981/1376/226 +f 981/1377/235 982/1378/235 983/1379/235 +f 984/1380/236 985/1372/236 986/1381/236 +f 987/1375/237 988/1382/237 989/1383/237 +f 990/1384/238 991/1385/238 992/1386/238 +f 993/1387/239 994/1388/239 995/1389/239 +f 996/1390/240 997/1369/240 998/1391/240 +f 999/1392/241 1000/1393/241 1001/1394/241 +f 1002/1395/242 1003/1366/242 1004/1396/242 +f 1000/1393/234 988/1365/234 987/1397/234 +f 990/1398/243 1003/1366/243 1002/1395/243 +f 992/1386/244 989/1383/244 988/1382/244 +f 987/1375/231 982/1399/231 981/1376/231 +f 984/1400/222 991/1385/222 990/1384/222 +f 986/1381/245 983/1379/245 982/1378/245 +f 981/1377/233 994/1371/233 993/1401/233 +f 996/1402/246 985/1372/246 984/1380/246 +f 998/1391/247 995/1389/247 994/1388/247 +f 993/1387/232 1001/1368/232 1000/1403/232 +f 999/1392/248 1004/1396/248 1003/1366/248 +f 1002/1404/223 997/1369/223 996/1390/223 +f 982/1399/225 991/1385/225 986/1405/225 +f 1006/1406/233 1007/1407/233 1005/1408/233 +f 1008/1409/224 1006/1410/224 1010/1411/224 +f 1007/1407/225 1009/1412/225 1005/1413/225 +f 1012/1414/234 1013/1415/234 1011/1416/234 +f 1014/1417/225 1012/1418/225 1016/1419/225 +f 1013/1415/224 1015/1420/224 1011/1421/224 +f 1030/1422/225 1022/1423/225 1024/1424/225 +f 1025/1425/224 1021/1426/224 1036/1427/224 +f 1019/1428/224 1034/1429/224 1017/1430/224 +f 1027/1431/224 1035/1432/224 1034/1429/224 +f 1026/1433/224 1036/1427/224 1035/1432/224 +f 1020/1434/225 1033/1435/225 1028/1436/225 +f 1028/1436/225 1032/1437/225 1029/1438/225 +f 1029/1438/225 1031/1439/225 1030/1422/225 +f 1043/1440/226 1041/1441/226 1042/1442/226 +f 1037/1443/225 1041/1441/225 1039/1444/225 +f 1039/1445/234 1044/1446/234 1040/1447/234 +f 1038/1448/233 1042/1442/233 1037/1449/233 +f 1040/1450/224 1043/1440/224 1038/1451/224 +f 1053/1452/224 1048/1453/224 1056/1454/224 +f 1051/1455/225 1045/1456/225 1050/1457/225 +f 1050/1457/231 1052/1458/231 1051/1455/231 +f 1054/1459/232 1056/1454/232 1055/1460/232 +f 1049/1461/226 1055/1460/226 1052/1458/226 +f 1060/1462/228 1067/1463/228 1059/1464/228 +f 1057/1465/227 1066/1466/227 1058/1467/227 +f 1059/1464/228 1064/1468/228 1060/1462/228 +f 1058/1467/227 1062/1469/227 1057/1465/227 +f 1060/1470/225 1063/1471/225 1058/1472/225 +f 1057/1473/224 1061/1474/224 1059/1475/224 +f 1058/1472/230 1068/1476/230 1060/1470/230 +f 1059/1475/229 1065/1477/229 1057/1473/229 +f 1085/1478/224 1102/1479/224 1101/1480/224 +f 1087/1481/224 1102/1482/224 1086/1483/224 +f 1088/1484/224 1103/1485/224 1087/1481/224 +f 1089/1486/224 1104/1487/224 1088/1484/224 +f 1089/1486/224 1106/1488/224 1105/1489/224 +f 1091/1490/224 1106/1491/224 1090/1492/224 +f 1092/1493/224 1107/1494/224 1091/1490/224 +f 1093/1495/224 1108/1496/224 1092/1493/224 +f 1093/1495/224 1110/1497/224 1109/1498/224 +f 1095/1499/224 1110/1500/224 1094/1501/224 +f 1096/1502/224 1111/1503/224 1095/1499/224 +f 1096/1502/224 1113/1504/224 1112/1505/224 +f 1098/1506/224 1113/1507/224 1097/1508/224 +f 1098/1506/224 1115/1509/224 1114/1510/224 +f 1100/1511/224 1115/1512/224 1099/1513/224 +f 1085/1478/224 1116/1514/224 1100/1511/224 +f 1125/1515/224 1129/1516/224 1117/1517/224 +f 1135/1518/224 1149/1519/224 1133/1520/224 +f 1136/1521/224 1151/1522/224 1135/1523/224 +f 1137/1524/224 1152/1525/224 1136/1526/224 +f 1138/1527/224 1153/1528/224 1137/1529/224 +f 1139/1530/224 1154/1531/224 1138/1532/224 +f 1139/1533/224 1156/1534/224 1155/1535/224 +f 1141/1536/224 1156/1537/224 1140/1538/224 +f 1141/1539/224 1158/1540/224 1157/1541/224 +f 1142/1542/224 1159/1543/224 1158/1544/224 +f 1143/1545/224 1160/1546/224 1159/1547/224 +f 1145/1548/224 1160/1549/224 1144/1550/224 +f 1145/1551/224 1162/1552/224 1161/1553/224 +f 1146/1554/224 1163/1555/224 1162/1556/224 +f 1147/1557/224 1164/1558/224 1163/1559/224 +f 1148/1560/224 1150/1561/224 1164/1562/224 +f 1133/1563/224 1150/1564/224 1134/1565/224 +f 1194/1566/228 1182/1567/228 1183/1568/228 +f 1170/1569/226 1172/1570/226 1169/1571/226 +f 1167/1572/227 1172/1570/227 1168/1573/227 +f 1166/1574/228 1170/1569/228 1165/1575/228 +f 1168/1576/224 1171/1577/224 1166/1578/224 +f 1165/1579/225 1169/1571/225 1167/1580/225 +f 1180/1581/232 1183/1582/232 1179/1583/232 +f 1176/1584/224 1179/1583/224 1174/1585/224 +f 1173/1586/225 1177/1587/225 1175/1588/225 +f 1175/1589/227 1180/1581/227 1176/1584/227 +f 1174/1585/228 1178/1590/228 1173/1586/228 +f 1178/1590/231 1181/1591/231 1177/1587/231 +f 1180/1581/234 1181/1592/234 1184/1593/234 +f 1179/1583/233 1182/1567/233 1178/1590/233 +f 1206/1594/225 1181/1591/225 1182/1595/225 +f 1200/1596/227 1184/1593/227 1181/1592/227 +f 1188/1597/224 1183/1582/224 1184/1598/224 +f 1192/1599/228 1207/1600/228 1196/1601/228 +f 1205/1602/225 1201/1603/225 1208/1604/225 +f 1198/1605/227 1189/1606/227 1202/1607/227 +f 1197/1608/226 1191/1609/226 1185/1610/226 +f 1185/1611/249 1186/1612/249 1187/1613/249 +f 1188/1614/250 1189/1606/250 1190/1615/250 +f 1191/1609/251 1192/1616/251 1193/1617/251 +f 1194/1618/252 1195/1619/252 1196/1620/252 +f 1197/1621/253 1198/1622/253 1199/1623/253 +f 1200/1624/254 1201/1603/254 1202/1625/254 +f 1203/1626/255 1204/1627/255 1205/1628/255 +f 1206/1629/256 1207/1600/256 1208/1630/256 +f 1204/1627/233 1192/1599/233 1191/1631/233 +f 1194/1632/246 1207/1600/246 1206/1629/246 +f 1196/1620/247 1193/1617/247 1192/1616/247 +f 1191/1609/232 1186/1633/232 1185/1610/232 +f 1188/1634/223 1195/1619/223 1194/1618/223 +f 1190/1615/248 1187/1613/248 1186/1612/248 +f 1185/1611/234 1198/1605/234 1197/1635/234 +f 1200/1636/243 1189/1606/243 1188/1614/243 +f 1202/1625/244 1199/1623/244 1198/1622/244 +f 1197/1621/231 1205/1602/231 1204/1637/231 +f 1203/1626/245 1208/1630/245 1207/1600/245 +f 1206/1638/222 1201/1603/222 1200/1624/222 +f 1186/1633/224 1195/1619/224 1190/1639/224 +f 1210/1640/234 1211/1641/234 1209/1642/234 +f 1212/1643/225 1210/1644/225 1214/1645/225 +f 1211/1641/224 1213/1646/224 1209/1647/224 +f 1216/1648/233 1217/1649/233 1215/1650/233 +f 1218/1651/224 1216/1652/224 1220/1653/224 +f 1217/1649/225 1219/1654/225 1215/1655/225 +f 1234/1656/224 1226/1657/224 1228/1658/224 +f 1229/1659/225 1225/1660/225 1240/1661/225 +f 1223/1662/225 1238/1663/225 1221/1664/225 +f 1231/1665/225 1239/1666/225 1238/1663/225 +f 1230/1667/225 1240/1661/225 1239/1666/225 +f 1224/1668/224 1237/1669/224 1232/1670/224 +f 1232/1670/224 1236/1671/224 1233/1672/224 +f 1233/1672/224 1235/1673/224 1234/1656/224 +f 1246/1674/226 1248/1675/226 1245/1676/226 +f 1241/1677/224 1245/1676/224 1243/1678/224 +f 1243/1679/233 1248/1675/233 1244/1680/233 +f 1242/1681/234 1246/1674/234 1241/1682/234 +f 1244/1683/225 1247/1684/225 1242/1685/225 +f 1278/1686/227 1266/1687/227 1267/1688/227 +f 1255/1689/226 1253/1690/226 1254/1691/226 +f 1251/1692/228 1256/1693/228 1252/1694/228 +f 1250/1695/227 1254/1691/227 1249/1696/227 +f 1252/1697/225 1255/1689/225 1250/1698/225 +f 1249/1699/224 1253/1690/224 1251/1700/224 +f 1264/1701/231 1267/1702/231 1263/1703/231 +f 1260/1704/225 1263/1703/225 1258/1705/225 +f 1257/1706/224 1261/1707/224 1259/1708/224 +f 1259/1709/228 1264/1701/228 1260/1704/228 +f 1258/1705/227 1262/1710/227 1257/1706/227 +f 1262/1710/232 1265/1711/232 1261/1707/232 +f 1264/1701/233 1265/1712/233 1268/1713/233 +f 1263/1703/234 1266/1687/234 1262/1710/234 +f 1290/1714/224 1265/1711/224 1266/1715/224 +f 1284/1716/228 1268/1713/228 1265/1712/228 +f 1272/1717/225 1267/1702/225 1268/1718/225 +f 1276/1719/227 1291/1720/227 1280/1721/227 +f 1289/1722/224 1285/1723/224 1292/1724/224 +f 1282/1725/228 1273/1726/228 1286/1727/228 +f 1281/1728/226 1275/1729/226 1269/1730/226 +f 1269/1731/235 1270/1732/235 1271/1733/235 +f 1272/1734/236 1273/1726/236 1274/1735/236 +f 1275/1729/237 1276/1736/237 1277/1737/237 +f 1278/1738/238 1279/1739/238 1280/1740/238 +f 1281/1741/239 1282/1742/239 1283/1743/239 +f 1284/1744/240 1285/1723/240 1286/1745/240 +f 1287/1746/241 1288/1747/241 1289/1748/241 +f 1290/1749/242 1291/1720/242 1292/1750/242 +f 1288/1747/234 1276/1719/234 1275/1751/234 +f 1278/1752/243 1291/1720/243 1290/1749/243 +f 1280/1740/244 1277/1737/244 1276/1736/244 +f 1275/1729/231 1270/1753/231 1269/1730/231 +f 1272/1754/222 1279/1739/222 1278/1738/222 +f 1274/1735/245 1271/1733/245 1270/1732/245 +f 1269/1731/233 1282/1725/233 1281/1755/233 +f 1284/1756/246 1273/1726/246 1272/1734/246 +f 1286/1745/247 1283/1743/247 1282/1742/247 +f 1281/1741/232 1289/1722/232 1288/1757/232 +f 1287/1746/248 1292/1750/248 1291/1720/248 +f 1290/1758/223 1285/1723/223 1284/1744/223 +f 1270/1753/225 1279/1739/225 1274/1759/225 +f 1306/1760/225 1298/1761/225 1300/1762/225 +f 1301/1763/224 1297/1764/224 1312/1765/224 +f 1295/1766/224 1310/1767/224 1293/1768/224 +f 1303/1769/224 1311/1770/224 1310/1767/224 +f 1302/1771/224 1312/1765/224 1311/1770/224 +f 1296/1772/225 1309/1773/225 1304/1774/225 +f 1304/1774/225 1308/1775/225 1305/1776/225 +f 1305/1776/225 1307/1777/225 1306/1760/225 +f 1342/1778/228 1330/1779/228 1331/1780/228 +f 1318/1781/226 1320/1782/226 1317/1783/226 +f 1315/1784/227 1320/1782/227 1316/1785/227 +f 1314/1786/228 1318/1781/228 1313/1787/228 +f 1316/1788/224 1319/1789/224 1314/1790/224 +f 1313/1791/225 1317/1783/225 1315/1792/225 +f 1328/1793/232 1331/1794/232 1327/1795/232 +f 1324/1796/224 1327/1795/224 1322/1797/224 +f 1321/1798/225 1325/1799/225 1323/1800/225 +f 1323/1801/227 1328/1793/227 1324/1796/227 +f 1322/1797/228 1326/1802/228 1321/1798/228 +f 1326/1802/231 1329/1803/231 1325/1799/231 +f 1328/1793/234 1329/1804/234 1332/1805/234 +f 1327/1795/233 1330/1779/233 1326/1802/233 +f 1354/1806/225 1329/1803/225 1330/1807/225 +f 1348/1808/227 1332/1805/227 1329/1804/227 +f 1336/1809/224 1331/1794/224 1332/1810/224 +f 1340/1811/228 1355/1812/228 1344/1813/228 +f 1353/1814/225 1349/1815/225 1356/1816/225 +f 1346/1817/227 1337/1818/227 1350/1819/227 +f 1345/1820/226 1339/1821/226 1333/1822/226 +f 1333/1823/249 1334/1824/249 1335/1825/249 +f 1336/1826/250 1337/1818/250 1338/1827/250 +f 1339/1821/251 1340/1828/251 1341/1829/251 +f 1342/1830/252 1343/1831/252 1344/1832/252 +f 1345/1833/253 1346/1834/253 1347/1835/253 +f 1348/1836/254 1349/1815/254 1350/1837/254 +f 1351/1838/255 1352/1839/255 1353/1840/255 +f 1354/1841/256 1355/1812/256 1356/1842/256 +f 1352/1839/233 1340/1811/233 1339/1843/233 +f 1342/1844/246 1355/1812/246 1354/1841/246 +f 1344/1832/247 1341/1829/247 1340/1828/247 +f 1339/1821/232 1334/1845/232 1333/1822/232 +f 1336/1846/223 1343/1831/223 1342/1830/223 +f 1338/1827/248 1335/1825/248 1334/1824/248 +f 1333/1823/234 1346/1817/234 1345/1847/234 +f 1348/1848/243 1337/1818/243 1336/1826/243 +f 1350/1837/244 1347/1835/244 1346/1834/244 +f 1345/1833/231 1353/1814/231 1352/1849/231 +f 1351/1838/245 1356/1842/245 1355/1812/245 +f 1354/1850/222 1349/1815/222 1348/1836/222 +f 1334/1845/224 1343/1831/224 1338/1851/224 +f 1370/1852/224 1362/1853/224 1364/1854/224 +f 1365/1855/225 1361/1856/225 1376/1857/225 +f 1359/1858/225 1374/1859/225 1357/1860/225 +f 1367/1861/225 1375/1862/225 1374/1859/225 +f 1366/1863/225 1376/1857/225 1375/1862/225 +f 1360/1864/224 1373/1865/224 1368/1866/224 +f 1368/1866/224 1372/1867/224 1369/1868/224 +f 1369/1868/224 1371/1869/224 1370/1852/224 +f 1398/1870/227 1386/1871/227 1387/1872/227 +f 1384/1873/222 1387/1874/222 1383/1875/222 +f 1380/1876/221 1383/1875/221 1378/1877/221 +f 1377/1878/226 1381/1879/226 1379/1880/226 +f 1379/1881/228 1384/1873/228 1380/1876/228 +f 1378/1877/227 1382/1882/227 1377/1878/227 +f 1382/1882/231 1385/1883/231 1381/1879/231 +f 1381/1884/245 1388/1885/245 1384/1873/245 +f 1383/1875/244 1386/1871/244 1382/1882/244 +f 1410/1886/226 1385/1883/226 1386/1887/226 +f 1404/1888/228 1388/1885/228 1385/1889/228 +f 1392/1890/221 1387/1874/221 1388/1891/221 +f 1396/1892/227 1411/1893/227 1400/1894/227 +f 1409/1895/226 1405/1896/226 1412/1897/226 +f 1402/1898/228 1393/1899/228 1406/1900/228 +f 1401/1901/225 1395/1902/225 1389/1903/225 +f 1389/1904/256 1390/1905/256 1391/1906/256 +f 1392/1907/240 1393/1899/240 1394/1908/240 +f 1395/1902/254 1396/1909/254 1397/1910/254 +f 1398/1911/242 1399/1912/242 1400/1913/242 +f 1401/1914/255 1402/1915/255 1403/1916/255 +f 1404/1917/239 1405/1896/239 1406/1918/239 +f 1407/1919/253 1408/1920/253 1409/1921/253 +f 1410/1922/241 1411/1893/241 1412/1923/241 +f 1408/1920/244 1396/1892/244 1395/1924/244 +f 1398/1925/248 1411/1893/248 1410/1922/248 +f 1400/1913/243 1397/1910/243 1396/1909/243 +f 1395/1902/222 1390/1926/222 1389/1903/222 +f 1392/1927/223 1399/1912/223 1398/1911/223 +f 1394/1908/246 1391/1906/246 1390/1905/246 +f 1389/1904/245 1402/1898/245 1401/1928/245 +f 1404/1929/247 1393/1899/247 1392/1907/247 +f 1406/1918/233 1403/1916/233 1402/1915/233 +f 1401/1914/231 1409/1895/231 1408/1930/231 +f 1407/1919/234 1412/1923/234 1411/1893/234 +f 1410/1931/232 1405/1896/232 1404/1917/232 +f 1390/1926/221 1399/1912/221 1394/1932/221 +f 1434/1933/228 1422/1934/228 1423/1935/228 +f 1420/1936/223 1423/1937/223 1419/1938/223 +f 1416/1939/221 1419/1938/221 1414/1940/221 +f 1413/1941/226 1417/1942/226 1415/1943/226 +f 1415/1944/227 1420/1936/227 1416/1939/227 +f 1414/1940/228 1418/1945/228 1413/1941/228 +f 1418/1945/232 1421/1946/232 1417/1942/232 +f 1417/1947/248 1424/1948/248 1420/1936/248 +f 1419/1938/247 1422/1934/247 1418/1945/247 +f 1446/1949/226 1421/1946/226 1422/1950/226 +f 1440/1951/227 1424/1948/227 1421/1952/227 +f 1428/1953/221 1423/1937/221 1424/1954/221 +f 1432/1955/228 1447/1956/228 1436/1957/228 +f 1445/1958/226 1441/1959/226 1448/1960/226 +f 1438/1961/227 1429/1962/227 1442/1963/227 +f 1437/1964/224 1431/1965/224 1425/1966/224 +f 1425/1967/242 1426/1968/242 1427/1969/242 +f 1428/1970/254 1429/1962/254 1430/1971/254 +f 1431/1965/240 1432/1972/240 1433/1973/240 +f 1434/1974/256 1435/1975/256 1436/1976/256 +f 1437/1977/241 1438/1978/241 1439/1979/241 +f 1440/1980/253 1441/1959/253 1442/1981/253 +f 1443/1982/257 1444/1983/257 1445/1984/257 +f 1446/1985/255 1447/1956/255 1448/1986/255 +f 1444/1983/247 1432/1955/247 1431/1987/247 +f 1434/1988/245 1447/1956/245 1446/1985/245 +f 1436/1976/246 1433/1973/246 1432/1972/246 +f 1431/1965/223 1426/1989/223 1425/1966/223 +f 1428/1990/222 1435/1975/222 1434/1974/222 +f 1430/1971/243 1427/1969/243 1426/1968/243 +f 1425/1967/248 1438/1961/248 1437/1991/248 +f 1440/1992/244 1429/1962/244 1428/1970/244 +f 1442/1981/234 1439/1979/234 1438/1978/234 +f 1444/1993/232 1439/1979/232 1445/1958/232 +f 1443/1982/233 1448/1986/233 1447/1956/233 +f 1440/1980/231 1448/1960/231 1441/1959/231 +f 1426/1989/221 1435/1975/221 1430/1994/221 +f 835/1205/221 836/1995/221 834/1206/221 +f 838/1208/221 839/1212/221 844/1209/221 +f 837/1211/222 840/1217/222 839/1212/222 +f 841/1210/223 844/1209/223 843/1213/223 +f 848/1215/224 847/1996/224 842/1214/224 +f 845/1216/225 846/1997/225 840/1217/225 +f 851/1218/226 852/1224/226 849/1219/226 +f 836/1221/224 852/1224/224 851/1218/224 +f 833/1207/225 850/1220/225 849/1219/225 +f 835/1223/227 849/1219/227 852/1224/227 +f 834/1226/228 851/1218/228 850/1220/228 +f 856/1228/227 864/1998/227 863/1229/227 +f 853/1231/228 861/1243/228 862/1232/228 +f 855/1230/227 857/1999/227 860/1234/227 +f 854/1233/228 859/2000/228 858/1235/228 +f 856/1236/224 860/2001/224 859/1237/224 +f 853/1239/225 858/2002/225 857/1240/225 +f 854/1238/229 862/1232/229 864/1242/229 +f 855/1241/230 863/1229/230 861/1243/230 +f 881/1244/225 882/1249/225 898/1245/225 +f 883/1247/225 899/2003/225 898/1248/225 +f 884/1250/225 900/2004/225 899/1251/225 +f 885/1252/225 901/2005/225 900/1253/225 +f 885/1252/225 886/1258/225 902/1254/225 +f 887/1256/225 903/2006/225 902/1257/225 +f 888/1259/225 904/2007/225 903/1260/225 +f 889/1261/225 905/2008/225 904/1262/225 +f 889/1261/225 890/1267/225 906/1263/225 +f 891/1265/225 907/2009/225 906/1266/225 +f 892/1268/225 908/2010/225 907/1269/225 +f 892/1268/225 893/2011/225 909/1270/225 +f 894/1272/225 910/2012/225 909/1273/225 +f 894/1272/225 895/1279/225 911/1275/225 +f 896/1277/225 912/2013/225 911/1278/225 +f 881/1244/225 897/2014/225 912/1280/225 +f 913/1283/225 914/2015/225 917/2016/225 +f 914/2015/225 915/2017/225 917/2016/225 +f 915/2017/225 916/2018/225 917/2016/225 +f 917/2016/225 918/2019/225 919/2020/225 +f 919/2020/225 920/2021/225 921/1281/225 +f 921/1281/225 922/2022/225 923/2023/225 +f 923/2023/225 924/2024/225 921/1281/225 +f 924/2024/225 925/1282/225 921/1281/225 +f 925/1282/225 926/2025/225 927/2026/225 +f 927/2026/225 928/2027/225 925/1282/225 +f 928/2027/225 913/1283/225 925/1282/225 +f 917/2016/225 919/2020/225 913/1283/225 +f 919/2020/225 921/1281/225 913/1283/225 +f 931/1284/225 947/2028/225 945/1285/225 +f 932/1287/225 948/2029/225 947/1288/225 +f 933/1290/225 949/2030/225 948/1291/225 +f 934/1293/225 950/2031/225 949/1294/225 +f 935/1296/225 951/2032/225 950/1297/225 +f 935/1299/225 936/2033/225 952/1300/225 +f 937/1302/225 953/2034/225 952/1303/225 +f 937/1305/225 938/2035/225 954/1306/225 +f 938/1308/225 939/2036/225 955/1309/225 +f 939/1311/225 940/2037/225 956/1312/225 +f 941/1314/225 957/2038/225 956/1315/225 +f 941/1317/225 942/2039/225 958/1318/225 +f 942/1320/225 943/2040/225 959/1321/225 +f 943/1323/225 944/2041/225 960/1324/225 +f 944/1326/225 930/2042/225 946/1327/225 +f 929/1329/225 945/2043/225 946/1330/225 +f 990/1332/227 1002/2044/227 978/1333/227 +f 967/1335/226 968/1339/226 965/1336/226 +f 963/1338/228 965/1336/228 968/1339/228 +f 962/1341/227 967/1335/227 966/1337/227 +f 964/1343/225 968/1339/225 967/1335/225 +f 961/1345/224 966/1337/224 965/1336/224 +f 976/1347/231 980/1364/231 979/1348/231 +f 972/1350/225 976/1347/225 975/1349/225 +f 969/1352/224 974/1356/224 973/1353/224 +f 971/1355/228 973/2045/228 976/1347/228 +f 970/1351/227 975/1349/227 974/1356/227 +f 974/1356/232 978/1361/232 977/1357/232 +f 976/1347/233 973/2045/233 977/1358/233 +f 975/1349/234 979/1334/234 978/1333/234 +f 1002/1360/224 996/2046/224 977/1357/224 +f 996/1362/228 984/2047/228 980/1359/228 +f 984/1363/225 990/2048/225 979/1348/225 +f 988/1365/227 999/1392/227 1003/1366/227 +f 1001/1368/224 995/1389/224 997/1369/224 +f 994/1371/228 983/1379/228 985/1372/228 +f 993/1374/226 1000/2049/226 987/1375/226 +f 1000/1393/234 999/1392/234 988/1365/234 +f 990/1398/243 992/1367/243 1003/1366/243 +f 992/1386/244 991/1385/244 989/1383/244 +f 987/1375/231 989/1383/231 982/1399/231 +f 984/1400/222 986/1405/222 991/1385/222 +f 986/1381/245 985/1372/245 983/1379/245 +f 981/1377/233 983/1379/233 994/1371/233 +f 996/1402/246 998/1373/246 985/1372/246 +f 998/1391/247 997/1369/247 995/1389/247 +f 993/1387/232 995/1389/232 1001/1368/232 +f 999/1392/248 1001/1394/248 1004/1396/248 +f 1002/1404/223 1004/1370/223 997/1369/223 +f 982/1399/225 989/1383/225 991/1385/225 +f 1006/1406/233 1008/1409/233 1007/1407/233 +f 1012/1414/234 1014/1417/234 1013/1415/234 +f 1030/1422/225 1031/1439/225 1022/1423/225 +f 1025/1425/224 1023/2050/224 1021/1426/224 +f 1019/1428/224 1027/1431/224 1034/1429/224 +f 1027/1431/224 1026/1433/224 1035/1432/224 +f 1026/1433/224 1025/1425/224 1036/1427/224 +f 1020/1434/225 1018/2051/225 1033/1435/225 +f 1028/1436/225 1033/1435/225 1032/1437/225 +f 1029/1438/225 1032/1437/225 1031/1439/225 +f 1043/1440/226 1044/1446/226 1041/1441/226 +f 1037/1443/225 1042/1442/225 1041/1441/225 +f 1039/1445/234 1041/1441/234 1044/1446/234 +f 1038/1448/233 1043/1440/233 1042/1442/233 +f 1040/1450/224 1044/1446/224 1043/1440/224 +f 1053/1452/224 1047/2052/224 1048/1453/224 +f 1051/1455/225 1046/2053/225 1045/1456/225 +f 1050/1457/231 1049/1461/231 1052/1458/231 +f 1054/1459/232 1053/1452/232 1056/1454/232 +f 1049/1461/226 1054/1459/226 1055/1460/226 +f 1060/1462/228 1068/2054/228 1067/1463/228 +f 1057/1465/227 1065/1477/227 1066/1466/227 +f 1059/1464/228 1061/2055/228 1064/1468/228 +f 1058/1467/227 1063/2056/227 1062/1469/227 +f 1060/1470/225 1064/2057/225 1063/1471/225 +f 1057/1473/224 1062/2058/224 1061/1474/224 +f 1058/1472/230 1066/1466/230 1068/1476/230 +f 1059/1475/229 1067/1463/229 1065/1477/229 +f 1085/1478/224 1086/1483/224 1102/1479/224 +f 1087/1481/224 1103/2059/224 1102/1482/224 +f 1088/1484/224 1104/2060/224 1103/1485/224 +f 1089/1486/224 1105/2061/224 1104/1487/224 +f 1089/1486/224 1090/1492/224 1106/1488/224 +f 1091/1490/224 1107/2062/224 1106/1491/224 +f 1092/1493/224 1108/2063/224 1107/1494/224 +f 1093/1495/224 1109/2064/224 1108/1496/224 +f 1093/1495/224 1094/1501/224 1110/1497/224 +f 1095/1499/224 1111/2065/224 1110/1500/224 +f 1096/1502/224 1112/2066/224 1111/1503/224 +f 1096/1502/224 1097/2067/224 1113/1504/224 +f 1098/1506/224 1114/2068/224 1113/1507/224 +f 1098/1506/224 1099/1513/224 1115/1509/224 +f 1100/1511/224 1116/2069/224 1115/1512/224 +f 1085/1478/224 1101/2070/224 1116/1514/224 +f 1117/1517/224 1118/2071/224 1121/2072/224 +f 1118/2071/224 1119/2073/224 1121/2072/224 +f 1119/2073/224 1120/2074/224 1121/2072/224 +f 1121/2072/224 1122/2075/224 1123/2076/224 +f 1123/2076/224 1124/2077/224 1125/1515/224 +f 1125/1515/224 1126/2078/224 1127/2079/224 +f 1127/2079/224 1128/2080/224 1125/1515/224 +f 1128/2080/224 1129/1516/224 1125/1515/224 +f 1129/1516/224 1130/2081/224 1131/2082/224 +f 1131/2082/224 1132/2083/224 1129/1516/224 +f 1132/2083/224 1117/1517/224 1129/1516/224 +f 1121/2072/224 1123/2076/224 1117/1517/224 +f 1123/2076/224 1125/1515/224 1117/1517/224 +f 1135/1518/224 1151/2084/224 1149/1519/224 +f 1136/1521/224 1152/2085/224 1151/1522/224 +f 1137/1524/224 1153/2086/224 1152/1525/224 +f 1138/1527/224 1154/2087/224 1153/1528/224 +f 1139/1530/224 1155/2088/224 1154/1531/224 +f 1139/1533/224 1140/2089/224 1156/1534/224 +f 1141/1536/224 1157/2090/224 1156/1537/224 +f 1141/1539/224 1142/2091/224 1158/1540/224 +f 1142/1542/224 1143/2092/224 1159/1543/224 +f 1143/1545/224 1144/2093/224 1160/1546/224 +f 1145/1548/224 1161/2094/224 1160/1549/224 +f 1145/1551/224 1146/2095/224 1162/1552/224 +f 1146/1554/224 1147/2096/224 1163/1555/224 +f 1147/1557/224 1148/2097/224 1164/1558/224 +f 1148/1560/224 1134/2098/224 1150/1561/224 +f 1133/1563/224 1149/2099/224 1150/1564/224 +f 1194/1566/228 1206/2100/228 1182/1567/228 +f 1170/1569/226 1171/1577/226 1172/1570/226 +f 1167/1572/227 1169/1571/227 1172/1570/227 +f 1166/1574/228 1171/1577/228 1170/1569/228 +f 1168/1576/224 1172/1570/224 1171/1577/224 +f 1165/1579/225 1170/1569/225 1169/1571/225 +f 1180/1581/232 1184/1598/232 1183/1582/232 +f 1176/1584/224 1180/1581/224 1179/1583/224 +f 1173/1586/225 1178/1590/225 1177/1587/225 +f 1175/1589/227 1177/2101/227 1180/1581/227 +f 1174/1585/228 1179/1583/228 1178/1590/228 +f 1178/1590/231 1182/1595/231 1181/1591/231 +f 1180/1581/234 1177/2101/234 1181/1592/234 +f 1179/1583/233 1183/1568/233 1182/1567/233 +f 1206/1594/225 1200/2102/225 1181/1591/225 +f 1200/1596/227 1188/2103/227 1184/1593/227 +f 1188/1597/224 1194/2104/224 1183/1582/224 +f 1192/1599/228 1203/1626/228 1207/1600/228 +f 1205/1602/225 1199/1623/225 1201/1603/225 +f 1198/1605/227 1187/1613/227 1189/1606/227 +f 1197/1608/226 1204/2105/226 1191/1609/226 +f 1204/1627/233 1203/1626/233 1192/1599/233 +f 1194/1632/246 1196/1601/246 1207/1600/246 +f 1196/1620/247 1195/1619/247 1193/1617/247 +f 1191/1609/232 1193/1617/232 1186/1633/232 +f 1188/1634/223 1190/1639/223 1195/1619/223 +f 1190/1615/248 1189/1606/248 1187/1613/248 +f 1185/1611/234 1187/1613/234 1198/1605/234 +f 1200/1636/243 1202/1607/243 1189/1606/243 +f 1202/1625/244 1201/1603/244 1199/1623/244 +f 1197/1621/231 1199/1623/231 1205/1602/231 +f 1203/1626/245 1205/1628/245 1208/1630/245 +f 1206/1638/222 1208/1604/222 1201/1603/222 +f 1186/1633/224 1193/1617/224 1195/1619/224 +f 1210/1640/234 1212/1643/234 1211/1641/234 +f 1216/1648/233 1218/1651/233 1217/1649/233 +f 1234/1656/224 1235/1673/224 1226/1657/224 +f 1229/1659/225 1227/2106/225 1225/1660/225 +f 1223/1662/225 1231/1665/225 1238/1663/225 +f 1231/1665/225 1230/1667/225 1239/1666/225 +f 1230/1667/225 1229/1659/225 1240/1661/225 +f 1224/1668/224 1222/2107/224 1237/1669/224 +f 1232/1670/224 1237/1669/224 1236/1671/224 +f 1233/1672/224 1236/1671/224 1235/1673/224 +f 1246/1674/226 1247/1684/226 1248/1675/226 +f 1241/1677/224 1246/1674/224 1245/1676/224 +f 1243/1679/233 1245/1676/233 1248/1675/233 +f 1242/1681/234 1247/1684/234 1246/1674/234 +f 1244/1683/225 1248/1675/225 1247/1684/225 +f 1278/1686/227 1290/2108/227 1266/1687/227 +f 1255/1689/226 1256/1693/226 1253/1690/226 +f 1251/1692/228 1253/1690/228 1256/1693/228 +f 1250/1695/227 1255/1689/227 1254/1691/227 +f 1252/1697/225 1256/1693/225 1255/1689/225 +f 1249/1699/224 1254/1691/224 1253/1690/224 +f 1264/1701/231 1268/1718/231 1267/1702/231 +f 1260/1704/225 1264/1701/225 1263/1703/225 +f 1257/1706/224 1262/1710/224 1261/1707/224 +f 1259/1709/228 1261/2109/228 1264/1701/228 +f 1258/1705/227 1263/1703/227 1262/1710/227 +f 1262/1710/232 1266/1715/232 1265/1711/232 +f 1264/1701/233 1261/2109/233 1265/1712/233 +f 1263/1703/234 1267/1688/234 1266/1687/234 +f 1290/1714/224 1284/2110/224 1265/1711/224 +f 1284/1716/228 1272/2111/228 1268/1713/228 +f 1272/1717/225 1278/2112/225 1267/1702/225 +f 1276/1719/227 1287/1746/227 1291/1720/227 +f 1289/1722/224 1283/1743/224 1285/1723/224 +f 1282/1725/228 1271/1733/228 1273/1726/228 +f 1281/1728/226 1288/2113/226 1275/1729/226 +f 1288/1747/234 1287/1746/234 1276/1719/234 +f 1278/1752/243 1280/1721/243 1291/1720/243 +f 1280/1740/244 1279/1739/244 1277/1737/244 +f 1275/1729/231 1277/1737/231 1270/1753/231 +f 1272/1754/222 1274/1759/222 1279/1739/222 +f 1274/1735/245 1273/1726/245 1271/1733/245 +f 1269/1731/233 1271/1733/233 1282/1725/233 +f 1284/1756/246 1286/1727/246 1273/1726/246 +f 1286/1745/247 1285/1723/247 1283/1743/247 +f 1281/1741/232 1283/1743/232 1289/1722/232 +f 1287/1746/248 1289/1748/248 1292/1750/248 +f 1290/1758/223 1292/1724/223 1285/1723/223 +f 1270/1753/225 1277/1737/225 1279/1739/225 +f 1306/1760/225 1307/1777/225 1298/1761/225 +f 1301/1763/224 1299/2114/224 1297/1764/224 +f 1295/1766/224 1303/1769/224 1310/1767/224 +f 1303/1769/224 1302/1771/224 1311/1770/224 +f 1302/1771/224 1301/1763/224 1312/1765/224 +f 1296/1772/225 1294/2115/225 1309/1773/225 +f 1304/1774/225 1309/1773/225 1308/1775/225 +f 1305/1776/225 1308/1775/225 1307/1777/225 +f 1342/1778/228 1354/2116/228 1330/1779/228 +f 1318/1781/226 1319/1789/226 1320/1782/226 +f 1315/1784/227 1317/1783/227 1320/1782/227 +f 1314/1786/228 1319/1789/228 1318/1781/228 +f 1316/1788/224 1320/1782/224 1319/1789/224 +f 1313/1791/225 1318/1781/225 1317/1783/225 +f 1328/1793/232 1332/1810/232 1331/1794/232 +f 1324/1796/224 1328/1793/224 1327/1795/224 +f 1321/1798/225 1326/1802/225 1325/1799/225 +f 1323/1801/227 1325/2117/227 1328/1793/227 +f 1322/1797/228 1327/1795/228 1326/1802/228 +f 1326/1802/231 1330/1807/231 1329/1803/231 +f 1328/1793/234 1325/2117/234 1329/1804/234 +f 1327/1795/233 1331/1780/233 1330/1779/233 +f 1354/1806/225 1348/2118/225 1329/1803/225 +f 1348/1808/227 1336/2119/227 1332/1805/227 +f 1336/1809/224 1342/2120/224 1331/1794/224 +f 1340/1811/228 1351/1838/228 1355/1812/228 +f 1353/1814/225 1347/1835/225 1349/1815/225 +f 1346/1817/227 1335/1825/227 1337/1818/227 +f 1345/1820/226 1352/2121/226 1339/1821/226 +f 1352/1839/233 1351/1838/233 1340/1811/233 +f 1342/1844/246 1344/1813/246 1355/1812/246 +f 1344/1832/247 1343/1831/247 1341/1829/247 +f 1339/1821/232 1341/1829/232 1334/1845/232 +f 1336/1846/223 1338/1851/223 1343/1831/223 +f 1338/1827/248 1337/1818/248 1335/1825/248 +f 1333/1823/234 1335/1825/234 1346/1817/234 +f 1348/1848/243 1350/1819/243 1337/1818/243 +f 1350/1837/244 1349/1815/244 1347/1835/244 +f 1345/1833/231 1347/1835/231 1353/1814/231 +f 1351/1838/245 1353/1840/245 1356/1842/245 +f 1354/1850/222 1356/1816/222 1349/1815/222 +f 1334/1845/224 1341/1829/224 1343/1831/224 +f 1370/1852/224 1371/1869/224 1362/1853/224 +f 1365/1855/225 1363/2122/225 1361/1856/225 +f 1359/1858/225 1367/1861/225 1374/1859/225 +f 1367/1861/225 1366/1863/225 1375/1862/225 +f 1366/1863/225 1365/1855/225 1376/1857/225 +f 1360/1864/224 1358/2123/224 1373/1865/224 +f 1368/1866/224 1373/1865/224 1372/1867/224 +f 1369/1868/224 1372/1867/224 1371/1869/224 +f 1398/1870/227 1410/2124/227 1386/1871/227 +f 1384/1873/222 1388/1891/222 1387/1874/222 +f 1380/1876/221 1384/1873/221 1383/1875/221 +f 1377/1878/226 1382/1882/226 1381/1879/226 +f 1379/1881/228 1381/1884/228 1384/1873/228 +f 1378/1877/227 1383/1875/227 1382/1882/227 +f 1382/1882/231 1386/1887/231 1385/1883/231 +f 1381/1884/245 1385/1889/245 1388/1885/245 +f 1383/1875/244 1387/1872/244 1386/1871/244 +f 1410/1886/226 1404/2125/226 1385/1883/226 +f 1404/1888/228 1392/2126/228 1388/1885/228 +f 1392/1890/221 1398/2127/221 1387/1874/221 +f 1396/1892/227 1407/1919/227 1411/1893/227 +f 1409/1895/226 1403/1916/226 1405/1896/226 +f 1402/1898/228 1391/1906/228 1393/1899/228 +f 1401/1901/225 1408/2128/225 1395/1902/225 +f 1408/1920/244 1407/1919/244 1396/1892/244 +f 1398/1925/248 1400/1894/248 1411/1893/248 +f 1400/1913/243 1399/1912/243 1397/1910/243 +f 1395/1902/222 1397/1910/222 1390/1926/222 +f 1392/1927/223 1394/1932/223 1399/1912/223 +f 1394/1908/246 1393/1899/246 1391/1906/246 +f 1389/1904/245 1391/1906/245 1402/1898/245 +f 1404/1929/247 1406/1900/247 1393/1899/247 +f 1406/1918/233 1405/1896/233 1403/1916/233 +f 1401/1914/231 1403/1916/231 1409/1895/231 +f 1407/1919/234 1409/1921/234 1412/1923/234 +f 1410/1931/232 1412/1897/232 1405/1896/232 +f 1390/1926/221 1397/1910/221 1399/1912/221 +f 1434/1933/228 1446/2129/228 1422/1934/228 +f 1420/1936/223 1424/1954/223 1423/1937/223 +f 1416/1939/221 1420/1936/221 1419/1938/221 +f 1413/1941/226 1418/1945/226 1417/1942/226 +f 1415/1944/227 1417/1947/227 1420/1936/227 +f 1414/1940/228 1419/1938/228 1418/1945/228 +f 1418/1945/232 1422/1950/232 1421/1946/232 +f 1417/1947/248 1421/1952/248 1424/1948/248 +f 1419/1938/247 1423/1935/247 1422/1934/247 +f 1446/1949/226 1440/2130/226 1421/1946/226 +f 1440/1951/227 1428/2131/227 1424/1948/227 +f 1428/1953/221 1434/2132/221 1423/1937/221 +f 1432/1955/228 1443/1982/228 1447/1956/228 +f 1445/1958/226 1439/1979/226 1441/1959/226 +f 1438/1961/227 1427/1969/227 1429/1962/227 +f 1437/1964/224 1444/2133/224 1431/1965/224 +f 1444/1983/247 1443/1982/247 1432/1955/247 +f 1434/1988/245 1436/1957/245 1447/1956/245 +f 1436/1976/246 1435/1975/246 1433/1973/246 +f 1431/1965/223 1433/1973/223 1426/1989/223 +f 1428/1990/222 1430/1994/222 1435/1975/222 +f 1430/1971/243 1429/1962/243 1427/1969/243 +f 1425/1967/248 1427/1969/248 1438/1961/248 +f 1440/1992/244 1442/1963/244 1429/1962/244 +f 1442/1981/234 1441/1959/234 1439/1979/234 +f 1444/1993/232 1437/1977/232 1439/1979/232 +f 1443/1982/233 1445/1984/233 1448/1986/233 +f 1440/1980/231 1446/2134/231 1448/1960/231 +f 1426/1989/221 1433/1973/221 1435/1975/221 +s 1 +f 876/2135/258 891/1265/243 875/2136/243 +f 869/2137/226 884/1250/259 868/2138/259 +f 877/2139/221 892/1268/258 876/2135/258 +f 870/2140/260 885/1252/226 869/2137/226 +f 878/2141/261 893/1274/221 877/2142/221 +f 871/2143/234 886/1258/260 870/2140/260 +f 879/2144/246 894/1272/261 878/2141/261 +f 872/2145/262 887/1256/234 871/2143/234 +f 880/2146/263 895/1279/246 879/2144/246 +f 873/2147/227 888/1259/262 872/2145/262 +f 866/2148/264 881/1244/228 865/2149/228 +f 865/2149/228 896/1277/263 880/2146/263 +f 874/2150/265 889/1261/227 873/2147/227 +f 867/2151/233 882/1249/264 866/2148/264 +f 875/2136/243 890/1267/265 874/2150/265 +f 868/2138/259 883/1247/233 867/2151/233 +f 913/2152/228 945/2043/264 914/2153/264 +f 903/2006/246 934/1298/261 902/1257/261 +f 926/2154/261 959/1321/246 927/2155/246 +f 902/1254/261 933/1295/221 901/1255/221 +f 925/2156/221 958/1318/261 926/2157/261 +f 901/2005/221 932/1292/258 900/1253/258 +f 924/2158/258 957/2038/221 925/2159/221 +f 900/2004/258 931/1289/243 899/1251/243 +f 923/2160/243 956/1312/258 924/2161/258 +f 899/2003/243 929/1286/265 898/1248/265 +f 897/2014/227 944/1326/262 912/1280/262 +f 922/2162/265 955/1309/243 923/2163/243 +f 898/1245/265 930/1331/227 897/1246/227 +f 912/2013/262 943/1323/234 911/1278/234 +f 921/2164/227 954/1306/265 922/2165/265 +f 911/1275/234 942/1320/260 910/1276/260 +f 927/2166/246 960/1324/263 928/2167/263 +f 904/2007/263 935/1299/246 903/1260/246 +f 914/2168/264 947/2028/233 915/2169/233 +f 928/2170/263 946/1327/228 913/2171/228 +f 905/2008/228 936/1304/263 904/1262/263 +f 915/2172/233 948/2029/259 916/2173/259 +f 906/1263/264 937/1305/228 905/1264/228 +f 916/2174/259 949/2030/226 917/2175/226 +f 907/2009/233 938/1308/264 906/1266/264 +f 917/2176/226 950/2031/260 918/2177/260 +f 908/2010/259 939/1311/233 907/1269/233 +f 918/2178/260 951/2032/234 919/2179/234 +f 909/1270/226 940/1316/259 908/1271/259 +f 919/2180/234 952/1300/262 920/2181/262 +f 910/2012/260 941/1317/226 909/1273/226 +f 920/2182/262 953/2034/227 921/2183/227 +f 1030/1422/266 1023/2050/267 1025/1425/266 +f 1036/2184/268 1022/1423/269 1031/1439/268 +f 1017/2185/270 1033/1435/271 1018/2051/270 +f 1034/2186/271 1032/1437/272 1033/1435/271 +f 1035/2187/272 1031/1439/268 1032/1437/272 +f 1019/1428/273 1028/1436/274 1027/1431/274 +f 1028/1436/274 1026/1433/275 1027/1431/274 +f 1029/1438/275 1025/1425/266 1026/1433/275 +f 1079/2188/246 1096/1502/261 1095/1499/246 +f 1073/2189/226 1088/1484/260 1072/2190/260 +f 1081/2191/221 1096/1502/261 1080/2192/261 +f 1074/2193/259 1089/1486/226 1073/2189/226 +f 1082/2194/258 1097/1508/221 1081/2195/221 +f 1075/2196/233 1090/1492/259 1074/2193/259 +f 1083/2197/243 1098/1506/258 1082/2194/258 +f 1075/2196/233 1092/1493/264 1091/1490/233 +f 1084/2198/265 1099/1513/243 1083/2197/243 +f 1077/2199/228 1092/1493/264 1076/2200/264 +f 1070/2201/262 1085/1478/227 1069/2202/227 +f 1069/2202/227 1100/1511/265 1084/2198/265 +f 1078/2203/263 1093/1495/228 1077/2199/228 +f 1071/2204/234 1086/1483/262 1070/2201/262 +f 1079/2188/246 1094/1501/263 1078/2203/263 +f 1071/2204/234 1088/1484/260 1087/1481/234 +f 1117/2205/227 1149/2099/262 1118/2206/262 +f 1107/2062/243 1138/1532/258 1106/1491/258 +f 1131/2207/243 1162/1556/258 1163/1555/243 +f 1106/1488/258 1137/1529/221 1105/1489/221 +f 1129/2208/221 1162/1552/258 1130/2209/258 +f 1104/1487/261 1137/1524/221 1136/1526/261 +f 1129/2210/221 1160/1549/261 1161/2094/221 +f 1104/2060/261 1135/1523/246 1103/1485/246 +f 1127/2211/246 1160/1546/261 1128/2212/261 +f 1103/2059/246 1133/1520/263 1102/1482/263 +f 1101/2070/228 1148/1560/264 1116/1514/264 +f 1126/2213/263 1159/1543/246 1127/2214/246 +f 1102/1479/263 1134/1565/228 1101/1480/228 +f 1116/2069/264 1147/1557/233 1115/1512/233 +f 1125/2215/228 1158/1540/263 1126/2216/263 +f 1115/1509/233 1146/1554/259 1114/1510/259 +f 1131/2217/243 1164/1558/265 1132/2218/265 +f 1108/2063/265 1139/1533/243 1107/1494/243 +f 1118/2219/262 1151/2084/234 1119/2220/234 +f 1132/2221/265 1150/1561/227 1117/2222/227 +f 1109/2064/227 1140/1538/265 1108/1496/265 +f 1119/2223/234 1152/2085/260 1120/2224/260 +f 1110/1497/262 1141/1539/227 1109/1498/227 +f 1120/2225/260 1153/2086/226 1121/2226/226 +f 1111/2065/234 1142/1542/262 1110/1500/262 +f 1121/2227/226 1154/2087/259 1122/2228/259 +f 1112/2066/260 1143/1545/234 1111/1503/234 +f 1122/2229/259 1155/2088/233 1123/2230/233 +f 1113/1504/226 1144/1550/260 1112/1505/260 +f 1123/2231/233 1156/1534/264 1124/2232/264 +f 1114/2068/259 1145/1551/226 1113/1507/226 +f 1124/2233/264 1157/2090/228 1125/2234/228 +f 1234/1656/276 1227/2106/277 1229/1659/276 +f 1235/1673/278 1225/2235/279 1226/1657/279 +f 1221/2236/280 1237/1669/281 1222/2107/280 +f 1238/2237/281 1236/1671/282 1237/1669/281 +f 1236/1671/282 1240/2238/278 1235/1673/278 +f 1223/1662/283 1232/1670/284 1231/1665/284 +f 1232/1670/284 1230/1667/285 1231/1665/284 +f 1233/1672/285 1229/1659/276 1230/1667/285 +f 1306/1760/266 1299/2114/267 1301/1763/266 +f 1312/2239/268 1298/1761/269 1307/1777/268 +f 1293/2240/270 1309/1773/271 1294/2115/270 +f 1310/2241/271 1308/1775/272 1309/1773/271 +f 1311/2242/272 1307/1777/268 1308/1775/272 +f 1295/1766/273 1304/1774/274 1303/1769/274 +f 1304/1774/274 1302/1771/275 1303/1769/274 +f 1305/1776/275 1301/1763/266 1302/1771/275 +f 1370/1852/276 1363/2122/277 1365/1855/276 +f 1371/1869/278 1361/2243/279 1362/1853/279 +f 1357/2244/280 1373/1865/281 1358/2123/280 +f 1374/2245/281 1372/1867/282 1373/1865/281 +f 1375/2246/282 1371/1869/278 1372/1867/282 +f 1359/1858/283 1368/1866/284 1367/1861/284 +f 1368/1866/284 1366/1863/285 1367/1861/284 +f 1369/1868/285 1365/1855/276 1366/1863/285 +f 876/2135/258 892/1268/258 891/1265/243 +f 869/2137/226 885/1252/226 884/1250/259 +f 877/2139/221 893/2011/221 892/1268/258 +f 870/2140/260 886/1258/260 885/1252/226 +f 878/2141/261 894/1272/261 893/1274/221 +f 871/2143/234 887/1256/234 886/1258/260 +f 879/2144/246 895/1279/246 894/1272/261 +f 872/2145/262 888/1259/262 887/1256/234 +f 880/2146/263 896/1277/263 895/1279/246 +f 873/2147/227 889/1261/227 888/1259/262 +f 866/2148/264 882/1249/264 881/1244/228 +f 865/2149/228 881/1244/228 896/1277/263 +f 874/2150/265 890/1267/265 889/1261/227 +f 867/2151/233 883/1247/233 882/1249/264 +f 875/2136/243 891/1265/243 890/1267/265 +f 868/2138/259 884/1250/259 883/1247/233 +f 913/2152/228 946/1330/228 945/2043/264 +f 903/2006/246 935/1296/246 934/1298/261 +f 926/2154/261 958/1322/261 959/1321/246 +f 902/1254/261 934/1293/261 933/1295/221 +f 925/2156/221 957/1319/221 958/1318/261 +f 901/2005/221 933/1290/221 932/1292/258 +f 924/2158/258 956/1315/258 957/2038/221 +f 900/2004/258 932/1287/258 931/1289/243 +f 923/2160/243 955/1313/243 956/1312/258 +f 899/2003/243 931/1284/243 929/1286/265 +f 897/2014/227 930/2042/227 944/1326/262 +f 922/2162/265 954/1310/265 955/1309/243 +f 898/1245/265 929/1329/265 930/1331/227 +f 912/2013/262 944/2041/262 943/1323/234 +f 921/2164/227 953/1307/227 954/1306/265 +f 911/1275/234 943/2040/234 942/1320/260 +f 927/2166/246 959/1325/246 960/1324/263 +f 904/2007/263 936/2033/263 935/1299/246 +f 914/2168/264 945/1285/264 947/2028/233 +f 928/2170/263 960/1328/263 946/1327/228 +f 905/2008/228 937/1302/228 936/1304/263 +f 915/2172/233 947/1288/233 948/2029/259 +f 906/1263/264 938/2035/264 937/1305/228 +f 916/2174/259 948/1291/259 949/2030/226 +f 907/2009/233 939/2036/233 938/1308/264 +f 917/2176/226 949/1294/226 950/2031/260 +f 908/2010/259 940/2037/259 939/1311/233 +f 918/2178/260 950/1297/260 951/2032/234 +f 909/1270/226 941/1314/226 940/1316/259 +f 919/2180/234 951/1301/234 952/1300/262 +f 910/2012/260 942/2039/260 941/1317/226 +f 920/2182/262 952/1303/262 953/2034/227 +f 1030/1422/266 1024/1424/267 1023/2050/267 +f 1036/2184/268 1021/2247/269 1022/1423/269 +f 1017/2185/270 1034/2186/271 1033/1435/271 +f 1034/2186/271 1035/2187/272 1032/1437/272 +f 1035/2187/272 1036/2184/268 1031/1439/268 +f 1019/1428/273 1020/1434/273 1028/1436/274 +f 1028/1436/274 1029/1438/275 1026/1433/275 +f 1029/1438/275 1030/1422/266 1025/1425/266 +f 1079/2188/246 1080/2192/261 1096/1502/261 +f 1073/2189/226 1089/1486/226 1088/1484/260 +f 1081/2191/221 1097/2067/221 1096/1502/261 +f 1074/2193/259 1090/1492/259 1089/1486/226 +f 1082/2194/258 1098/1506/258 1097/1508/221 +f 1075/2196/233 1091/1490/233 1090/1492/259 +f 1083/2197/243 1099/1513/243 1098/1506/258 +f 1075/2196/233 1076/2200/264 1092/1493/264 +f 1084/2198/265 1100/1511/265 1099/1513/243 +f 1077/2199/228 1093/1495/228 1092/1493/264 +f 1070/2201/262 1086/1483/262 1085/1478/227 +f 1069/2202/227 1085/1478/227 1100/1511/265 +f 1078/2203/263 1094/1501/263 1093/1495/228 +f 1071/2204/234 1087/1481/234 1086/1483/262 +f 1079/2188/246 1095/1499/246 1094/1501/263 +f 1071/2204/234 1072/2190/260 1088/1484/260 +f 1117/2205/227 1150/1564/227 1149/2099/262 +f 1107/2062/243 1139/1530/243 1138/1532/258 +f 1131/2207/243 1130/2248/258 1162/1556/258 +f 1106/1488/258 1138/1527/258 1137/1529/221 +f 1129/2208/221 1161/1553/221 1162/1552/258 +f 1104/1487/261 1105/2061/221 1137/1524/221 +f 1129/2210/221 1128/2249/261 1160/1549/261 +f 1104/2060/261 1136/1521/261 1135/1523/246 +f 1127/2211/246 1159/1547/246 1160/1546/261 +f 1103/2059/246 1135/1518/246 1133/1520/263 +f 1101/2070/228 1134/2098/228 1148/1560/264 +f 1126/2213/263 1158/1544/263 1159/1543/246 +f 1102/1479/263 1133/1563/263 1134/1565/228 +f 1116/2069/264 1148/2097/264 1147/1557/233 +f 1125/2215/228 1157/1541/228 1158/1540/263 +f 1115/1509/233 1147/2096/233 1146/1554/259 +f 1131/2217/243 1163/1559/243 1164/1558/265 +f 1108/2063/265 1140/2089/265 1139/1533/243 +f 1118/2219/262 1149/1519/262 1151/2084/234 +f 1132/2221/265 1164/1562/265 1150/1561/227 +f 1109/2064/227 1141/1536/227 1140/1538/265 +f 1119/2223/234 1151/1522/234 1152/2085/260 +f 1110/1497/262 1142/2091/262 1141/1539/227 +f 1120/2225/260 1152/1525/260 1153/2086/226 +f 1111/2065/234 1143/2092/234 1142/1542/262 +f 1121/2227/226 1153/1528/226 1154/2087/259 +f 1112/2066/260 1144/2093/260 1143/1545/234 +f 1122/2229/259 1154/1531/259 1155/2088/233 +f 1113/1504/226 1145/1548/226 1144/1550/260 +f 1123/2231/233 1155/1535/233 1156/1534/264 +f 1114/2068/259 1146/2095/259 1145/1551/226 +f 1124/2233/264 1156/1537/264 1157/2090/228 +f 1234/1656/276 1228/1658/277 1227/2106/277 +f 1235/1673/278 1240/2238/278 1225/2235/279 +f 1221/2236/280 1238/2237/281 1237/1669/281 +f 1238/2237/281 1239/2250/282 1236/1671/282 +f 1236/1671/282 1239/2250/282 1240/2238/278 +f 1223/1662/283 1224/1668/283 1232/1670/284 +f 1232/1670/284 1233/1672/285 1230/1667/285 +f 1233/1672/285 1234/1656/276 1229/1659/276 +f 1306/1760/266 1300/1762/267 1299/2114/267 +f 1312/2239/268 1297/2251/269 1298/1761/269 +f 1293/2240/270 1310/2241/271 1309/1773/271 +f 1310/2241/271 1311/2242/272 1308/1775/272 +f 1311/2242/272 1312/2239/268 1307/1777/268 +f 1295/1766/273 1296/1772/273 1304/1774/274 +f 1304/1774/274 1305/1776/275 1302/1771/275 +f 1305/1776/275 1306/1760/266 1301/1763/266 +f 1370/1852/276 1364/1854/277 1363/2122/277 +f 1371/1869/278 1376/2252/278 1361/2243/279 +f 1357/2244/280 1374/2245/281 1373/1865/281 +f 1374/2245/281 1375/2246/282 1372/1867/282 +f 1375/2246/282 1376/2252/278 1371/1869/278 +f 1359/1858/283 1360/1864/283 1368/1866/284 +f 1368/1866/284 1369/1868/285 1366/1863/285 +f 1369/1868/285 1370/1852/276 1365/1855/276 diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index d9801a2af..29f40d67f 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -54,6 +54,7 @@ "block.largeTurbineRunning": {"category": "block", "sounds": [{"name": "block/largeTurbine", "stream": false}]}, "block.damage": {"category": "block", "sounds": ["block/dam1", "block/dam2", "block/dam3", "block/dam4"]}, "block.electricHum": {"category": "block", "sounds": [{"name": "block/electricHum", "stream": false}]}, + "block.fensuHum": {"category": "block", "sounds": [{"name": "block/fensuHum", "stream": false}]}, "block.boiler": {"category": "block", "sounds": [{"name": "block/boiler", "stream": false}]}, "block.hornNearSingle": {"category": "block", "sounds": [{"name": "block/hornNearSingle", "stream": false}]}, "block.hornNearDual": {"category": "block", "sounds": [{"name": "block/hornNearDual", "stream": false}]}, diff --git a/src/main/resources/assets/hbm/sounds/block/fensuHum.ogg b/src/main/resources/assets/hbm/sounds/block/fensuHum.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d709f804d7bf58497f67e2afa652f497ead23ca1 GIT binary patch literal 99323 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 z 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/gui/storage/gui_battery_redd.png b/src/main/resources/assets/hbm/textures/gui/storage/gui_battery_redd.png new file mode 100644 index 0000000000000000000000000000000000000000..3c32ee17d45de6ff4af30468a308b9dfe86ec27a GIT binary patch literal 10989 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 literal 0 HcmV?d00001 From 0e063bbd7265463528f08bee037e5d403330e084 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Tue, 6 Jan 2026 20:50:33 +0200 Subject: [PATCH 08/29] up up up --- src/main/resources/assets/hbm/lang/ru_RU.lang | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 544ea2823..e863866d6 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -724,6 +724,7 @@ container.autocrafter=Автоматический верстак container.barrel=Бочка container.bat9000=Охереть-большая цистерна 9000 container.battery=Энергохранилище +container.batteryREDD=ЭМЭХ container.batterySocket=Аккумуляторный массив container.bombMulti=Многоцелевая бомба container.casingBag=Сумка для гильз @@ -5542,13 +5543,13 @@ tile.c4.name=C-4 tile.cable_detector.name=Редстоун-рубильник tile.cable_diode.name=Диод из красной меди tile.cable_switch.name=Рубильник -tile.capacitor_bus.name=Шина конденсатора +tile.capacitor_bus.name=Шина конденсатора (LEGACY) tile.capacitor_bus.desc=Выходной блок для конденсаторов$Может быть подключен по прямой линии -tile.capacitor_copper.name=Медный конденсатор -tile.capacitor_gold.name=Золотой конденсатор -tile.capacitor_niobium.name=Ниобиевый конденсатор -tile.capacitor_schrabidate.name=Шрабидатовый конденсатор -tile.capacitor_tantalium.name=Танталовый конденсатор +tile.capacitor_copper.name=Старый конденсатор +tile.capacitor_gold.name=Золотой конденсатор (LEGACY) +tile.capacitor_niobium.name=Ниобиевый конденсатор (LEGACY) +tile.capacitor_schrabidate.name=Шрабидатовый конденсатор (LEGACY) +tile.capacitor_tantalium.name=Танталовый конденсатор (LEGACY) tile.capacitor.desc=Вход: Сверху$Выход: Снизу через шину tile.charge_c4.name=Подрывной заряд tile.charge_dynamite.name=Бомба с таймером @@ -6000,8 +6001,9 @@ tile.machine_autosaw.name=Автоматическая пила tile.machine_autosaw.desc=Срубает ближайшие растения, пересаживает деревья$Принимает:$-Древесное масло$-Этанол$-Рыбное масло$-Тяжёлую нефть tile.machine_autosaw.suspended=Приостановлена tile.machine_bat9000.name=Охереть-большая цистерна 9000 -tile.machine_battery.name=Энергохранилище -tile.machine_battery_potato.name=Картофельная батарея +tile.machine_battery.name=Энергохранилище (LEGACY) +tile.machine_battery_potato.name=Картофельная батарея (LEGACY) +tile.machine_battery_redd.name=ЭМЭХ tile.machine_battery_socket.name=Аккумуляторный массив tile.machine_boiler.name=Бойлер tile.machine_boiler.desc=Большой бойлер для кипячения воды или нагрева нефти.$Требует внешний источник тепла.$Скорость передачи тепла: ΔT*0.01 TU/t @@ -6045,7 +6047,7 @@ tile.machine_difurnace_off.name=Доменная печь tile.machine_difurnace_on.name=Доменная печь tile.machine_difurnace_rtg_off.name=Ядерная доменная печь tile.machine_difurnace_rtg_on.name=Ядерная доменная печь -tile.machine_dineutronium_battery.name=Спарк-энергохранилище +tile.machine_dineutronium_battery.name=Спарк-энергохранилище (LEGACY) tile.machine_drain.name=Сливная труба tile.machine_drill.name=Автоматический горный бур tile.machine_electric_furnace_off.name=Электрическая печь @@ -6055,7 +6057,7 @@ tile.machine_epress.name=Электрический пресс tile.machine_excavator.name=Большой горный бур tile.machine_exposure_chamber.name=Камера облучения частицами tile.machine_fel.name=Лазер на свободных электронах (FEL) -tile.machine_fensu.name=ЭМЭХ +tile.machine_fensu.name=ЭМЭХ (LEGACY) tile.machine_flare.name=Газовая башня tile.machine_fluidtank.name=Цистерна tile.machine_forcefield.name=Излучатель силового поля @@ -6078,7 +6080,7 @@ tile.machine_large_turbine.name=Промышленная паровая турб tile.machine_large_turbine.desc=Эффективность: 100%% tile.machine_liquefactor.name=Промышленный разжижитель tile.machine_liquefactor.desc=Мощная машина для превращения предметов в жидкости.$Поставляется с универсальными каталитическими компонентами, нагревательными элементами$и встроенным гидратором для нефтехимического сжижения. -tile.machine_lithium_battery.name=Литий-ионное энергохранилище +tile.machine_lithium_battery.name=Литий-ионное энергохранилище (LEGACY) tile.machine_microwave.name=Микроволновка tile.machine_mining_laser.name=Шахтёрский лазер tile.machine_minirtg.name=Радиоизотопная ячейка @@ -6118,7 +6120,7 @@ tile.machine_rtg_yellow.name=Австралиевый супертопливны tile.machine_satlinker.name=Менеджер ID спутников tile.machine_sawmill.name=Лесопилка на генераторе Стирлинга tile.machine_sawmill.desc=Требует внешний источник тепла.$Скорость теплопередачи: T*0.1 TU/t$Мин. потребление: 100 TU/t, Макс. потребление intake: 300 TU/t -tile.machine_schrabidium_battery.name=Шрабидиевое энергохранилище +tile.machine_schrabidium_battery.name=Шрабидиевое энергохранилище (LEGACY) tile.machine_schrabidium_transmutator.name=Шрабидиевый трансмутатор (LEGACY) tile.machine_selenium.name=Радиальный двигатель tile.machine_shredder.name=Измельчитель @@ -6818,3 +6820,4 @@ desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х + From 83d4505021b238faa577ee5ec9f29dc9c86e9dd3 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Tue, 6 Jan 2026 21:00:40 +0200 Subject: [PATCH 09/29] =?UTF-8?q?=D0=B8=20=D1=82=D0=B0=D0=BD=D1=86=D0=B5?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=D0=B0=20=D1=80=D1=8B=D0=B1=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=81=20=D1=80=D0=B0=D0=BA=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/ru_RU.lang | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index e863866d6..85e404f86 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5813,6 +5813,8 @@ tile.fluid_duct_neo.name=Универсальная жидкостная тру tile.fluid_duct_paintable.name=Окрашиваемая универсальная жидкостная труба tile.fluid_duct_solid.name=Покрытая универсальная жидкостная труба (Устаревшее) tile.fluid_pump.name=Помпа контроля потока +tile.fluid_counter_valve.name=Жидкостный клапан с противовесом +tile.fluid_counter_valve.desc=Остерегайтесь замкнутых контуров в вашей жидкостной системе... tile.fluid_switch.name=Редстоун-Жидкостный клапан tile.fluid_valve.name=Жидкостный клапан tile.foam_layer.name=Слой пены @@ -6821,3 +6823,4 @@ desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х + From 4b4868e102ca67bb8f8081a3d5a4f2b77f72eb81 Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Tue, 6 Jan 2026 22:17:28 +0200 Subject: [PATCH 10/29] kimi --- src/main/resources/assets/hbm/lang/ru_RU.lang | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 85e404f86..cc7a649f7 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5813,7 +5813,7 @@ tile.fluid_duct_neo.name=Универсальная жидкостная тру tile.fluid_duct_paintable.name=Окрашиваемая универсальная жидкостная труба tile.fluid_duct_solid.name=Покрытая универсальная жидкостная труба (Устаревшее) tile.fluid_pump.name=Помпа контроля потока -tile.fluid_counter_valve.name=Жидкостный клапан с противовесом +tile.fluid_counter_valve.name=Жидкостный клапан со счётчиком tile.fluid_counter_valve.desc=Остерегайтесь замкнутых контуров в вашей жидкостной системе... tile.fluid_switch.name=Редстоун-Жидкостный клапан tile.fluid_valve.name=Жидкостный клапан @@ -6824,3 +6824,4 @@ desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х + From 4032cc277a7dbae8eafb05bb4a8f338186e89505 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 6 Jan 2026 21:21:06 +0100 Subject: [PATCH 11/29] he thicc --- changelog | 7 ++ gradle.properties | 2 +- src/main/java/com/hbm/blocks/ModBlocks.java | 12 +-- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../tileentity/machine/TileEntityChungus.java | 2 + .../TileEntityMachineArcFurnaceLarge.java | 4 +- .../TileEntityMachineLargeTurbine.java | 2 + .../machine/TileEntityMachineTurbine.java | 2 + .../storage/TileEntityBatterySocket.java | 80 ++++++++++++++++++- src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + 11 files changed, 104 insertions(+), 11 deletions(-) diff --git a/changelog b/changelog index 13825b254..9f73424a7 100644 --- a/changelog +++ b/changelog @@ -9,6 +9,10 @@ * `/ntmreapnetworks` * Deletes all active nodespace instances * Mainly useful for server owners, in case nodespace builds up too much garbage data that isn't cleared correctly +* Fluid valve with counter + * Reads total fluid movement within a network + * Value can be read or reset with OC or RoR + * Allows for very precise portioning and fluid control ## Changed * Updated italian localization @@ -21,6 +25,7 @@ * OpenComputers integration for the PWR can now also read the heat capacity stats * Removed the restriction that demands that cluster ores need to be mined by hand * Laser beams from energy weapons are now a lot more narrow +* All steam turbines now have a passive drain on unused power in their buffers ## Fixed * Fixed meteors using a nonexistant keepalive timer, causing potential audio flickering in certain cases @@ -32,3 +37,5 @@ * Fixed power not saving for mining lasers * Fixed the annihilator producing blank 528 mode blueprints when 528 mode isn't even enabled * Fixed black fire not using the skeletonizer on death +* Fixed arc furnace electrodes not being able to be plugged into the arc furnace unless the lid is fully open +* Fixed broken keybind localization diff --git a/gradle.properties b/gradle.properties index 1d866b3e4..6488da4b9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5546 +mod_build_number=5567 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 6b9f833e4..33ac3beb7 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1867,12 +1867,12 @@ public class ModBlocks { machine_battery_socket = new MachineBatterySocket().setBlockName("machine_battery_socket").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_battery_redd = new MachineBatteryREDD().setBlockName("machine_battery_redd").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); - machine_battery_potato = new MachineBattery(Material.iron, 10_000).setBlockName("machine_battery_potato").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); - machine_battery = new MachineBattery(Material.iron, 1_000_000).setBlockName("machine_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); - machine_lithium_battery = new MachineBattery(Material.iron, 50_000_000).setBlockName("machine_lithium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); - machine_schrabidium_battery = new MachineBattery(Material.iron, 25_000_000_000L).setBlockName("machine_schrabidium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); - machine_dineutronium_battery = new MachineBattery(Material.iron, 1_000_000_000_000L).setBlockName("machine_dineutronium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); - machine_fensu = new MachineFENSU(Material.iron).setBlockName("machine_fensu").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_fensu"); + machine_battery_potato = new MachineBattery(Material.iron, 10_000).setBlockName("machine_battery_potato").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null); + machine_battery = new MachineBattery(Material.iron, 1_000_000).setBlockName("machine_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null); + machine_lithium_battery = new MachineBattery(Material.iron, 50_000_000).setBlockName("machine_lithium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null); + machine_schrabidium_battery = new MachineBattery(Material.iron, 25_000_000_000L).setBlockName("machine_schrabidium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null); + machine_dineutronium_battery = new MachineBattery(Material.iron, 1_000_000_000_000L).setBlockName("machine_dineutronium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null); + machine_fensu = new MachineFENSU(Material.iron).setBlockName("machine_fensu").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":machine_fensu"); capacitor_bus = new MachineCapacitorBus(Material.iron).setBlockName("capacitor_bus").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null); capacitor_copper = new MachineCapacitor(Material.iron, 1_000_000L, "copper").setBlockName("capacitor_copper").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_copper"); diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index e12427a86..86d4f49a3 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5546)"; + public static final String VERSION = "1.0.27 BETA (5567)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java index 16121b0cb..c5c922c8f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java @@ -96,6 +96,8 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr public void updateEntity() { if(!worldObj.isRemote) { + + this.power *= 0.95; this.info = new double[3]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java index a650d536b..03e79bcba 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java @@ -394,7 +394,7 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl @Override public boolean canInsertItem(int slot, ItemStack stack, int side) { - if(slot < 3) return lid >= 1 && stack.getItem() == ModItems.arc_electrode; + if(slot < 3) return stack.getItem() == ModItems.arc_electrode; if(slot >= 25) { ArcFurnaceRecipe recipe = ArcFurnaceRecipes.getOutput(stack, this.liquidMode); if(recipe == null) return false; @@ -405,7 +405,7 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { - if(slot < 3) return lid >= 1 && stack.getItem() == ModItems.arc_electrode; + if(slot < 3) return stack.getItem() == ModItems.arc_electrode; if(slot > 4) { ArcFurnaceRecipe recipe = ArcFurnaceRecipes.getOutput(stack, this.liquidMode); if(recipe == null) return false; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java index 44605c73a..33f318fb1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java @@ -120,6 +120,8 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme tanks[0].setType(0, 1, slots); tanks[0].loadTank(2, 3, slots); power = Library.chargeItemsFromTE(slots, 4, power, maxPower); + + this.power *= 0.95; FluidType in = tanks[0].getTankType(); boolean valid = false; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java index 079a563e4..01a7e1cbf 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -282,6 +282,8 @@ public class TileEntityMachineTurbine extends TileEntityLoadedBase implements IS tanks[0].setType(0, 1, slots); tanks[0].loadTank(2, 3, slots); power = Library.chargeItemsFromTE(slots, 4, power, maxPower); + + this.power *= 0.95; FluidType in = tanks[0].getTankType(); boolean valid = false; diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java index 329391fc3..5fd082740 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatterySocket.java @@ -3,19 +3,25 @@ package com.hbm.tileentity.machine.storage; import com.hbm.inventory.container.ContainerBatterySocket; import com.hbm.inventory.gui.GUIBatterySocket; import com.hbm.items.ModItems; +import com.hbm.util.CompatEnergyControl; +import com.hbm.util.EnumUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IBatteryItem; +import api.hbm.redstoneoverradio.IRORInteractive; +import api.hbm.redstoneoverradio.IRORValueProvider; +import api.hbm.tile.IInfoProviderEC; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityBatterySocket extends TileEntityBatteryBase { +public class TileEntityBatterySocket extends TileEntityBatteryBase implements IRORValueProvider, IRORInteractive, IInfoProviderEC { public long[] log = new long[20]; public long delta = 0; @@ -159,4 +165,76 @@ public class TileEntityBatterySocket extends TileEntityBatteryBase { return bb; } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "fill", + PREFIX_VALUE + "fillpercent", + PREFIX_VALUE + "delta", + PREFIX_FUNCTION + "setmode" + NAME_SEPARATOR + "mode", + PREFIX_FUNCTION + "setmode" + NAME_SEPARATOR + "mode" + PARAM_SEPARATOR + "fallback", + PREFIX_FUNCTION + "setredmode" + NAME_SEPARATOR + "mode", + PREFIX_FUNCTION + "setredmode" + NAME_SEPARATOR + "mode" + PARAM_SEPARATOR + "fallback", + PREFIX_FUNCTION + "setpriority" + NAME_SEPARATOR + "priority", + }; + } + + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "fill").equals(name)) return "" + this.getPower(); + if((PREFIX_VALUE + "fillpercent").equals(name)) return "" + this.getPower() * 100 / (Math.min(this.getMaxPower(), 1)); + if((PREFIX_VALUE + "delta").equals(name)) return "" + delta; + return null; + } + + @Override + public String runRORFunction(String name, String[] params) { + + if((PREFIX_FUNCTION + "setmode").equals(name) && params.length > 0) { + int mode = IRORInteractive.parseInt(params[0], 0, 3); + + if(mode != this.redLow) { + this.redLow = (short) mode; + this.markChanged(); + return null; + } else if(params.length > 1) { + int altmode = IRORInteractive.parseInt(params[1], 0, 3); + this.redLow = (short) altmode; + this.markChanged(); + return null; + } + return null; + } + + if((PREFIX_FUNCTION + "setredmode").equals(name) && params.length > 0) { + int mode = IRORInteractive.parseInt(params[0], 0, 3); + + if(mode != this.redHigh) { + this.redHigh = (short) mode; + this.markChanged(); + return null; + } else if(params.length > 1) { + int altmode = IRORInteractive.parseInt(params[1], 0, 3); + this.redHigh = (short) altmode; + this.markChanged(); + return null; + } + return null; + } + + if((PREFIX_FUNCTION + "setpriority").equals(name) && params.length > 0) { + int priority = IRORInteractive.parseInt(params[0], 0, 2) + 1; + ConnectionPriority p = EnumUtil.grabEnumSafely(ConnectionPriority.class, priority); + this.priority = p; + this.markChanged(); + return null; + } + return null; + } + + @Override + public void provideExtraInfo(NBTTagCompound data) { + data.setLong(CompatEnergyControl.L_DIFF_HE, (log[0] - log[19]) / 20L); + } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index f1c8ed61e..000087ca4 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -757,6 +757,7 @@ hbm.key.dash=Schub hbm.key.gunPrimary=Primärfeuer hbm.key.gunSecondary=Sekundärfeuer hbm.key.gunTertitary=Zielvisier +hbm.key.qmaw=Schnellhandbuch öffnen hbm.key.toggleBack=Jetpack umschalten hbm.key.toggleHUD=HUD umschalten hbm.key.toggleMagnet=Magnet umschalten diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 80b1fc2f7..246266b8c 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1494,6 +1494,7 @@ hbm.key.dash=Dash hbm.key.gunPrimary=Primary Fire hbm.key.gunSecondary=Secondary Fire hbm.key.gunTertitary=Gun Sights +hbm.key.qmaw=Open Quick Manual hbm.key.toggleBack=Toggle Jetpack hbm.key.toggleHUD=Toggle HUD hbm.key.toggleMagnet=Toggle Magnet From 218ad3e59e8b227a2b4a9f7c86734b89821bc68c Mon Sep 17 00:00:00 2001 From: Raaaaaaaaaay Date: Tue, 6 Jan 2026 22:24:38 +0200 Subject: [PATCH 12/29] =?UTF-8?q?=D0=BA=D1=83=D0=BC=D0=B0=D0=B2=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/ru_RU.lang | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index cc7a649f7..f7ac4d346 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -1491,6 +1491,7 @@ hbm.key.dash=Рывок hbm.key.gunPrimary=Основной огонь hbm.key.gunSecondary=Альтернативный огонь hbm.key.gunTertitary=Переключить прицел +hbm.key.qmaw=Открыть краткое руководство hbm.key.toggleMagnet=Вкл/выкл магнит hbm.key.toggleBack=Включить ранец hbm.key.toggleHUD=Включить HUD @@ -6824,4 +6825,5 @@ desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х + From ee0149c1337beb9765e1fa62ce17718b0e68ebca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=81=93=E7=A5=9E=20=E9=A6=B4=E5=AD=90?= Date: Wed, 7 Jan 2026 16:34:31 +0800 Subject: [PATCH 13/29] =?UTF-8?q?=E5=A7=97=E5=A7=97=E6=9D=A5=E8=BF=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/assets/hbm/lang/zh_CN.lang | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 6d3d6f8b3..645ab7da4 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -290,7 +290,7 @@ book.starter.page15=最终,你可以制造你的第一个§o真正§r的能源 book.starter.title16=结论 book.starter.page16=如果你已经走到了这一步,你已经走在重建文明大道上了. 你已经成功地用核能, 石油化工等重新制造了世界末日前的那些先进机器. 我不知道你将如何利用这些新发现的科技, 但我个人希望你利用这些优势是为了自己和他人的利益 - 或者至少是为了自卫. 再见! book.starter.title18=关于作者 -book.starter.page18=v?r只是一个被困在“传声头像”的§o《一生一次》§r中的 灰色虚空中太久的人. 有一次, 他发现了一扇工作室的门, 但令他沮丧的是, 他发现那是一个纸板剪出来的 +book.starter.page18=vær只是一个被困在“传声头像”的§o《一生一次》§r中的 灰色虚空中太久的人. 有一次, 他发现了一扇工作室的门, 但令他沮丧的是, 他发现那是一个纸板剪出来的 book_lore.author=%s 著 book_lore.test.name=测试 book_lore.test.author=那个家伙 @@ -1692,7 +1692,7 @@ item.ammo_standard.p22_sp.name=.22LR子弹(普通弹) item.ammo_standard.p9_ap.name=9mm子弹(穿甲弹) item.ammo_standard.p9_fmj.name=9mm子弹(全金属被甲弹) item.ammo_standard.p9_jhp.name=9mm子弹(被甲空尖弹) -item.ammo_standard.p9_sp.name=.9mm子弹(普通弹) +item.ammo_standard.p9_sp.name=9mm子弹(普通弹) item.ammo_standard.r556_ap.name=5.56mm子弹(穿甲弹) item.ammo_standard.r556_fmj.name=5.56mm子弹(全金属被甲弹) item.ammo_standard.r556_jhp.name=5.56mm子弹(被甲空尖弹) @@ -3301,8 +3301,6 @@ item.nugget_silicon.name=硅粒 item.nugget_solinium.name=Sa327粒 item.nugget_sr90.name=锶-90粒 item.nugget_tantalium.name=钽粒 -item.nugget_tantalium.desc=“钽” -item.nugget_tantalium.desc.P11=英文既可拼作“Tantalum”,也可拼作“Tantalium”。 item.nugget_technetium.name=锝-99粒 item.nugget_th232.name=钍232粒 item.nugget_thorium_fuel.name=钍燃料粒 @@ -4737,7 +4735,7 @@ tile.capacitor_copper.name=铜电容 tile.capacitor_gold.name=金电容 tile.capacitor_niobium.name=铌电容 tile.capacitor_schrabidate.name=Sa酸铁电容 -tile.capacitor_tantalium.name=钽电容 +tile.capacitor_tantalium.name=钽电容器 tile.capacitor.desc=输入:顶部$输出:底部,通过电容总线 tile.charge_c4.name=炸药包 tile.charge_dynamite.name=定时炸弹 @@ -6377,10 +6375,24 @@ tile.fusion_torus.desc=聚变反应堆主要部件。$需要调速管输入能 tile.struct_torus_core.name=聚变反应堆容器核心组件 turret.arty.artillery_rocket=§e火炮模式$最低射程: 250m$最大射程: 5,000m turret.arty.manual_rocket=§e手动模式$射程: 5,000m -container.annihilator=歼灭者 +container.annihilator=焚毁炉 container.machinePrecAss=精密装配机 item.item_expensive.plastic.name=塑料板 -tile.machine_annihilator.name=歼灭者 +tile.machine_annihilator.name=焚毁炉 tile.machine_precass.name=精密装配机 tile.wand_structure.load.name=结构加载方块 tile.wand_structure.save.name=结构保存方块 +container.batterySocket=电池座 +item.battery_pack.battery_lead.name=铅酸电池 +item.battery_pack.battery_lithium.name=锂离子电池 +item.battery_pack.battery_quantum.name=量子电池 +item.battery_pack.battery_redstone.name=红石电池 +item.battery_pack.battery_schrabidium.name=Sa326电池 +item.battery_pack.battery_sodium.name=钠铁电池 +item.battery_pack.capacitor_bismuth.name=铋电容 +item.battery_pack.capacitor_copper.name=铜电容 +item.battery_pack.capacitor_gold.name=金电容 +item.battery_pack.capacitor_niobium.name=铌电容 +item.battery_pack.capacitor_spark.name=Spark电容 +item.battery_pack.capacitor_tantalum.name=钽电容 +tile.machine_battery_socket.name=电池座 From 7a39fd778f1ab0bc5edef3304aefe78fe8edb24e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=81=93=E7=A5=9E=20=E9=A6=B4=E5=AD=90?= Date: Wed, 7 Jan 2026 17:28:48 +0800 Subject: [PATCH 14/29] i cum on my face From ad9130079e26e27a138de9354d2bda7d12d4be8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=81=93=E7=A5=9E=20=E9=A6=B4=E5=AD=90?= Date: Wed, 7 Jan 2026 17:41:15 +0800 Subject: [PATCH 15/29] Rape my brain --- src/main/resources/assets/hbm/lang/zh_CN.lang | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 645ab7da4..fb1f9ea78 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -4729,13 +4729,13 @@ tile.c4.name=C-4 tile.cable_detector.name=红石电源开关 tile.cable_diode.name=紫铜二极管 tile.cable_switch.name=电源开关 -tile.capacitor_bus.name=电容总线 +tile.capacitor_bus.name=电容总线(遗留) tile.capacitor_bus.desc=电容器的输出方块$可以连成一条直线 -tile.capacitor_copper.name=铜电容 -tile.capacitor_gold.name=金电容 -tile.capacitor_niobium.name=铌电容 -tile.capacitor_schrabidate.name=Sa酸铁电容 -tile.capacitor_tantalium.name=钽电容器 +tile.capacitor_copper.name=铜电容器 +tile.capacitor_gold.name=金电容(遗留) +tile.capacitor_niobium.name=铌电容(遗留) +tile.capacitor_schrabidate.name=Sa酸铁电容(遗留) +tile.capacitor_tantalium.name=钽电容器(遗留) tile.capacitor.desc=输入:顶部$输出:底部,通过电容总线 tile.charge_c4.name=炸药包 tile.charge_dynamite.name=定时炸弹 @@ -5146,8 +5146,8 @@ tile.machine_autocrafter.name=自动工作台 tile.machine_autosaw.name=自动嗡嗡锯 tile.machine_autosaw.desc=砍伐附近的植物,重新种植树木$接受:$-木油$-乙醇$-鱼油$-重油 tile.machine_bat9000.name=巨尻-9000 储罐 -tile.machine_battery.name=蓄电池 -tile.machine_battery_potato.name=马铃薯电池组 +tile.machine_battery.name=蓄电池(遗留) +tile.machine_battery_potato.name=马铃薯电池组(遗留) tile.machine_boiler.name=大型锅炉 tile.machine_boiler.desc=可以烧水或加热油的大型锅炉$需要外部热源$传热速率:ΔT*0.01 TU/T tile.machine_boiler_electric_off.name=电锅炉 @@ -5186,7 +5186,7 @@ tile.machine_difurnace_off.name=高炉 tile.machine_difurnace_on.name=高炉 tile.machine_difurnace_rtg_off.name=核高炉 tile.machine_difurnace_rtg_on.name=核高炉 -tile.machine_dineutronium_battery.name=Spark蓄电池 +tile.machine_dineutronium_battery.name=Spark蓄电池(遗留) tile.machine_drain.name=排液管 tile.machine_drill.name=自动采矿钻机 tile.machine_electric_furnace_off.name=电炉 @@ -5196,7 +5196,7 @@ tile.machine_epress.name=电动锻压机 tile.machine_excavator.name=大型采矿钻机 tile.machine_exposure_chamber.name=辐照舱 tile.machine_fel.name=FEL自由电子激光器 -tile.machine_fensu.name=FEnSU飞轮储能系统 +tile.machine_fensu.name=FEnSU飞轮储能系统(遗留) tile.machine_flare.name=高架火炬 tile.machine_fluidtank.name=储罐 tile.machine_forcefield.name=力场发生器 @@ -5218,7 +5218,7 @@ tile.machine_large_turbine.name=工业汽轮机 tile.machine_large_turbine.desc=效率: 100%% tile.machine_liquefactor.name=工业液化机 tile.machine_liquefactor.desc=强大的通用机器,可将物品转化为液体$配有多功能催化组件、加热元件和用于石化液化的内置水合器。 -tile.machine_lithium_battery.name=锂蓄电池 +tile.machine_lithium_battery.name=锂蓄电池(遗留) tile.machine_microwave.name=微波炉 tile.machine_mining_laser.name=采矿激光 tile.machine_minirtg.name=放射性同位素电池 @@ -5255,7 +5255,7 @@ tile.machine_rtg_yellow.name=奥斯超级燃料反应堆 tile.machine_satlinker.name=卫星ID管理器 tile.machine_sawmill.name=斯特林锯木机 tile.machine_sawmill.desc=需要外部热源$传热速率:T*0.1 TU/T$最小进气量:100 TU/T,最大进气量:300 TU/T -tile.machine_schrabidium_battery.name=Sa326蓄电池 +tile.machine_schrabidium_battery.name=Sa326蓄电池(遗留) tile.machine_schrabidium_transmutator.name=Sa326嬗变装置 (遗留) tile.machine_selenium.name=星型发动机 tile.machine_shredder.name=粉碎机 @@ -6396,3 +6396,8 @@ item.battery_pack.capacitor_niobium.name=铌电容 item.battery_pack.capacitor_spark.name=Spark电容 item.battery_pack.capacitor_tantalum.name=钽电容 tile.machine_battery_socket.name=电池座 +container.batteryREDD=FEnSU +hbm.key.qmaw=打开QMAW +tile.fluid_counter_valve.name=带计数器的流体阀门 +tile.fluid_counter_valve.desc=注意流体网络中的回流 +tile.machine_battery_redd.name=FEnSU From 2b9d43891ac1b0379a44113cc64f14422ea8a08c Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 7 Jan 2026 16:44:15 +0100 Subject: [PATCH 16/29] dance the safety dance --- changelog | 43 +++---------------- .../java/com/hbm/explosion/ExplosionTom.java | 2 +- src/main/java/com/hbm/lib/HbmWorldGen.java | 4 +- .../storage/TileEntityBatteryREDD.java | 4 +- .../com/hbm/world/gen/nbt/NBTStructure.java | 11 +++++ src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + 7 files changed, 24 insertions(+), 42 deletions(-) diff --git a/changelog b/changelog index 9f73424a7..0773405a3 100644 --- a/changelog +++ b/changelog @@ -1,41 +1,8 @@ -## Added -* New battery system - * Energy storage blocks, capacitors and battery items are now deprecated, but can still be used - * There is now new types of battery items, as well as capacitor items - * Instead of energy storage blocks, there is now a battery socket, which allows those new items to be connected to the power grid - * Battery sockets act like cables, they will connect power grids when two cables are plugged into them in different directions - * Self-chargers and creative batteries are still around, as well as spark batteries which are needed for the balefire bomb - * The FEnSU has been replaced by a much larger version with unlimited energy storage -* `/ntmreapnetworks` - * Deletes all active nodespace instances - * Mainly useful for server owners, in case nodespace builds up too much garbage data that isn't cleared correctly -* Fluid valve with counter - * Reads total fluid movement within a network - * Value can be read or reset with OC or RoR - * Allows for very precise portioning and fluid control - ## Changed -* Updated italian localization -* After not being part of worldgen for a long time, oily coal is finally being removed -* The rare metal blocks that had been unobtainable and unused for the longest time have been removed -* The schrabidium transmutator's grace period is over, it is finally being destroyed -* Most of the legacy fusion reactor components, which were unobtainable and unusable, have been removed - * The block ID economy is looking better than ever -* Infinite water barrels can now be crafted with any water container and not just buckets -* OpenComputers integration for the PWR can now also read the heat capacity stats -* Removed the restriction that demands that cluster ores need to be mined by hand -* Laser beams from energy weapons are now a lot more narrow -* All steam turbines now have a passive drain on unused power in their buffers +* Updated chinese and russian localization +* Increased density of osmiridium ores in tom craters considerably (from 1:500 to 1:200) ## Fixed -* Fixed meteors using a nonexistant keepalive timer, causing potential audio flickering in certain cases -* Fixed 528 coltan deposit config misspelling -* Potentially fixed a performance issue caused by transmission networks not being deleted when they have no active links -* Fixed multi output recipe objects not deserializing right, causing the precision assembler config to not load -* Fixed pedestal recipes not using the correct register option, making custom config files wipe all clay tablets -* Fixed custom fluids breaking when using the `/ntmreload` command -* Fixed power not saving for mining lasers -* Fixed the annihilator producing blank 528 mode blueprints when 528 mode isn't even enabled -* Fixed black fire not using the skeletonizer on death -* Fixed arc furnace electrodes not being able to be plugged into the arc furnace unless the lid is fully open -* Fixed broken keybind localization +* Fixed missing battery socket tooltip +* Potentially fixed an issue in regards to some hidden structures spawning +* Fixed FEnSU not immediately applying the muffler effect when used \ No newline at end of file diff --git a/src/main/java/com/hbm/explosion/ExplosionTom.java b/src/main/java/com/hbm/explosion/ExplosionTom.java index 21ae8f7cd..cccec9712 100644 --- a/src/main/java/com/hbm/explosion/ExplosionTom.java +++ b/src/main/java/com/hbm/explosion/ExplosionTom.java @@ -110,7 +110,7 @@ public class ExplosionTom { if(y <= craterFloor) { - if(worldObj.rand.nextInt(499) < 1) { + if(worldObj.rand.nextInt(200) == 0) { worldObj.setBlock(pX, y, pZ, ModBlocks.ore_tektite_osmiridium, 0, 2); } else { worldObj.setBlock(pX, y, pZ, ModBlocks.tektite, 0, 2); diff --git a/src/main/java/com/hbm/lib/HbmWorldGen.java b/src/main/java/com/hbm/lib/HbmWorldGen.java index d6071cefc..6bfebdbb4 100644 --- a/src/main/java/com/hbm/lib/HbmWorldGen.java +++ b/src/main/java/com/hbm/lib/HbmWorldGen.java @@ -522,12 +522,12 @@ public class HbmWorldGen implements IWorldGenerator { private static void genBlueprintChest(World world, Random rand, int i, int j, int boundsX, int boundsZ) { if(Math.abs(i) < 100 && Math.abs(j) < 100) return; - if(rand.nextBoolean()) return; + if(rand.nextInt(20) < 10) return; // nextBoolean would have weird periodicity to it, hoping that a larger int range has more variance int cX = Math.abs(i) % boundsX; int cZ = Math.abs(j) % boundsZ; - if(cX <= 0 && cX + 16 >= 0 && cZ <= 0 && cZ + 16 >= 0) { + if(cX >= 0 && cX < 16 && cZ >= 0 && cZ < 16) { int x = i + 8; int z = j + 8; int y = world.getHeightValue(x, z) - rand.nextInt(2); diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java index 06f3d8a8d..13f07574f 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBatteryREDD.java @@ -71,11 +71,13 @@ public class TileEntityBatteryREDD extends TileEntityBatteryBase { float pitch = 0.5F + this.getSpeed() / 15F * 1.5F; - if(this.prevRotation != this.rotation && MainRegistry.proxy.me().getDistanceSq(xCoord + 0.5, yCoord + 5.5, zCoord + 0.5) < 50 * 50) { + if(this.prevRotation != this.rotation && MainRegistry.proxy.me().getDistanceSq(xCoord + 0.5, yCoord + 5.5, zCoord + 0.5) < 30 * 30) { if(this.audio == null || !this.audio.isPlaying()) { this.audio = MainRegistry.proxy.getLoopedSound("hbm:block.fensuHum", xCoord, yCoord, zCoord, this.getVolume(1.5F), 25F, pitch, 5); this.audio.startSound(); } + + this.audio.updateVolume(this.getVolume(1.5F)); this.audio.updatePitch(pitch); this.audio.keepAlive(); diff --git a/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java b/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java index 04a7dda65..c02eb5d73 100644 --- a/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java +++ b/src/main/java/com/hbm/world/gen/nbt/NBTStructure.java @@ -17,6 +17,7 @@ import com.hbm.blocks.generic.BlockWandTandem.TileEntityWandTandem; import com.hbm.config.GeneralConfig; import com.hbm.config.StructureConfig; import com.hbm.handler.ThreeInts; +import com.hbm.interfaces.Untested; import com.hbm.main.MainRegistry; import com.hbm.util.Tuple.Pair; import com.hbm.util.Tuple.Quartet; @@ -79,6 +80,12 @@ public class NBTStructure { private Map> toTopConnections; private Map> toBottomConnections; private Map> toHorizontalConnections; + + // incredibly shitty system for translating legacy block definitions to new ones + @Untested // i can't find a god damn factory + private static Map substitutions = new HashMap() {{ + put("hbm:tile.ore_coal_oil", "coal_ore"); + }}; public NBTStructure(ResourceLocation resource) { // Can't use regular resource loading, servers don't know how! @@ -321,6 +328,10 @@ public class NBTStructure { String blockName = p.getString("Name"); NBTTagCompound prop = p.getCompoundTag("Properties"); + + /// BOB PATCH /// + if(substitutions.containsKey(blockName)) blockName = substitutions.get(blockName); + /// BOB PATCH /// int meta = 0; try { diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 000087ca4..c3170b05c 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4475,6 +4475,7 @@ tile.machine_battery.name=Energiespeicherblock (LEGACY) tile.machine_battery_potato.name=Kartoffelbatterieblock (LEGACY) tile.machine_battery_redd.name=FEnSU tile.machine_battery_socket.name=Batteriesockel +tile.machine_battery_socket.desc=Erlaubt es, Batterien direkt mit$dem Stromnetz zu verbinden.$Verhält sich wie ein Kabel, alle$Verbindungen sind im selben Netzwek. tile.machine_boiler.name=Boiler tile.machine_boiler.desc=Großer Boiler zum Verdampfen von Wasser oder$Erhitzen von Öl. Benötigt externe Hitzequelle.$Wärmestransferrate: ΔT*0.01 TU/t tile.machine_boiler_electric_off.name=Elektrischer Ölwärmer diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 246266b8c..1b0608a1e 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5738,6 +5738,7 @@ tile.machine_battery.name=Energy Storage Block (LEGACY) tile.machine_battery_potato.name=Potato Battery Block (LEGACY) tile.machine_battery_redd.name=FEnSU tile.machine_battery_socket.name=Battery Socket +tile.machine_battery_socket.desc=Allows battery items to be connected$to the power grid directly.$Acts as a cable, all ports are connected$to the same netowrk. tile.machine_boiler.name=Boiler tile.machine_boiler.desc=Large boiler that can boil water or heat up oil.$Requires external heat source.$Heat transfer rate: ΔT*0.01 TU/t tile.machine_boiler_electric_off.name=Electric Oil Heater From 18a4d7a25a6dd01f7a864a8d1db0183b5895569a Mon Sep 17 00:00:00 2001 From: George Paton Date: Thu, 8 Jan 2026 15:32:12 +1100 Subject: [PATCH 17/29] basic rendering of items inside MSUs (on the north face only atm) complete --- src/main/java/com/hbm/main/ClientProxy.java | 2 + .../render/tileentity/RenderMassStorage.java | 229 ++++++++++++++++++ .../storage/TileEntityMassStorage.java | 19 +- 3 files changed, 243 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/hbm/render/tileentity/RenderMassStorage.java diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index f563e2300..ce2da48e1 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -442,6 +442,8 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityVaultDoor.class, new RenderVaultDoor()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBlastDoor.class, new RenderBlastDoor()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityDoorGeneric.class, new RenderDoorGeneric()); + //storage + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMassStorage.class, new RenderMassStorage()); //NBTStructure ClientRegistry.bindTileEntitySpecialRenderer(TileEntityWandStructure.class, new RenderWandStructure()); } diff --git a/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java b/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java new file mode 100644 index 000000000..1a2795db2 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java @@ -0,0 +1,229 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.tileentity.machine.storage.TileEntityMassStorage; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +@SideOnly(Side.CLIENT) +public class RenderMassStorage extends TileEntitySpecialRenderer { + + private static final ResourceLocation RES_ITEM_GLINT = new ResourceLocation("textures/misc/enchanted_item_glint.png"); + + private RenderItem itemRenderer = new RenderItem() { + + private RenderBlocks renderBlocksRi = new RenderBlocks(); + + @Override + public byte getMiniBlockCount(ItemStack stack, byte original) { + return 1; + } + + @Override + public boolean shouldBob() { + return false; + } + + @Override + public boolean shouldSpreadItems() { + return false; + } + + // The default Mojang code for item render does not handle glinted or multi-pass items gracefully in a non-UI + // setting. This modified implementation will render these items without unsightly Z-fighting. + + @Override + public void renderItemIntoGUI (FontRenderer fontRenderer, TextureManager texManager, ItemStack itemStack, int x, int y, boolean renderEffect) { + if(itemStack.getItemSpriteNumber() == 0 && RenderBlocks.renderItemIn3d(Block.getBlockFromItem(itemStack.getItem()).getRenderType())) { + renderItemIntoGUIBlock(fontRenderer, texManager, itemStack, x, y, renderEffect); + return; + } + + Item item = itemStack.getItem(); + int meta = itemStack.getItemDamage(); + + ResourceLocation loc = itemStack.getItem().requiresMultipleRenderPasses() + ? (item.getSpriteNumber() == 0 ? TextureMap.locationBlocksTexture : TextureMap.locationItemsTexture) + : (texManager.getResourceLocation(itemStack.getItemSpriteNumber())); + + for(int i = 0; i < item.getRenderPasses(meta); ++i) { + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + texManager.bindTexture(loc); + + IIcon icon = itemStack.getItem().requiresMultipleRenderPasses() + ? item.getIcon(itemStack, i) + : itemStack.getIconIndex(); + + if(icon == null) continue; + + int color = itemStack.getItem().getColorFromItemStack(itemStack, i); + float r = (float)(color >> 16 & 255) / 255.0F; + float g = (float)(color >> 8 & 255) / 255.0F; + float b = (float)(color & 255) / 255.0F; + + if(renderWithColor) + GL11.glColor4f(r, g, b, 1.0F); + + GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL); + GL11.glPolygonOffset(-1f, -1); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + + renderIcon(x, y, icon, 16, 16); + + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + + if(renderEffect && itemStack.hasEffect(i)) + renderEffect(texManager, x, y); + + GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); + } + } + + @Override + public void renderEffect (TextureManager manager, int x, int y) { + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDepthMask(false); + manager.bindTexture(RES_ITEM_GLINT); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glColor4f(0.5F, 0.25F, 0.8F, 1.0F); + renderGlint(x, y, 16, 16); + GL11.glDepthMask(true); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + + private void renderGlint (int x, int y, int w, int h) { + for(int i = 0; i < 2; ++i) { + OpenGlHelper.glBlendFunc(772, 1, 0, 0); + float uScale = 0.00390625F; + float vScale = 0.00390625F; + float u = (Minecraft.getSystemTime() % (3000 + i * 1873)) / (3000.0F + i * 1873) * 256.0F; + float v = 0.0F; + + float hScale = (i < 1) ? 4.0F : -1.0F; + + Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + tessellator.addVertexWithUV(x + 0, y + h, 0, (u + (float)h * hScale) * uScale, (v + (float)h) * vScale); + tessellator.addVertexWithUV(x + w, y + h, 0, (u + (float)w + (float)h * hScale) * uScale, (v + (float)h) * vScale); + tessellator.addVertexWithUV(x + w, y + 0, 0, (u + (float)w) * uScale, (v + 0.0F) * vScale); + tessellator.addVertexWithUV(x + 0, y + 0, 0, (u + 0.0F) * uScale, (v + 0.0F) * vScale); + tessellator.draw(); + } + } + + private void renderItemIntoGUIBlock (FontRenderer fontRenderer, TextureManager texManager, ItemStack itemStack, int x, int y, boolean renderEffect) { + texManager.bindTexture(TextureMap.locationBlocksTexture); + Block block = Block.getBlockFromItem(itemStack.getItem()); + + if(block.getRenderBlockPass() != 0) { + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + } else { + GL11.glAlphaFunc(GL11.GL_GREATER, 0.5F); + GL11.glDisable(GL11.GL_BLEND); + } + + GL11.glPushMatrix(); + GL11.glTranslatef(x - 2, y + 3, zLevel - 3); + GL11.glScalef(10, 10, 10); + GL11.glTranslatef(1, 0.5f, 1); + GL11.glScalef(1, 1, -1); + GL11.glRotatef(210, 1, 0, 0); + GL11.glRotatef(45, 0, 1, 0); + + int color = itemStack.getItem().getColorFromItemStack(itemStack, 0); + float r = (float)(color >> 16 & 255) / 255.0F; + float g = (float)(color >> 8 & 255) / 255.0F; + float b = (float)(color & 255) / 255.0F; + + if(this.renderWithColor) + GL11.glColor4f(r * 1, g * 1, b * 1, 1.0F); + + GL11.glRotatef(-90, 0, 1, 0); + GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL); + GL11.glPolygonOffset(-1f, -1f); + + this.renderBlocksRi.useInventoryTint = this.renderWithColor; + this.renderBlocksRi.renderBlockAsItem(block, itemStack.getItemDamage(), 1); + this.renderBlocksRi.useInventoryTint = true; + + GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); + + if(block.getRenderBlockPass() == 0) + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + + GL11.glPopMatrix(); + } + }; + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + if(!(tile instanceof TileEntityMassStorage)) return; + TileEntityMassStorage storage = (TileEntityMassStorage) tile; + + if(storage.type == null) return; + + Minecraft mc = Minecraft.getMinecraft(); + World world = tile.getWorldObj(); + ForgeDirection dir = storage.getDirection(); + + itemRenderer.setRenderManager(RenderManager.instance); + + int ambLight = world.getLightBrightnessForSkyBlocks(tile.xCoord + dir.offsetX, tile.yCoord + dir.offsetY, tile.zCoord + dir.offsetZ, 0); + int lu = ambLight % 65536; + int lv = ambLight / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lu, lv); + + GL11.glPushMatrix(); + { + + // align to block + GL11.glTranslated(x, y, z); + + // align item (and flip) + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + GL11.glRotatef(180.0F, 0, 0, 1); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + + // move and scale item + GL11.glTranslatef(0, 0, -0.005F); + GL11.glScalef(1.0F / 16.0F, 1.0F / 16.0F, -0.0001F); + + itemRenderer.renderItemIntoGUI(mc.fontRenderer, mc.renderEngine, storage.type, 0, 0, true); + + } + GL11.glPopMatrix(); + } + +} diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java index cba7bf1f0..4da69f88a 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -20,6 +20,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPacketReceiver, IControlReceiverFilter, IRORValueProvider, IRORInteractive { @@ -92,7 +93,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa } } - networkPackNT(15); + networkPackNT(64); // TE render distance } } @@ -129,7 +130,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa } // Note: the following three methods are used for AE2 integration, and aren't meant to be called in any other context by default - + public int getTotalStockpile() { ItemStack type = getType(); if(type == null) return 0; @@ -174,7 +175,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa } amount -= depositStockpile; } - + int inputAvail = 0; ItemStack inStack = slots[0]; if(inStack != null && ItemStackUtil.areStacksCompatible(type, inStack)) { @@ -197,7 +198,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa } amount -= depositInput; } - + int outputAvail = 0; ItemStack outStack = slots[2]; if(outStack != null && ItemStackUtil.areStacksCompatible(type, outStack)) { @@ -224,7 +225,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa if(actually) { this.markDirty(); } - + return amount; } @@ -258,6 +259,10 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa this.stack = stack; } + public ForgeDirection getDirection() { + return ForgeDirection.NORTH; + } + @Override public boolean hasPermission(EntityPlayer player) { return Vec3.createVectorHelper(xCoord - player.posX, yCoord - player.posY, zCoord - player.posZ).lengthVector() < 20; @@ -389,12 +394,12 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa @Override public String runRORFunction(String name, String[] params) { - + if((PREFIX_FUNCTION + "toggleoutput").equals(name)) { this.output = !this.output; this.markDirty(); } - + return null; } } From 1aaf5683382fd3d7868329eec1c7f61735965ed5 Mon Sep 17 00:00:00 2001 From: ranch Date: Thu, 8 Jan 2026 01:01:27 -0600 Subject: [PATCH 18/29] better electric FSB hud --- .../com/hbm/main/ModEventHandlerClient.java | 141 +++++++++++------- 1 file changed, 84 insertions(+), 57 deletions(-) diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 375110439..109e5cfb5 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -59,12 +59,15 @@ import com.hbm.tileentity.bomb.TileEntityNukeCustom; import com.hbm.tileentity.bomb.TileEntityNukeCustom.CustomNukeEntry; import com.hbm.tileentity.bomb.TileEntityNukeCustom.EnumEntryType; import com.hbm.util.*; +import com.hbm.util.Tuple; import com.hbm.util.ArmorRegistry.HazardClass; import com.hbm.util.i18n.I18nUtil; import com.hbm.wiaj.GuiWorldInAJar; import com.hbm.wiaj.cannery.CanneryBase; import com.hbm.wiaj.cannery.Jars; import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; + +import api.hbm.fluidmk2.IFillableItem; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Loader; @@ -230,7 +233,7 @@ public class ModEventHandlerClient { ((ILookOverlay) entity).printHook(event, world, 0, 0, 0); } } - + GL11.glColor4f(1F, 1F, 1F, 1F); } @@ -395,6 +398,24 @@ public class ModEventHandlerClient { } } + private List> getBars(ItemStack stack, EntityPlayer player) { + + List> bars = new ArrayList<>(); + + if(stack.getItem() instanceof ArmorFSBPowered && ArmorFSBPowered.hasFSBArmorIgnoreCharge(player)) { + float charge = 1F - (float) ((ArmorFSBPowered) stack.getItem()).getDurabilityForDisplay(stack); + bars.add(new Tuple.Pair(charge, 0x00FF00)); + } + + if(stack.getItem() instanceof JetpackFueledBase) { + JetpackFueledBase jetpack = (JetpackFueledBase) stack.getItem(); + float fuel = (float) JetpackFueledBase.getFuel(stack) / jetpack.maxFuel; + bars.add(new Tuple.Pair(fuel, jetpack.fuel.getColor())); + } + + return bars; + } + @SubscribeEvent(receiveCanceled = true, priority = EventPriority.LOW) public void onHUDRenderBar(RenderGameOverlayEvent.Post event) { @@ -404,6 +425,28 @@ public class ModEventHandlerClient { Tessellator tess = Tessellator.instance; if(event.type == event.type.ARMOR) { + List>> barsList = new ArrayList<>(); + + for (int i = 0; i < 4; i++) { + barsList.add(new ArrayList<>()); + ItemStack stack = player.inventory.armorInventory[i]; + + if(stack == null) + continue; + + barsList.get(i).addAll(getBars(stack, player)); + + if (!(ArmorModHandler.hasMods(stack))) + continue; + + for (ItemStack mod : ArmorModHandler.pryMods(stack)) { + if (mod == null) continue; + barsList.get(i).addAll(getBars(mod, player)); + } + } + + GL11.glDisable(GL11.GL_TEXTURE_2D); + tess.startDrawingQuads(); if(ForgeHooks.getTotalArmorValue(player) == 0) { GuiIngameForge.left_height -= 10; @@ -413,69 +456,53 @@ public class ModEventHandlerClient { int height = event.resolution.getScaledHeight(); int left = width / 2 - 91; - if(ArmorFSB.hasFSBArmorIgnoreCharge(player)) { - ArmorFSB chestplate = (ArmorFSB) player.inventory.armorInventory[2].getItem(); - boolean noHelmet = chestplate.noHelmet; + for (List> bars : barsList) { + if (bars.isEmpty()) + continue; - GL11.glDisable(GL11.GL_TEXTURE_2D); - tess.startDrawingQuads(); + int top = height - GuiIngameForge.left_height + 7; - for(int i = 0; i < (noHelmet ? 3 : 4); i++) { + for (int i = 0; i < bars.size(); i++) { + float val = bars.get(i).key; - int top = height - GuiIngameForge.left_height + 7; + int hstart, hend; - ItemStack stack = player.inventory.armorInventory[i]; + if (i == 0) { + hstart = left; + hend = hstart + (bars.size() == 1 ? 81 : 40); + } else { + int bl = (int) Math.ceil(40F / (bars.size() - 1)); + // :( + hstart = left + 41 + bl * (i - 1); + hend = i == bars.size() - 1 ? left + 81 : hstart + bl; + if (i != 1) hstart += 1; + } - if(!(stack != null && stack.getItem() instanceof ArmorFSBPowered)) - break; - - float tot = 1F - (float) ((ArmorFSBPowered) stack.getItem()).getDurabilityForDisplay(stack); + int color = bars.get(i).value; tess.setColorOpaque_F(0.25F, 0.25F, 0.25F); - tess.addVertex(left - 0.5, top - 0.5, 0); - tess.addVertex(left - 0.5, top + 1.5, 0); - tess.addVertex(left + 81.5, top + 1.5, 0); - tess.addVertex(left + 81.5, top - 0.5, 0); + tess.addVertex(hstart, top - 1, 0); + tess.addVertex(hstart, top + 2, 0); + tess.addVertex(hend, top + 2, 0); + tess.addVertex(hend, top - 1, 0); - tess.setColorOpaque_F(1F - tot, tot, 0F); - tess.addVertex(left, top, 0); - tess.addVertex(left, top + 1, 0); - tess.addVertex(left + 81 * tot, top + 1, 0); - tess.addVertex(left + 81 * tot, top, 0); + float valx = hstart + (hend - hstart - 1) * val; - GuiIngameForge.left_height += 3; + float r = ((color >> 16) & 0xFF) / 255F; + float g = ((color >> 8) & 0xFF) / 255F; + float b = (color & 0xFF) / 255F; + + tess.setColorOpaque_F(r, g, b); + tess.addVertex(hstart+1, top, 0); + tess.addVertex(hstart+1, top + 1, 0); + tess.addVertex(valx, top + 1, 0); + tess.addVertex(valx, top, 0); } - tess.draw(); - - GL11.glEnable(GL11.GL_TEXTURE_2D); - - } else if(player.inventory.armorInventory[2] != null && player.inventory.armorInventory[2].getItem() instanceof JetpackFueledBase) { - - ItemStack stack = player.inventory.armorInventory[2]; - - float tot = (float) ((JetpackFueledBase) stack.getItem()).getFuel(stack) / (float) ((JetpackFueledBase) stack.getItem()).getMaxFill(stack); - - int top = height - GuiIngameForge.left_height + 3; - - GL11.glDisable(GL11.GL_TEXTURE_2D); - tess.startDrawingQuads(); - tess.setColorOpaque_F(0.25F, 0.25F, 0.25F); - tess.addVertex(left - 0.5, top - 0.5, 0); - tess.addVertex(left - 0.5, top + 4.5, 0); - tess.addVertex(left + 81.5, top + 4.5, 0); - tess.addVertex(left + 81.5, top - 0.5, 0); - - tess.setColorOpaque_F(1F - tot, tot, 0F); - tess.addVertex(left, top, 0); - tess.addVertex(left, top + 4, 0); - tess.addVertex(left + 81 * tot, top + 4, 0); - tess.addVertex(left + 81 * tot, top, 0); - tess.draw(); - - GL11.glEnable(GL11.GL_TEXTURE_2D); - + GuiIngameForge.left_height += 4; } + tess.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); } } @@ -955,7 +982,7 @@ public class ModEventHandlerClient { ItemDepletedFuel.class, ItemFluidDuct.class ); - + String prefix = "Gun "; //int gunScale = 16; //int defaultScale = 1; @@ -1069,11 +1096,11 @@ public class ModEventHandlerClient { @SideOnly(Side.CLIENT) @SubscribeEvent(priority = EventPriority.LOWEST) public void onClientTickLast(ClientTickEvent event) { - + Minecraft mc = Minecraft.getMinecraft(); long millis = Clock.get_ms(); if(millis == 0) millis = System.currentTimeMillis(); - + if(GeneralConfig.enableLoadScreenReplacement && loadingScreenReplacementRetry < 25 && !(mc.loadingScreen instanceof LoadingScreenRendererNT) && millis > lastLoadScreenReplacement + 5_000) { mc.loadingScreen = new LoadingScreenRendererNT(mc); lastLoadScreenReplacement = millis; @@ -1171,7 +1198,7 @@ public class ModEventHandlerClient { public void onRenderWorldLastEvent(RenderWorldLastEvent event) { Clock.update(); - + BlockRebar.renderRebar(Minecraft.getMinecraft().theWorld.loadedTileEntityList, event.partialTicks); GL11.glPushMatrix(); @@ -1262,7 +1289,7 @@ public class ModEventHandlerClient { if(chestplate.thermal) thermalSights = true; } - + if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemGunBaseNT && ItemGunBaseNT.aimingProgress == 1) { ItemGunBaseNT gun = (ItemGunBaseNT) player.getHeldItem().getItem(); for(int i = 0; i < gun.getConfigCount(); i++) if(gun.getConfig(player.getHeldItem(), i).hasThermalSights(player.getHeldItem())) thermalSights = true; From 4998cd13c2fbfcac138a4664a30c0d6af8bbc29d Mon Sep 17 00:00:00 2001 From: ranch Date: Thu, 8 Jan 2026 01:19:32 -0600 Subject: [PATCH 19/29] we do a little cleanup --- .../java/com/hbm/main/ModEventHandlerClient.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 109e5cfb5..8f9ac08b5 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -66,8 +66,6 @@ import com.hbm.wiaj.GuiWorldInAJar; import com.hbm.wiaj.cannery.CanneryBase; import com.hbm.wiaj.cannery.Jars; import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; - -import api.hbm.fluidmk2.IFillableItem; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Loader; @@ -404,12 +402,14 @@ public class ModEventHandlerClient { if(stack.getItem() instanceof ArmorFSBPowered && ArmorFSBPowered.hasFSBArmorIgnoreCharge(player)) { float charge = 1F - (float) ((ArmorFSBPowered) stack.getItem()).getDurabilityForDisplay(stack); + bars.add(new Tuple.Pair(charge, 0x00FF00)); } if(stack.getItem() instanceof JetpackFueledBase) { JetpackFueledBase jetpack = (JetpackFueledBase) stack.getItem(); float fuel = (float) JetpackFueledBase.getFuel(stack) / jetpack.maxFuel; + bars.add(new Tuple.Pair(fuel, jetpack.fuel.getColor())); } @@ -425,10 +425,13 @@ public class ModEventHandlerClient { Tessellator tess = Tessellator.instance; if(event.type == event.type.ARMOR) { + List>> barsList = new ArrayList<>(); for (int i = 0; i < 4; i++) { + barsList.add(new ArrayList<>()); + ItemStack stack = player.inventory.armorInventory[i]; if(stack == null) @@ -441,6 +444,7 @@ public class ModEventHandlerClient { for (ItemStack mod : ArmorModHandler.pryMods(stack)) { if (mod == null) continue; + barsList.get(i).addAll(getBars(mod, player)); } } @@ -457,14 +461,15 @@ public class ModEventHandlerClient { int left = width / 2 - 91; for (List> bars : barsList) { + if (bars.isEmpty()) continue; int top = height - GuiIngameForge.left_height + 7; for (int i = 0; i < bars.size(); i++) { - float val = bars.get(i).key; + float val = bars.get(i).key; int hstart, hend; if (i == 0) { @@ -475,11 +480,10 @@ public class ModEventHandlerClient { // :( hstart = left + 41 + bl * (i - 1); hend = i == bars.size() - 1 ? left + 81 : hstart + bl; + if (i != 1) hstart += 1; } - int color = bars.get(i).value; - tess.setColorOpaque_F(0.25F, 0.25F, 0.25F); tess.addVertex(hstart, top - 1, 0); tess.addVertex(hstart, top + 2, 0); @@ -488,6 +492,7 @@ public class ModEventHandlerClient { float valx = hstart + (hend - hstart - 1) * val; + int color = bars.get(i).value; float r = ((color >> 16) & 0xFF) / 255F; float g = ((color >> 8) & 0xFF) / 255F; float b = (color & 0xFF) / 255F; @@ -501,6 +506,7 @@ public class ModEventHandlerClient { GuiIngameForge.left_height += 4; } + tess.draw(); GL11.glEnable(GL11.GL_TEXTURE_2D); } From 9ef76687024090e3d3bf1ccf0ad269ced60799bc Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 8 Jan 2026 08:52:22 +0100 Subject: [PATCH 20/29] FUCK --- .../com/hbm/items/block/ItemBlockStorageCrate.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java index badb00e86..d9b3d5765 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java +++ b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java @@ -20,6 +20,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; +import java.util.Random; + import javax.annotation.Nonnull; public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider { @@ -89,6 +91,8 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider } public static class InventoryCrate extends ItemInventory { + + public static Random rand = new Random(); public InventoryCrate(EntityPlayer player, ItemStack crate) { this.player = player; @@ -145,6 +149,8 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider // Preserve existing NBT so we keep lock data and piders NBTTagCompound nbt = target.stackTagCompound != null ? target.stackTagCompound : new NBTTagCompound(); int invSize = this.getSizeInventory(); + + nbt.removeTag("stacklock"); for(int i = 0; i < invSize; i++) { @@ -159,8 +165,10 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider nbt.setTag("slot" + i, slot); } - if (nbt.hasNoTags()) { + if(nbt.hasNoTags()) { nbt = null; + } else { + nbt.setLong("stacklock", rand.nextLong()); // add shit that prevents crates from stacking } target.setTagCompound(nbt); From b77633b152b1a21640238d9b9ca63e5aee4d0df2 Mon Sep 17 00:00:00 2001 From: George Paton Date: Thu, 8 Jan 2026 21:01:57 +1100 Subject: [PATCH 21/29] draw the rest of the owl --- .../hbm/blocks/machine/BlockMassStorage.java | 124 +++++---- .../render/tileentity/RenderMassStorage.java | 243 +++++------------- .../com/hbm/render/util/RenderDecoItem.java | 158 +++++++++++- .../storage/TileEntityMassStorage.java | 8 +- .../textures/blocks/mass_storage_front.png | Bin 0 -> 335 bytes .../blocks/mass_storage_front_desh.png | Bin 0 -> 343 bytes .../blocks/mass_storage_front_iron.png | Bin 0 -> 329 bytes .../blocks/mass_storage_front_wood.png | Bin 0 -> 455 bytes 8 files changed, 291 insertions(+), 242 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/blocks/mass_storage_front.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/mass_storage_front_desh.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/mass_storage_front_iron.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/mass_storage_front_wood.png diff --git a/src/main/java/com/hbm/blocks/machine/BlockMassStorage.java b/src/main/java/com/hbm/blocks/machine/BlockMassStorage.java index 03fc8c597..07da2ce77 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockMassStorage.java +++ b/src/main/java/com/hbm/blocks/machine/BlockMassStorage.java @@ -33,6 +33,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; @@ -40,7 +41,8 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo @SideOnly(Side.CLIENT) private IIcon[] iconTop; @SideOnly(Side.CLIENT) private IIcon[] iconSide; - + @SideOnly(Side.CLIENT) private IIcon[] iconFront; + public BlockMassStorage() { super(Material.iron); } @@ -50,15 +52,23 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo public void registerBlockIcons(IIconRegister iconRegister) { this.iconTop = new IIcon[4]; this.iconSide = new IIcon[4]; + this.iconFront = new IIcon[4]; this.iconTop[0] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top_iron"); this.iconSide[0] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side_iron"); + this.iconFront[0] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_front_iron"); + this.iconTop[1] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top_desh"); this.iconSide[1] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side_desh"); + this.iconFront[1] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_front_desh"); + this.iconTop[2] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top"); this.iconSide[2] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side"); + this.iconFront[2] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_front"); + this.iconTop[3] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top_wood"); this.iconSide[3] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side_wood"); + this.iconFront[3] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_front_wood"); } @Override @@ -74,20 +84,24 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int metadata) { int meta = this.rectify(metadata); - return side == 1 ? this.iconTop[meta] : (side == 0 ? this.iconTop[meta] : this.iconSide[meta]); + int dir = (metadata / getSubCount()) + 2; + if(side == 0 || side == 1) return iconTop[meta]; + if(side == dir) return iconFront[meta]; + return iconSide[meta]; } @Override public int damageDropped(int meta) { - return meta; + return rectify(meta); } @Override public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityMassStorage(getCapacity(meta)); } - + public int getCapacity(int meta) { + meta = rectify(meta); return meta == 3 ? 100 : meta == 0 ? 10_000 : meta == 1 ? 100_000 : meta == 2 ? 1_000_000 : 0; } @@ -108,121 +122,129 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo return false; } } - + private static boolean dropInv = true; - + @Override public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) { - + if(!player.capabilities.isCreativeMode && !world.isRemote && willHarvest) { - + ItemStack drop = new ItemStack(this, 1, world.getBlockMetadata(x, y, z)); ISidedInventory inv = (ISidedInventory)world.getTileEntity(x, y, z); - + NBTTagCompound nbt = new NBTTagCompound(); - + if(inv != null) { - + for(int i = 0; i < inv.getSizeInventory(); i++) { - + ItemStack stack = inv.getStackInSlot(i); if(stack == null) continue; - + NBTTagCompound slot = new NBTTagCompound(); stack.writeToNBT(slot); nbt.setTag("slot" + i, slot); } } - + if(inv instanceof TileEntityLockableBase) { TileEntityLockableBase lockable = (TileEntityLockableBase) inv; - + if(lockable.isLocked()) { nbt.setInteger("lock", lockable.getPins()); nbt.setDouble("lockMod", lockable.getMod()); } } - + if(inv instanceof TileEntityMassStorage && nbt.func_150296_c().size() > 0) { TileEntityMassStorage storage = (TileEntityMassStorage) inv; nbt.setInteger("stack", storage.getStockpile()); } - + if(!nbt.hasNoTags()) { drop.stackTagCompound = nbt; } - + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, drop)); } - + dropInv = false; boolean flag = world.setBlockToAir(x, y, z); dropInv = true; - + return flag; } @Override public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { - + ISidedInventory inv = (ISidedInventory)world.getTileEntity(x, y, z); - + if(inv != null && stack.hasTagCompound()) { - + for(int i = 0; i < inv.getSizeInventory(); i++) { inv.setInventorySlotContents(i, ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("slot" + i))); } - + if(inv instanceof TileEntityMassStorage) { TileEntityMassStorage storage = (TileEntityMassStorage) inv; - + if(stack.stackTagCompound.hasKey("lock")) { storage.setPins(stack.stackTagCompound.getInteger("lock")); storage.setMod(stack.stackTagCompound.getDouble("lockMod")); storage.lock(); } - + storage.setStockpile(stack.stackTagCompound.getInteger("stack")); } } super.onBlockPlacedBy(world, x, y, z, player, stack); + + int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int meta = stack.getItemDamage(); + + if(i == 0) world.setBlockMetadataWithNotify(x, y, z, meta, 2); + if(i == 1) world.setBlockMetadataWithNotify(x, y, z, meta + 3 * getSubCount(), 2); + if(i == 2) world.setBlockMetadataWithNotify(x, y, z, meta + 1 * getSubCount(), 2); + if(i == 3) world.setBlockMetadataWithNotify(x, y, z, meta + 2 * getSubCount(), 2); } - + @Override public void breakBlock(World world, int x, int y, int z, Block block, int meta) { if(dropInv) { ISidedInventory sided = (ISidedInventory) world.getTileEntity(x, y, z); Random rand = world.rand; - + if(sided != null) { for(int i1 = 0; i1 < sided.getSizeInventory(); ++i1) { - + if(i1 == 1) continue; //do NOT drop the filter item - + ItemStack itemstack = sided.getStackInSlot(i1); - + if(itemstack != null) { float f = rand.nextFloat() * 0.8F + 0.1F; float f1 = rand.nextFloat() * 0.8F + 0.1F; float f2 = rand.nextFloat() * 0.8F + 0.1F; - + while(itemstack.stackSize > 0) { int j1 = rand.nextInt(21) + 10; - + if(j1 > itemstack.stackSize) { j1 = itemstack.stackSize; } - + itemstack.stackSize -= j1; EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); - + if(itemstack.hasTagCompound()) { entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); } - + float f3 = 0.05F; entityitem.motionX = (float) rand.nextGaussian() * f3; entityitem.motionY = (float) rand.nextGaussian() * f3 + 0.2F; @@ -231,7 +253,7 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo } } } - + world.func_147453_f(x, y, z, block); } } @@ -251,51 +273,51 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo @Override public void printHook(Pre event, World world, int x, int y, int z) { - + TileEntity te = world.getTileEntity(x, y, z); - + if(!(te instanceof TileEntityMassStorage)) return; - + TileEntityMassStorage storage = (TileEntityMassStorage) te; - + List text = new ArrayList(); String title = "Empty"; boolean full = storage.type != null; - + if(full) { - + title = storage.type.getDisplayName(); text.add(String.format(Locale.US, "%,d", storage.getStockpile()) + " / " + String.format(Locale.US, "%,d", storage.getCapacity())); - + double percent = (double) storage.getStockpile() / (double) storage.getCapacity(); int charge = (int) Math.floor(percent * 10_000D); int color = ((int) (0xFF - 0xFF * percent)) << 16 | ((int)(0xFF * percent) << 8); - + text.add("&[" + color + "&]" + (charge / 100D) + "%"); } - + ILookOverlay.printGeneric(event, title, full ? 0xffff00 : 0x00ffff, full ? 0x404000 : 0x004040, text); } @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { - + if(!stack.hasTagCompound()) return; - + ItemStack type = ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("slot1")); - + if(type != null) { list.add(EnumChatFormatting.GOLD + type.getDisplayName()); list.add(String.format(Locale.US, "%,d", stack.stackTagCompound.getInteger("stack")) + " / " + String.format(Locale.US, "%,d", getCapacity(stack.getItemDamage()))); } } - + @Override public boolean hasComparatorInputOverride() { return true; } - + @Override public int getComparatorInputOverride(World world, int x, int y, int z, int side) { return ((TileEntityMassStorage) world.getTileEntity(x, y, z)).redstone; diff --git a/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java b/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java index 1a2795db2..a1a54261d 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java +++ b/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java @@ -2,190 +2,22 @@ package com.hbm.render.tileentity; import org.lwjgl.opengl.GL11; +import com.hbm.render.util.RenderDecoItem; import com.hbm.tileentity.machine.storage.TileEntityMassStorage; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.Block; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.entity.RenderItem; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.texture.TextureManager; -import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; @SideOnly(Side.CLIENT) public class RenderMassStorage extends TileEntitySpecialRenderer { - private static final ResourceLocation RES_ITEM_GLINT = new ResourceLocation("textures/misc/enchanted_item_glint.png"); - - private RenderItem itemRenderer = new RenderItem() { - - private RenderBlocks renderBlocksRi = new RenderBlocks(); - - @Override - public byte getMiniBlockCount(ItemStack stack, byte original) { - return 1; - } - - @Override - public boolean shouldBob() { - return false; - } - - @Override - public boolean shouldSpreadItems() { - return false; - } - - // The default Mojang code for item render does not handle glinted or multi-pass items gracefully in a non-UI - // setting. This modified implementation will render these items without unsightly Z-fighting. - - @Override - public void renderItemIntoGUI (FontRenderer fontRenderer, TextureManager texManager, ItemStack itemStack, int x, int y, boolean renderEffect) { - if(itemStack.getItemSpriteNumber() == 0 && RenderBlocks.renderItemIn3d(Block.getBlockFromItem(itemStack.getItem()).getRenderType())) { - renderItemIntoGUIBlock(fontRenderer, texManager, itemStack, x, y, renderEffect); - return; - } - - Item item = itemStack.getItem(); - int meta = itemStack.getItemDamage(); - - ResourceLocation loc = itemStack.getItem().requiresMultipleRenderPasses() - ? (item.getSpriteNumber() == 0 ? TextureMap.locationBlocksTexture : TextureMap.locationItemsTexture) - : (texManager.getResourceLocation(itemStack.getItemSpriteNumber())); - - for(int i = 0; i < item.getRenderPasses(meta); ++i) { - OpenGlHelper.glBlendFunc(770, 771, 1, 0); - texManager.bindTexture(loc); - - IIcon icon = itemStack.getItem().requiresMultipleRenderPasses() - ? item.getIcon(itemStack, i) - : itemStack.getIconIndex(); - - if(icon == null) continue; - - int color = itemStack.getItem().getColorFromItemStack(itemStack, i); - float r = (float)(color >> 16 & 255) / 255.0F; - float g = (float)(color >> 8 & 255) / 255.0F; - float b = (float)(color & 255) / 255.0F; - - if(renderWithColor) - GL11.glColor4f(r, g, b, 1.0F); - - GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL); - GL11.glPolygonOffset(-1f, -1); - - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_BLEND); - GL11.glEnable(GL11.GL_ALPHA_TEST); - - renderIcon(x, y, icon, 16, 16); - - GL11.glDisable(GL11.GL_ALPHA_TEST); - GL11.glDisable(GL11.GL_BLEND); - GL11.glEnable(GL11.GL_LIGHTING); - - if(renderEffect && itemStack.hasEffect(i)) - renderEffect(texManager, x, y); - - GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); - } - } - - @Override - public void renderEffect (TextureManager manager, int x, int y) { - GL11.glDepthFunc(GL11.GL_EQUAL); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDepthMask(false); - manager.bindTexture(RES_ITEM_GLINT); - GL11.glEnable(GL11.GL_ALPHA_TEST); - GL11.glEnable(GL11.GL_BLEND); - GL11.glColor4f(0.5F, 0.25F, 0.8F, 1.0F); - renderGlint(x, y, 16, 16); - GL11.glDepthMask(true); - GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_ALPHA_TEST); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDepthFunc(GL11.GL_LEQUAL); - } - - private void renderGlint (int x, int y, int w, int h) { - for(int i = 0; i < 2; ++i) { - OpenGlHelper.glBlendFunc(772, 1, 0, 0); - float uScale = 0.00390625F; - float vScale = 0.00390625F; - float u = (Minecraft.getSystemTime() % (3000 + i * 1873)) / (3000.0F + i * 1873) * 256.0F; - float v = 0.0F; - - float hScale = (i < 1) ? 4.0F : -1.0F; - - Tessellator tessellator = Tessellator.instance; - tessellator.startDrawingQuads(); - tessellator.addVertexWithUV(x + 0, y + h, 0, (u + (float)h * hScale) * uScale, (v + (float)h) * vScale); - tessellator.addVertexWithUV(x + w, y + h, 0, (u + (float)w + (float)h * hScale) * uScale, (v + (float)h) * vScale); - tessellator.addVertexWithUV(x + w, y + 0, 0, (u + (float)w) * uScale, (v + 0.0F) * vScale); - tessellator.addVertexWithUV(x + 0, y + 0, 0, (u + 0.0F) * uScale, (v + 0.0F) * vScale); - tessellator.draw(); - } - } - - private void renderItemIntoGUIBlock (FontRenderer fontRenderer, TextureManager texManager, ItemStack itemStack, int x, int y, boolean renderEffect) { - texManager.bindTexture(TextureMap.locationBlocksTexture); - Block block = Block.getBlockFromItem(itemStack.getItem()); - - if(block.getRenderBlockPass() != 0) { - GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); - GL11.glEnable(GL11.GL_BLEND); - OpenGlHelper.glBlendFunc(770, 771, 1, 0); - } else { - GL11.glAlphaFunc(GL11.GL_GREATER, 0.5F); - GL11.glDisable(GL11.GL_BLEND); - } - - GL11.glPushMatrix(); - GL11.glTranslatef(x - 2, y + 3, zLevel - 3); - GL11.glScalef(10, 10, 10); - GL11.glTranslatef(1, 0.5f, 1); - GL11.glScalef(1, 1, -1); - GL11.glRotatef(210, 1, 0, 0); - GL11.glRotatef(45, 0, 1, 0); - - int color = itemStack.getItem().getColorFromItemStack(itemStack, 0); - float r = (float)(color >> 16 & 255) / 255.0F; - float g = (float)(color >> 8 & 255) / 255.0F; - float b = (float)(color & 255) / 255.0F; - - if(this.renderWithColor) - GL11.glColor4f(r * 1, g * 1, b * 1, 1.0F); - - GL11.glRotatef(-90, 0, 1, 0); - GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL); - GL11.glPolygonOffset(-1f, -1f); - - this.renderBlocksRi.useInventoryTint = this.renderWithColor; - this.renderBlocksRi.renderBlockAsItem(block, itemStack.getItemDamage(), 1); - this.renderBlocksRi.useInventoryTint = true; - - GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); - - if(block.getRenderBlockPass() == 0) - GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); - - GL11.glPopMatrix(); - } - }; + private RenderItem itemRenderer = new RenderDecoItem(this); @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { @@ -195,15 +27,9 @@ public class RenderMassStorage extends TileEntitySpecialRenderer { if(storage.type == null) return; Minecraft mc = Minecraft.getMinecraft(); - World world = tile.getWorldObj(); - ForgeDirection dir = storage.getDirection(); + int dir = storage.getBlockMetadata() / 4; - itemRenderer.setRenderManager(RenderManager.instance); - - int ambLight = world.getLightBrightnessForSkyBlocks(tile.xCoord + dir.offsetX, tile.yCoord + dir.offsetY, tile.zCoord + dir.offsetZ, 0); - int lu = ambLight % 65536; - int lv = ambLight / 65536; - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lu, lv); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240); GL11.glPushMatrix(); { @@ -214,16 +40,67 @@ public class RenderMassStorage extends TileEntitySpecialRenderer { // align item (and flip) GL11.glTranslatef(0.5F, 0.5F, 0.5F); GL11.glRotatef(180.0F, 0, 0, 1); + switch(dir) { + case 1: GL11.glRotatef(180.0F, 0, 1, 0); break; + case 2: GL11.glRotatef(-90.0F, 0, 1, 0); break; + case 3: GL11.glRotatef(90.0F, 0, 1, 0); break; + } GL11.glTranslatef(-0.5F, -0.5F, -0.5F); - // move and scale item - GL11.glTranslatef(0, 0, -0.005F); - GL11.glScalef(1.0F / 16.0F, 1.0F / 16.0F, -0.0001F); - itemRenderer.renderItemIntoGUI(mc.fontRenderer, mc.renderEngine, storage.type, 0, 0, true); + GL11.glTranslatef(0, 0, -0.005F); // offset to prevent z-fighting + GL11.glScalef(1.0F / 16.0F, 1.0F / 16.0F, -0.0001F); // scale to block size + + + GL11.glPushMatrix(); + { + + GL11.glTranslatef(4, 3, 0); // adjust up one pixel + GL11.glScalef(8.0F / 16.0F, 8.0F / 16.0F, 1); // scale to 8 pixels across + + RenderHelper.disableStandardItemLighting(); + + itemRenderer.renderItemIntoGUI(mc.fontRenderer, mc.renderEngine, storage.type, 0, 0, true); + itemRenderer.renderItemOverlayIntoGUI(mc.fontRenderer, mc.renderEngine, storage.type, 0, 0); + + } + GL11.glPopMatrix(); + + GL11.glColor3f(1, 1, 1); + + String text = getTextForCount(storage.getStockpile(), mc.fontRenderer.getUnicodeFlag()); + + int textX = 32 - mc.fontRenderer.getStringWidth(text) / 2; + int textY = 46; + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glPushMatrix(); + { + + GL11.glScalef(4.0F / 16.0F, 4.0F / 16.0F, 4.0F / 16.0F); + + int fontColor = 0x00FF00; + + mc.fontRenderer.drawString(text, textX + 1, textY + 1, (fontColor & 16579836) >> 2 | fontColor & -16777216); + + GL11.glTranslatef(0, 0, 1); + + mc.fontRenderer.drawString(text, textX, textY, 0x00FF00); + + } + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_LIGHTING); } GL11.glPopMatrix(); } + private String getTextForCount(int stackSize, boolean isUnicode) { + if(stackSize >= 100000000 || (stackSize >= 1000000 && isUnicode)) return String.format("%.0fM", stackSize / 1000000f); + if(stackSize >= 1000000) return String.format("%.1fM", stackSize / 1000000f); + if(stackSize >= 100000 || (stackSize >= 10000 && isUnicode)) return String.format("%.0fK", stackSize / 1000f); + if(stackSize >= 10000) return String.format("%.1fK", stackSize / 1000f); + return String.valueOf(stackSize); + } + } diff --git a/src/main/java/com/hbm/render/util/RenderDecoItem.java b/src/main/java/com/hbm/render/util/RenderDecoItem.java index b7e6d2a70..2a3b8f59c 100644 --- a/src/main/java/com/hbm/render/util/RenderDecoItem.java +++ b/src/main/java/com/hbm/render/util/RenderDecoItem.java @@ -1,16 +1,29 @@ package com.hbm.render.util; +import org.lwjgl.opengl.GL11; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; /** * For small items as part of a TESR, e.g. items in a press * @author hbm */ public class RenderDecoItem extends RenderItem { - + public RenderDecoItem(TileEntitySpecialRenderer render) { this.setRenderManager(RenderManager.instance); } @@ -34,4 +47,147 @@ public class RenderDecoItem extends RenderItem { public boolean shouldSpreadItems() { return false; } + + + /** + * Fixes z-fighting issues with item glints when using GUI (flat) rendering in world, from StorageDrawers 1.7.10 + */ + + private static final ResourceLocation RES_ITEM_GLINT = new ResourceLocation("textures/misc/enchanted_item_glint.png"); + private RenderBlocks renderBlocksRi = new RenderBlocks(); + + @Override + public void renderItemIntoGUI(FontRenderer fontRenderer, TextureManager texManager, ItemStack itemStack, int x, int y, boolean renderEffect) { + if(itemStack.getItemSpriteNumber() == 0 && RenderBlocks.renderItemIn3d(Block.getBlockFromItem(itemStack.getItem()).getRenderType())) { + renderItemIntoGUIBlock(fontRenderer, texManager, itemStack, x, y, renderEffect); + return; + } + + Item item = itemStack.getItem(); + int meta = itemStack.getItemDamage(); + + ResourceLocation loc = itemStack.getItem().requiresMultipleRenderPasses() + ? (item.getSpriteNumber() == 0 ? TextureMap.locationBlocksTexture : TextureMap.locationItemsTexture) + : (texManager.getResourceLocation(itemStack.getItemSpriteNumber())); + + for(int i = 0; i < item.getRenderPasses(meta); ++i) { + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + texManager.bindTexture(loc); + + IIcon icon = itemStack.getItem().requiresMultipleRenderPasses() + ? item.getIcon(itemStack, i) + : itemStack.getIconIndex(); + + if(icon == null) continue; + + int color = itemStack.getItem().getColorFromItemStack(itemStack, i); + float r = (float)(color >> 16 & 255) / 255.0F; + float g = (float)(color >> 8 & 255) / 255.0F; + float b = (float)(color & 255) / 255.0F; + + if(renderWithColor) + GL11.glColor4f(r, g, b, 1.0F); + + GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL); + GL11.glPolygonOffset(-1f, -1); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + + renderIcon(x, y, icon, 16, 16); + + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + + if(renderEffect && itemStack.hasEffect(i)) + renderEffect(texManager, x, y); + + GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); + } + } + + @Override + public void renderEffect(TextureManager manager, int x, int y) { + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDepthMask(false); + manager.bindTexture(RES_ITEM_GLINT); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glColor4f(0.5F, 0.25F, 0.8F, 1.0F); + renderGlint(x, y, 16, 16); + GL11.glDepthMask(true); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + + private void renderGlint(int x, int y, int w, int h) { + for(int i = 0; i < 2; ++i) { + OpenGlHelper.glBlendFunc(772, 1, 0, 0); + float uScale = 0.00390625F; + float vScale = 0.00390625F; + float u = (Minecraft.getSystemTime() % (3000 + i * 1873)) / (3000.0F + i * 1873) * 256.0F; + float v = 0.0F; + + float hScale = (i < 1) ? 4.0F : -1.0F; + + Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + tessellator.addVertexWithUV(x + 0, y + h, 0, (u + (float)h * hScale) * uScale, (v + (float)h) * vScale); + tessellator.addVertexWithUV(x + w, y + h, 0, (u + (float)w + (float)h * hScale) * uScale, (v + (float)h) * vScale); + tessellator.addVertexWithUV(x + w, y + 0, 0, (u + (float)w) * uScale, (v + 0.0F) * vScale); + tessellator.addVertexWithUV(x + 0, y + 0, 0, (u + 0.0F) * uScale, (v + 0.0F) * vScale); + tessellator.draw(); + } + } + + private void renderItemIntoGUIBlock(FontRenderer fontRenderer, TextureManager texManager, ItemStack itemStack, int x, int y, boolean renderEffect) { + texManager.bindTexture(TextureMap.locationBlocksTexture); + Block block = Block.getBlockFromItem(itemStack.getItem()); + + if(block.getRenderBlockPass() != 0) { + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + } else { + GL11.glAlphaFunc(GL11.GL_GREATER, 0.5F); + GL11.glDisable(GL11.GL_BLEND); + } + + GL11.glPushMatrix(); + GL11.glTranslatef(x - 2, y + 3, zLevel - 3); + GL11.glScalef(10, 10, 10); + GL11.glTranslatef(1, 0.5f, 1); + GL11.glScalef(1, 1, -1); + GL11.glRotatef(210, 1, 0, 0); + GL11.glRotatef(45, 0, 1, 0); + + int color = itemStack.getItem().getColorFromItemStack(itemStack, 0); + float r = (float)(color >> 16 & 255) / 255.0F; + float g = (float)(color >> 8 & 255) / 255.0F; + float b = (float)(color & 255) / 255.0F; + + if(this.renderWithColor) + GL11.glColor4f(r * 1, g * 1, b * 1, 1.0F); + + GL11.glRotatef(-90, 0, 1, 0); + GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL); + GL11.glPolygonOffset(-1f, -1f); + + this.renderBlocksRi.useInventoryTint = this.renderWithColor; + this.renderBlocksRi.renderBlockAsItem(block, itemStack.getItemDamage(), 1); + this.renderBlocksRi.useInventoryTint = true; + + GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); + + if(block.getRenderBlockPass() == 0) + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + + GL11.glPopMatrix(); + } + } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java index 4da69f88a..09c9288f2 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -3,7 +3,6 @@ package com.hbm.tileentity.machine.storage; import com.hbm.inventory.container.ContainerMassStorage; import com.hbm.inventory.gui.GUIMassStorage; import com.hbm.items.ModItems; -import com.hbm.tileentity.IBufPacketReceiver; import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.util.BufferUtil; @@ -20,9 +19,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPacketReceiver, IControlReceiverFilter, IRORValueProvider, IRORInteractive { +public class TileEntityMassStorage extends TileEntityCrateBase implements IControlReceiverFilter, IRORValueProvider, IRORInteractive { private int stack = 0; public boolean output = false; @@ -259,10 +257,6 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa this.stack = stack; } - public ForgeDirection getDirection() { - return ForgeDirection.NORTH; - } - @Override public boolean hasPermission(EntityPlayer player) { return Vec3.createVectorHelper(xCoord - player.posX, yCoord - player.posY, zCoord - player.posZ).lengthVector() < 20; diff --git a/src/main/resources/assets/hbm/textures/blocks/mass_storage_front.png b/src/main/resources/assets/hbm/textures/blocks/mass_storage_front.png new file mode 100644 index 0000000000000000000000000000000000000000..47eca2890d6706e78f6122dd1b01362cc977bfe1 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jPK-BC>eK@{Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a z5n0T@z%2~Ij105pNB{-dOFVsD*Krox3N7_?aSX9IeRi@Tf0Kbgt3BsS zzZ<`;I~Q-VF!=ad;?#we*_Rhib7c=^$>LdHxbJQ3r+s&xzT=y|ZLeV{&zrAC^Q1SkF^Q542d^*3LNLMdSb5&$vI5y*AboR?#dW?4% YJ3iWKEnCN~4|Fhtr>mdKI;Vst06XteK@{Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a z5n0T@z%2~Ij105pNB{-dOFVsD*O;Iya{aTU*@7}E~;D2ve%)UFLcA;YJHDB*I zkv)^S1z41SX$UT2V(>9Pea>;I$m)}CHahCw|IX-fd5iIxO#YlhYzNH#6fsM`-1LWs z;lY;sf0wI!XznjK^q*l$&|ZeTyW8H@1a5slrFci}ib4q{iF+BzN=GhV_}s>ja{SG^ grBjalzQGW~7`EM3PFYyr9_VlePgg&ebxsLQ07u<-b^rhX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/mass_storage_front_iron.png b/src/main/resources/assets/hbm/textures/blocks/mass_storage_front_iron.png new file mode 100644 index 0000000000000000000000000000000000000000..2a3f5210ea819004f0fec1b5a2c2cd1cd8fbe069 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jPK-BC>eK@{Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a z5n0T@z%2~Ij105pNB{-dOFVsD*9dnJ@--XqxWo%4 zx!?S}*e7!4kG(vRMjPGa0wQiLhyoeK@{Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a z5n0T@z%2~Ij105pNB{-dOFVsD*nk3GGbRUxvu=P37bR;V+At9mS|6A=t43UC?lad``90U>%d`rIW zX~rPL7Qk$?*2L57K#)IU;(^EJ>pjgLJZ=BZ!R%65;c4bDp<6ofz%^xapy-R%b`IvI z*e^h}7kxxcdG`JN;~FNh;lL%w8T0wvWcL60AlIsU;^^4}$Bwn-@Gvi)Kl}6l^YiT| d&t5Faa5XDrb5y0^Ct%nyc)I$ztaD0e0swZ-pY{L% literal 0 HcmV?d00001 From 7757e3cb5326502d8e406407abb81428e003ca82 Mon Sep 17 00:00:00 2001 From: George Paton Date: Thu, 8 Jan 2026 22:07:21 +1100 Subject: [PATCH 22/29] add a fill progress bar --- .../render/tileentity/RenderMassStorage.java | 32 ++++++++++++++++--- .../storage/TileEntityMassStorage.java | 7 +++- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java b/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java index a1a54261d..0a2a43dc6 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java +++ b/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java @@ -10,6 +10,7 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; @@ -55,13 +56,12 @@ public class RenderMassStorage extends TileEntitySpecialRenderer { GL11.glPushMatrix(); { - GL11.glTranslatef(4, 3, 0); // adjust up one pixel + GL11.glTranslatef(4.0F, 2.5F, 0); // adjust to centered location GL11.glScalef(8.0F / 16.0F, 8.0F / 16.0F, 1); // scale to 8 pixels across RenderHelper.disableStandardItemLighting(); itemRenderer.renderItemIntoGUI(mc.fontRenderer, mc.renderEngine, storage.type, 0, 0, true); - itemRenderer.renderItemOverlayIntoGUI(mc.fontRenderer, mc.renderEngine, storage.type, 0, 0); } GL11.glPopMatrix(); @@ -71,7 +71,7 @@ public class RenderMassStorage extends TileEntitySpecialRenderer { String text = getTextForCount(storage.getStockpile(), mc.fontRenderer.getUnicodeFlag()); int textX = 32 - mc.fontRenderer.getStringWidth(text) / 2; - int textY = 46; + int textY = 44; GL11.glDisable(GL11.GL_LIGHTING); GL11.glPushMatrix(); @@ -81,16 +81,38 @@ public class RenderMassStorage extends TileEntitySpecialRenderer { int fontColor = 0x00FF00; + // funky text shadow rendering with no z-fighting and alpha testing still enabled mc.fontRenderer.drawString(text, textX + 1, textY + 1, (fontColor & 16579836) >> 2 | fontColor & -16777216); - GL11.glTranslatef(0, 0, 1); - mc.fontRenderer.drawString(text, textX, textY, 0x00FF00); } GL11.glPopMatrix(); + + GL11.glDisable(GL11.GL_TEXTURE_2D); + + double fraction = (double) storage.getStockpile() / (double) storage.getCapacity(); + + GL11.glColor3d(1.0 - fraction, fraction, 0.0); + + double bMinX = 2; + double bMaxX = 2 + fraction * 12; + double bMinY = 13.5; + double bMaxY = 14; + + Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + tessellator.addVertex(bMinX, bMaxY, 0); + tessellator.addVertex(bMaxX, bMaxY, 0); + tessellator.addVertex(bMaxX, bMinY, 0); + tessellator.addVertex(bMinX, bMinY, 0); + tessellator.draw(); + + GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_LIGHTING); + RenderHelper.enableStandardItemLighting(); + } GL11.glPopMatrix(); } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java index 09c9288f2..75ebceb3a 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -91,7 +91,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IContr } } - networkPackNT(64); // TE render distance + networkPackNT(32); // TE render distance } } @@ -294,6 +294,11 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IContr nbt.setByte("redstone", (byte) redstone); } + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 1024.0D; // only render mass storage info 32 blocks away, for performance + } + @Override public void nextMode(int i) { From b5b4a537c547749329f446155a9ff88c2737363a Mon Sep 17 00:00:00 2001 From: George Paton Date: Thu, 8 Jan 2026 22:17:25 +1100 Subject: [PATCH 23/29] what the fuck is this baby doing mixed in with my bathwater --- .../java/com/hbm/render/tileentity/RenderMassStorage.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java b/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java index 0a2a43dc6..15f605a17 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java +++ b/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java @@ -30,6 +30,9 @@ public class RenderMassStorage extends TileEntitySpecialRenderer { Minecraft mc = Minecraft.getMinecraft(); int dir = storage.getBlockMetadata() / 4; + // fuck this shit, push pop the whole ass lighting state then for all I fucken care + GL11.glPushAttrib(GL11.GL_ENABLE_BIT | GL11.GL_LIGHTING_BIT | GL11.GL_COLOR_BUFFER_BIT); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240); GL11.glPushMatrix(); @@ -111,10 +114,10 @@ public class RenderMassStorage extends TileEntitySpecialRenderer { GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_LIGHTING); - RenderHelper.enableStandardItemLighting(); - } GL11.glPopMatrix(); + + GL11.glPopAttrib(); } private String getTextForCount(int stackSize, boolean isUnicode) { From a0a7e000d4d0df304bc938ba169ccea955cde59e Mon Sep 17 00:00:00 2001 From: George Paton Date: Thu, 8 Jan 2026 22:26:26 +1100 Subject: [PATCH 24/29] drop correct meta on breaking --- src/main/java/com/hbm/blocks/machine/BlockMassStorage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/machine/BlockMassStorage.java b/src/main/java/com/hbm/blocks/machine/BlockMassStorage.java index 07da2ce77..261c36736 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockMassStorage.java +++ b/src/main/java/com/hbm/blocks/machine/BlockMassStorage.java @@ -130,7 +130,7 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo if(!player.capabilities.isCreativeMode && !world.isRemote && willHarvest) { - ItemStack drop = new ItemStack(this, 1, world.getBlockMetadata(x, y, z)); + ItemStack drop = new ItemStack(this, 1, rectify(world.getBlockMetadata(x, y, z))); ISidedInventory inv = (ISidedInventory)world.getTileEntity(x, y, z); NBTTagCompound nbt = new NBTTagCompound(); From 84326bedb445ccedcf521c4bb1c74ba6221409dd Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 8 Jan 2026 17:43:07 +0100 Subject: [PATCH 25/29] bals --- changelog | 5 ++++- src/main/java/com/hbm/inventory/fluid/FluidType.java | 9 ++++++++- src/main/java/com/hbm/inventory/fluid/Fluids.java | 3 ++- src/main/java/com/hbm/main/CraftingManager.java | 1 + src/main/java/com/hbm/util/CompatFluidRegistry.java | 5 +++-- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/changelog b/changelog index 0773405a3..4aa8ff9c3 100644 --- a/changelog +++ b/changelog @@ -5,4 +5,7 @@ ## Fixed * Fixed missing battery socket tooltip * Potentially fixed an issue in regards to some hidden structures spawning -* Fixed FEnSU not immediately applying the muffler effect when used \ No newline at end of file +* 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 diff --git a/src/main/java/com/hbm/inventory/fluid/FluidType.java b/src/main/java/com/hbm/inventory/fluid/FluidType.java index aed5ef93c..9113db421 100644 --- a/src/main/java/com/hbm/inventory/fluid/FluidType.java +++ b/src/main/java/com/hbm/inventory/fluid/FluidType.java @@ -103,6 +103,13 @@ public class FluidType { /** For CompatFluidRegistry */ public FluidType(String name, int id, int color, int p, int f, int r, EnumSymbol symbol, ResourceLocation texture) { + setupForeign(name, id, color, p, f, r, symbol, texture); + + Fluids.foreignFluids.add(this); + Fluids.metaOrder.add(this); + } + + public FluidType setupForeign(String name, int id, int color, int p, int f, int r, EnumSymbol symbol, ResourceLocation texture) { this.stringId = name; this.color = color; this.unlocalized = "hbmfluid." + name.toLowerCase(Locale.US); @@ -115,7 +122,7 @@ public class FluidType { this.id = id; Fluids.register(this, id); - Fluids.foreignFluids.add(this); + return this; } public FluidType setTemp(int temperature) { diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 494973163..47fe280d4 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -884,7 +884,7 @@ public class Fluids { } } - private static HashMap fluidMigration = new HashMap(); // since reloading would create new fluid instances, and those break existing machines + public static HashMap fluidMigration = new HashMap(); // since reloading would create new fluid instances, and those break existing machines public static void reloadFluids(){ File folder = MainRegistry.configHbmDir; @@ -901,6 +901,7 @@ public class Fluids { customFluids.clear(); for(FluidType type : foreignFluids) { + fluidMigration.put(type.getName(), type); idMapping.remove(type.getID()); registerOrder.remove(type); nameMapping.remove(type.getName()); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 773bb98bc..26e7fafe1 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -580,6 +580,7 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModBlocks.fluid_duct_gauge), new Object[] { ModBlocks.fluid_duct_paintable, STEEL.ingot(), DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); addRecipeAuto(new ItemStack(ModBlocks.fluid_valve, 1), new Object[] { "S", "W", 'S', Blocks.lever, 'W', ModBlocks.fluid_duct_paintable }); addRecipeAuto(new ItemStack(ModBlocks.fluid_switch, 1), new Object[] { "S", "W", 'S', REDSTONE.dust(), 'W', ModBlocks.fluid_duct_paintable }); + addRecipeAuto(new ItemStack(ModBlocks.fluid_counter_valve, 1), new Object[] { "S", "W", 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP), 'W', ModBlocks.fluid_switch }); addRecipeAuto(new ItemStack(ModBlocks.fluid_pump, 1), new Object[] { " S ", "PGP", "IMI", 'S', STEEL.shell(), 'P', STEEL.pipe(), 'G', GRAPHITE.ingot(), 'I', STEEL.ingot(), 'M', ModItems.motor }); addRecipeAuto(new ItemStack(ModBlocks.pneumatic_tube, 8), new Object[] { "CRC", 'C', CU.plateCast(), 'R', ANY_RUBBER.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.pneumatic_tube, 24), new Object[] { "CRC", 'C', CU.plateWelded(), 'R', ANY_RUBBER.ingot() }); diff --git a/src/main/java/com/hbm/util/CompatFluidRegistry.java b/src/main/java/com/hbm/util/CompatFluidRegistry.java index c683734c9..8b310781c 100644 --- a/src/main/java/com/hbm/util/CompatFluidRegistry.java +++ b/src/main/java/com/hbm/util/CompatFluidRegistry.java @@ -10,8 +10,9 @@ public class CompatFluidRegistry { /** Registers a fluid with a custom ID. */ public static FluidType registerFluid(String name, int id, int color, int p, int f, int r, EnumSymbol symbol, ResourceLocation texture) { - FluidType type = new FluidType(name, id, color, p, f, r, symbol, texture); - Fluids.metaOrder.add(type); + FluidType type = Fluids.fluidMigration.get(name); + if(type == null) type = new FluidType(name, id, color, p, f, r, symbol, texture); + else type.setupForeign(name, id, color, p, f, r, symbol, texture); return type; } } From 9f26d04f7a400d0b7b9d29495732395c015c6bee Mon Sep 17 00:00:00 2001 From: George Paton Date: Fri, 9 Jan 2026 14:08:07 +1100 Subject: [PATCH 26/29] buzzer beater functionality: render 3D items with fancy graphics enabled! --- .../hbm/render/tileentity/RenderMassStorage.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java b/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java index 15f605a17..b110630f5 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java +++ b/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java @@ -1,6 +1,7 @@ package com.hbm.render.tileentity; import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; import com.hbm.render.util.RenderDecoItem; import com.hbm.tileentity.machine.storage.TileEntityMassStorage; @@ -9,7 +10,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; @@ -31,7 +31,9 @@ public class RenderMassStorage extends TileEntitySpecialRenderer { int dir = storage.getBlockMetadata() / 4; // fuck this shit, push pop the whole ass lighting state then for all I fucken care - GL11.glPushAttrib(GL11.GL_ENABLE_BIT | GL11.GL_LIGHTING_BIT | GL11.GL_COLOR_BUFFER_BIT); + GL11.glPushAttrib(GL11.GL_ENABLE_BIT | GL11.GL_LIGHTING_BIT | GL11.GL_COLOR_BUFFER_BIT | GL11.GL_TRANSFORM_BIT); + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240); @@ -62,9 +64,11 @@ public class RenderMassStorage extends TileEntitySpecialRenderer { GL11.glTranslatef(4.0F, 2.5F, 0); // adjust to centered location GL11.glScalef(8.0F / 16.0F, 8.0F / 16.0F, 1); // scale to 8 pixels across - RenderHelper.disableStandardItemLighting(); - - itemRenderer.renderItemIntoGUI(mc.fontRenderer, mc.renderEngine, storage.type, 0, 0, true); + if(mc.gameSettings.fancyGraphics) { + itemRenderer.renderItemAndEffectIntoGUI(mc.fontRenderer, mc.renderEngine, storage.type, 0, 0); + } else { + itemRenderer.renderItemIntoGUI(mc.fontRenderer, mc.renderEngine, storage.type, 0, 0, true); + } } GL11.glPopMatrix(); From a6087b4bef6ea5eb20f9a6ae9d7e78b8139bfdaf Mon Sep 17 00:00:00 2001 From: George Paton Date: Fri, 9 Jan 2026 14:48:52 +1100 Subject: [PATCH 27/29] vanilla slimes also leak state who'da'fucken'thunk it --- src/main/java/com/hbm/render/tileentity/RenderMassStorage.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java b/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java index b110630f5..274dd10ae 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java +++ b/src/main/java/com/hbm/render/tileentity/RenderMassStorage.java @@ -34,6 +34,7 @@ public class RenderMassStorage extends TileEntitySpecialRenderer { GL11.glPushAttrib(GL11.GL_ENABLE_BIT | GL11.GL_LIGHTING_BIT | GL11.GL_COLOR_BUFFER_BIT | GL11.GL_TRANSFORM_BIT); GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glDisable(GL11.GL_NORMALIZE); OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240); From 79351bbd0a10c55a842b865dfff7d6e1fd673e29 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 9 Jan 2026 10:05:56 +0100 Subject: [PATCH 28/29] 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 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 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 Date: Fri, 9 Jan 2026 14:55:58 +0100 Subject: [PATCH 29/29] fentanyl --- changelog | 2 ++ gradle.properties | 17 ++++++++++++----- src/main/java/com/hbm/lib/RefStrings.java | 2 +- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/changelog b/changelog index 86d9714a3..100a12032 100644 --- a/changelog +++ b/changelog @@ -7,6 +7,8 @@ * 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 +* Mass storage units now display their held item on a display +* Improved HUD gauges, electric chestplates with jetpacks installed now two gauges side by side ## Fixed * Fixed missing battery socket tooltip diff --git a/gradle.properties b/gradle.properties index 6488da4b9..6d6a28d89 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,15 +1,15 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5567 +mod_build_number=5570 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ \ grangerave (explosion algorithms),\ \ Hoboy (textures, models),\ - \ Drillgon200 (effects, models, porting),\ + \ Drillgon200 (effects, models),\ \ MartinTheDragon (calculator, chunk-based fallout, bendable cranes, pipe improvements, PWR sounds),\ - \ Alcater (GUI textures, porting),\ - \ MellowArpeggiation (new animation system, turbine sounds, sound fixes, industrial lights, conveyor wand, NBT structures),\ + \ Alcater (GUI textures),\ + \ MellowArpeggiation (new animation system, turbine sounds, sound fixes, industrial lights, conveyor wand, NBT structures, MSU displays),\ \ Pheo (textures, various machines, models, weapons),\ \ Vr (gas centrifuges, better worldgen, ZIRNOX, CP-1 parts, starter guide, new cyclotron, weapon animations),\ \ UFFR (RTG pellets, guns, casings, euphemium capacitor, nucleartech.wiki),\ @@ -22,6 +22,7 @@ credits=HbMinecraft,\ \ Doctor17 (russian localization)),\ \ Pashtet (russian localization),\ \ 7H40 (russian localization),\ + \ RayzerHan (russian localization),\ \ Bismarck (chinese localization),\ \ Creeper-banner (chinese localization),\ \ 5467864 (chinese localization),\ @@ -34,8 +35,10 @@ credits=HbMinecraft,\ \ Herobrine 457985 (chinese localization),\ \ xxwinhere (chinese localization),\ \ Nycticoraxnightheron (chinese localization),\ + \ NarekoMichigami810 (chinese localization),\ \ Maksymisio (polish localization)\ \ el3ctro4ndre (italian localization),\ + \ Goaty1208 (italian localization),\ \ Pu-238 (Tom impact effects),\ \ Frooz (gun models),\ \ VT-6/24 (models, textures),\ @@ -55,18 +58,22 @@ credits=HbMinecraft,\ \ Silly541 (config for safe ME drives),\ \ Voxelstice (OpenComputers integration, turbine spinup),\ \ BallOfEnergy1 (OpenComputers integration, RBMK and packet optimization, crate backpacks),\ + \ PewPewCricket (OpenComputers integration),\ + \ kelllllen (OpenComputers integration),\ \ sdddddf80 (recipe configs, chinese localization, custom machine holograms),\ \ Abel1502 (abilities GUI, optimization, crate upgrade recipes, strand caster improvements, varous tweaks),\ \ Darek505 (armor rendering compatibility fix),\ + \ ranch21 (improved HUD gauges),\ \ SuperCraftAlex (tooltips)\ \ Ice-Arrow (research reactor tweaks),\ \ 245tt (anvil GUI improvements),\ \ KoblizekXD (doors),\ \ FOlkvangrField (custom machine parts),\ \ RosaTryp (centrifuge config),\ - \ Toshayo (satellite loot system, project settings, gradle curse task, OpenComputers integration),\ + \ Toshayo (satellite loot system, project settings, gradle curse task, OpenComputers integration, fluid counter valve),\ \ Dash (PA particle serialization fix),\ \ archiecarrot123 (armor rendering compatibility fix),\ + \ mikkerlo (mining laser & builder's jetpack improvements),\ \ icomet (refactoring),\ \ martemen (project settings),\ \ OvermindDL1 (project settings),\ diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 86d4f49a3..4ddd719ed 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5567)"; + public static final String VERSION = "1.0.27 BETA (5570)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version