From 164ec9a1925dcf4c80818d3d223fe4fb63d8e7ba Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sat, 20 Jul 2024 20:28:13 -0400 Subject: [PATCH 01/18] Settings tool and first impl --- .../java/com/hbm/interfaces/ICopiable.java | 10 +++ src/main/java/com/hbm/items/ModItems.java | 3 + .../com/hbm/items/tool/ItemSettingsTool.java | 61 ++++++++++++++++++ .../tileentity/IControlReceiverFilter.java | 3 +- .../network/TileEntityCraneBase.java | 22 ++++++- .../hbm/textures/items/settings_tool.png | Bin 0 -> 356 bytes 6 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/hbm/interfaces/ICopiable.java create mode 100644 src/main/java/com/hbm/items/tool/ItemSettingsTool.java create mode 100644 src/main/resources/assets/hbm/textures/items/settings_tool.png diff --git a/src/main/java/com/hbm/interfaces/ICopiable.java b/src/main/java/com/hbm/interfaces/ICopiable.java new file mode 100644 index 000000000..725ba5c12 --- /dev/null +++ b/src/main/java/com/hbm/interfaces/ICopiable.java @@ -0,0 +1,10 @@ +package com.hbm.interfaces; + +import net.minecraft.nbt.NBTTagCompound; + +public interface ICopiable { + + NBTTagCompound getSettings(); + + void pasteSettings(NBTTagCompound nbt); +} diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index a2a3f62d3..084b6d5bc 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1276,6 +1276,7 @@ public class ModItems { public static Item coupling_tool; public static Item drone_linker; public static Item radar_linker; + public static Item settings_tool; public static Item template_folder; public static Item journal_pip; @@ -4621,6 +4622,7 @@ public class ModItems { coupling_tool = new ItemCouplingTool().setUnlocalizedName("coupling_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":coupling_tool"); drone_linker = new ItemDroneLinker().setUnlocalizedName("drone_linker").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":drone_linker"); radar_linker = new ItemRadarLinker().setUnlocalizedName("radar_linker").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radar_linker"); + settings_tool = new ItemSettingsTool().setUnlocalizedName("settings_tool").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":settings_tool"); key = new ItemKey().setUnlocalizedName("key").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":key"); key_red = new ItemCustomLore().setUnlocalizedName("key_red").setMaxStackSize(1).setCreativeTab(null).setTextureName(RefStrings.MODID + ":key_red"); @@ -6868,6 +6870,7 @@ public class ModItems { GameRegistry.registerItem(power_net_tool, power_net_tool.getUnlocalizedName()); GameRegistry.registerItem(analysis_tool, analysis_tool.getUnlocalizedName()); GameRegistry.registerItem(coupling_tool, coupling_tool.getUnlocalizedName()); + GameRegistry.registerItem(settings_tool, settings_tool.getUnlocalizedName()); GameRegistry.registerItem(dosimeter, dosimeter.getUnlocalizedName()); GameRegistry.registerItem(geiger_counter, geiger_counter.getUnlocalizedName()); GameRegistry.registerItem(digamma_diagnostic, digamma_diagnostic.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java new file mode 100644 index 000000000..6ac48382f --- /dev/null +++ b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java @@ -0,0 +1,61 @@ +package com.hbm.items.tool; + +import com.hbm.interfaces.ICopiable; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.network.IDroneLinkable; +import com.hbm.util.ChatBuilder; +import com.hbm.util.fauxpointtwelve.BlockPos; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +import java.util.List; + +public class ItemSettingsTool extends Item { + + + @SuppressWarnings("unchecked") + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + list.add("Can copy the settings (filters, fluid ID, etc) of machines"); + list.add("Shift right-click to copy, right click to paste"); + if(stack.stackTagCompound != null) { + NBTTagCompound nbt = stack.stackTagCompound; + list.add(EnumChatFormatting.YELLOW + "Current machine:" + + (nbt.hasKey("tileName") ? EnumChatFormatting.BLUE + " " + nbt.getString("tileName") : EnumChatFormatting.RED + " None ")); + } + + } + @Override + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fX, float fY, float fZ) { + if (!world.isRemote) { + TileEntity tile = world.getTileEntity(x, y, z); + + if (tile instanceof ICopiable) { + ICopiable te = ((ICopiable) tile); + + if (player.isSneaking()) { + stack.stackTagCompound = ((ICopiable) tile).getSettings(); + stack.stackTagCompound.setString("tileName", tile.getBlockType().getLocalizedName()); + + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Copied settings of " + tile.getBlockType().getLocalizedName()).color(EnumChatFormatting.AQUA).flush()); + + } else if (stack.hasTagCompound()) { + te.pasteSettings(stack.stackTagCompound); + } + + + return true; + } + } + return false; + } +} diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index 691066ac7..8834af6a9 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -2,13 +2,14 @@ package com.hbm.tileentity; import com.hbm.interfaces.IControlReceiver; +import com.hbm.interfaces.ICopiable; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; -public interface IControlReceiverFilter extends IControlReceiver { +public interface IControlReceiverFilter extends IControlReceiver, ICopiable { void nextMode(int i); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java index 2158d0fe7..0d967a606 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -1,5 +1,6 @@ package com.hbm.tileentity.network; +import com.hbm.interfaces.ICopiable; import com.hbm.tileentity.TileEntityMachineBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; @@ -8,7 +9,7 @@ import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.ForgeDirection; -public abstract class TileEntityCraneBase extends TileEntityMachineBase { +public abstract class TileEntityCraneBase extends TileEntityMachineBase implements ICopiable { public TileEntityCraneBase(int scount) { super(scount); @@ -101,4 +102,23 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase { super.writeToNBT(nbt); nbt.setByte("CraneOutputOverride", (byte) outputOverride.ordinal()); } + + @Override + public NBTTagCompound getSettings() { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("inputSide", getInputSide().ordinal()); + nbt.setInteger("outputSide", getOutputSide().ordinal()); + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt) { + if(nbt.hasKey("outputSide")){ + outputOverride = ForgeDirection.getOrientation(nbt.getInteger("outputSide")); + onBlockChanged(); + } + if(nbt.hasKey("inputSide")) { + worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, nbt.getInteger("inputSide"), 3); + } + } } diff --git a/src/main/resources/assets/hbm/textures/items/settings_tool.png b/src/main/resources/assets/hbm/textures/items/settings_tool.png new file mode 100644 index 0000000000000000000000000000000000000000..331bb4e6209a7bdc04f7fd753ca9424d2300eb33 GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufG}g$wN6f;;7?B%#}EtuWC_+AjtA8C{|``;IPl}eBa4Gc z=Fk2gJ$m#_fZmLLA7y4Wjb6sOe}6ia+I@{V9+*71y*>X=fSU80b^Cixm>3-pu$Z)t zX3SWUa)Be!_|g*fy?$^YMCx8 ze0X@6z3s>T&Hy2?-1g6V; Date: Sat, 3 Aug 2024 19:26:15 -0400 Subject: [PATCH 02/18] the power of friendship isn't working anymore I need to kill this motherfucker --- .../tileentity/IControlReceiverFilter.java | 62 ++++++++++++++++++- .../machine/TileEntityMachineAutocrafter.java | 17 +++-- .../storage/TileEntityMassStorage.java | 5 ++ .../network/TileEntityCraneExtractor.java | 9 ++- .../network/TileEntityCraneGrabber.java | 5 ++ .../network/TileEntityCraneRouter.java | 5 +- .../network/TileEntityDroneRequester.java | 5 ++ .../network/TileEntityRadioTorchCounter.java | 5 ++ 8 files changed, 104 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index 8834af6a9..34099c176 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -3,18 +3,26 @@ package com.hbm.tileentity; import com.hbm.interfaces.IControlReceiver; import com.hbm.interfaces.ICopiable; +import com.hbm.module.ModulePatternMatcher; import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; public interface IControlReceiverFilter extends IControlReceiver, ICopiable { void nextMode(int i); + /* + default ModulePatternMatcher getMatcher(){ + + }*/ + @Override - public default void receiveControl(NBTTagCompound data) { + default void receiveControl(NBTTagCompound data) { if(data.hasKey("slot")) { setFilterContents(data); } @@ -24,7 +32,7 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { * Expects the implementor to be a tile entity and an IInventory * @param nbt */ - public default void setFilterContents(NBTTagCompound nbt) { + default void setFilterContents(NBTTagCompound nbt) { TileEntity tile = (TileEntity) this; IInventory inv = (IInventory) this; int slot = nbt.getInteger("slot"); @@ -32,4 +40,54 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { nextMode(slot); tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); } + /** + * Used for the copy tool + * @return The start and end (start inclusive, end exclusive) of the filter slots of the TE + */ + int[] getFilterSlots(); + + @Override + default NBTTagCompound getSettings() { + IInventory inv = (IInventory) this; + NBTTagCompound nbt = new NBTTagCompound(); + NBTTagList tags = new NBTTagList(); + int count = 0; + for (int i = getFilterSlots()[0]; i < getFilterSlots()[1]; i++) { + NBTTagCompound slotNBT = new NBTTagCompound(); + if(inv.getStackInSlot(i) != null) { + slotNBT.setByte("slot", (byte) count); + inv.getStackInSlot(i).writeToNBT(slotNBT); + tags.appendTag(slotNBT); + } + count++; + } + nbt.setTag("items", tags); + + return nbt; + } + + @Override + default void pasteSettings(NBTTagCompound nbt) { + TileEntity tile = (TileEntity) this; + IInventory inv = (IInventory) this; + NBTTagList items = nbt.getTagList("items", 10); + int listSize = items.tagCount(); + if(listSize > 0) { + int count = 0; + for (int i = getFilterSlots()[0]; i < getFilterSlots()[1]; i++) { + if (i < listSize) { + NBTTagCompound slotNBT = items.getCompoundTagAt(count); + byte slot = slotNBT.getByte("slot"); + ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); + if (loadedStack != null) { + inv.setInventorySlotContents(slot + getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); + nextMode(slot); + tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); + } + } + count++; + } + + } + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java index bda6f27bf..ffcab97e6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java @@ -187,7 +187,7 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen if(i > 9 && i < 19) { ItemStack filter = slots[i - 10]; - if(filter == null) return true; + if(filter == null || matcher.modes[i - 10] == null || matcher.modes[i - 10].isEmpty()) return true; return !matcher.isValidForFilter(filter, i - 10, stack); } @@ -213,7 +213,7 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen List validSlots = new ArrayList(); for(int i = 0; i < 9; i++) { ItemStack filter = slots[i]; - if(filter == null) continue; + if(filter == null || matcher.modes[i] == null || matcher.modes[i].isEmpty()) continue; if(matcher.isValidForFilter(filter, i, stack)) { validSlots.add(i + 10); @@ -347,12 +347,19 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen @Override public void setFilterContents(NBTTagCompound nbt) { - TileEntity tile = (TileEntity) this; - IInventory inv = (IInventory) this; + TileEntity tile = this; + IInventory inv = this; int slot = nbt.getInteger("slot"); if(slot > 8) return; - inv.setInventorySlotContents(slot, new ItemStack(Item.getItemById(nbt.getInteger("id")), 1, nbt.getInteger("meta"))); + ItemStack item = new ItemStack(Item.getItemById(nbt.getInteger("id")), 1, nbt.getInteger("meta")); + inv.setInventorySlotContents(slot, item); + matcher.initPatternSmart(getWorldObj(), item, slot); + updateTemplateGrid(); nextMode(slot); tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); } + @Override + public int[] getFilterSlots() { + return new int[]{0,9}; + } } 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 6db2f555f..031b2a03d 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -221,4 +221,9 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements INBTPa public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMassStorage(player.inventory, this); } + + @Override + public int[] getFilterSlots() { + return new int[]{1,2}; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index 628b3946c..86d7c3cb9 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -9,6 +9,7 @@ import com.hbm.items.ModItems; import com.hbm.module.ModulePatternMatcher; import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.tileentity.IGUIProvider; +import com.hbm.util.ItemStackUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; @@ -26,7 +27,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGUIProvider, IControlReceiver, IControlReceiverFilter { +public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGUIProvider, IControlReceiverFilter { public boolean isWhitelist = false; public ModulePatternMatcher matcher; @@ -256,4 +257,10 @@ public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGU setFilterContents(data); } } + + @Override + public int[] getFilterSlots() { + return new int[]{0,9}; + } } + diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java index 26ed150ea..7d8233da6 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java @@ -190,6 +190,11 @@ public class TileEntityCraneGrabber extends TileEntityCraneBase implements IGUIP return Vec3.createVectorHelper(xCoord - player.posX, yCoord - player.posY, zCoord - player.posZ).lengthVector() < 20; } + @Override + public int[] getFilterSlots() { + return new int[]{0,9}; + } + @Override public void receiveControl(NBTTagCompound data) { if(data.hasKey("whitelist")) { diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java index 6568f113b..a12e59851 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java @@ -120,7 +120,10 @@ public class TileEntityCraneRouter extends TileEntityMachineBase implements IGUI public boolean hasPermission(EntityPlayer player) { return Vec3.createVectorHelper(xCoord - player.posX, yCoord - player.posY, zCoord - player.posZ).lengthVector() < 20; } - + @Override + public int[] getFilterSlots() { + return new int[]{0, slots.length}; + } @Override public void receiveControl(NBTTagCompound data) { if(data.hasKey("toggle")) { diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java index faa21f615..7a572305a 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java @@ -130,4 +130,9 @@ public class TileEntityDroneRequester extends TileEntityRequestNetworkContainer public boolean hasPermission(EntityPlayer player) { return Vec3.createVectorHelper(xCoord - player.posX, yCoord - player.posY, zCoord - player.posZ).lengthVector() < 20; } + + @Override + public int[] getFilterSlots() { + return new int[]{0,9}; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java index 4b4e18803..efac13a13 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTorchCounter.java @@ -131,4 +131,9 @@ public class TileEntityRadioTorchCounter extends TileEntityMachineBase implement setFilterContents(data); } } + + @Override + public int[] getFilterSlots() { + return new int[]{0, slots.length}; + } } From 622330b4cf185d875052f5ec14581edbd0d466d1 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Mon, 5 Aug 2024 19:19:24 -0400 Subject: [PATCH 03/18] forgor --- .../network/TileEntityCraneBase.java | 54 +++++++++++++++++-- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java index 0d967a606..3cc869118 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -1,11 +1,16 @@ package com.hbm.tileentity.network; import com.hbm.interfaces.ICopiable; +import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.tileentity.TileEntityMachineBase; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.ForgeDirection; @@ -108,17 +113,60 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen NBTTagCompound nbt = new NBTTagCompound(); nbt.setInteger("inputSide", getInputSide().ordinal()); nbt.setInteger("outputSide", getOutputSide().ordinal()); + + if(this instanceof IControlReceiverFilter){ + IControlReceiverFilter filter = ((IControlReceiverFilter) this); + IInventory inv = this; + NBTTagList tags = new NBTTagList(); + int count = 0; + + for (int i = filter.getFilterSlots()[0]; i < filter.getFilterSlots()[1]; i++) { + NBTTagCompound slotNBT = new NBTTagCompound(); + if(inv.getStackInSlot(i) != null) { + slotNBT.setByte("slot", (byte) count); + inv.getStackInSlot(i).writeToNBT(slotNBT); + tags.appendTag(slotNBT); + } + count++; + } + nbt.setTag("items", tags); + } + return nbt; } @Override public void pasteSettings(NBTTagCompound nbt) { - if(nbt.hasKey("outputSide")){ + if (nbt.hasKey("outputSide")) { outputOverride = ForgeDirection.getOrientation(nbt.getInteger("outputSide")); onBlockChanged(); } - if(nbt.hasKey("inputSide")) { - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, nbt.getInteger("inputSide"), 3); + if (nbt.hasKey("inputSide")) { + worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, nbt.getInteger("inputSide"), 3); + } + + if (this instanceof IControlReceiverFilter) { + IControlReceiverFilter filter = ((IControlReceiverFilter) this); + IInventory inv = this; + + NBTTagList items = nbt.getTagList("items", 10); + int listSize = items.tagCount(); + if (listSize > 0) { + int count = 0; + for (int i = filter.getFilterSlots()[0]; i < filter.getFilterSlots()[1]; i++) { + if (i < listSize) { + NBTTagCompound slotNBT = items.getCompoundTagAt(count); + byte slot = slotNBT.getByte("slot"); + ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); + if (loadedStack != null) { + inv.setInventorySlotContents(slot + filter.getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); + filter.nextMode(slot); + this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + } + } + count++; + } + } } } } From 1495dfc2b594b92f6879b6c92e41f0d2caad8ff9 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:38:15 -0400 Subject: [PATCH 04/18] pain --- .../java/com/hbm/handler/HbmKeybinds.java | 3 ++ .../java/com/hbm/interfaces/ICopiable.java | 2 +- .../com/hbm/items/tool/ItemSettingsTool.java | 48 +++++++++-------- .../tileentity/IControlReceiverFilter.java | 2 +- .../com/hbm/tileentity/IFluidCopiable.java | 54 +++++++++++++++++++ .../machine/TileEntityHeaterOilburner.java | 21 +++++++- .../TileEntityMachineCrystallizer.java | 3 +- .../machine/TileEntityMachineMixer.java | 18 +++++-- .../machine/storage/TileEntityBarrel.java | 13 ++++- .../storage/TileEntityMachineFluidTank.java | 18 ++++--- .../network/TileEntityCraneBase.java | 54 ++++++++++--------- .../network/TileEntityPipeBaseNT.java | 23 +++++++- src/main/java/com/hbm/util/BobMathUtil.java | 20 +++++-- 13 files changed, 210 insertions(+), 69 deletions(-) create mode 100644 src/main/java/com/hbm/tileentity/IFluidCopiable.java diff --git a/src/main/java/com/hbm/handler/HbmKeybinds.java b/src/main/java/com/hbm/handler/HbmKeybinds.java index 6ae2507e1..39f59ced2 100644 --- a/src/main/java/com/hbm/handler/HbmKeybinds.java +++ b/src/main/java/com/hbm/handler/HbmKeybinds.java @@ -24,6 +24,7 @@ public class HbmKeybinds { public static KeyBinding reloadKey = new KeyBinding(category + ".reload", Keyboard.KEY_R, category); public static KeyBinding dashKey = new KeyBinding(category + ".dash", Keyboard.KEY_LSHIFT, category); public static KeyBinding trainKey = new KeyBinding(category + ".trainInv", Keyboard.KEY_R, category); + public static KeyBinding copyToolAlt = new KeyBinding(category + ".copyTool", Keyboard.KEY_LMENU, category); public static KeyBinding craneUpKey = new KeyBinding(category + ".craneMoveUp", Keyboard.KEY_UP, category); public static KeyBinding craneDownKey = new KeyBinding(category + ".craneMoveDown", Keyboard.KEY_DOWN, category); @@ -38,6 +39,7 @@ public class HbmKeybinds { ClientRegistry.registerKeyBinding(reloadKey); ClientRegistry.registerKeyBinding(dashKey); ClientRegistry.registerKeyBinding(trainKey); + ClientRegistry.registerKeyBinding(copyToolAlt); ClientRegistry.registerKeyBinding(craneUpKey); ClientRegistry.registerKeyBinding(craneDownKey); @@ -72,6 +74,7 @@ public class HbmKeybinds { RELOAD, DASH, TRAIN, + COPY_TOOL, CRANE_UP, CRANE_DOWN, CRANE_LEFT, diff --git a/src/main/java/com/hbm/interfaces/ICopiable.java b/src/main/java/com/hbm/interfaces/ICopiable.java index 725ba5c12..6e6d98996 100644 --- a/src/main/java/com/hbm/interfaces/ICopiable.java +++ b/src/main/java/com/hbm/interfaces/ICopiable.java @@ -6,5 +6,5 @@ public interface ICopiable { NBTTagCompound getSettings(); - void pasteSettings(NBTTagCompound nbt); + void pasteSettings(NBTTagCompound nbt, boolean alt); } diff --git a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java index 6ac48382f..6aefa2905 100644 --- a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java +++ b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java @@ -1,7 +1,10 @@ package com.hbm.items.tool; +import com.hbm.extprop.HbmPlayerProps; +import com.hbm.handler.HbmKeybinds; import com.hbm.interfaces.ICopiable; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.TileEntityProxyBase; import com.hbm.tileentity.network.IDroneLinkable; import com.hbm.util.ChatBuilder; import com.hbm.util.fauxpointtwelve.BlockPos; @@ -33,29 +36,28 @@ public class ItemSettingsTool extends Item { } @Override public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fX, float fY, float fZ) { - if (!world.isRemote) { - TileEntity tile = world.getTileEntity(x, y, z); - - if (tile instanceof ICopiable) { - ICopiable te = ((ICopiable) tile); - - if (player.isSneaking()) { - stack.stackTagCompound = ((ICopiable) tile).getSettings(); - stack.stackTagCompound.setString("tileName", tile.getBlockType().getLocalizedName()); - - player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) - .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) - .next("] ").color(EnumChatFormatting.DARK_AQUA) - .next("Copied settings of " + tile.getBlockType().getLocalizedName()).color(EnumChatFormatting.AQUA).flush()); - - } else if (stack.hasTagCompound()) { - te.pasteSettings(stack.stackTagCompound); - } - - - return true; - } + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TileEntityProxyBase){ + tile = ((TileEntityProxyBase) tile).getTE(); } - return false; + if (tile instanceof ICopiable) { + ICopiable te = ((ICopiable) tile); + + if (player.isSneaking()) { + stack.stackTagCompound = ((ICopiable) tile).getSettings(); + stack.stackTagCompound.setString("tileName", tile.getBlockType().getLocalizedName()); + + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Copied settings of " + tile.getBlockType().getLocalizedName()).color(EnumChatFormatting.AQUA).flush()); + + } else if (stack.hasTagCompound()) { + boolean alt = HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.COPY_TOOL); + te.pasteSettings(stack.stackTagCompound, alt); + } + + } + return true; } } diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index 34099c176..f2cd224f8 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -67,7 +67,7 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { } @Override - default void pasteSettings(NBTTagCompound nbt) { + default void pasteSettings(NBTTagCompound nbt, boolean alt) { TileEntity tile = (TileEntity) this; IInventory inv = (IInventory) this; NBTTagList items = nbt.getTagList("items", 10); diff --git a/src/main/java/com/hbm/tileentity/IFluidCopiable.java b/src/main/java/com/hbm/tileentity/IFluidCopiable.java new file mode 100644 index 000000000..67b90580c --- /dev/null +++ b/src/main/java/com/hbm/tileentity/IFluidCopiable.java @@ -0,0 +1,54 @@ +package com.hbm.tileentity; + +import api.hbm.fluid.IFluidStandardTransceiver; +import com.hbm.interfaces.ICopiable; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.util.BobMathUtil; +import net.minecraft.nbt.NBTTagCompound; + +import java.util.ArrayList; +import java.util.Arrays; + +public interface IFluidCopiable extends ICopiable { + /** + * @return First type for the normal paste, second type for the alt paste, none if there is no alt paste support + */ + default int[] getFluidIDToCopy(){ + IFluidStandardTransceiver tile = (IFluidStandardTransceiver) this; + ArrayList types = new ArrayList<>(); + + if(tile.getReceivingTanks() != null && !tile.getReceivingTanks()[0].getTankType().hasNoID()) + types.add(tile.getReceivingTanks()[0].getTankType().getID()); + + if(tile.getSendingTanks() != null && !tile.getSendingTanks()[0].getTankType().hasNoID()) + types.add(tile.getSendingTanks()[0].getTankType().getID()); + + return BobMathUtil.intCollectionToArray(types); + } + + default FluidTank getTankToPaste(){ + IFluidStandardTransceiver tile = (IFluidStandardTransceiver) this; + return tile.getReceivingTanks() != null ? tile.getReceivingTanks()[0] : null; + } + + @Override + default NBTTagCompound getSettings(){ + NBTTagCompound tag = new NBTTagCompound(); + if(getFluidIDToCopy().length > 0) + tag.setIntArray("fluidID", getFluidIDToCopy()); + return tag; + } + + @Override + default void pasteSettings(NBTTagCompound nbt, boolean alt) { + if(getTankToPaste() != null) { + int[] ids = nbt.getIntArray("fluidID"); + if(ids.length > 0) { + int id = ids[alt ? 1 : 0]; + getTankToPaste().setTankType(Fluids.fromID(id)); + } + } + } + +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java index 0d19a14bc..5b1fd2685 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java @@ -8,8 +8,10 @@ import com.hbm.inventory.fluid.trait.FT_Flammable; import com.hbm.inventory.fluid.trait.FluidTrait.FluidReleaseType; import com.hbm.inventory.gui.GUIOilburner; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachinePolluting; +import com.hbm.util.BobMathUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.fluid.IFluidStandardTransceiver; @@ -24,7 +26,9 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; -public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implements IGUIProvider, IFluidStandardTransceiver, IHeatSource, IControlReceiver { +import java.util.Arrays; + +public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implements IGUIProvider, IFluidStandardTransceiver, IHeatSource, IControlReceiver, IFluidCopiable { public boolean isOn = false; public FluidTank tank; @@ -217,4 +221,19 @@ public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implem public FluidTank[] getSendingTanks() { return this.getSmokeTanks(); } + + @Override + public NBTTagCompound getSettings() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setIntArray("fluidID", new int[]{tank.getTankType().getID()}); + tag.setInteger("burnRate", setting); + return tag; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, boolean alt) { + int id = nbt.getIntArray("fluidID")[alt ? 1 : 0]; + tank.setTankType(Fluids.fromID(id)); + setting = nbt.getInteger("burnRate"); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java index 944364b7b..4ad2b1a2f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java @@ -15,6 +15,7 @@ import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -39,7 +40,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCrystallizer extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineCrystallizer extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public long power; public static final long maxPower = 1000000; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java index e9751c820..a96fd4b84 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java @@ -6,6 +6,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerMixer; +import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMixer; @@ -13,10 +14,7 @@ import com.hbm.inventory.recipes.MixerRecipes; import com.hbm.inventory.recipes.MixerRecipes.MixerRecipe; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.INBTPacketReceiver; -import com.hbm.tileentity.IUpgradeInfoProvider; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; @@ -35,7 +33,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineMixer extends TileEntityMachineBase implements INBTPacketReceiver, IControlReceiver, IGUIProvider, IEnergyReceiverMK2, IFluidStandardTransceiver, IUpgradeInfoProvider { +public class TileEntityMachineMixer extends TileEntityMachineBase implements INBTPacketReceiver, IControlReceiver, IGUIProvider, IEnergyReceiverMK2, IFluidStandardTransceiver, IUpgradeInfoProvider, IFluidCopiable { public long power; public static final long maxPower = 10_000; @@ -374,4 +372,14 @@ public class TileEntityMachineMixer extends TileEntityMachineBase implements INB if(type == UpgradeType.OVERDRIVE) return 6; return 0; } + + @Override + public FluidTank getTankToPaste() { + return this.tanks[2]; + } + + @Override + public int[] getFluidIDToCopy() { + return new int[]{tanks[2].getTankType().getID()}; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java index 4166b5e16..efc97e3a2 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java @@ -16,6 +16,7 @@ import com.hbm.inventory.fluid.trait.FluidTrait.FluidReleaseType; import com.hbm.inventory.gui.GUIBarrel; import com.hbm.lib.Library; import com.hbm.saveddata.TomSaveData; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; @@ -45,7 +46,7 @@ import java.util.List; import java.util.Set; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")}) -public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource, SimpleComponent, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, CompatHandler.OCComponent { +public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcceptor, IFluidSource, SimpleComponent, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, CompatHandler.OCComponent, IFluidCopiable { public FluidTank tank; public short mode = 0; @@ -373,6 +374,16 @@ public class TileEntityBarrel extends TileEntityMachineBase implements IFluidAcc return new FluidTank[] { tank }; } + @Override + public int[] getFluidIDToCopy() { + return new int[] {tank.getTankType().getID()}; + } + + @Override + public FluidTank getTankToPaste() { + return tank; + } + @Override public void writeNBT(NBTTagCompound nbt) { if(tank.getFill() == 0) return; diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java index f78665bb9..75a004532 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java @@ -24,11 +24,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IOverpressurable; -import com.hbm.tileentity.IPersistentNBT; -import com.hbm.tileentity.IRepairable; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.ParticleUtil; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.Optional; @@ -56,7 +52,7 @@ import java.util.List; import java.util.Random; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")}) -public class TileEntityMachineFluidTank extends TileEntityMachineBase implements IFluidContainer, SimpleComponent, OCComponent, IFluidSource, IFluidAcceptor, IFluidStandardTransceiver, IPersistentNBT, IOverpressurable, IGUIProvider, IRepairable { +public class TileEntityMachineFluidTank extends TileEntityMachineBase implements IFluidContainer, SimpleComponent, OCComponent, IFluidSource, IFluidAcceptor, IFluidStandardTransceiver, IPersistentNBT, IOverpressurable, IGUIProvider, IRepairable, IFluidCopiable { public FluidTank tank; public short mode = 0; @@ -454,6 +450,16 @@ public class TileEntityMachineFluidTank extends TileEntityMachineBase implements return (mode == 0 || mode == 1) ? new FluidTank[] {tank} : new FluidTank[0]; } + @Override + public int[] getFluidIDToCopy() { + return new int[] {tank.getTankType().getID()}; + } + + @Override + public FluidTank getTankToPaste() { + return tank; + } + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachineFluidTank(player.inventory, (TileEntityMachineFluidTank) world.getTileEntity(x, y, z)); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java index 3cc869118..c780bad42 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -136,35 +136,37 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen } @Override - public void pasteSettings(NBTTagCompound nbt) { - if (nbt.hasKey("outputSide")) { - outputOverride = ForgeDirection.getOrientation(nbt.getInteger("outputSide")); - onBlockChanged(); - } - if (nbt.hasKey("inputSide")) { - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, nbt.getInteger("inputSide"), 3); - } + public void pasteSettings(NBTTagCompound nbt, boolean alt) { + if(alt) { + if (nbt.hasKey("outputSide")) { + outputOverride = ForgeDirection.getOrientation(nbt.getInteger("outputSide")); + onBlockChanged(); + } + if (nbt.hasKey("inputSide")) { + worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, nbt.getInteger("inputSide"), 3); + } + } else { + if (this instanceof IControlReceiverFilter) { + IControlReceiverFilter filter = ((IControlReceiverFilter) this); + IInventory inv = this; - if (this instanceof IControlReceiverFilter) { - IControlReceiverFilter filter = ((IControlReceiverFilter) this); - IInventory inv = this; - - NBTTagList items = nbt.getTagList("items", 10); - int listSize = items.tagCount(); - if (listSize > 0) { - int count = 0; - for (int i = filter.getFilterSlots()[0]; i < filter.getFilterSlots()[1]; i++) { - if (i < listSize) { - NBTTagCompound slotNBT = items.getCompoundTagAt(count); - byte slot = slotNBT.getByte("slot"); - ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); - if (loadedStack != null) { - inv.setInventorySlotContents(slot + filter.getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); - filter.nextMode(slot); - this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + NBTTagList items = nbt.getTagList("items", 10); + int listSize = items.tagCount(); + if (listSize > 0) { + int count = 0; + for (int i = filter.getFilterSlots()[0]; i < filter.getFilterSlots()[1]; i++) { + if (i < listSize) { + NBTTagCompound slotNBT = items.getCompoundTagAt(count); + byte slot = slotNBT.getByte("slot"); + ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); + if (loadedStack != null) { + inv.setInventorySlotContents(slot + filter.getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); + filter.nextMode(slot); + this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + } } + count++; } - count++; } } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java index 4db863014..832143613 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java @@ -6,6 +6,8 @@ import com.hbm.inventory.fluid.Fluids; import api.hbm.fluid.IFluidConductor; import api.hbm.fluid.IPipeNet; import api.hbm.fluid.PipeNet; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.tileentity.IFluidCopiable; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; @@ -14,7 +16,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.WorldServer; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor { +public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor, IFluidCopiable { protected IPipeNet network; protected FluidType type = Fluids.NONE; @@ -166,4 +168,23 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor super.onChunkUnload(); this.isLoaded = false; } + + @Override + public int[] getFluidIDToCopy() { + return new int[]{ type.getID() }; + } + + @Override + public FluidTank getTankToPaste() { + return null; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, boolean alt) { + int[] ids = nbt.getIntArray("fluidID"); + if(ids.length > 0) { + int id = ids[alt ? 1 : 0]; + this.setType(Fluids.fromID(id)); + } + } } diff --git a/src/main/java/com/hbm/util/BobMathUtil.java b/src/main/java/com/hbm/util/BobMathUtil.java index dde5fe762..a9597891c 100644 --- a/src/main/java/com/hbm/util/BobMathUtil.java +++ b/src/main/java/com/hbm/util/BobMathUtil.java @@ -4,9 +4,8 @@ import java.lang.reflect.Field; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.NumberFormat; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; +import java.util.function.ToIntFunction; import javax.annotation.Nonnegative; @@ -206,4 +205,19 @@ public class BobMathUtil { double delta = (beta - alpha + 180) % 360 - 180; return delta < -180 ? delta + 360 : delta; } + + // I am sick of trying to remember the ridiculous quirks of Java 8 + // so I wrote this thing that can shit any int-ish list-ish into a regular fucking int[] + // made by mellow, thrown here by 70k + public static int[] intCollectionToArray(Collection in) { + return intCollectionToArray(in, i -> (int)i); + } + + public static int[] intCollectionToArray(Collection in, ToIntFunction mapper) { + return Arrays.stream(in.toArray()).mapToInt(mapper).toArray(); + } + + public static int[] collectionToIntArray(Collection in, ToIntFunction mapper) { + return Arrays.stream(in.toArray()).mapToInt(mapper).toArray(); + } } From ec84179e3f342db3464d4aaecaa9f5e17bb91b3f Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Fri, 16 Aug 2024 19:41:53 -0400 Subject: [PATCH 05/18] god DAMN Implemented switching between copiable traits + big change in logic thanks martinthedragon --- .../java/com/hbm/blocks/BlockDummyable.java | 30 +++++- .../java/com/hbm/handler/HbmKeybinds.java | 7 +- .../java/com/hbm/interfaces/ICopiable.java | 22 +++- .../com/hbm/items/tool/ItemSettingsTool.java | 101 ++++++++++++++---- src/main/java/com/hbm/main/ClientProxy.java | 1 + .../tileentity/IControlReceiverFilter.java | 7 +- .../com/hbm/tileentity/IFluidCopiable.java | 26 +++-- .../machine/TileEntityHeaterOilburner.java | 9 +- .../TileEntityMachineCrystallizer.java | 10 ++ .../machine/TileEntityMachineMixer.java | 4 - .../network/TileEntityCraneBase.java | 13 ++- .../network/TileEntityPipeBaseNT.java | 9 +- src/main/java/com/hbm/util/Either.java | 76 +++++++++++++ 13 files changed, 256 insertions(+), 59 deletions(-) create mode 100644 src/main/java/com/hbm/util/Either.java diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index d802eac32..b81f81db6 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -6,6 +6,7 @@ import java.util.Random; import com.hbm.handler.MultiblockHandlerXR; import com.hbm.handler.ThreeInts; +import com.hbm.interfaces.ICopiable; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IPersistentNBT; @@ -32,7 +33,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.event.DrawBlockHighlightEvent; import net.minecraftforge.common.util.ForgeDirection; -public abstract class BlockDummyable extends BlockContainer implements ICustomBlockHighlight { +public abstract class BlockDummyable extends BlockContainer implements ICustomBlockHighlight, ICopiable { public BlockDummyable(Material mat) { super(mat); @@ -507,4 +508,31 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl for(AxisAlignedBB aabb : this.bounding) event.context.drawOutlinedBoundingBox(getAABBRotationOffset(aabb.expand(exp, exp, exp), 0, 0, 0, ForgeDirection.getOrientation(meta - offset).getRotation(ForgeDirection.UP)).getOffsetBoundingBox(x - dX + 0.5, y - dY, z - dZ + 0.5), -1); ICustomBlockHighlight.cleanup(); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + int[] pos = findCore(world, x, y, z); + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if (tile instanceof ICopiable) + return ((ICopiable) tile).getSettings(world, pos[0], pos[1], pos[2]); + else + return null; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + int[] pos = findCore(world, x, y, z); + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if (tile instanceof ICopiable) + ((ICopiable) tile).pasteSettings(nbt, index, world, pos[0], pos[1], pos[2]); + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + int[] pos = findCore(world, x, y, z); + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if (tile instanceof ICopiable) + return ((ICopiable) tile).infoForDisplay(world, x, y, z); + return null; + } } diff --git a/src/main/java/com/hbm/handler/HbmKeybinds.java b/src/main/java/com/hbm/handler/HbmKeybinds.java index 39f59ced2..767c28ad7 100644 --- a/src/main/java/com/hbm/handler/HbmKeybinds.java +++ b/src/main/java/com/hbm/handler/HbmKeybinds.java @@ -39,13 +39,12 @@ public class HbmKeybinds { ClientRegistry.registerKeyBinding(reloadKey); ClientRegistry.registerKeyBinding(dashKey); ClientRegistry.registerKeyBinding(trainKey); - ClientRegistry.registerKeyBinding(copyToolAlt); - ClientRegistry.registerKeyBinding(craneUpKey); ClientRegistry.registerKeyBinding(craneDownKey); ClientRegistry.registerKeyBinding(craneLeftKey); ClientRegistry.registerKeyBinding(craneRightKey); ClientRegistry.registerKeyBinding(craneLoadKey); + ClientRegistry.registerKeyBinding(copyToolAlt); } @SubscribeEvent @@ -74,11 +73,11 @@ public class HbmKeybinds { RELOAD, DASH, TRAIN, - COPY_TOOL, CRANE_UP, CRANE_DOWN, CRANE_LEFT, CRANE_RIGHT, - CRANE_LOAD + CRANE_LOAD, + COPY_TOOL } } diff --git a/src/main/java/com/hbm/interfaces/ICopiable.java b/src/main/java/com/hbm/interfaces/ICopiable.java index 6e6d98996..5a8f2997f 100644 --- a/src/main/java/com/hbm/interfaces/ICopiable.java +++ b/src/main/java/com/hbm/interfaces/ICopiable.java @@ -1,10 +1,28 @@ package com.hbm.interfaces; +import com.hbm.util.Either; +import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; public interface ICopiable { - NBTTagCompound getSettings(); + NBTTagCompound getSettings(World world, int x, int y, int z); - void pasteSettings(NBTTagCompound nbt, boolean alt); + void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z); + + default String getSettingsSourceID(Either self) { + Block block = self.isLeft() ? self.left().getBlockType() : self.right(); + return block.getUnlocalizedName(); + } + + default String getSettingsSourceDisplay(Either self) { + Block block = self.isLeft() ? self.left().getBlockType() : self.right(); + return block.getLocalizedName(); + } + + default String[] infoForDisplay(World world, int x, int y, int z){ + return null; + } } diff --git a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java index 6aefa2905..b50462675 100644 --- a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java +++ b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java @@ -3,25 +3,56 @@ package com.hbm.items.tool; import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.HbmKeybinds; import com.hbm.interfaces.ICopiable; -import com.hbm.main.MainRegistry; -import com.hbm.tileentity.TileEntityProxyBase; -import com.hbm.tileentity.network.IDroneLinkable; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.PlayerInformPacket; import com.hbm.util.ChatBuilder; -import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.Either; +import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; +import javax.annotation.Nullable; +import java.util.ArrayList; import java.util.List; public class ItemSettingsTool extends Item { + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int i, boolean bool) { + NBTTagList displayInfo; + if(!(entity instanceof EntityPlayerMP)) return; + if(((EntityPlayer) entity).getHeldItem() == stack && stack.hasTagCompound()) { + EntityPlayer player = ((EntityPlayer) entity); + displayInfo = stack.stackTagCompound.getTagList("displayInfo", 10); + + if (HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.COPY_TOOL)) { + int index = stack.stackTagCompound.getInteger("copyIndex") + 1; + if(index > displayInfo.tagCount() - 1) index = 0; + stack.stackTagCompound.setInteger("copyIndex", index); + } + + if(world.getTotalWorldTime() % 5 != 0) return; + + if(displayInfo.tagCount() > 0){ + for (int j = 0; j < displayInfo.tagCount(); j++) { + NBTTagCompound nbt = displayInfo.getCompoundTagAt(j); + String info = nbt.getString("info"); + EnumChatFormatting format = stack.stackTagCompound.getInteger("copyIndex") == j ? EnumChatFormatting.AQUA : EnumChatFormatting.YELLOW; + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(format + info, 897 + j, 4000 ), (EntityPlayerMP) entity); + } + } + } + + } @SuppressWarnings("unchecked") @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { @@ -36,28 +67,52 @@ public class ItemSettingsTool extends Item { } @Override public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fX, float fY, float fZ) { - TileEntity tile = world.getTileEntity(x, y, z); - if(tile instanceof TileEntityProxyBase){ - tile = ((TileEntityProxyBase) tile).getTE(); - } - if (tile instanceof ICopiable) { - ICopiable te = ((ICopiable) tile); + Either schrodinger = getCopyInfoSource(world, x, y, z); + if(schrodinger == null) return false; + ICopiable copiable = schrodinger.cast(); - if (player.isSneaking()) { - stack.stackTagCompound = ((ICopiable) tile).getSettings(); - stack.stackTagCompound.setString("tileName", tile.getBlockType().getLocalizedName()); - - player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) - .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) - .next("] ").color(EnumChatFormatting.DARK_AQUA) - .next("Copied settings of " + tile.getBlockType().getLocalizedName()).color(EnumChatFormatting.AQUA).flush()); - - } else if (stack.hasTagCompound()) { - boolean alt = HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.COPY_TOOL); - te.pasteSettings(stack.stackTagCompound, alt); + if(player.isSneaking()) { + stack.stackTagCompound = copiable.getSettings(world, x, y, z); + stack.stackTagCompound.setString("tileName", copiable.getSettingsSourceID(schrodinger)); + stack.stackTagCompound.setInteger("copyIndex", 0); + String[] info = copiable.infoForDisplay(world, x, y, z); + if(info != null) { + NBTTagList displayInfo = new NBTTagList(); + for (String str : info) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("info", str); + displayInfo.appendTag(nbt); + } + stack.stackTagCompound.setTag("displayInfo", displayInfo); } + if(world.isRemote) { + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Copied settings of " + copiable.getSettingsSourceDisplay(schrodinger)).color(EnumChatFormatting.AQUA).flush()); + } + + } else if(stack.hasTagCompound()) { + int index = stack.stackTagCompound.getInteger("copyIndex"); + copiable.pasteSettings(stack.stackTagCompound, index, world, x, y, z); } - return true; + + return !world.isRemote; + } + + @Nullable + private Either getCopyInfoSource(World world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + if(te instanceof ICopiable) { + return Either.left(te); + } + + Block block = world.getBlock(x, y, z); + if(block instanceof ICopiable) { + return Either.right(block); + } + + return null; } } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 6f3b52609..1f2167262 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -2113,6 +2113,7 @@ public class ClientProxy extends ServerProxy { case CRANE_LEFT: return HbmKeybinds.craneLeftKey.getIsKeyPressed(); case CRANE_RIGHT: return HbmKeybinds.craneRightKey.getIsKeyPressed(); case CRANE_LOAD: return HbmKeybinds.craneLoadKey.getIsKeyPressed(); + case COPY_TOOL: return HbmKeybinds.copyToolAlt.getIsKeyPressed(); } return false; diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index f2cd224f8..2e6c5a15a 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -3,14 +3,13 @@ package com.hbm.tileentity; import com.hbm.interfaces.IControlReceiver; import com.hbm.interfaces.ICopiable; -import com.hbm.module.ModulePatternMatcher; import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; public interface IControlReceiverFilter extends IControlReceiver, ICopiable { @@ -47,7 +46,7 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { int[] getFilterSlots(); @Override - default NBTTagCompound getSettings() { + default NBTTagCompound getSettings(World world, int x, int y, int z) { IInventory inv = (IInventory) this; NBTTagCompound nbt = new NBTTagCompound(); NBTTagList tags = new NBTTagList(); @@ -67,7 +66,7 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { } @Override - default void pasteSettings(NBTTagCompound nbt, boolean alt) { + default void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { TileEntity tile = (TileEntity) this; IInventory inv = (IInventory) this; NBTTagList items = nbt.getTagList("items", 10); diff --git a/src/main/java/com/hbm/tileentity/IFluidCopiable.java b/src/main/java/com/hbm/tileentity/IFluidCopiable.java index 67b90580c..61933e829 100644 --- a/src/main/java/com/hbm/tileentity/IFluidCopiable.java +++ b/src/main/java/com/hbm/tileentity/IFluidCopiable.java @@ -6,9 +6,9 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.util.BobMathUtil; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; import java.util.ArrayList; -import java.util.Arrays; public interface IFluidCopiable extends ICopiable { /** @@ -18,11 +18,10 @@ public interface IFluidCopiable extends ICopiable { IFluidStandardTransceiver tile = (IFluidStandardTransceiver) this; ArrayList types = new ArrayList<>(); - if(tile.getReceivingTanks() != null && !tile.getReceivingTanks()[0].getTankType().hasNoID()) - types.add(tile.getReceivingTanks()[0].getTankType().getID()); - - if(tile.getSendingTanks() != null && !tile.getSendingTanks()[0].getTankType().hasNoID()) - types.add(tile.getSendingTanks()[0].getTankType().getID()); + for (FluidTank tank : tile.getAllTanks()) { + if (!tank.getTankType().hasNoID()) + types.add(tank.getTankType().getID()); + } return BobMathUtil.intCollectionToArray(types); } @@ -33,7 +32,7 @@ public interface IFluidCopiable extends ICopiable { } @Override - default NBTTagCompound getSettings(){ + default NBTTagCompound getSettings(World world, int x, int y, int z){ NBTTagCompound tag = new NBTTagCompound(); if(getFluidIDToCopy().length > 0) tag.setIntArray("fluidID", getFluidIDToCopy()); @@ -41,14 +40,23 @@ public interface IFluidCopiable extends ICopiable { } @Override - default void pasteSettings(NBTTagCompound nbt, boolean alt) { + default void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { if(getTankToPaste() != null) { int[] ids = nbt.getIntArray("fluidID"); if(ids.length > 0) { - int id = ids[alt ? 1 : 0]; + int id = ids[index]; getTankToPaste().setTankType(Fluids.fromID(id)); } } } + @Override + default String[] infoForDisplay(World world, int x, int y, int z) { + int[] ids = getFluidIDToCopy(); + String[] names = new String[ids.length]; + for (int i = 0; i < ids.length; i++) { + names[i] = Fluids.fromID(ids[i]).getUnlocalizedName(); + } + return names; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java index 5b1fd2685..33c9910c2 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java @@ -11,7 +11,6 @@ import com.hbm.lib.Library; import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachinePolluting; -import com.hbm.util.BobMathUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.fluid.IFluidStandardTransceiver; @@ -26,8 +25,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; -import java.util.Arrays; - public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implements IGUIProvider, IFluidStandardTransceiver, IHeatSource, IControlReceiver, IFluidCopiable { public boolean isOn = false; @@ -223,7 +220,7 @@ public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implem } @Override - public NBTTagCompound getSettings() { + public NBTTagCompound getSettings(World world, int x, int y, int z) { NBTTagCompound tag = new NBTTagCompound(); tag.setIntArray("fluidID", new int[]{tank.getTankType().getID()}); tag.setInteger("burnRate", setting); @@ -231,8 +228,8 @@ public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implem } @Override - public void pasteSettings(NBTTagCompound nbt, boolean alt) { - int id = nbt.getIntArray("fluidID")[alt ? 1 : 0]; + public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + int id = nbt.getIntArray("fluidID")[index]; tank.setTankType(Fluids.fromID(id)); setting = nbt.getInteger("burnRate"); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java index 4ad2b1a2f..9c81c20ad 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java @@ -395,4 +395,14 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme if(type == UpgradeType.OVERDRIVE) return 3; return 0; } + + @Override + public int[] getFluidIDToCopy() { + return new int[]{ tank.getTankType().getID()}; + } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java index a96fd4b84..0a2f9a195 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java @@ -378,8 +378,4 @@ public class TileEntityMachineMixer extends TileEntityMachineBase implements INB return this.tanks[2]; } - @Override - public int[] getFluidIDToCopy() { - return new int[]{tanks[2].getTankType().getID()}; - } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java index c780bad42..7f7815c78 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -10,7 +10,7 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; -import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.ForgeDirection; @@ -109,7 +109,7 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen } @Override - public NBTTagCompound getSettings() { + public NBTTagCompound getSettings(World world, int x, int y, int z) { NBTTagCompound nbt = new NBTTagCompound(); nbt.setInteger("inputSide", getInputSide().ordinal()); nbt.setInteger("outputSide", getOutputSide().ordinal()); @@ -136,8 +136,8 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen } @Override - public void pasteSettings(NBTTagCompound nbt, boolean alt) { - if(alt) { + public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + if(index == 1) { if (nbt.hasKey("outputSide")) { outputOverride = ForgeDirection.getOrientation(nbt.getInteger("outputSide")); onBlockChanged(); @@ -171,4 +171,9 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen } } } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + return new String[]{"Filter", "Orientation"}; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java index 832143613..6fb76c124 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java @@ -13,6 +13,7 @@ import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.common.util.ForgeDirection; @@ -180,10 +181,14 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor, } @Override - public void pasteSettings(NBTTagCompound nbt, boolean alt) { + public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { int[] ids = nbt.getIntArray("fluidID"); if(ids.length > 0) { - int id = ids[alt ? 1 : 0]; + int id; + if (index < ids.length) + id = ids[index]; + else + id = 0; this.setType(Fluids.fromID(id)); } } diff --git a/src/main/java/com/hbm/util/Either.java b/src/main/java/com/hbm/util/Either.java new file mode 100644 index 000000000..fa2848ee3 --- /dev/null +++ b/src/main/java/com/hbm/util/Either.java @@ -0,0 +1,76 @@ +package com.hbm.util; + +import java.util.function.Function; + +/** + * Represents a value that is either of generic type L or R + * @author martinthedragon + */ +@SuppressWarnings("unchecked") +public final class Either { + public static Either left(L value) { + return new Either<>(value, true); + } + + public static Either right(R value) { + return new Either<>(value, false); + } + + private final Object value; + private final boolean isLeft; + + private Either(Object value, boolean isLeft) { + this.value = value; + this.isLeft = isLeft; + } + + public boolean isLeft() { + return isLeft; + } + + public boolean isRight() { + return !isLeft; + } + + public L left() { + if(isLeft) + return (L) value; + else + throw new IllegalStateException("Tried accessing value as the L type, but was R type"); + } + + public R right() { + if(!isLeft) + return (R) value; + else + throw new IllegalStateException("Tried accessing value as the R type, but was L type"); + } + + public L leftOrNull() { + return isLeft ? (L) value : null; + } + + public R rightOrNull() { + return !isLeft ? (R) value : null; + } + + public V cast() { + return (V) value; + } + + public T run(Function leftFunc, Function rightFunc) { + return isLeft ? leftFunc.apply((L) value) : rightFunc.apply((R) value); + } + + public T runLeftOrNull(Function func) { + return isLeft ? func.apply((L) value) : null; + } + + public T runRightOrNull(Function func) { + return !isLeft ? func.apply((R) value) : null; + } + + public T runCasting(Function func) { + return func.apply((V) value); + } +} From 65ae9b45abea24cf6b69520646fed4881fad6ca7 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Tue, 20 Aug 2024 12:17:31 -0400 Subject: [PATCH 06/18] some usability improvements --- .../java/com/hbm/blocks/BlockDummyable.java | 4 +-- .../com/hbm/blocks/network/FluidDuctBase.java | 33 +++++++++++++++++-- .../java/com/hbm/handler/HbmKeybinds.java | 8 +++-- .../java/com/hbm/interfaces/ICopiable.java | 3 +- .../com/hbm/items/tool/ItemSettingsTool.java | 10 ++++-- src/main/java/com/hbm/main/ClientProxy.java | 3 +- .../tileentity/IControlReceiverFilter.java | 3 +- .../com/hbm/tileentity/IFluidCopiable.java | 3 +- 8 files changed, 53 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index b81f81db6..e0463a1b0 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -520,11 +520,11 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl } @Override - public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { int[] pos = findCore(world, x, y, z); TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); if (tile instanceof ICopiable) - ((ICopiable) tile).pasteSettings(nbt, index, world, pos[0], pos[1], pos[2]); + ((ICopiable) tile).pasteSettings(nbt, index, world, player, pos[0], pos[1], pos[2]); } @Override diff --git a/src/main/java/com/hbm/blocks/network/FluidDuctBase.java b/src/main/java/com/hbm/blocks/network/FluidDuctBase.java index 3422d1f17..65af59af5 100644 --- a/src/main/java/com/hbm/blocks/network/FluidDuctBase.java +++ b/src/main/java/com/hbm/blocks/network/FluidDuctBase.java @@ -4,8 +4,11 @@ import java.util.ArrayList; import java.util.List; import com.hbm.blocks.IAnalyzable; +import com.hbm.extprop.HbmPlayerProps; +import com.hbm.handler.HbmKeybinds; import com.hbm.inventory.fluid.FluidType; import com.hbm.items.machine.IItemFluidIdentifier; +import com.hbm.items.machine.ItemFluidIDMulti; import com.hbm.tileentity.network.TileEntityPipeBaseNT; import api.hbm.fluid.IPipeNet; @@ -14,6 +17,7 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -36,13 +40,24 @@ public class FluidDuctBase extends BlockContainer implements IBlockFluidDuct, IA IItemFluidIdentifier id = (IItemFluidIdentifier) player.getHeldItem().getItem(); FluidType type = id.getType(world, x, y, z, player.getHeldItem()); - if(!player.isSneaking()) { + if(!HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_CTRL) && !player.isSneaking()) { TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntityPipeBaseNT) { TileEntityPipeBaseNT pipe = (TileEntityPipeBaseNT) te; - + + if(HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_ALT)) { + Item item = player.getHeldItem().getItem(); + if (item instanceof ItemFluidIDMulti) { + if (id.getType(world, x, y, z, player.getHeldItem()) != pipe.getType()) { + ItemFluidIDMulti.setType(player.getHeldItem(), pipe.getType(), true); + world.playSoundAtEntity(player, "random.orb", 0.25F, 0.75F); + return true; + } + } + } + if(pipe.getType() != type) { pipe.setType(type); return true; @@ -51,9 +66,21 @@ public class FluidDuctBase extends BlockContainer implements IBlockFluidDuct, IA } else { TileEntity te = world.getTileEntity(x, y, z); - + if(te instanceof TileEntityPipeBaseNT) { TileEntityPipeBaseNT pipe = (TileEntityPipeBaseNT) te; + + if(HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_ALT)) { + Item item = player.getHeldItem().getItem(); + if (item instanceof ItemFluidIDMulti) { + if (id.getType(world, x, y, z, player.getHeldItem()) != pipe.getType()) { + ItemFluidIDMulti.setType(player.getHeldItem(), pipe.getType(), true); + world.playSoundAtEntity(player, "random.orb", 0.25F, 0.75F); + return true; + } + } + } + changeTypeRecursively(world, x, y, z, pipe.getType(), type, 64); return true; } diff --git a/src/main/java/com/hbm/handler/HbmKeybinds.java b/src/main/java/com/hbm/handler/HbmKeybinds.java index 767c28ad7..a29dcad8c 100644 --- a/src/main/java/com/hbm/handler/HbmKeybinds.java +++ b/src/main/java/com/hbm/handler/HbmKeybinds.java @@ -24,7 +24,9 @@ public class HbmKeybinds { public static KeyBinding reloadKey = new KeyBinding(category + ".reload", Keyboard.KEY_R, category); public static KeyBinding dashKey = new KeyBinding(category + ".dash", Keyboard.KEY_LSHIFT, category); public static KeyBinding trainKey = new KeyBinding(category + ".trainInv", Keyboard.KEY_R, category); - public static KeyBinding copyToolAlt = new KeyBinding(category + ".copyTool", Keyboard.KEY_LMENU, category); + public static KeyBinding copyToolAlt = new KeyBinding(category + ".copyToolAlt", Keyboard.KEY_LMENU, category); + + public static KeyBinding copyToolCtrl = new KeyBinding(category + ".copyToolCtrl", Keyboard.KEY_LCONTROL, category); public static KeyBinding craneUpKey = new KeyBinding(category + ".craneMoveUp", Keyboard.KEY_UP, category); public static KeyBinding craneDownKey = new KeyBinding(category + ".craneMoveDown", Keyboard.KEY_DOWN, category); @@ -45,6 +47,7 @@ public class HbmKeybinds { ClientRegistry.registerKeyBinding(craneRightKey); ClientRegistry.registerKeyBinding(craneLoadKey); ClientRegistry.registerKeyBinding(copyToolAlt); + ClientRegistry.registerKeyBinding(copyToolCtrl); } @SubscribeEvent @@ -78,6 +81,7 @@ public class HbmKeybinds { CRANE_LEFT, CRANE_RIGHT, CRANE_LOAD, - COPY_TOOL + TOOL_ALT, + TOOL_CTRL } } diff --git a/src/main/java/com/hbm/interfaces/ICopiable.java b/src/main/java/com/hbm/interfaces/ICopiable.java index 5a8f2997f..1fa9ba276 100644 --- a/src/main/java/com/hbm/interfaces/ICopiable.java +++ b/src/main/java/com/hbm/interfaces/ICopiable.java @@ -2,6 +2,7 @@ package com.hbm.interfaces; import com.hbm.util.Either; import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; @@ -10,7 +11,7 @@ public interface ICopiable { NBTTagCompound getSettings(World world, int x, int y, int z); - void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z); + void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z); default String getSettingsSourceID(Either self) { Block block = self.isLeft() ? self.left().getBlockType() : self.right(); diff --git a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java index b50462675..f0e1541cb 100644 --- a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java +++ b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java @@ -20,7 +20,6 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import javax.annotation.Nullable; -import java.util.ArrayList; import java.util.List; public class ItemSettingsTool extends Item { @@ -32,14 +31,18 @@ public class ItemSettingsTool extends Item { if(((EntityPlayer) entity).getHeldItem() == stack && stack.hasTagCompound()) { EntityPlayer player = ((EntityPlayer) entity); + int delay = stack.stackTagCompound.getInteger("inputDelay"); + delay++; displayInfo = stack.stackTagCompound.getTagList("displayInfo", 10); - if (HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.COPY_TOOL)) { + if (HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_ALT) && delay > 4) { int index = stack.stackTagCompound.getInteger("copyIndex") + 1; if(index > displayInfo.tagCount() - 1) index = 0; stack.stackTagCompound.setInteger("copyIndex", index); + delay = 0; } + stack.stackTagCompound.setInteger("inputDelay", delay); if(world.getTotalWorldTime() % 5 != 0) return; if(displayInfo.tagCount() > 0){ @@ -75,6 +78,7 @@ public class ItemSettingsTool extends Item { stack.stackTagCompound = copiable.getSettings(world, x, y, z); stack.stackTagCompound.setString("tileName", copiable.getSettingsSourceID(schrodinger)); stack.stackTagCompound.setInteger("copyIndex", 0); + stack.stackTagCompound.setInteger("inputDelay", 0); String[] info = copiable.infoForDisplay(world, x, y, z); if(info != null) { NBTTagList displayInfo = new NBTTagList(); @@ -95,7 +99,7 @@ public class ItemSettingsTool extends Item { } else if(stack.hasTagCompound()) { int index = stack.stackTagCompound.getInteger("copyIndex"); - copiable.pasteSettings(stack.stackTagCompound, index, world, x, y, z); + copiable.pasteSettings(stack.stackTagCompound, index, world, player, x, y, z); } return !world.isRemote; diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 1f2167262..4be95b1ee 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -2113,7 +2113,8 @@ public class ClientProxy extends ServerProxy { case CRANE_LEFT: return HbmKeybinds.craneLeftKey.getIsKeyPressed(); case CRANE_RIGHT: return HbmKeybinds.craneRightKey.getIsKeyPressed(); case CRANE_LOAD: return HbmKeybinds.craneLoadKey.getIsKeyPressed(); - case COPY_TOOL: return HbmKeybinds.copyToolAlt.getIsKeyPressed(); + case TOOL_ALT: return HbmKeybinds.copyToolAlt.getIsKeyPressed(); + case TOOL_CTRL: return HbmKeybinds.copyToolCtrl.getIsKeyPressed(); } return false; diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index 2e6c5a15a..844c001e2 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -3,6 +3,7 @@ package com.hbm.tileentity; import com.hbm.interfaces.IControlReceiver; import com.hbm.interfaces.ICopiable; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -66,7 +67,7 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { } @Override - default void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + default void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { TileEntity tile = (TileEntity) this; IInventory inv = (IInventory) this; NBTTagList items = nbt.getTagList("items", 10); diff --git a/src/main/java/com/hbm/tileentity/IFluidCopiable.java b/src/main/java/com/hbm/tileentity/IFluidCopiable.java index 61933e829..023c8ac5b 100644 --- a/src/main/java/com/hbm/tileentity/IFluidCopiable.java +++ b/src/main/java/com/hbm/tileentity/IFluidCopiable.java @@ -5,6 +5,7 @@ import com.hbm.interfaces.ICopiable; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.util.BobMathUtil; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; @@ -40,7 +41,7 @@ public interface IFluidCopiable extends ICopiable { } @Override - default void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + default void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { if(getTankToPaste() != null) { int[] ids = nbt.getIntArray("fluidID"); if(ids.length > 0) { From 5de273b5baca263a1781323244ddfc65b376f69e Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sat, 24 Aug 2024 13:40:53 -0400 Subject: [PATCH 07/18] five million billion impls hopefully all fluid impls done outside of the rbmk stuff Also implemented copy pasting of molten metals, copying from anything that holds molten metal, and pasting into outlets for filters --- .../com/hbm/tileentity/IFluidCopiable.java | 12 +++-- .../com/hbm/tileentity/IMetalCopiable.java | 32 ++++++++++++ .../bomb/TileEntityLaunchPadBase.java | 13 ++++- .../tileentity/machine/TileEntityChungus.java | 8 ++- .../machine/TileEntityCondenser.java | 8 ++- .../machine/TileEntityCrucible.java | 20 ++++++- .../machine/TileEntityDeuteriumExtractor.java | 8 ++- .../machine/TileEntityElectrolyser.java | 52 +++++++++++++++++-- .../machine/TileEntityFoundryBase.java | 16 +++++- .../machine/TileEntityFoundryOutlet.java | 41 ++++++++++++++- .../machine/TileEntityFurnaceCombination.java | 3 +- .../machine/TileEntityHeatBoiler.java | 4 +- .../TileEntityHeatBoilerIndustrial.java | 4 +- .../machine/TileEntityHeaterOilburner.java | 6 ++- .../hbm/tileentity/machine/TileEntityICF.java | 3 +- .../machine/TileEntityICFPress.java | 3 +- .../tileentity/machine/TileEntityITER.java | 8 ++- .../machine/TileEntityMachineArcWelder.java | 12 +++-- .../machine/TileEntityMachineAssemfac.java | 8 ++- .../machine/TileEntityMachineAutosaw.java | 7 ++- .../machine/TileEntityMachineChemfac.java | 8 ++- .../TileEntityMachineCombustionEngine.java | 20 ++++++- .../machine/TileEntityMachineCompressor.java | 33 +++++++++++- .../machine/TileEntityMachineCyclotron.java | 12 +++-- .../machine/TileEntityMachineDiesel.java | 3 +- .../machine/TileEntityMachineDrain.java | 8 ++- .../machine/TileEntityMachineExcavator.java | 8 ++- .../machine/TileEntityMachineHephaestus.java | 3 +- .../TileEntityMachineLargeTurbine.java | 3 +- .../machine/TileEntityMachineOreSlopper.java | 3 +- .../TileEntityMachinePlasmaHeater.java | 3 +- .../machine/TileEntityMachinePumpBase.java | 8 ++- .../machine/TileEntityMachineRadiolysis.java | 3 +- .../TileEntityMachineSolderingStation.java | 8 ++- .../machine/TileEntityMachineTurbine.java | 3 +- .../machine/TileEntityMachineTurbineGas.java | 3 +- .../machine/TileEntityMachineTurbofan.java | 3 +- .../machine/TileEntityMachineWoodBurner.java | 8 ++- .../machine/TileEntityMicrowave.java | 20 ++++++- .../machine/TileEntitySolarBoiler.java | 9 +++- .../machine/TileEntitySoyuzLauncher.java | 8 ++- .../machine/TileEntitySteamEngine.java | 8 ++- .../machine/TileEntityStorageDrum.java | 8 ++- .../tileentity/machine/TileEntityWatz.java | 8 ++- .../TileEntityMachineCatalyticCracker.java | 8 ++- .../TileEntityMachineCatalyticReformer.java | 3 +- .../machine/oil/TileEntityMachineCoker.java | 3 +- .../oil/TileEntityMachineFractionTower.java | 3 +- .../oil/TileEntityMachineGasFlare.java | 20 ++++++- .../oil/TileEntityMachineHydrotreater.java | 8 ++- .../oil/TileEntityMachineLiquefactor.java | 3 +- .../oil/TileEntityMachineRefinery.java | 9 ++-- .../oil/TileEntityMachineSolidifier.java | 8 ++- .../oil/TileEntityMachineVacuumDistill.java | 3 +- .../machine/oil/TileEntityOilDrillBase.java | 14 ++--- .../network/TileEntityCraneBase.java | 3 +- .../network/TileEntityDroneCrate.java | 3 +- .../network/TileEntityPipeBaseNT.java | 18 ++++++- .../turret/TileEntityTurretFritz.java | 8 ++- 59 files changed, 499 insertions(+), 84 deletions(-) create mode 100644 src/main/java/com/hbm/tileentity/IMetalCopiable.java diff --git a/src/main/java/com/hbm/tileentity/IFluidCopiable.java b/src/main/java/com/hbm/tileentity/IFluidCopiable.java index 023c8ac5b..15cb4c0c6 100644 --- a/src/main/java/com/hbm/tileentity/IFluidCopiable.java +++ b/src/main/java/com/hbm/tileentity/IFluidCopiable.java @@ -1,12 +1,14 @@ package com.hbm.tileentity; import api.hbm.fluid.IFluidStandardTransceiver; +import api.hbm.fluid.IFluidUser; import com.hbm.interfaces.ICopiable; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.util.BobMathUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import java.util.ArrayList; @@ -16,7 +18,7 @@ public interface IFluidCopiable extends ICopiable { * @return First type for the normal paste, second type for the alt paste, none if there is no alt paste support */ default int[] getFluidIDToCopy(){ - IFluidStandardTransceiver tile = (IFluidStandardTransceiver) this; + IFluidUser tile = (IFluidUser) this; ArrayList types = new ArrayList<>(); for (FluidTank tank : tile.getAllTanks()) { @@ -28,8 +30,12 @@ public interface IFluidCopiable extends ICopiable { } default FluidTank getTankToPaste(){ - IFluidStandardTransceiver tile = (IFluidStandardTransceiver) this; - return tile.getReceivingTanks() != null ? tile.getReceivingTanks()[0] : null; + TileEntity te = (TileEntity) this; + if (te instanceof IFluidStandardTransceiver) { + IFluidStandardTransceiver tile = (IFluidStandardTransceiver) this; + return tile.getReceivingTanks() != null ? tile.getReceivingTanks()[0] : null; + } + return null; } @Override diff --git a/src/main/java/com/hbm/tileentity/IMetalCopiable.java b/src/main/java/com/hbm/tileentity/IMetalCopiable.java new file mode 100644 index 000000000..533ce98e4 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/IMetalCopiable.java @@ -0,0 +1,32 @@ +package com.hbm.tileentity; + +import com.hbm.interfaces.ICopiable; +import com.hbm.inventory.material.Mats; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public interface IMetalCopiable extends ICopiable { + int[] getMatsToCopy(); + + @Override + default NBTTagCompound getSettings(World world, int x, int y, int z){ + NBTTagCompound tag = new NBTTagCompound(); + if(getMatsToCopy().length > 0) + tag.setIntArray("matFilter", getMatsToCopy()); + return tag; + } + @Override + default String[] infoForDisplay(World world, int x, int y, int z) { + int[] ids = getMatsToCopy(); + String[] names = new String[ids.length]; + for (int i = 0; i < ids.length; i++) { + names[i] = Mats.matById.get(ids[i]).getUnlocalizedName(); + } + return names; + } + @Override + default void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z){ + + }; +} diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java index ea1974511..0020e9045 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java @@ -5,6 +5,7 @@ import java.util.HashSet; import java.util.Set; import com.hbm.handler.CompatHandler; +import com.hbm.tileentity.IFluidCopiable; import cpw.mods.fml.common.Optional; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; @@ -56,7 +57,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IRadarCommandReceiver, SimpleComponent, CompatHandler.OCComponent { +public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IRadarCommandReceiver, SimpleComponent, CompatHandler.OCComponent, IFluidCopiable { /** Automatic instantiation of generic missiles, i.e. everything that both extends EntityMissileBaseNT and needs a designator */ public static final HashMap> missiles = new HashMap(); @@ -555,4 +556,14 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl } throw new NoSuchMethodException(); } + + @Override + public int[] getFluidIDToCopy() { + return new int[]{tanks[0].getTankType().getID(), tanks[1].getTankType().getID()}; + } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java index 0d1d9d6a8..f016d181a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java @@ -13,6 +13,7 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.NBTPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.CompatEnergyControl; @@ -36,7 +37,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyProviderMK2, INBTPacketReceiver, IFluidStandardTransceiver, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent { +public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyProviderMK2, INBTPacketReceiver, IFluidStandardTransceiver, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IFluidCopiable { public long power; public static final long maxPower = 100000000000L; @@ -339,4 +340,9 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IEnergyPr data.setDouble(CompatEnergyControl.D_OUTPUT_MB, info[1]); data.setDouble(CompatEnergyControl.D_OUTPUT_HE, info[2]); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java index 2a13a059a..e60a71b2f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java @@ -3,6 +3,7 @@ package com.hbm.tileentity.machine; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.saveddata.TomSaveData; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.CompatEnergyControl; @@ -12,7 +13,7 @@ import api.hbm.tile.IInfoProviderEC; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.EnumSkyBlock; -public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidStandardTransceiver, INBTPacketReceiver, IInfoProviderEC { +public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidStandardTransceiver, INBTPacketReceiver, IInfoProviderEC, IFluidCopiable { public int age = 0; public FluidTank[] tanks; @@ -118,4 +119,9 @@ public class TileEntityCondenser extends TileEntityLoadedBase implements IFluidS data.setDouble(CompatEnergyControl.D_CONSUMPTION_MB, throughput); data.setDouble(CompatEnergyControl.D_OUTPUT_MB, throughput); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java index 1fb87fc69..45e31909c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java @@ -22,7 +22,9 @@ import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IMetalCopiable; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.BobMathUtil; import com.hbm.util.CrucibleUtil; import api.hbm.block.ICrucibleAcceptor; @@ -35,6 +37,7 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -45,7 +48,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCrucible extends TileEntityMachineBase implements IGUIProvider, ICrucibleAcceptor, IConfigurableMachine { +public class TileEntityCrucible extends TileEntityMachineBase implements IGUIProvider, ICrucibleAcceptor, IConfigurableMachine, IMetalCopiable { public int heat; public int progress; @@ -417,7 +420,6 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro //if there's no materials in there at all, don't smelt if(materials.isEmpty()) return false; - CrucibleRecipe recipe = getLoadedRecipe(); //needs to be true, will always be true if there's no recipe loaded @@ -601,4 +603,18 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro @Override public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return false; } @Override public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return null; } + + @Override + public int[] getMatsToCopy() { + ArrayList types = new ArrayList<>(); + + for (MaterialStack stack : recipeStack) { + types.add(stack.material.id); + } + for (MaterialStack stack : wasteStack) { + types.add(stack.material.id); + } + return BobMathUtil.intCollectionToArray(types); + } + } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java index 12cc135b4..9cf923a9b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDeuteriumExtractor.java @@ -2,6 +2,7 @@ package com.hbm.tileentity.machine; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityMachineBase; import api.hbm.energymk2.IEnergyReceiverMK2; @@ -9,7 +10,7 @@ import api.hbm.fluid.IFluidStandardTransceiver; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver { +public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IFluidCopiable { public long power = 0; public FluidTank[] tanks; @@ -121,4 +122,9 @@ public class TileEntityDeuteriumExtractor extends TileEntityMachineBase implemen public FluidTank[] getAllTanks() { return tanks; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java index 18cf9f14a..a060d6e45 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java @@ -25,9 +25,7 @@ import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IUpgradeInfoProvider; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.BobMathUtil; import com.hbm.util.CrucibleUtil; import com.hbm.util.I18nUtil; @@ -50,7 +48,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityElectrolyser extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityElectrolyser extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable, IMetalCopiable { public long power; public static final long maxPower = 20000000; @@ -547,4 +545,50 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn if(type == UpgradeType.OVERDRIVE) return 3; return 0; } + + @Override + public FluidTank getTankToPaste() { + return tanks[0]; + } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + if(getFluidIDToCopy().length > 0) + tag.setIntArray("fluidID", getFluidIDToCopy()); + if(getMatsToCopy().length > 0) + tag.setIntArray("matFilter", getMatsToCopy()); + return tag; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + IFluidCopiable.super.pasteSettings(nbt, index, world, player, x, y, z); + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + ArrayList names = new ArrayList<>(); + int[] fluidIDs = getFluidIDToCopy(); + int[] matIDs = getMatsToCopy(); + + for (int fluidID : fluidIDs) { + names.add(Fluids.fromID(fluidID).getUnlocalizedName()); + } + for (int matID : matIDs) { + names.add(Mats.matById.get(matID).getUnlocalizedName()); + } + + return names.toArray(new String[0]); + } + + @Override + public int[] getMatsToCopy() { + ArrayList types = new ArrayList<>(); + if(leftStack != null) types.add(leftStack.material.id); + + if(rightStack != null) types.add(rightStack.material.id); + + return BobMathUtil.intCollectionToArray(types); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBase.java index 9d522c1c0..c90d9ec0b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBase.java @@ -1,10 +1,12 @@ package com.hbm.tileentity.machine; +import com.hbm.interfaces.ICopiable; import com.hbm.inventory.material.Mats; import com.hbm.inventory.material.NTMMaterial; import com.hbm.inventory.material.Mats.MaterialStack; import api.hbm.block.ICrucibleAcceptor; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; @@ -19,7 +21,7 @@ import net.minecraftforge.common.util.ForgeDirection; * @author hbm * */ -public abstract class TileEntityFoundryBase extends TileEntity implements ICrucibleAcceptor { +public abstract class TileEntityFoundryBase extends TileEntity implements ICrucibleAcceptor, ICopiable { public NTMMaterial type; protected NTMMaterial lastType; @@ -142,4 +144,16 @@ public abstract class TileEntityFoundryBase extends TileEntity implements ICruci public MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, MaterialStack stack) { return standardAdd(world, x, y, z, side, stack); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + if(type != null) nbt.setIntArray("matFilter", new int[]{ type.id }); + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java index 1414283fe..a5f0d6086 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java @@ -1,5 +1,6 @@ package com.hbm.tileentity.machine; +import com.hbm.interfaces.ICopiable; import com.hbm.inventory.material.Mats; import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.packet.AuxParticlePacketNT; @@ -9,13 +10,16 @@ import com.hbm.util.CrucibleUtil; import api.hbm.block.ICrucibleAcceptor; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityFoundryOutlet extends TileEntityFoundryBase { +import java.util.ArrayList; + +public class TileEntityFoundryOutlet extends TileEntityFoundryBase implements ICopiable { public NTMMaterial filter = null; public NTMMaterial lastFilter = null; @@ -121,4 +125,39 @@ public class TileEntityFoundryOutlet extends TileEntityFoundryBase { nbt.setBoolean("invertFilter", this.invertFilter); nbt.setShort("filter", this.filter == null ? -1 : (short) this.filter.id); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + + nbt.setBoolean("invert", this.invertRedstone); + nbt.setBoolean("invertFilter", this.invertFilter); + if(filter != null){ + nbt.setIntArray("matFilter", new int[]{ filter.id }); + } + + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + + if(nbt.hasKey("invert")) this.invertRedstone = nbt.getBoolean("invert"); + if(nbt.hasKey("invertFilter")) this.invertFilter = nbt.getBoolean("invertFilter"); + if(nbt.hasKey("matFilter")) { + int[] ids = nbt.getIntArray("matFilter"); + if(ids.length > 0) + this.filter = Mats.matById.get(ids[index]); + } + + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + ArrayList info = new ArrayList<>(); + info.add("copyTool.invertRedstone"); + info.add("copyTool.invertFilter"); + if (filter != null) info.add(filter.getUnlocalizedName()); + return info.toArray(new String[0]); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java index 2ef8e189e..2020301b4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java @@ -10,6 +10,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIFurnaceCombo; import com.hbm.inventory.recipes.CombinationRecipes; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachinePolluting; import com.hbm.util.Tuple.Pair; @@ -30,7 +31,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityFurnaceCombination extends TileEntityMachinePolluting implements IFluidStandardSender, IGUIProvider { +public class TileEntityFurnaceCombination extends TileEntityMachinePolluting implements IFluidStandardSender, IGUIProvider, IFluidCopiable { public boolean wasOn; public int progress; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java index c1c830cf5..059fd07b9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java @@ -19,6 +19,7 @@ import com.hbm.main.MainRegistry; import com.hbm.saveddata.TomSaveData; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -31,9 +32,10 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityHeatBoiler extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine { +public class TileEntityHeatBoiler extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine, IFluidCopiable { public int heat; public FluidTank[] tanks; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java index fe337615f..dcf75fa3b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java @@ -14,6 +14,7 @@ import com.hbm.main.MainRegistry; import com.hbm.saveddata.TomSaveData; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -26,8 +27,9 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.EnumSkyBlock; +import net.minecraft.world.World; -public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine { +public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine, IFluidCopiable { public int heat; public FluidTank[] tanks; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java index 33c9910c2..2b0451477 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java @@ -224,13 +224,15 @@ public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implem NBTTagCompound tag = new NBTTagCompound(); tag.setIntArray("fluidID", new int[]{tank.getTankType().getID()}); tag.setInteger("burnRate", setting); + tag.setBoolean("isOn", isOn); return tag; } @Override - public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { int id = nbt.getIntArray("fluidID")[index]; tank.setTankType(Fluids.fromID(id)); - setting = nbt.getInteger("burnRate"); + if(nbt.hasKey("isOn")) isOn = nbt.getBoolean("isOn"); + if(nbt.hasKey("burnRate")) setting = nbt.getInteger("burnRate"); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java b/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java index 4f4c3d65d..d9c52bffe 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java @@ -13,6 +13,7 @@ import com.hbm.items.machine.ItemICFPellet; import com.hbm.lib.Library; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -39,7 +40,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityICF extends TileEntityMachineBase implements IGUIProvider, IFluidStandardTransceiver, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityICF extends TileEntityMachineBase implements IGUIProvider, IFluidStandardTransceiver, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent, IFluidCopiable { public long laser; public long maxLaser; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java index 9c6eef7ad..b370c480d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java @@ -12,6 +12,7 @@ import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemICFPellet; import com.hbm.items.machine.ItemICFPellet.EnumICFFuel; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -26,7 +27,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -public class TileEntityICFPress extends TileEntityMachineBase implements IFluidStandardReceiver, IGUIProvider { +public class TileEntityICFPress extends TileEntityMachineBase implements IFluidStandardReceiver, IGUIProvider, IFluidCopiable { public FluidTank[] tanks; public int muon; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java index 3b78b1168..fb1edf04f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java @@ -25,6 +25,7 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -52,7 +53,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityITER extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidContainer, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityITER extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidContainer, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent, IFluidCopiable { public long power; public static final long maxPower = 10000000; @@ -666,4 +667,9 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece } throw new NoSuchMethodException(); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java index 6a3132006..cfa5f1022 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java @@ -16,10 +16,7 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; -import com.hbm.tileentity.IConditionalInvAccess; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IUpgradeInfoProvider; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; @@ -41,7 +38,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineArcWelder extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IConditionalInvAccess, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineArcWelder extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IConditionalInvAccess, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public long power; public long maxPower = 2_000; @@ -392,4 +389,9 @@ public class TileEntityMachineArcWelder extends TileEntityMachineBase implements if(type == UpgradeType.POWER) return 3; return 0; } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java index 948022a43..60ad1e512 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java @@ -12,6 +12,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIAssemfac; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; @@ -31,7 +32,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase implements IFluidStandardTransceiver, IUpgradeInfoProvider { +public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase implements IFluidStandardTransceiver, IUpgradeInfoProvider, IFluidCopiable { public AssemblerArm[] arms; @@ -476,4 +477,9 @@ public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase im if(type == UpgradeType.OVERDRIVE) return 12; return 0; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index 3ec39159b..4924fb718 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -11,6 +11,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.ModDamageSource; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; @@ -29,7 +30,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; -public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardReceiver { +public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardReceiver, IFluidCopiable { public static final HashSet acceptedFuels = new HashSet(); @@ -342,4 +343,8 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IN public double getMaxRenderDistanceSquared() { return 65536.0D; } + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java index 53c90a9c0..cc0a80faa 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java @@ -14,6 +14,7 @@ import com.hbm.inventory.gui.GUIChemfac; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; @@ -32,7 +33,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase implements IUpgradeInfoProvider { +public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase implements IUpgradeInfoProvider, IFluidCopiable { float rotSpeed; public float rot; @@ -389,4 +390,9 @@ public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase imp if(type == UpgradeType.OVERDRIVE) return 12; return 0; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java index 78292b220..be46200b1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java @@ -14,6 +14,7 @@ import com.hbm.items.machine.ItemPistons.EnumPistonType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachinePolluting; import com.hbm.util.EnumUtil; @@ -32,7 +33,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCombustionEngine extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiver, IControlReceiver, IGUIProvider { +public class TileEntityMachineCombustionEngine extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiver, IControlReceiver, IGUIProvider, IFluidCopiable { public boolean isOn = false; public static long maxPower = 2_500_000; @@ -318,4 +319,21 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachinePollutin this.markChanged(); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setIntArray("fluidID", new int[]{tank.getTankType().getID()}); + tag.setBoolean("isOn", isOn); + tag.setInteger("burnRate", setting); + return tag; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + int id = nbt.getIntArray("fluidID")[index]; + tank.setTankType(Fluids.fromID(id)); + if(nbt.hasKey("isOn")) isOn = nbt.getBoolean("isOn"); + if(nbt.hasKey("burnRate")) setting = nbt.getInteger("burnRate"); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java index c3e94a705..e657f4a90 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java @@ -15,6 +15,7 @@ import com.hbm.inventory.recipes.CompressorRecipes.CompressorRecipe; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -37,7 +38,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCompressor extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, IEnergyReceiverMK2, IFluidStandardTransceiver, IUpgradeInfoProvider { +public class TileEntityMachineCompressor extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, IEnergyReceiverMK2, IFluidStandardTransceiver, IUpgradeInfoProvider, IFluidCopiable { public FluidTank[] tanks; public long power; @@ -366,4 +367,34 @@ public class TileEntityMachineCompressor extends TileEntityMachineBase implement if(type == UpgradeType.OVERDRIVE) return 9; return 0; } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setIntArray("fluidID", getFluidIDToCopy()); + tag.setInteger("compression", tanks[0].getPressure()); + return tag; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("compression")) { + int compression = nbt.getInteger("compression"); + + if (compression != tanks[0].getPressure()) { + tanks[0].withPressure(compression); + + CompressorRecipe recipe = CompressorRecipes.recipes.get(new Pair(tanks[0].getTankType(), compression)); + + if (recipe == null) { + tanks[1].withPressure(compression + 1); + } else { + tanks[1].withPressure(recipe.output.pressure).setTankType(recipe.output.type); + } + + this.markChanged(); + } + } + IFluidCopiable.super.pasteSettings(nbt, index, world, player, x, y, z); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java index effd7bf2e..074c8a031 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java @@ -16,10 +16,7 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; -import com.hbm.tileentity.IConditionalInvAccess; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IUpgradeInfoProvider; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.CompatEnergyControl; import com.hbm.util.I18nUtil; import com.hbm.util.Tuple.Pair; @@ -42,7 +39,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCyclotron extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IConditionalInvAccess, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineCyclotron extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IConditionalInvAccess, IUpgradeInfoProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 100000000; @@ -433,4 +430,9 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements data.setBoolean(CompatEnergyControl.B_ACTIVE, this.progress > 0); data.setDouble(CompatEnergyControl.D_CONSUMPTION_HE, this.progress > 0 ? getConsumption() : 0); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java index 9cedc72c2..2616a2086 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java @@ -19,6 +19,7 @@ import com.hbm.inventory.gui.GUIMachineDiesel; import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachinePolluting; import com.hbm.util.CompatEnergyControl; @@ -37,7 +38,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineDiesel extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidContainer, IFluidStandardTransceiver, IConfigurableMachine, IGUIProvider, IInfoProviderEC { +public class TileEntityMachineDiesel extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidContainer, IFluidStandardTransceiver, IConfigurableMachine, IGUIProvider, IInfoProviderEC, IFluidCopiable { public long power; public int soundCycle = 0; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java index 9a6dc8f21..1fa553080 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDrain.java @@ -15,6 +15,7 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.BufPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -30,7 +31,7 @@ import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineDrain extends TileEntityLoadedBase implements IFluidStandardReceiver, IBufPacketReceiver { +public class TileEntityMachineDrain extends TileEntityLoadedBase implements IFluidStandardReceiver, IBufPacketReceiver, IFluidCopiable { public FluidTank tank; @@ -157,4 +158,9 @@ public class TileEntityMachineDrain extends TileEntityLoadedBase implements IFlu public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java index 3ac1df89a..1090ae1f8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java @@ -24,6 +24,7 @@ import com.hbm.items.machine.ItemDrillbit.EnumDrillType; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.items.special.ItemBedrockOreBase; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -60,7 +61,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineExcavator extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineExcavator extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public static final long maxPower = 1_000_000; public long power; @@ -879,4 +880,9 @@ public class TileEntityMachineExcavator extends TileEntityMachineBase implements if(type == UpgradeType.POWER) return 3; return 0; } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java index eb22b3289..ccc8406f9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java @@ -10,6 +10,7 @@ import com.hbm.inventory.fluid.trait.FT_Heatable.HeatingType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -23,7 +24,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineHephaestus extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver { +public class TileEntityMachineHephaestus extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IFluidCopiable { public FluidTank input; public FluidTank output; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java index e18ad96fd..8cbf5638b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java @@ -15,6 +15,7 @@ import com.hbm.inventory.gui.GUIMachineLargeTurbine; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -40,7 +41,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityMachineLargeTurbine extends TileEntityMachineBase implements IFluidContainer, IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent { +public class TileEntityMachineLargeTurbine extends TileEntityMachineBase implements IFluidContainer, IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IFluidCopiable { public long power; public static final long maxPower = 100000000; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java index 90e1ec36e..d7800be4b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java @@ -20,6 +20,7 @@ import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -46,7 +47,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineOreSlopper extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineOreSlopper extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public long power; public static final long maxPower = 100_000; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java index fde99d15e..f0f4f4db2 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java @@ -13,6 +13,7 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIPlasmaHeater; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -29,7 +30,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachinePlasmaHeater extends TileEntityMachineBase implements IFluidContainer, IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider { +public class TileEntityMachinePlasmaHeater extends TileEntityMachineBase implements IFluidContainer, IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IFluidCopiable { public long power; public static final long maxPower = 100000000; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java index 653064658..c96f013e6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java @@ -10,6 +10,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -22,7 +23,7 @@ import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; -public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase implements IFluidStandardTransceiver, INBTPacketReceiver, IConfigurableMachine { +public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase implements IFluidStandardTransceiver, INBTPacketReceiver, IConfigurableMachine, IFluidCopiable { public static final HashSet validBlocks = new HashSet(); @@ -200,4 +201,9 @@ public abstract class TileEntityMachinePumpBase extends TileEntityLoadedBase imp public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java index 3667aef4b..6a46dd80e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java @@ -12,6 +12,7 @@ import com.hbm.items.ModItems; import com.hbm.items.machine.ItemRTGPellet; import com.hbm.items.machine.ItemRTGPelletDepleted; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -34,7 +35,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineRadiolysis extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidContainer, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC { +public class TileEntityMachineRadiolysis extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidContainer, IFluidStandardTransceiver, IGUIProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final int maxPower = 1000000; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java index 3d0e34caf..653252562 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java @@ -16,6 +16,7 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -38,7 +39,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineSolderingStation extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider { +public class TileEntityMachineSolderingStation extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public long power; public long maxPower = 2_000; @@ -363,4 +364,9 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp if(type == UpgradeType.POWER) return 3; return 0; } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java index fb7374282..2fd1abea0 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -12,6 +12,7 @@ import com.hbm.inventory.gui.GUIMachineTurbine; import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.CompatEnergyControl; @@ -39,7 +40,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityMachineTurbine extends TileEntityLoadedBase implements ISidedInventory, IFluidContainer, IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent { +public class TileEntityMachineTurbine extends TileEntityLoadedBase implements ISidedInventory, IFluidContainer, IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IFluidCopiable { private ItemStack slots[]; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java index 24ad50e60..5cbdd3944 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java @@ -18,6 +18,7 @@ import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -42,7 +43,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityMachineTurbineGas extends TileEntityMachineBase implements IFluidStandardTransceiver, IEnergyProviderMK2, IControlReceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent { +public class TileEntityMachineTurbineGas extends TileEntityMachineBase implements IFluidStandardTransceiver, IEnergyProviderMK2, IControlReceiver, IGUIProvider, SimpleComponent, IInfoProviderEC, CompatHandler.OCComponent, IFluidCopiable { public long power; public static final long maxPower = 1000000L; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java index d0e1306bc..2559943c8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java @@ -21,6 +21,7 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachinePolluting; @@ -47,7 +48,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineTurbofan extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineTurbofan extends TileEntityMachinePolluting implements IEnergyProviderMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 1_000_000; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java index 46de4e4e1..406ac1452 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java @@ -14,6 +14,7 @@ import com.hbm.items.ModItems; import com.hbm.items.ItemEnums.EnumAshType; import com.hbm.lib.Library; import com.hbm.module.ModuleBurnTime; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.CompatEnergyControl; @@ -34,7 +35,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineWoodBurner extends TileEntityMachineBase implements IFluidStandardReceiver, IControlReceiver, IEnergyProviderMK2, IGUIProvider, IInfoProviderEC { +public class TileEntityMachineWoodBurner extends TileEntityMachineBase implements IFluidStandardReceiver, IControlReceiver, IEnergyProviderMK2, IGUIProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 100_000; @@ -321,4 +322,9 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement if(this.liquidBurn) data.setDouble(CompatEnergyControl.D_CONSUMPTION_MB, 1D); data.setDouble(CompatEnergyControl.D_OUTPUT_HE, power); } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java index b6e4e9d55..9e11bf74c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java @@ -1,6 +1,7 @@ package com.hbm.tileentity.machine; import com.hbm.handler.CompatHandler; +import com.hbm.interfaces.ICopiable; import com.hbm.inventory.container.ContainerMicrowave; import com.hbm.inventory.gui.GUIMicrowave; import com.hbm.lib.Library; @@ -29,7 +30,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityMicrowave extends TileEntityMachineBase implements IEnergyReceiverMK2, IGUIProvider, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityMicrowave extends TileEntityMachineBase implements IEnergyReceiverMK2, IGUIProvider, SimpleComponent, CompatHandler.OCComponent, ICopiable { public long power; public static final long maxPower = 50000; @@ -254,4 +255,21 @@ public class TileEntityMicrowave extends TileEntityMachineBase implements IEnerg public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMicrowave(player.inventory, this); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("microSpeed", speed); + return null; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("microSpeed")) speed = nbt.getInteger("microSpeed"); + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + return new String[]{ "copyTool.speed"}; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java index c2803d6c6..212468a1d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java @@ -2,12 +2,14 @@ package com.hbm.tileentity.machine; import java.util.HashSet; +import com.hbm.interfaces.ICopiable; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; import com.hbm.packet.BufPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.fluid.IFluidStandardTransceiver; @@ -19,7 +21,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.ChunkCoordinates; -public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFluidStandardTransceiver, IBufPacketReceiver { +public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFluidStandardTransceiver, IBufPacketReceiver, IFluidCopiable { private FluidTank water; private FluidTank steam; @@ -137,4 +139,9 @@ public class TileEntitySolarBoiler extends TileEntityLoadedBase implements IFlui water.deserialize(buf); steam.deserialize(buf); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java index 5b09fa69d..d27ed3d82 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java @@ -15,6 +15,7 @@ import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -37,7 +38,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements ISidedInventory, IEnergyReceiverMK2, IFluidContainer, IFluidStandardReceiver, IGUIProvider { +public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements ISidedInventory, IEnergyReceiverMK2, IFluidContainer, IFluidStandardReceiver, IGUIProvider, IFluidCopiable { public long power; public static final long maxPower = 1000000; @@ -463,4 +464,9 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUISoyuzLauncher(player.inventory, this); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java index a09c5747e..fbab44838 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java @@ -10,6 +10,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.fluid.trait.FT_Coolable; import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.tileentity.IConfigurableMachine; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -24,7 +25,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEnergyProviderMK2, IFluidStandardTransceiver, INBTPacketReceiver, IConfigurableMachine { +public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEnergyProviderMK2, IFluidStandardTransceiver, INBTPacketReceiver, IConfigurableMachine, IFluidCopiable { public long powerBuffer; @@ -214,4 +215,9 @@ public class TileEntitySteamEngine extends TileEntityLoadedBase implements IEner this.tanks[0].readFromNBT(nbt, "s"); this.tanks[1].readFromNBT(nbt, "w"); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java b/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java index 70d060e0b..a8f753cba 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java @@ -14,6 +14,7 @@ import com.hbm.inventory.gui.GUIStorageDrum; import com.hbm.items.ModItems; import com.hbm.items.special.ItemWasteLong; import com.hbm.items.special.ItemWasteShort; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.ContaminationUtil; @@ -34,7 +35,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class TileEntityStorageDrum extends TileEntityMachineBase implements IFluidContainer, IFluidStandardSender, IGUIProvider { +public class TileEntityStorageDrum extends TileEntityMachineBase implements IFluidContainer, IFluidStandardSender, IGUIProvider, IFluidCopiable { public FluidTank[] tanks; private static final int[] slots_arr = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }; @@ -280,4 +281,9 @@ public class TileEntityStorageDrum extends TileEntityMachineBase implements IFlu public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIStorageDrum(player.inventory, this); } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java index 9168d4387..ed713def1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java @@ -20,6 +20,7 @@ import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.Compat; @@ -44,7 +45,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityWatz extends TileEntityMachineBase implements IFluidStandardTransceiver, IControlReceiver, IGUIProvider { +public class TileEntityWatz extends TileEntityMachineBase implements IFluidStandardTransceiver, IControlReceiver, IGUIProvider, IFluidCopiable { public FluidTank[] tanks; public int heat; @@ -549,4 +550,9 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand public FluidTank[] getReceivingTanks() { return new FluidTank[] { tanks[0] }; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java index 37f9f4fb0..3d4208642 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java @@ -5,6 +5,7 @@ import com.hbm.inventory.FluidStack; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.CrackingRecipes; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.Tuple.Pair; @@ -17,7 +18,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver { +public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IFluidCopiable { public FluidTank[] tanks; @@ -193,4 +194,9 @@ public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase impl public FluidTank[] getAllTanks() { return tanks; } + + @Override + public FluidTank getTankToPaste() { + return tanks[0]; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java index 3ef9daf56..25d9db59d 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java @@ -10,6 +10,7 @@ import com.hbm.inventory.gui.GUIMachineCatalyticReformer; import com.hbm.inventory.recipes.ReformingRecipes; import com.hbm.items.ModItems; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; @@ -28,7 +29,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCatalyticReformer extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider { +public class TileEntityMachineCatalyticReformer extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, IFluidCopiable { public long power; public static final long maxPower = 1_000_000; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java index cf90645d5..5afde6a21 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java @@ -10,6 +10,7 @@ import com.hbm.inventory.gui.GUIMachineCoker; import com.hbm.inventory.recipes.CokerRecipes; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.Tuple.Triplet; @@ -28,7 +29,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; -public class TileEntityMachineCoker extends TileEntityMachineBase implements IFluidStandardTransceiver, IGUIProvider { +public class TileEntityMachineCoker extends TileEntityMachineBase implements IFluidStandardTransceiver, IGUIProvider, IFluidCopiable { public boolean wasOn; public int progress; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java index 9052dd9fc..3afa3fb12 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java @@ -8,6 +8,7 @@ import com.hbm.lib.Library; import com.hbm.packet.BufPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IBufPacketReceiver; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.Tuple.Pair; import com.hbm.util.fauxpointtwelve.DirPos; @@ -21,7 +22,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -public class TileEntityMachineFractionTower extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver { +public class TileEntityMachineFractionTower extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardTransceiver, IFluidCopiable { public FluidTank[] tanks; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java index 6e4ef2791..25bc68134 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java @@ -19,6 +19,7 @@ import com.hbm.inventory.gui.GUIMachineGasFlare; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -43,7 +44,7 @@ import net.minecraft.util.DamageSource; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineGasFlare extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidContainer, IFluidStandardReceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineGasFlare extends TileEntityMachineBase implements IEnergyProviderMK2, IFluidContainer, IFluidStandardReceiver, IControlReceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 100000; @@ -338,4 +339,21 @@ public class TileEntityMachineGasFlare extends TileEntityMachineBase implements data.setDouble(CompatEnergyControl.D_CONSUMPTION_MB, this.fluidUsed); data.setDouble(CompatEnergyControl.D_OUTPUT_HE, this.output); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setIntArray("fluidID", new int[]{tank.getTankType().getID()}); + tag.setBoolean("isOn", isOn); + tag.setBoolean("doesBurn", doesBurn); + return tag; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + int id = nbt.getIntArray("fluidID")[index]; + tank.setTankType(Fluids.fromID(id)); + if(nbt.hasKey("isOn")) isOn = nbt.getBoolean("isOn"); + if(nbt.hasKey("doesBurn")) doesBurn = nbt.getBoolean("doesBurn"); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java index 9bffbf38b..1c278320d 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java @@ -9,6 +9,7 @@ import com.hbm.inventory.gui.GUIMachineHydrotreater; import com.hbm.inventory.recipes.HydrotreatingRecipes; import com.hbm.items.ModItems; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; @@ -28,7 +29,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineHydrotreater extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider { +public class TileEntityMachineHydrotreater extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, IFluidCopiable { public long power; public static final long maxPower = 1_000_000; @@ -222,4 +223,9 @@ public class TileEntityMachineHydrotreater extends TileEntityMachineBase impleme public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineHydrotreater(player.inventory, this); } + + @Override + public FluidTank getTankToPaste() { + return tanks[0]; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java index 04f78fad3..62af33e6d 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java @@ -14,6 +14,7 @@ import com.hbm.inventory.gui.GUILiquefactor; import com.hbm.inventory.recipes.LiquefactionRecipes; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -35,7 +36,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineLiquefactor extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidContainer, IFluidStandardSender, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineLiquefactor extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidContainer, IFluidStandardSender, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 100000; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java index 65bf61681..e675dd2b2 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java @@ -24,11 +24,7 @@ import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IOverpressurable; -import com.hbm.tileentity.IPersistentNBT; -import com.hbm.tileentity.IRepairable; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.ParticleUtil; import com.hbm.util.Tuple.Quintet; import com.hbm.util.fauxpointtwelve.DirPos; @@ -49,7 +45,7 @@ import net.minecraft.world.Explosion; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineRefinery extends TileEntityMachineBase implements IEnergyReceiverMK2, IOverpressurable, IPersistentNBT, IRepairable, IFluidStandardTransceiver, IGUIProvider { +public class TileEntityMachineRefinery extends TileEntityMachineBase implements IEnergyReceiverMK2, IOverpressurable, IPersistentNBT, IRepairable, IFluidStandardTransceiver, IGUIProvider, IFluidCopiable { public long power = 0; public int sulfur = 0; @@ -467,4 +463,5 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineRefinery(player.inventory, this); } + } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java index c6fd09ecc..3ee56345a 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java @@ -13,6 +13,7 @@ import com.hbm.inventory.gui.GUISolidifier; import com.hbm.inventory.recipes.SolidificationRecipes; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachineBase; @@ -35,7 +36,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class TileEntityMachineSolidifier extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidContainer, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC { +public class TileEntityMachineSolidifier extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidContainer, IFluidStandardReceiver, IGUIProvider, IUpgradeInfoProvider, IInfoProviderEC, IFluidCopiable { public long power; public static final long maxPower = 100000; @@ -294,4 +295,9 @@ public class TileEntityMachineSolidifier extends TileEntityMachineBase implement data.setBoolean(CompatEnergyControl.B_ACTIVE, this.progress > 0); data.setDouble(CompatEnergyControl.D_CONSUMPTION_HE, this.usage); } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java index 037982ffd..32fe42ea5 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java @@ -10,6 +10,7 @@ import com.hbm.inventory.recipes.RefineryRecipes; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IPersistentNBT; import com.hbm.tileentity.TileEntityMachineBase; @@ -28,7 +29,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider { +public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IPersistentNBT, IGUIProvider, IFluidCopiable { public long power; public static final long maxPower = 1_000_000; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java index 65ee56d44..331fdc479 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java @@ -9,11 +9,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; -import com.hbm.tileentity.IConfigurableMachine; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IPersistentNBT; -import com.hbm.tileentity.IUpgradeInfoProvider; -import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.*; import com.hbm.util.BobMathUtil; import com.hbm.util.Tuple; import com.hbm.util.Tuple.Triplet; @@ -28,9 +24,10 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public abstract class TileEntityOilDrillBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IConfigurableMachine, IPersistentNBT, IGUIProvider, IUpgradeInfoProvider { +public abstract class TileEntityOilDrillBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IConfigurableMachine, IPersistentNBT, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public int indicator = 0; @@ -331,4 +328,9 @@ public abstract class TileEntityOilDrillBase extends TileEntityMachineBase imple if(type == UpgradeType.OVERDRIVE) return 3; return 0; } + + @Override + public FluidTank getTankToPaste() { + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java index 7f7815c78..a13fb00fa 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -3,6 +3,7 @@ package com.hbm.tileentity.network; import com.hbm.interfaces.ICopiable; import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.tileentity.TileEntityMachineBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -136,7 +137,7 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen } @Override - public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { if(index == 1) { if (nbt.hasKey("outputSide")) { outputOverride = ForgeDirection.getOrientation(nbt.getInteger("outputSide")); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java index 280c16fd0..449d44386 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java @@ -9,6 +9,7 @@ import com.hbm.inventory.container.ContainerDroneCrate; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIDroneCrate; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityMachineBase; @@ -27,7 +28,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIProvider, INBTPacketReceiver, IControlReceiver, IDroneLinkable, IFluidStandardTransceiver { +public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIProvider, INBTPacketReceiver, IControlReceiver, IDroneLinkable, IFluidStandardTransceiver, IFluidCopiable { public FluidTank tank; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java index 6fb76c124..342eb324d 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java @@ -1,5 +1,9 @@ package com.hbm.tileentity.network; +import com.hbm.blocks.network.FluidDuctBase; +import com.hbm.blocks.network.IBlockFluidDuct; +import com.hbm.extprop.HbmPlayerProps; +import com.hbm.handler.HbmKeybinds; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; @@ -8,6 +12,7 @@ import api.hbm.fluid.IPipeNet; import api.hbm.fluid.PipeNet; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.tileentity.IFluidCopiable; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; @@ -181,7 +186,7 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor, } @Override - public void pasteSettings(NBTTagCompound nbt, int index, World world, int x, int y, int z) { + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { int[] ids = nbt.getIntArray("fluidID"); if(ids.length > 0) { int id; @@ -189,7 +194,16 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor, id = ids[index]; else id = 0; - this.setType(Fluids.fromID(id)); + + FluidType fluid = Fluids.fromID(id); + + if(HbmPlayerProps.getData(player).getKeyPressed(HbmKeybinds.EnumKeybind.TOOL_CTRL)){ + IBlockFluidDuct pipe = (IBlockFluidDuct)world.getBlock(x, y, z); + pipe.changeTypeRecursively(world, x, y, z, getType(), fluid, 64); + } else { + this.setType(fluid); + } } + } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java index 0b6a4b8d7..a1edcc2bb 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java @@ -20,6 +20,7 @@ import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import api.hbm.fluid.IFluidStandardReceiver; +import com.hbm.tileentity.IFluidCopiable; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -31,7 +32,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFluidContainer, IFluidStandardReceiver { +public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFluidContainer, IFluidStandardReceiver, IFluidCopiable { public FluidTank tank; @@ -227,4 +228,9 @@ public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFl public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretFritz(player.inventory, this); } + + @Override + public FluidTank getTankToPaste() { + return tank; + } } From 8076c77448ca22090e5c58a864f0680340e7b6fc Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sun, 25 Aug 2024 18:10:34 -0400 Subject: [PATCH 08/18] Last copy tool lad for a while --- .../machine/TileEntityHeaterHeatex.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java index 73f01dbce..dde3a6fc4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java @@ -2,6 +2,7 @@ package com.hbm.tileentity.machine; import com.hbm.blocks.BlockDummyable; import com.hbm.interfaces.IControlReceiver; +import com.hbm.interfaces.ICopiable; import com.hbm.inventory.container.ContainerHeaterHeatex; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; @@ -9,6 +10,7 @@ import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.fluid.trait.FT_Coolable; import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.inventory.gui.GUIHeaterHeatex; +import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityMachineBase; @@ -27,7 +29,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityHeaterHeatex extends TileEntityMachineBase implements IHeatSource, INBTPacketReceiver, IFluidStandardTransceiver, IGUIProvider, IControlReceiver { +public class TileEntityHeaterHeatex extends TileEntityMachineBase implements IHeatSource, INBTPacketReceiver, IFluidStandardTransceiver, IGUIProvider, IControlReceiver, IFluidCopiable { public FluidTank[] tanks; public int amountToCool = 1; @@ -233,4 +235,23 @@ public class TileEntityHeaterHeatex extends TileEntityMachineBase implements IHe this.markChanged(); } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("toCool", amountToCool); + if(getFluidIDToCopy().length > 0) + nbt.setIntArray("fluidID", getFluidIDToCopy()); + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + int[] ids = nbt.getIntArray("fluidID"); + if(ids.length > 0) { + int id = ids[index]; + tanks[0].setTankType(Fluids.fromID(id)); + } + if(nbt.hasKey("toCool")) amountToCool = nbt.getInteger("toCool"); + } } From c135700d7e0a182b09c8c3af41e082b7c8e1250e Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Tue, 27 Aug 2024 15:34:07 -0400 Subject: [PATCH 09/18] forgot about the fucking router compat --- .../tileentity/IControlReceiverFilter.java | 7 ++- .../network/TileEntityCraneBase.java | 4 +- .../network/TileEntityCraneRouter.java | 58 +++++++++++++++++++ src/main/resources/assets/hbm/lang/en_US.lang | 1 + 4 files changed, 67 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index 844c001e2..be5279ca1 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -79,7 +79,7 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { NBTTagCompound slotNBT = items.getCompoundTagAt(count); byte slot = slotNBT.getByte("slot"); ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); - if (loadedStack != null) { + if (loadedStack != null && slot < getFilterSlots()[1]) { inv.setInventorySlotContents(slot + getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); nextMode(slot); tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); @@ -90,4 +90,9 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { } } + + @Override + default String[] infoForDisplay(World world, int x, int y, int z) { + return new String[] { "copytool.filter" }; + } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java index a13fb00fa..61a81339b 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -160,7 +160,7 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen NBTTagCompound slotNBT = items.getCompoundTagAt(count); byte slot = slotNBT.getByte("slot"); ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); - if (loadedStack != null) { + if (loadedStack != null && slot < filter.getFilterSlots()[1]) { inv.setInventorySlotContents(slot + filter.getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); filter.nextMode(slot); this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); @@ -175,6 +175,6 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen @Override public String[] infoForDisplay(World world, int x, int y, int z) { - return new String[]{"Filter", "Orientation"}; + return new String[]{"copytool.filter", "copytool.orientation"}; } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java index a12e59851..ff914eb34 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java @@ -12,8 +12,11 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -136,4 +139,59 @@ public class TileEntityCraneRouter extends TileEntityMachineBase implements IGUI setFilterContents(data); } } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + IInventory inv = (IInventory) this; + NBTTagCompound nbt = new NBTTagCompound(); + NBTTagList tags = new NBTTagList(); + + int count = 0; + for (int i = getFilterSlots()[0]; i < getFilterSlots()[1]; i++) { + NBTTagCompound slotNBT = new NBTTagCompound(); + if (inv.getStackInSlot(i) != null) { + slotNBT.setByte("slot", (byte) count); + inv.getStackInSlot(i).writeToNBT(slotNBT); + tags.appendTag(slotNBT); + } + count++; + } + + nbt.setTag("items", tags); + nbt.setIntArray("modes", modes); + + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + + NBTTagList items = nbt.getTagList("items", 10); + int listSize = items.tagCount(); + + if(listSize > 0 && nbt.hasKey("modes")) { + for (int i = 0; i < listSize; i++) { + NBTTagCompound slotNBT = items.getCompoundTagAt(i); + byte slot = slotNBT.getByte("slot"); + ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); + + if (loadedStack != null && slot > index * 5 && slot < Math.min(index * 5 + 5, 30)) { + this.setInventorySlotContents(slot, ItemStack.loadItemStackFromNBT(slotNBT)); + nextMode(slot); + this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + } + } + } else { + IControlReceiverFilter.super.pasteSettings(nbt, index, world, player, x, y, z); + } + } + + @Override + public String[] infoForDisplay(World world, int x, int y, int z) { + String[] options = new String[patterns.length]; + for (int i = 0; i < options.length; i++) { + options[i] = "copytool.pattern" + i; + } + return options; + } } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index ffab06692..a9ac23387 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -4273,6 +4273,7 @@ item.seg_20.name=Size 20 Connector item.serum.name=Serum item.servo_set.name=Servo Set item.servo_set_desh.name=Desh Servo Set +item.settings_tool.name=Settings Tool item.shackles.name=Shackles item.shellntm.name=%s Shell item.shimmer_axe.name=Shimmer Axe From ffcce8d9bbc5985e8ef13dcbc803371b47b863bf Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Thu, 29 Aug 2024 20:12:58 -0400 Subject: [PATCH 10/18] finishing touches --- .../java/com/hbm/crafting/ToolRecipes.java | 1 + .../com/hbm/items/tool/ItemSettingsTool.java | 62 ++++++++++++------- .../tileentity/IControlReceiverFilter.java | 7 ++- .../com/hbm/tileentity/IFluidCopiable.java | 2 +- .../machine/TileEntityFoundryOutlet.java | 8 +-- .../network/TileEntityCraneBase.java | 4 +- .../network/TileEntityCraneRouter.java | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 11 ++++ 8 files changed, 65 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/hbm/crafting/ToolRecipes.java b/src/main/java/com/hbm/crafting/ToolRecipes.java index d190636e0..113b4c80a 100644 --- a/src/main/java/com/hbm/crafting/ToolRecipes.java +++ b/src/main/java/com/hbm/crafting/ToolRecipes.java @@ -137,6 +137,7 @@ public class ToolRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.bismuth_tool, 1), new Object[] { "TBT", "SRS", "SCS", 'T', TA.nugget(), 'B', ModItems.nugget_bismuth, 'S', ANY_RESISTANTALLOY.ingot(), 'R', ModItems.reacher, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP) }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.sat_designator, 1), new Object[] { "RRD", "PIC", " P", 'P', GOLD.plate(), 'R', Items.redstone, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'D', ModItems.sat_chip, 'I', GOLD.ingot() }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.sat_relay), new Object[] { ModItems.sat_chip, ModItems.ducttape, ModItems.radar_linker }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.settings_tool), new Object[] { " P ", "PCP", "III", 'P', IRON.plate(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG), 'I', ModItems.plate_polymer }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.pipette, 1), new Object[] { " L", " G ", "G ", 'L', ANY_RUBBER.ingot(), 'G', KEY_CLEARGLASS}); CraftingManager.addRecipeAuto(new ItemStack(ModItems.pipette_boron, 1), new Object[] { " P", " B ", "B ", 'P', RUBBER.ingot(), 'B', ModBlocks.glass_boron}); diff --git a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java index f0e1541cb..e7bc4bb85 100644 --- a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java +++ b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java @@ -17,6 +17,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; import net.minecraft.world.World; import javax.annotation.Nullable; @@ -48,9 +49,12 @@ public class ItemSettingsTool extends Item { if(displayInfo.tagCount() > 0){ for (int j = 0; j < displayInfo.tagCount(); j++) { NBTTagCompound nbt = displayInfo.getCompoundTagAt(j); - String info = nbt.getString("info"); EnumChatFormatting format = stack.stackTagCompound.getInteger("copyIndex") == j ? EnumChatFormatting.AQUA : EnumChatFormatting.YELLOW; - PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(format + info, 897 + j, 4000 ), (EntityPlayerMP) entity); + PacketDispatcher.wrapper.sendTo( + new PlayerInformPacket(ChatBuilder.startTranslation(nbt.getString("info")) + .color(format) + .flush() + , 897 + j, 4000 ), (EntityPlayerMP) entity); } } } @@ -61,12 +65,16 @@ public class ItemSettingsTool extends Item { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { list.add("Can copy the settings (filters, fluid ID, etc) of machines"); list.add("Shift right-click to copy, right click to paste"); - if(stack.stackTagCompound != null) { + /*if(stack.stackTagCompound != null) { NBTTagCompound nbt = stack.stackTagCompound; - list.add(EnumChatFormatting.YELLOW + "Current machine:" - + (nbt.hasKey("tileName") ? EnumChatFormatting.BLUE + " " + nbt.getString("tileName") : EnumChatFormatting.RED + " None ")); - } + if (nbt.hasKey("tileName")){ + list.add(ChatBuilder.startTranslation(nbt.getString("tileName")).color(EnumChatFormatting.BLUE).flush().getFormattedText()); + } else { + list.add(EnumChatFormatting.RED + " None "); + } + }*/ + //the translation wont fucking work I swear to allah } @Override public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fX, float fY, float fZ) { @@ -76,25 +84,33 @@ public class ItemSettingsTool extends Item { if(player.isSneaking()) { stack.stackTagCompound = copiable.getSettings(world, x, y, z); - stack.stackTagCompound.setString("tileName", copiable.getSettingsSourceID(schrodinger)); - stack.stackTagCompound.setInteger("copyIndex", 0); - stack.stackTagCompound.setInteger("inputDelay", 0); - String[] info = copiable.infoForDisplay(world, x, y, z); - if(info != null) { - NBTTagList displayInfo = new NBTTagList(); - for (String str : info) { - NBTTagCompound nbt = new NBTTagCompound(); - nbt.setString("info", str); - displayInfo.appendTag(nbt); - } - stack.stackTagCompound.setTag("displayInfo", displayInfo); - } + if(stack.stackTagCompound != null) { - if(world.isRemote) { + stack.stackTagCompound.setString("tileName", copiable.getSettingsSourceID(schrodinger)); + stack.stackTagCompound.setInteger("copyIndex", 0); + stack.stackTagCompound.setInteger("inputDelay", 0); + String[] info = copiable.infoForDisplay(world, x, y, z); + if (info != null) { + NBTTagList displayInfo = new NBTTagList(); + for (String str : info) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("info", str); + displayInfo.appendTag(nbt); + } + stack.stackTagCompound.setTag("displayInfo", displayInfo); + } + + if (world.isRemote) { + player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Copied settings of " + copiable.getSettingsSourceDisplay(schrodinger)).color(EnumChatFormatting.AQUA).flush()); + } + } else { player.addChatMessage(ChatBuilder.start("[").color(EnumChatFormatting.DARK_AQUA) - .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) - .next("] ").color(EnumChatFormatting.DARK_AQUA) - .next("Copied settings of " + copiable.getSettingsSourceDisplay(schrodinger)).color(EnumChatFormatting.AQUA).flush()); + .nextTranslation(this.getUnlocalizedName() + ".name").color(EnumChatFormatting.DARK_AQUA) + .next("] ").color(EnumChatFormatting.DARK_AQUA) + .next("Copy failed, machine has no settings tool support: " + copiable.getSettingsSourceDisplay(schrodinger)).color(EnumChatFormatting.RED).flush()); } } else if(stack.hasTagCompound()) { diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index be5279ca1..c48e053fc 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -74,12 +74,16 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { int listSize = items.tagCount(); if(listSize > 0) { int count = 0; + for (int i = getFilterSlots()[0]; i < getFilterSlots()[1]; i++) { if (i < listSize) { NBTTagCompound slotNBT = items.getCompoundTagAt(count); byte slot = slotNBT.getByte("slot"); ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); - if (loadedStack != null && slot < getFilterSlots()[1]) { + //whether the filter info came from a router + boolean router = nbt.hasKey("modes") && slot > index * 5 && slot < index * + 5; + + if (loadedStack != null && index < listSize && (slot < getFilterSlots()[1] || router)) { inv.setInventorySlotContents(slot + getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); nextMode(slot); tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); @@ -87,7 +91,6 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { } count++; } - } } diff --git a/src/main/java/com/hbm/tileentity/IFluidCopiable.java b/src/main/java/com/hbm/tileentity/IFluidCopiable.java index 15cb4c0c6..68c61fa0a 100644 --- a/src/main/java/com/hbm/tileentity/IFluidCopiable.java +++ b/src/main/java/com/hbm/tileentity/IFluidCopiable.java @@ -50,7 +50,7 @@ public interface IFluidCopiable extends ICopiable { default void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { if(getTankToPaste() != null) { int[] ids = nbt.getIntArray("fluidID"); - if(ids.length > 0) { + if(ids.length > 0 && index < ids.length) { int id = ids[index]; getTankToPaste().setTankType(Fluids.fromID(id)); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java index a5f0d6086..15202f6de 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java @@ -19,7 +19,7 @@ import net.minecraftforge.common.util.ForgeDirection; import java.util.ArrayList; -public class TileEntityFoundryOutlet extends TileEntityFoundryBase implements ICopiable { +public class TileEntityFoundryOutlet extends TileEntityFoundryBase{ public NTMMaterial filter = null; public NTMMaterial lastFilter = null; @@ -146,7 +146,7 @@ public class TileEntityFoundryOutlet extends TileEntityFoundryBase implements IC if(nbt.hasKey("invertFilter")) this.invertFilter = nbt.getBoolean("invertFilter"); if(nbt.hasKey("matFilter")) { int[] ids = nbt.getIntArray("matFilter"); - if(ids.length > 0) + if(ids.length > 0 && index < ids.length) this.filter = Mats.matById.get(ids[index]); } @@ -155,8 +155,8 @@ public class TileEntityFoundryOutlet extends TileEntityFoundryBase implements IC @Override public String[] infoForDisplay(World world, int x, int y, int z) { ArrayList info = new ArrayList<>(); - info.add("copyTool.invertRedstone"); - info.add("copyTool.invertFilter"); + info.add("copytool.invertRedstone"); + info.add("copytool.invertFilter"); if (filter != null) info.add(filter.getUnlocalizedName()); return info.toArray(new String[0]); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java index 61a81339b..ef464547d 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -160,7 +160,9 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase implemen NBTTagCompound slotNBT = items.getCompoundTagAt(count); byte slot = slotNBT.getByte("slot"); ItemStack loadedStack = ItemStack.loadItemStackFromNBT(slotNBT); - if (loadedStack != null && slot < filter.getFilterSlots()[1]) { + //whether the filter info came from a router + boolean router = nbt.hasKey("modes") && slot > index * 5 && slot < index * + 5; + if (loadedStack != null && (slot < filter.getFilterSlots()[1] || router)) { inv.setInventorySlotContents(slot + filter.getFilterSlots()[0], ItemStack.loadItemStackFromNBT(slotNBT)); filter.nextMode(slot); this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java index ff914eb34..c1d717099 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java @@ -181,6 +181,7 @@ public class TileEntityCraneRouter extends TileEntityMachineBase implements IGUI this.getWorldObj().markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); } } + modes = nbt.getIntArray("modes"); } else { IControlReceiverFilter.super.pasteSettings(nbt, index, world, player, x, y, z); } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index a9ac23387..d5e64ebc0 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -858,6 +858,17 @@ container.wasteDrum=Spent Fuel Pool Drum container.watzPowerplant=Watz Power Plant container.zirnox=ZIRNOX Nuclear Reactor +copytool.filter=Filter +copytool.invertRedstone=Redstone Inverted +copytool.invertFilter=Filter Inverted +copytool.orientation=Orientation +copytool.pattern0=Red Side +copytool.pattern1=Orange Side +copytool.pattern2=Yellow Side +copytool.pattern3=Green Side +copytool.pattern4=Blue Side +copytool.pattern5=Purple Side + crucible.aa=Advanced Alloy Production crucible.abronze=Arsenic Bronze Production crucible.bbronze=Bismuth Bronze Production From 0303477a14c4f4b25eb15fd1c86c87ed5d6150a2 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Fri, 30 Aug 2024 18:02:45 -0400 Subject: [PATCH 11/18] peel off your skim --- src/main/java/com/hbm/items/tool/ItemSettingsTool.java | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java index e7bc4bb85..3cd5c9d5f 100644 --- a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java +++ b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java @@ -65,6 +65,7 @@ public class ItemSettingsTool extends Item { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { list.add("Can copy the settings (filters, fluid ID, etc) of machines"); list.add("Shift right-click to copy, right click to paste"); + list.add("Ctrl click on pipes to paste settings to multiple pipes"); /*if(stack.stackTagCompound != null) { NBTTagCompound nbt = stack.stackTagCompound; if (nbt.hasKey("tileName")){ diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 516e5f57a..92411ce93 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1364,6 +1364,8 @@ hbm.key.dash=Dash (Unbind from Crouch in config) hbm.key.toggleBack=Toggle Backpack hbm.key.toggleHUD=Toggle HUD hbm.key.reload=Reload +hbm.key.copyToolAlt=Copy Tool: Switch Paste +hbm.key.copyToolCtrl=Copy Tool: Paste to Pipes hbmfluid.amat=Antimatter hbmfluid.aromatics=Aromatic Hydrocarbons From 2a81e2c5a75282154ae5366e2c3f51109d9713e3 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 13 Sep 2024 13:17:51 +0200 Subject: [PATCH 12/18] cleanup --- changelog | 7 + .../hbm/explosion/ExplosionNukeGeneric.java | 1 + .../java/com/hbm/interfaces/ICopiable.java | 4 +- .../hbm/inventory/recipes/SILEXRecipes.java | 767 +++++++++--------- .../com/hbm/items/tool/ItemSettingsTool.java | 12 +- .../com/hbm/tileentity/IFluidCopiable.java | 93 +-- .../com/hbm/tileentity/IMetalCopiable.java | 38 +- src/main/java/com/hbm/util/Either.java | 1 + 8 files changed, 464 insertions(+), 459 deletions(-) diff --git a/changelog b/changelog index 198a7f873..4fa16ebca 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,12 @@ +## Added +* Settings tool + * Allows settings of blocks and machines to be copied + * Uses settings such as conveyor item filters, fluid types and liquid metal types + ## Changed * Most loot piles now have configurable loot pools +* The ntmsatellites command now has the "list" parameter which shows all active satellites in orbit +* Burning in the nether in 528 mode now has a config option, and it no longer affects NPCs ## Fixed * Fixed some things not using variable max charge for armor mods, like static pads and DNT nanosuit tooltips diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java b/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java index 30498fe20..ab9694eb9 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeGeneric.java @@ -34,6 +34,7 @@ import com.hbm.util.ArmorUtil; import api.hbm.energymk2.IEnergyHandlerMK2; import cofh.api.energy.IEnergyProvider; +@Spaghetti("this sucks ass") public class ExplosionNukeGeneric { private final static Random random = new Random(); diff --git a/src/main/java/com/hbm/interfaces/ICopiable.java b/src/main/java/com/hbm/interfaces/ICopiable.java index 1fa9ba276..e0b8c94f5 100644 --- a/src/main/java/com/hbm/interfaces/ICopiable.java +++ b/src/main/java/com/hbm/interfaces/ICopiable.java @@ -9,9 +9,9 @@ import net.minecraft.world.World; public interface ICopiable { - NBTTagCompound getSettings(World world, int x, int y, int z); + NBTTagCompound getSettings(World world, int x, int y, int z); - void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z); + void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z); default String getSettingsSourceID(Either self) { Block block = self.isLeft() ? self.left().getBlockType() : self.right(); diff --git a/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java b/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java index 8bdecce61..5858ff359 100644 --- a/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java @@ -33,615 +33,614 @@ public class SILEXRecipes { itemTranslation.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.UF6.getID()), new ComparableStack(ModItems.ingot_uranium)); dictTranslation.put(U.dust(), U.ingot()); recipes.put(U.ingot(), new SILEXRecipe(900, 100, EnumWavelengths.VISIBLE) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u235), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 11)) + .addOut(new ItemStack(ModItems.nugget_u235), 1) + .addOut(new ItemStack(ModItems.nugget_u238), 11) ); recipes.put(new ComparableStack(ModItems.ingot_pu_mix), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu239), 6)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu240), 3)) + .addOut(new ItemStack(ModItems.nugget_pu239), 6) + .addOut(new ItemStack(ModItems.nugget_pu240), 3) ); recipes.put(new ComparableStack(ModItems.ingot_am_mix), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_am241), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_am242), 6)) + .addOut(new ItemStack(ModItems.nugget_am241), 3) + .addOut(new ItemStack(ModItems.nugget_am242), 6) ); itemTranslation.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.PUF6.getID()), new ComparableStack(ModItems.ingot_plutonium)); dictTranslation.put(PU.dust(), PU.ingot()); recipes.put(PU.ingot(), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu238), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu239), 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu240), 2)) + .addOut(new ItemStack(ModItems.nugget_pu238), 3) + .addOut(new ItemStack(ModItems.nugget_pu239), 4) + .addOut(new ItemStack(ModItems.nugget_pu240), 2) ); recipes.put(new ComparableStack(ModItems.ingot_schraranium), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_schrabidium), 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium), 2)) + .addOut(new ItemStack(ModItems.nugget_schrabidium), 4) + .addOut(new ItemStack(ModItems.nugget_uranium), 3) + .addOut(new ItemStack(ModItems.nugget_neptunium), 2) ); itemTranslation.put(new ComparableStack(ModItems.powder_australium), new ComparableStack(ModItems.ingot_australium)); recipes.put(new ComparableStack(ModItems.ingot_australium), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_lesser), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_greater), 1)) + .addOut(new ItemStack(ModItems.nugget_australium_lesser), 5) + .addOut(new ItemStack(ModItems.nugget_australium_greater), 1) ); recipes.put(new ComparableStack(ModItems.crystal_schraranium), new SILEXRecipe(900, 100, 3) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_schrabidium), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium), 2)) + .addOut(new ItemStack(ModItems.nugget_schrabidium), 5) + .addOut(new ItemStack(ModItems.nugget_uranium), 2) + .addOut(new ItemStack(ModItems.nugget_neptunium), 2) ); recipes.put(new ComparableStack(ModBlocks.ore_tikite), new SILEXRecipe(900, 100, EnumWavelengths.UV) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_plutonium), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cobalt), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_niobium), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_nitan_mix), 2)) + .addOut(new ItemStack(ModItems.powder_plutonium), 2) + .addOut(new ItemStack(ModItems.powder_cobalt), 3) + .addOut(new ItemStack(ModItems.powder_niobium), 3) + .addOut(new ItemStack(ModItems.powder_nitan_mix), 2) ); recipes.put(new ComparableStack(ModItems.crystal_trixite), new SILEXRecipe(1200, 100, EnumWavelengths.UV) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_plutonium), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cobalt), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_niobium), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_nitan_mix), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_spark_mix), 1)) + .addOut(new ItemStack(ModItems.powder_plutonium), 2) + .addOut(new ItemStack(ModItems.powder_cobalt), 3) + .addOut(new ItemStack(ModItems.powder_niobium), 3) + .addOut(new ItemStack(ModItems.powder_nitan_mix), 1) + .addOut(new ItemStack(ModItems.powder_spark_mix), 1) ); itemTranslation.put(new ComparableStack(ModItems.powder_lapis), new ComparableStack(Items.dye, 1, 4)); recipes.put(new ComparableStack(Items.dye, 1, 4), new SILEXRecipe(100, 100 ,1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.sulfur), 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_aluminium), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cobalt), 3)) + .addOut(new ItemStack(ModItems.sulfur), 4) + .addOut(new ItemStack(ModItems.powder_aluminium), 3) + .addOut(new ItemStack(ModItems.powder_cobalt), 3) ); recipes.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.DEATH.getID()), new SILEXRecipe(1000, 1000, 4) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_impure_osmiridium), 1)) + .addOut(new ItemStack(ModItems.powder_impure_osmiridium), 1) ); recipes.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.VITRIOL.getID()), new SILEXRecipe(1000, 1000, EnumWavelengths.IR) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_bromine), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_iodine), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_iron), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.sulfur), 15)) + .addOut(new ItemStack(ModItems.powder_bromine), 5) + .addOut(new ItemStack(ModItems.powder_iodine), 5) + .addOut(new ItemStack(ModItems.powder_iron), 5) + .addOut(new ItemStack(ModItems.sulfur), 15) ); for(int i = 0; i < 5; i++) { // UEU // recipes.put(new ComparableStack(ModItems.rbmk_pellet_ueu, 1, i), new SILEXRecipe(600, 100, 1) //NU and MEU will breed more plutonium due to their higher concentrations of U-238 - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium), 86 - i * 11)) //NU is unenriched to the point where it'll always be lower burnup; so more Pu239 for longer - .addOut(new WeightedRandomObject(i < 2 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 10 + i * 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 2 + 5 * i)) ); + .addOut(new ItemStack(ModItems.nugget_uranium), 86 - i * 11) //NU is unenriched to the point where it'll always be lower burnup; so more Pu239 for longer + .addOut(i < 2 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 10 + i * 3) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 2 + 5 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_ueu, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium), 86 - i * 11)) - .addOut(new WeightedRandomObject(i < 2 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 10 + i * 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 1 + 5 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_uranium), 86 - i * 11) + .addOut(i < 2 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 10 + i * 3) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 1 + 5 * i) ); // MEU // recipes.put(new ComparableStack(ModItems.rbmk_pellet_meu, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium_fuel), 84 - i * 16)) - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 7 * i)) ); + .addOut(new ItemStack(ModItems.nugget_uranium_fuel), 84 - i * 16) + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 7 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_meu, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium_fuel), 83 - i * 16)) - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 7 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_uranium_fuel), 83 - i * 16) + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 7 * i) ); // HEU233 // recipes.put(new ComparableStack(ModItems.rbmk_pellet_heu233, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u233), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM233.ordinal()), 4 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM233.ordinal()), 6 + 12 * i)) ); + .addOut(new ItemStack(ModItems.nugget_u233), 90 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM233.ordinal()), 4 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM233.ordinal()), 6 + 12 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_heu233, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u233), 89 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM233.ordinal()), 4 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM233.ordinal()), 6 + 12 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_u233), 89 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM233.ordinal()), 4 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM233.ordinal()), 6 + 12 * i) ); // HEU235 // recipes.put(new ComparableStack(ModItems.rbmk_pellet_heu235, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u235), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 12 * i)) ); + .addOut(new ItemStack(ModItems.nugget_u235), 90 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 12 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_heu235, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u235), 89 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 12 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_u235), 89 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 4 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 6 + 12 * i) ); // TH232 // recipes.put(new ComparableStack(ModItems.rbmk_pellet_thmeu, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_thorium_fuel), 84 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u233), 6 + i * 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.THORIUM.ordinal()), 10 + 16 * i)) ); + .addOut(new ItemStack(ModItems.nugget_thorium_fuel), 84 - i * 20) + .addOut(new ItemStack(ModItems.nugget_u233), 6 + i * 4) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.THORIUM.ordinal()), 10 + 16 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_thmeu, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_thorium_fuel), 83 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u233), 6 + i * 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.THORIUM.ordinal()), 10 + 16 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_thorium_fuel), 83 - i * 20) + .addOut(new ItemStack(ModItems.nugget_u233), 6 + i * 4) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.THORIUM.ordinal()), 10 + 16 * i) ); // LEP // recipes.put(new ComparableStack(ModItems.rbmk_pellet_lep, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_plutonium_fuel), 84 - i * 14)) - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 7 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 3 + 4 * i)) ); + .addOut(new ItemStack(ModItems.nugget_plutonium_fuel), 84 - i * 14) + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 7 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 3 + 4 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_lep, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_plutonium_fuel), 83 - i * 14)) - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 7 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 3 + 4 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_plutonium_fuel), 83 - i * 14) + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 7 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 3 + 4 * i) ); // MEP // recipes.put(new ComparableStack(ModItems.rbmk_pellet_mep, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu_mix), 85 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 10 + 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 5 + 5 * i)) ); + .addOut(new ItemStack(ModItems.nugget_pu_mix), 85 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 10 + 10 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 5 + 5 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_mep, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu_mix), 84 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 10 + 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 5 + 5 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_pu_mix), 84 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 10 + 10 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 5 + 5 * i) ); // HEP239 // recipes.put(new ComparableStack(ModItems.rbmk_pellet_hep239, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu239), 85 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 15 + 20 * i)) ); + .addOut(new ItemStack(ModItems.nugget_pu239), 85 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 15 + 20 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_hep239, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu239), 84 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 15 + 20 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_pu239), 84 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 15 + 20 * i) ); // HEP241 // recipes.put(new ComparableStack(ModItems.rbmk_pellet_hep241, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 85 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM241.ordinal()), 15 + 20 * i)) ); + .addOut(new ItemStack(ModItems.nugget_pu241), 85 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM241.ordinal()), 15 + 20 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_hep241, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 84 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM241.ordinal()), 15 + 20 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_pu241), 84 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM241.ordinal()), 15 + 20 * i) ); // MEN // recipes.put(new ComparableStack(ModItems.rbmk_pellet_men, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium_fuel), 84 - i * 14)) - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 7 * i)) ); + .addOut(new ItemStack(ModItems.nugget_neptunium_fuel), 84 - i * 14) + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 7 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_men, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium_fuel), 83 - i * 14)) - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 7 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_neptunium_fuel), 83 - i * 14) + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 2) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 7 * i) ); // HEN // recipes.put(new ComparableStack(ModItems.rbmk_pellet_hen, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 12 * i)) ); + .addOut(new ItemStack(ModItems.nugget_neptunium), 90 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 12 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_hen, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium), 89 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 8 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 12 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_neptunium), 89 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 4 + 8 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 6 + 12 * i) ); // MOX // recipes.put(new ComparableStack(ModItems.rbmk_pellet_mox, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_mox_fuel), 84 - i * 20)) - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 3 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 3 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 2 + 3 * i)) ); + .addOut(new ItemStack(ModItems.nugget_mox_fuel), 84 - i * 20) + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 3 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 3 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 2 + 3 * i) ); //TODO: Readd xenon processing if/when the NEI handler can display more than 6 outputs properly recipes.put(new ComparableStack(ModItems.rbmk_pellet_mox, 1, i + 5), new SILEXRecipe(600, 100, 1) //Plutonium processing isn't possible w/o fucking up the NEI handler or removing xenon - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_mox_fuel), 84 - i * 20)) //To prevent people from taking advantage of differing waste types, conform to the latter - .addOut(new WeightedRandomObject(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 3 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 3 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 2 + 3 * i)) ); + .addOut(new ItemStack(ModItems.nugget_mox_fuel), 84 - i * 20) //To prevent people from taking advantage of differing waste types, conform to the latter + .addOut(i < 1 ? new ItemStack(ModItems.nugget_pu239) : new ItemStack(ModItems.nugget_pu_mix), 6 + i * 4) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), 2 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), 3 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), 3 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), 2 + 3 * i) ); // LEAUS // recipes.put(new ComparableStack(ModItems.rbmk_pellet_leaus, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_lesser), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 6 + 12 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pb209), 4 + 8 * i)) ); + .addOut(new ItemStack(ModItems.nugget_australium_lesser), 90 - i * 20) + .addOut(new ItemStack(ModItems.nugget_lead), 6 + 12 * i) + .addOut(new ItemStack(ModItems.nugget_pb209), 4 + 8 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_leaus, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_lesser), 89 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 6 + 12 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pb209), 4 + 8 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_australium_lesser), 89 - i * 20) + .addOut(new ItemStack(ModItems.nugget_lead), 6 + 12 * i) + .addOut(new ItemStack(ModItems.nugget_pb209), 4 + 8 * i) ); // HEAUS // recipes.put(new ComparableStack(ModItems.rbmk_pellet_heaus, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_greater), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_au198), 5 + 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(Items.gold_nugget), 3 + 6 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pb209), 2 + 4 * i)) ); + .addOut(new ItemStack(ModItems.nugget_australium_greater), 90 - i * 20) + .addOut(new ItemStack(ModItems.nugget_au198), 5 + 10 * i) + .addOut(new ItemStack(Items.gold_nugget), 3 + 6 * i) + .addOut(new ItemStack(ModItems.nugget_pb209), 2 + 4 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_heaus, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_greater), 89 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_au198), 5 + 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(Items.gold_nugget), 3 + 6 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pb209), 2 + 4 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_australium_greater), 89 - i * 20) + .addOut(new ItemStack(ModItems.nugget_au198), 5 + 10 * i) + .addOut(new ItemStack(Items.gold_nugget), 3 + 6 * i) + .addOut(new ItemStack(ModItems.nugget_pb209), 2 + 4 * i) ); // LES // recipes.put(new ComparableStack(ModItems.rbmk_pellet_les, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_les), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 2 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 4 + 8 * i)) ); + .addOut(new ItemStack(ModItems.nugget_les), 90 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 2 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 4 + 8 * i) ); //TODO: Readd xenon processing if/when the NEI handler can display more than 6 outputs properly recipes.put(new ComparableStack(ModItems.rbmk_pellet_les, 1, i + 5), new SILEXRecipe(600, 100, 2) //I'd rather not fuck up the NEI handler, so six items it is - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_les), 90 - i * 20)) //Just bullshit something about "not enough np237 for extractable amounts of xe135" - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 2 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 4 + 8 * i)) ); + .addOut(new ItemStack(ModItems.nugget_les), 90 - i * 20) //Just bullshit something about "not enough np237 for extractable amounts of xe135" + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 2 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 1 + 2 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 4 + 8 * i) ); // MES // recipes.put(new ComparableStack(ModItems.rbmk_pellet_mes, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_schrabidium_fuel), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 4 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 2 + 4 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 4 + 6 * i)) ); + .addOut(new ItemStack(ModItems.nugget_schrabidium_fuel), 90 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 4 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 2 + 4 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 4 + 6 * i) ); //TODO: Readd xenon processing if/when the NEI handler can display more than 6 outputs properly recipes.put(new ComparableStack(ModItems.rbmk_pellet_mes, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_schrabidium_fuel), 90 - i * 20)) //ditto - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 4 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 2 + 4 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 4 + 6 * i)) ); + .addOut(new ItemStack(ModItems.nugget_schrabidium_fuel), 90 - i * 20) //ditto + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 2 + 4 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 1 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 2 + 4 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 4 + 6 * i) ); // HES // recipes.put(new ComparableStack(ModItems.rbmk_pellet_hes, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_hes), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 2 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 2 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 4 + 6 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 2 + 4 * i)) ); + .addOut(new ItemStack(ModItems.nugget_hes), 90 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 2 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 2 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 4 + 6 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 2 + 4 * i) ); //TODO: Readd xenon processing if/when the NEI handler can display more than 6 outputs properly recipes.put(new ComparableStack(ModItems.rbmk_pellet_hes, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_hes), 90 - i * 20)) //ditto - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 2 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 2 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 4 + 6 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 2 + 4 * i)) ); + .addOut(new ItemStack(ModItems.nugget_hes), 90 - i * 20) //ditto + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), 1 + 2 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), 1 + 3 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_long_tiny, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), 2 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_short_tiny, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), 4 + 6 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 2 + 4 * i) ); // BALEFIRE // recipes.put(new ComparableStack(ModItems.rbmk_pellet_balefire, 1, i), new SILEXRecipe(400, 100, 3) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_balefire), 90 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 10 + 20 * i)) ); + .addOut(new ItemStack(ModItems.powder_balefire), 90 - i * 20) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 10 + 20 * i) ); // FLASHGOLD // recipes.put(new ComparableStack(ModItems.rbmk_pellet_balefire_gold, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_au198), 90 - 20 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_balefire), 10 + 20 * i)) ); + .addOut(new ItemStack(ModItems.nugget_au198), 90 - 20 * i) + .addOut(new ItemStack(ModItems.powder_balefire), 10 + 20 * i) ); // FLASHLEAD // recipes.put(new ComparableStack(ModItems.rbmk_pellet_flashlead, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_au198), 44 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pb209), 44 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 1 + 6 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_mercury), 1 + 6 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_gh336), 10 + 8 * i)) ); //Reimumunch + .addOut(new ItemStack(ModItems.nugget_au198), 44 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_pb209), 44 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_bismuth), 1 + 6 * i) + .addOut(new ItemStack(ModItems.nugget_mercury), 1 + 6 * i) + .addOut(new ItemStack(ModItems.nugget_gh336), 10 + 8 * i) ); //Reimumunch // POBE // recipes.put(new ComparableStack(ModItems.rbmk_pellet_po210be, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_polonium), 45 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 5 + 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i)) ); + .addOut(new ItemStack(ModItems.nugget_polonium), 45 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_lead), 5 + 10 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i) ); // PUBE // recipes.put(new ComparableStack(ModItems.rbmk_pellet_pu238be, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu238), 45 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 3 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 2 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i)) ); + .addOut(new ItemStack(ModItems.nugget_pu238), 45 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_lead), 3 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 2 + 5 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_pu238be, 1, i + 5), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu238), 44 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 3 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 2 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 1) + .addOut(new ItemStack(ModItems.nugget_pu238), 44 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_lead), 3 + 5 * i) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 2 + 5 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i) ); // RABE // recipes.put(new ComparableStack(ModItems.rbmk_pellet_ra226be, 1, i), new SILEXRecipe(600, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_ra226), 45 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 3 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_polonium), 2 + 5 * i)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i)) ); + .addOut(new ItemStack(ModItems.nugget_ra226), 45 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_beryllium), 45 - 10 * i) + .addOut(new ItemStack(ModItems.nugget_lead), 3 + 5 * i) + .addOut(new ItemStack(ModItems.nugget_polonium), 2 + 5 * i) + .addOut(new ItemStack(ModItems.powder_coal_tiny), 5 + 10 * i) ); // DRX // recipes.put(new ComparableStack(ModItems.rbmk_pellet_drx, 1, i), new SILEXRecipe(600, 100, 4) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) ); + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_drx, 1, i + 5), new SILEXRecipe(600, 100, 4) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.undefined), 1)) ); + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) + .addOut(new ItemStack(ModItems.undefined), 1) ); // ZFB BI // recipes.put(new ComparableStack(ModItems.rbmk_pellet_zfb_bismuth, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 50 + i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 150)) ); + .addOut(new ItemStack(ModItems.nugget_uranium), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_pu241), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_bismuth), 50 + i * 20) + .addOut(new ItemStack(ModItems.nugget_zirconium), 150) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_zfb_bismuth, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_uranium), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 50 + i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 147)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 3) + .addOut(new ItemStack(ModItems.nugget_uranium), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_pu241), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_bismuth), 50 + i * 20) + .addOut(new ItemStack(ModItems.nugget_zirconium), 147) ); // ZFB PU-241 // recipes.put(new ComparableStack(ModItems.rbmk_pellet_zfb_pu241, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u235), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu240), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 50 + i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 150)) ); + .addOut(new ItemStack(ModItems.nugget_u235), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_pu240), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_pu241), 50 + i * 20) + .addOut(new ItemStack(ModItems.nugget_zirconium), 150) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_zfb_pu241, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u235), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu240), 50 - i * 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 50 + i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 147)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 3) + .addOut(new ItemStack(ModItems.nugget_u235), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_pu240), 50 - i * 10) + .addOut(new ItemStack(ModItems.nugget_pu241), 50 + i * 20) + .addOut(new ItemStack(ModItems.nugget_zirconium), 147) ); // ZFB RG-AM // recipes.put(new ComparableStack(ModItems.rbmk_pellet_zfb_am_mix, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 100 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_am_mix), 50 + i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 150)) ); + .addOut(new ItemStack(ModItems.nugget_pu241), 100 - i * 20) + .addOut(new ItemStack(ModItems.nugget_am_mix), 50 + i * 20) + .addOut(new ItemStack(ModItems.nugget_zirconium), 150) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_zfb_am_mix, 1, i + 5), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 100 - i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_am_mix), 50 + i * 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 147)) ); + .addOut(new ItemStack(ModItems.powder_xe135_tiny), 3) + .addOut(new ItemStack(ModItems.nugget_pu241), 100 - i * 20) + .addOut(new ItemStack(ModItems.nugget_am_mix), 50 + i * 20) + .addOut(new ItemStack(ModItems.nugget_zirconium), 147) ); } recipes.put(new ComparableStack(ModItems.nuclear_waste_long, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu239), 45)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu240), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_technetium), 15)) + .addOut(new ItemStack(ModItems.nugget_neptunium), 20) + .addOut(new ItemStack(ModItems.nugget_pu239), 45) + .addOut(new ItemStack(ModItems.nugget_pu240), 20) + .addOut(new ItemStack(ModItems.nugget_technetium), 15) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long_depleted, 1, ItemWasteLong.WasteClass.URANIUM235.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 65)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 15)) + .addOut(new ItemStack(ModItems.nugget_lead), 65) + .addOut(new ItemStack(ModItems.nugget_bismuth), 20) + .addOut(new ItemStack(ModItems.dust_tiny), 15) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu238), 12)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_sr90_tiny), 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 12)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 56)) + .addOut(new ItemStack(ModItems.nugget_pu238), 12) + .addOut(new ItemStack(ModItems.powder_sr90_tiny), 10) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 10) + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 12) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 56) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short_depleted, 1, ItemWasteShort.WasteClass.URANIUM235.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 32)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 22)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 16)) + .addOut(new ItemStack(ModItems.nugget_zirconium), 10) + .addOut(new ItemStack(ModItems.dust_tiny), 32) + .addOut(new ItemStack(ModItems.nugget_lead), 22) + .addOut(new ItemStack(ModItems.nugget_u238), 5) + .addOut(new ItemStack(ModItems.nugget_bismuth), 15) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 16) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long, 1, ItemWasteLong.WasteClass.URANIUM233.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u235), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium), 25)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu239), 45)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_technetium), 15)) + .addOut(new ItemStack(ModItems.nugget_u235), 15) + .addOut(new ItemStack(ModItems.nugget_neptunium), 25) + .addOut(new ItemStack(ModItems.nugget_pu239), 45) + .addOut(new ItemStack(ModItems.nugget_technetium), 15) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long_depleted, 1, ItemWasteLong.WasteClass.URANIUM233.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 60)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 25)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 15)) + .addOut(new ItemStack(ModItems.nugget_lead), 60) + .addOut(new ItemStack(ModItems.nugget_bismuth), 25) + .addOut(new ItemStack(ModItems.dust_tiny), 15) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short, 1, ItemWasteShort.WasteClass.URANIUM233.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu238), 4)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_sr90_tiny), 12)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 14)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 60)) + .addOut(new ItemStack(ModItems.nugget_pu238), 4) + .addOut(new ItemStack(ModItems.powder_sr90_tiny), 12) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 10) + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 14) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 60) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short_depleted, 1, ItemWasteShort.WasteClass.URANIUM233.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 12)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 34)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 13)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 29)) + .addOut(new ItemStack(ModItems.nugget_zirconium), 12) + .addOut(new ItemStack(ModItems.dust_tiny), 34) + .addOut(new ItemStack(ModItems.nugget_lead), 13) + .addOut(new ItemStack(ModItems.nugget_u238), 2) + .addOut(new ItemStack(ModItems.nugget_bismuth), 10) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 29) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu240), 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 25)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_sr90_tiny), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 6)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 52)) + .addOut(new ItemStack(ModItems.nugget_pu240), 10) + .addOut(new ItemStack(ModItems.nugget_pu241), 25) + .addOut(new ItemStack(ModItems.powder_sr90_tiny), 2) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 5) + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 6) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 52) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short_depleted, 1, ItemWasteShort.WasteClass.PLUTONIUM239.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 16)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 40)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 39)) + .addOut(new ItemStack(ModItems.nugget_zirconium), 2) + .addOut(new ItemStack(ModItems.dust_tiny), 16) + .addOut(new ItemStack(ModItems.nugget_lead), 40) + .addOut(new ItemStack(ModItems.nugget_u238), 3) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 39) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu241), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_neptunium), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_sr90_tiny), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 7)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 66)) + .addOut(new ItemStack(ModItems.nugget_pu241), 15) + .addOut(new ItemStack(ModItems.nugget_neptunium), 5) + .addOut(new ItemStack(ModItems.powder_sr90_tiny), 2) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 5) + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 7) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 66) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short_depleted, 1, ItemWasteShort.WasteClass.PLUTONIUM240.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 22)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 17)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 36)) + .addOut(new ItemStack(ModItems.nugget_zirconium), 2) + .addOut(new ItemStack(ModItems.dust_tiny), 22) + .addOut(new ItemStack(ModItems.nugget_bismuth), 20) + .addOut(new ItemStack(ModItems.nugget_lead), 17) + .addOut(new ItemStack(ModItems.nugget_u238), 3) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 36) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short, 1, ItemWasteShort.WasteClass.PLUTONIUM241.ordinal()), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_am241), 25)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_am242), 35)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_technetium), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 7)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 25)) + .addOut(new ItemStack(ModItems.nugget_am241), 25) + .addOut(new ItemStack(ModItems.nugget_am242), 35) + .addOut(new ItemStack(ModItems.nugget_technetium), 5) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 3) + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 7) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 25) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short_depleted, 1, ItemWasteShort.WasteClass.PLUTONIUM241.ordinal()), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 60)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 5)) + .addOut(new ItemStack(ModItems.nugget_bismuth), 60) + .addOut(new ItemStack(ModItems.dust_tiny), 20) + .addOut(new ItemStack(ModItems.nugget_lead), 15) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 5) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long, 1, ItemWasteLong.WasteClass.THORIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u233), 40)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u235), 35)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 25)) + .addOut(new ItemStack(ModItems.nugget_u233), 40) + .addOut(new ItemStack(ModItems.nugget_u235), 35) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 25) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long_depleted, 1, ItemWasteLong.WasteClass.THORIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 35)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 40)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 10)) + .addOut(new ItemStack(ModItems.nugget_lead), 35) + .addOut(new ItemStack(ModItems.nugget_bismuth), 40) + .addOut(new ItemStack(ModItems.dust_tiny), 15) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 10) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu239), 40)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu240), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_technetium), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 15)) + .addOut(new ItemStack(ModItems.nugget_u238), 15) + .addOut(new ItemStack(ModItems.nugget_pu239), 40) + .addOut(new ItemStack(ModItems.nugget_pu240), 15) + .addOut(new ItemStack(ModItems.nugget_technetium), 15) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 15) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long_depleted, 1, ItemWasteLong.WasteClass.NEPTUNIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 16)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 55)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 9)) + .addOut(new ItemStack(ModItems.nugget_u238), 16) + .addOut(new ItemStack(ModItems.nugget_lead), 55) + .addOut(new ItemStack(ModItems.dust_tiny), 20) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 9) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu238), 40)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_sr90_tiny), 7)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 8)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 40)) + .addOut(new ItemStack(ModItems.nugget_pu238), 40) + .addOut(new ItemStack(ModItems.powder_sr90_tiny), 7) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 5) + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 8) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 40) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short_depleted, 1, ItemWasteShort.WasteClass.NEPTUNIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_zirconium), 7)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 29)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_lead), 45)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 17)) + .addOut(new ItemStack(ModItems.nugget_zirconium), 7) + .addOut(new ItemStack(ModItems.dust_tiny), 29) + .addOut(new ItemStack(ModItems.nugget_u238), 2) + .addOut(new ItemStack(ModItems.nugget_lead), 45) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 17) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_solinium), 25)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_euphemium), 18)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_gh336), 16)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_tantalium), 8)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_neodymium_tiny), 8)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 25)) + .addOut(new ItemStack(ModItems.nugget_solinium), 25) + .addOut(new ItemStack(ModItems.nugget_euphemium), 18) + .addOut(new ItemStack(ModItems.nugget_gh336), 16) + .addOut(new ItemStack(ModItems.nugget_tantalium), 8) + .addOut(new ItemStack(ModItems.powder_neodymium_tiny), 8) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 25) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_long_depleted, 1, ItemWasteLong.WasteClass.SCHRABIDIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_solinium), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_euphemium), 18)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_gh336), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_tantalium), 8)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_neodymium_tiny), 8)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 31)) + .addOut(new ItemStack(ModItems.nugget_solinium), 20) + .addOut(new ItemStack(ModItems.nugget_euphemium), 18) + .addOut(new ItemStack(ModItems.nugget_gh336), 15) + .addOut(new ItemStack(ModItems.nugget_tantalium), 8) + .addOut(new ItemStack(ModItems.powder_neodymium_tiny), 8) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 31) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pb209), 7)) //We don't have any spicy lanthanides, and lead 209 + gold 198 is already *severely* pushing it, but there's no - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_au198), 7)) //point in contributing to pointless item bloat, so this will have to do - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 76)) + .addOut(new ItemStack(ModItems.nugget_pb209), 7) //We don't have any spicy lanthanides, and lead 209 + gold 198 is already *severely* pushing it, but there's no + .addOut(new ItemStack(ModItems.nugget_au198), 7) //point in contributing to pointless item bloat, so this will have to do + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 5) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 5) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 76) ); recipes.put(new ComparableStack(ModItems.nuclear_waste_short_depleted, 1, ItemWasteShort.WasteClass.SCHRABIDIUM.ordinal()), new SILEXRecipe(900, 100, 1) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_bismuth), 7)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_mercury), 12)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cerium_tiny), 14)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_lanthanium_tiny), 15)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 20)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nuclear_waste_tiny), 32)) + .addOut(new ItemStack(ModItems.nugget_bismuth), 7) + .addOut(new ItemStack(ModItems.nugget_mercury), 12) + .addOut(new ItemStack(ModItems.powder_cerium_tiny), 14) + .addOut(new ItemStack(ModItems.powder_lanthanium_tiny), 15) + .addOut(new ItemStack(ModItems.dust_tiny), 20) + .addOut(new ItemStack(ModItems.nuclear_waste_tiny), 32) ); recipes.put(new ComparableStack(ModItems.fallout, 1), new SILEXRecipe(900, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.dust_tiny), 90)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_co60), 2)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_sr90_tiny), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_i131_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_cs137_tiny), 3)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_au198), 1)) + .addOut(new ItemStack(ModItems.dust_tiny), 90) + .addOut(new ItemStack(ModItems.nugget_co60), 2) + .addOut(new ItemStack(ModItems.powder_sr90_tiny), 3) + .addOut(new ItemStack(ModItems.powder_i131_tiny), 1) + .addOut(new ItemStack(ModItems.powder_cs137_tiny), 3) + .addOut(new ItemStack(ModItems.nugget_au198), 1) ); recipes.put(new ComparableStack(Blocks.gravel, 1), new SILEXRecipe(1000, 250, EnumWavelengths.VISIBLE) - .addOut(new WeightedRandomObject(new ItemStack(Items.flint), 80)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_boron), 5)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_lithium), 10)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.fluorite), 5)) + .addOut(new ItemStack(Items.flint), 80) + .addOut(new ItemStack(ModItems.powder_boron), 5) + .addOut(new ItemStack(ModItems.powder_lithium), 10) + .addOut(new ItemStack(ModItems.fluorite), 5) ); - recipes.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.FULLERENE.getID()), new SILEXRecipe(1_000, 1_000, EnumWavelengths.UV) - .addOut(new WeightedRandomObject(DictFrame.fromOne(ModItems.powder_ash, EnumAshType.FULLERENE), 1)) - ); + recipes.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.FULLERENE.getID()), + new SILEXRecipe(1_000, 1_000, EnumWavelengths.UV).addOut(DictFrame.fromOne(ModItems.powder_ash, EnumAshType.FULLERENE), 1)); } public static SILEXRecipe getOutput(ItemStack stack) { @@ -689,15 +688,9 @@ public class SILEXRecipes { public static List getAllIngredients() { List ing = new ArrayList(); - for(Entry entry : SILEXRecipes.recipes.entrySet()) { - ing.add(entry.getKey()); - } - for(Entry entry : SILEXRecipes.itemTranslation.entrySet()) { - ing.add(entry.getKey()); - } - for(Entry entry : SILEXRecipes.dictTranslation.entrySet()) { - ing.add(entry.getKey()); - } + for(Entry entry : SILEXRecipes.recipes.entrySet()) ing.add(entry.getKey()); + for(Entry entry : SILEXRecipes.itemTranslation.entrySet()) ing.add(entry.getKey()); + for(Entry entry : SILEXRecipes.dictTranslation.entrySet()) ing.add(entry.getKey()); return ing; } @@ -744,6 +737,10 @@ public static class SILEXRecipe { this(fluidProduced, fluidConsumed, EnumWavelengths.values()[laserStrength]); } + public SILEXRecipe addOut(ItemStack stack, int weight) { + return addOut(new WeightedRandomObject(stack, weight)); + } + public SILEXRecipe addOut(WeightedRandomObject entry) { outputs.add(entry); return this; diff --git a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java index 3cd5c9d5f..e6636d0f2 100644 --- a/src/main/java/com/hbm/items/tool/ItemSettingsTool.java +++ b/src/main/java/com/hbm/items/tool/ItemSettingsTool.java @@ -4,9 +4,11 @@ import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.HbmKeybinds; import com.hbm.interfaces.ICopiable; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.PlayerInformPacket; +import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.util.ChatBuilder; import com.hbm.util.Either; +import com.hbm.util.I18nUtil; + import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -17,7 +19,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; import net.minecraft.world.World; import javax.annotation.Nullable; @@ -66,16 +67,15 @@ public class ItemSettingsTool extends Item { list.add("Can copy the settings (filters, fluid ID, etc) of machines"); list.add("Shift right-click to copy, right click to paste"); list.add("Ctrl click on pipes to paste settings to multiple pipes"); - /*if(stack.stackTagCompound != null) { + if(stack.stackTagCompound != null) { NBTTagCompound nbt = stack.stackTagCompound; if (nbt.hasKey("tileName")){ - list.add(ChatBuilder.startTranslation(nbt.getString("tileName")).color(EnumChatFormatting.BLUE).flush().getFormattedText()); + list.add(EnumChatFormatting.BLUE + I18nUtil.resolveKey(nbt.getString("tileName") + ".name")); } else { list.add(EnumChatFormatting.RED + " None "); } - }*/ - //the translation wont fucking work I swear to allah + } } @Override public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fX, float fY, float fZ) { diff --git a/src/main/java/com/hbm/tileentity/IFluidCopiable.java b/src/main/java/com/hbm/tileentity/IFluidCopiable.java index 68c61fa0a..c7606e64c 100644 --- a/src/main/java/com/hbm/tileentity/IFluidCopiable.java +++ b/src/main/java/com/hbm/tileentity/IFluidCopiable.java @@ -14,56 +14,57 @@ import net.minecraft.world.World; import java.util.ArrayList; public interface IFluidCopiable extends ICopiable { - /** - * @return First type for the normal paste, second type for the alt paste, none if there is no alt paste support - */ - default int[] getFluidIDToCopy(){ - IFluidUser tile = (IFluidUser) this; - ArrayList types = new ArrayList<>(); + + /** + * @return First type for the normal paste, second type for the alt paste, + * none if there is no alt paste support + */ + default int[] getFluidIDToCopy() { + IFluidUser tile = (IFluidUser) this; + ArrayList types = new ArrayList<>(); - for (FluidTank tank : tile.getAllTanks()) { - if (!tank.getTankType().hasNoID()) - types.add(tank.getTankType().getID()); - } + for(FluidTank tank : tile.getAllTanks()) { + if(!tank.getTankType().hasNoID()) + types.add(tank.getTankType().getID()); + } - return BobMathUtil.intCollectionToArray(types); - } + return BobMathUtil.intCollectionToArray(types); + } - default FluidTank getTankToPaste(){ - TileEntity te = (TileEntity) this; - if (te instanceof IFluidStandardTransceiver) { - IFluidStandardTransceiver tile = (IFluidStandardTransceiver) this; - return tile.getReceivingTanks() != null ? tile.getReceivingTanks()[0] : null; - } - return null; - } + default FluidTank getTankToPaste() { + TileEntity te = (TileEntity) this; + if(te instanceof IFluidStandardTransceiver) { + IFluidStandardTransceiver tile = (IFluidStandardTransceiver) this; + return tile.getReceivingTanks() != null ? tile.getReceivingTanks()[0] : null; + } + return null; + } - @Override - default NBTTagCompound getSettings(World world, int x, int y, int z){ - NBTTagCompound tag = new NBTTagCompound(); - if(getFluidIDToCopy().length > 0) - tag.setIntArray("fluidID", getFluidIDToCopy()); - return tag; - } + @Override + default NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + if(getFluidIDToCopy().length > 0) tag.setIntArray("fluidID", getFluidIDToCopy()); + return tag; + } - @Override - default void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { - if(getTankToPaste() != null) { - int[] ids = nbt.getIntArray("fluidID"); - if(ids.length > 0 && index < ids.length) { - int id = ids[index]; - getTankToPaste().setTankType(Fluids.fromID(id)); - } - } - } + @Override + default void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(getTankToPaste() != null) { + int[] ids = nbt.getIntArray("fluidID"); + if(ids.length > 0 && index < ids.length) { + int id = ids[index]; + getTankToPaste().setTankType(Fluids.fromID(id)); + } + } + } - @Override - default String[] infoForDisplay(World world, int x, int y, int z) { - int[] ids = getFluidIDToCopy(); - String[] names = new String[ids.length]; - for (int i = 0; i < ids.length; i++) { - names[i] = Fluids.fromID(ids[i]).getUnlocalizedName(); - } - return names; - } + @Override + default String[] infoForDisplay(World world, int x, int y, int z) { + int[] ids = getFluidIDToCopy(); + String[] names = new String[ids.length]; + for(int i = 0; i < ids.length; i++) { + names[i] = Fluids.fromID(ids[i]).getUnlocalizedName(); + } + return names; + } } diff --git a/src/main/java/com/hbm/tileentity/IMetalCopiable.java b/src/main/java/com/hbm/tileentity/IMetalCopiable.java index 533ce98e4..5720608c3 100644 --- a/src/main/java/com/hbm/tileentity/IMetalCopiable.java +++ b/src/main/java/com/hbm/tileentity/IMetalCopiable.java @@ -7,26 +7,24 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; public interface IMetalCopiable extends ICopiable { - int[] getMatsToCopy(); + + int[] getMatsToCopy(); - @Override - default NBTTagCompound getSettings(World world, int x, int y, int z){ - NBTTagCompound tag = new NBTTagCompound(); - if(getMatsToCopy().length > 0) - tag.setIntArray("matFilter", getMatsToCopy()); - return tag; - } - @Override - default String[] infoForDisplay(World world, int x, int y, int z) { - int[] ids = getMatsToCopy(); - String[] names = new String[ids.length]; - for (int i = 0; i < ids.length; i++) { - names[i] = Mats.matById.get(ids[i]).getUnlocalizedName(); - } - return names; - } - @Override - default void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z){ + @Override + default NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound tag = new NBTTagCompound(); + if(getMatsToCopy().length > 0) tag.setIntArray("matFilter", getMatsToCopy()); + return tag; + } - }; + @Override + default String[] infoForDisplay(World world, int x, int y, int z) { + int[] ids = getMatsToCopy(); + String[] names = new String[ids.length]; + for(int i = 0; i < ids.length; i++) names[i] = Mats.matById.get(ids[i]).getUnlocalizedName(); + return names; + } + + @Override + default void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { }; } diff --git a/src/main/java/com/hbm/util/Either.java b/src/main/java/com/hbm/util/Either.java index fa2848ee3..be2e5da75 100644 --- a/src/main/java/com/hbm/util/Either.java +++ b/src/main/java/com/hbm/util/Either.java @@ -8,6 +8,7 @@ import java.util.function.Function; */ @SuppressWarnings("unchecked") public final class Either { + public static Either left(L value) { return new Either<>(value, true); } From ee8089ddf455f6e335ca6b6ee6398e953a1539a1 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 15 Sep 2024 22:45:57 +0200 Subject: [PATCH 13/18] my ass is heavy --- .editorconfig | 16 + changelog | 9 + gradle.properties | 2 +- src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../hbm/blocks/machine/MachinePyroOven.java | 55 + .../java/com/hbm/handler/nei/PyroHandler.java | 27 + .../container/ContainerPyroOven.java | 86 + .../com/hbm/inventory/gui/GUIPyroOven.java | 62 + .../inventory/recipes/AssemblerRecipes.java | 8 + .../inventory/recipes/PyroOvenRecipes.java | 185 + .../recipes/SolidificationRecipes.java | 5 +- .../recipes/loader/SerializableRecipe.java | 1 + .../hbm/items/weapon/sedna/factory/Lego.java | 4 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- src/main/java/com/hbm/main/ClientProxy.java | 1 + .../com/hbm/main/ModEventHandlerClient.java | 14 +- src/main/java/com/hbm/main/NEIRegistry.java | 1 + .../java/com/hbm/main/ResourceManager.java | 2 + .../item/weapon/sedna/ItemRenderDebug.java | 3 +- .../hbm/render/tileentity/RenderPyroOven.java | 79 + .../java/com/hbm/tileentity/TileMappings.java | 1 + .../machine/TileEntityCrucible.java | 1 - .../machine/TileEntityFoundryOutlet.java | 1 - .../machine/TileEntityHeatBoiler.java | 1 - .../TileEntityHeatBoilerIndustrial.java | 1 - .../machine/TileEntityHeaterHeatex.java | 1 - .../TileEntityMachineCombustionEngine.java | 2 +- .../machine/TileEntityMachineMixer.java | 1 - .../machine/TileEntitySolarBoiler.java | 1 - .../machine/oil/TileEntityMachineCoker.java | 2 +- .../oil/TileEntityMachinePyroOven.java | 328 ++ .../machine/oil/TileEntityOilDrillBase.java | 1 - .../network/TileEntityCraneExtractor.java | 1 - .../network/TileEntityCraneRouter.java | 1 - .../network/TileEntityPipeBaseNT.java | 1 - src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../assets/hbm/models/machines/pyrooven.obj | 3366 +++++++++++++ .../assets/hbm/models/weapons/stg77.obj | 4289 +++++++++++++++++ src/main/resources/assets/hbm/sounds.json | 1 + .../assets/hbm/sounds/block/pyroOperate.ogg | Bin 0 -> 15084 bytes .../textures/gui/processing/gui_pyrooven.png | Bin 0 -> 3324 bytes .../textures/models/machines/lpw2_term.png | Bin 6286 -> 101095 bytes .../hbm/textures/models/machines/pyrooven.png | Bin 0 -> 12305 bytes .../textures/models/weapons/novac_scope.png | Bin 3022 -> 0 bytes .../hbm/textures/models/weapons/stg77.png | Bin 0 -> 7740 bytes 46 files changed, 8543 insertions(+), 26 deletions(-) create mode 100644 .editorconfig create mode 100644 src/main/java/com/hbm/blocks/machine/MachinePyroOven.java create mode 100644 src/main/java/com/hbm/handler/nei/PyroHandler.java create mode 100644 src/main/java/com/hbm/inventory/container/ContainerPyroOven.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIPyroOven.java create mode 100644 src/main/java/com/hbm/inventory/recipes/PyroOvenRecipes.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderPyroOven.java create mode 100644 src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java create mode 100644 src/main/resources/assets/hbm/models/machines/pyrooven.obj create mode 100644 src/main/resources/assets/hbm/models/weapons/stg77.obj create mode 100644 src/main/resources/assets/hbm/sounds/block/pyroOperate.ogg create mode 100644 src/main/resources/assets/hbm/textures/gui/processing/gui_pyrooven.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/pyrooven.png delete mode 100644 src/main/resources/assets/hbm/textures/models/weapons/novac_scope.png create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/stg77.png diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..60ce3ae65 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +root = true + +[*] +charset = utf-8 +end_of_line = crlf +indent_style = tab +indent_size = tab +insert_final_newline = true +trim_trailing_whitespace = true +max_line_length = off + +[{*.info,*.json,*.mcmeta,*.md,*.cfg,*.yml,*.toml}] +tab_width = 2 + +[{*.info,*.mcmeta,*.cfg}] +end_of_line = lf diff --git a/changelog b/changelog index 4fa16ebca..c1ff8fd80 100644 --- a/changelog +++ b/changelog @@ -2,11 +2,20 @@ * Settings tool * Allows settings of blocks and machines to be copied * Uses settings such as conveyor item filters, fluid types and liquid metal types +* Pyrolysis oven + * An oil 3 machine with multiple applications + * Can solidify most oils like a solidifier, but is way more efficient + * Can create syngas with high efficiency from coal, coke and biomass + * Large amounts of tar can be processed into fine soot, the base ingredient for fullerene + * Upgrades are not implemented yet + * Has a very short "chimney", exhaust pipes have to be connected there to work + * If no exhaust pipes are connected, the chimney will spawn particles ## Changed * Most loot piles now have configurable loot pools * The ntmsatellites command now has the "list" parameter which shows all active satellites in orbit * Burning in the nether in 528 mode now has a config option, and it no longer affects NPCs +* Jet fuel can now be solidified ## Fixed * Fixed some things not using variable max charge for armor mods, like static pads and DNT nanosuit tooltips diff --git a/gradle.properties b/gradle.properties index 856cc07bf..f5cc55373 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=5082 +mod_build_number=5089 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 46eec14fd..70e4f16e6 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -943,6 +943,7 @@ public class ModBlocks { public static Block machine_catalytic_reformer; public static Block machine_hydrotreater; public static Block machine_coker; + public static Block machine_pyrooven; public static Block machine_boiler_off; @@ -2164,6 +2165,7 @@ public class ModBlocks { machine_catalytic_reformer = new MachineCatalyticReformer(Material.iron).setBlockName("machine_catalytic_reformer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_hydrotreater = new MachineHydrotreater(Material.iron).setBlockName("machine_hydrotreater").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_coker = new MachineCoker(Material.iron).setBlockName("machine_coker").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_pyrooven = new MachinePyroOven(Material.iron).setBlockName("machine_pyrooven").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_autosaw = new MachineAutosaw().setBlockName("machine_autosaw").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_excavator = new MachineExcavator().setBlockName("machine_excavator").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_ore_slopper = new MachineOreSlopper().setBlockName("machine_ore_slopper").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3228,6 +3230,7 @@ public class ModBlocks { register(machine_catalytic_reformer); register(machine_hydrotreater); register(machine_coker); + register(machine_pyrooven); register(machine_autosaw); register(machine_excavator); register(machine_ore_slopper); diff --git a/src/main/java/com/hbm/blocks/machine/MachinePyroOven.java b/src/main/java/com/hbm/blocks/machine/MachinePyroOven.java new file mode 100644 index 000000000..a28eab1a7 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachinePyroOven.java @@ -0,0 +1,55 @@ +package com.hbm.blocks.machine; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.oil.TileEntityMachinePyroOven; + +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 MachinePyroOven extends BlockDummyable { + + public MachinePyroOven(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityMachinePyroOven(); + if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid(); + 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 this.standardOpenBehavior(world, x, y, z, player, 0); + } + + @Override + public int[] getDimensions() { + return new int[] {2, 0, 3, 3, 2, 2}; + } + + @Override + public int getOffset() { + return 3; + } + + @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.DOWN); + + for(int i = -2; i <= 2; i++) { + this.makeExtra(world, x + dir.offsetX * i + rot.offsetX * 2, y, z + dir.offsetZ * i + rot.offsetZ * 2); + } + + this.makeExtra(world, x - rot.offsetX, y + 2, z - rot.offsetZ); + } +} diff --git a/src/main/java/com/hbm/handler/nei/PyroHandler.java b/src/main/java/com/hbm/handler/nei/PyroHandler.java new file mode 100644 index 000000000..f4a992ad4 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/PyroHandler.java @@ -0,0 +1,27 @@ +package com.hbm.handler.nei; + +import java.awt.Rectangle; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.gui.GUIPyroOven; +import com.hbm.inventory.recipes.PyroOvenRecipes; + +public class PyroHandler extends NEIUniversalHandler { + + public PyroHandler() { + super("Pyrolysis", ModBlocks.machine_pyrooven, PyroOvenRecipes.getRecipes()); + } + + @Override + public String getKey() { + return "ntmPyrolysis"; + } + + @Override + public void loadTransferRects() { + super.loadTransferRects(); + transferRectsGui.add(new RecipeTransferRect(new Rectangle(50, 35, 28, 14), "ntmPyrolysis")); + guiGui.add(GUIPyroOven.class); + RecipeTransferRectHandler.registerRectsToGuis(guiGui, transferRectsGui); + } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerPyroOven.java b/src/main/java/com/hbm/inventory/container/ContainerPyroOven.java new file mode 100644 index 000000000..554569c1a --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerPyroOven.java @@ -0,0 +1,86 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.items.ModItems; +import com.hbm.items.machine.IItemFluidIdentifier; +import com.hbm.items.machine.ItemMachineUpgrade; +import com.hbm.tileentity.machine.oil.TileEntityMachinePyroOven; + +import api.hbm.energymk2.IBatteryItem; +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 ContainerPyroOven extends Container { + + private TileEntityMachinePyroOven pyro; + + public ContainerPyroOven(InventoryPlayer invPlayer, TileEntityMachinePyroOven tedf) { + pyro = tedf; + + //Battery + this.addSlotToContainer(new Slot(tedf, 0, 152, 72)); + //Input + this.addSlotToContainer(new Slot(tedf, 1, 35, 45)); + //Output + this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 2, 89, 45)); + //Fluid ID + this.addSlotToContainer(new Slot(tedf, 3, 8, 72)); + //Upgrades + this.addSlotToContainer(new Slot(tedf, 4, 71, 72)); + this.addSlotToContainer(new Slot(tedf, 5, 89, 72)); + + 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, 122 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 180)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack rStack = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack stack = slot.getStack(); + rStack = stack.copy(); + + if(index <= 5) { + if(!this.mergeItemStack(stack, 6, this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(rStack.getItem() instanceof IBatteryItem || rStack.getItem() == ModItems.battery_creative) { + if(!this.mergeItemStack(stack, 0, 1, false)) return null; + } else if(rStack.getItem() instanceof IItemFluidIdentifier) { + if(!this.mergeItemStack(stack, 3, 4, false)) return null; + } else if(rStack.getItem() instanceof ItemMachineUpgrade) { + if(!this.mergeItemStack(stack, 4, 6, false)) return null; + } else { + if(!this.mergeItemStack(stack, 1, 2, false)) return null; + } + } + + if(stack.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + } + + return rStack; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return pyro.isUseableByPlayer(player); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIPyroOven.java b/src/main/java/com/hbm/inventory/gui/GUIPyroOven.java new file mode 100644 index 000000000..a7befa9f0 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIPyroOven.java @@ -0,0 +1,62 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerPyroOven; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.oil.TileEntityMachinePyroOven; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIPyroOven extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_pyrooven.png"); + private TileEntityMachinePyroOven pyro; + + public GUIPyroOven(InventoryPlayer playerInv, TileEntityMachinePyroOven tile) { + super(new ContainerPyroOven(playerInv, tile)); + + this.pyro = tile; + this.xSize = 176; + this.ySize = 204; + } + + @Override + public void drawScreen(int x, int y, float interp) { + super.drawScreen(x, y, interp); + + pyro.tanks[0].renderTankInfo(this, x, y, guiLeft + 8, guiTop + 18, 16, 52); + pyro.tanks[1].renderTankInfo(this, x, y, guiLeft + 116, guiTop + 18, 16, 52); + this.drawElectricityInfo(this, x, y, guiLeft + 152, guiTop + 18, 16, 52, pyro.getPower(), pyro.getMaxPower()); + + this.drawCustomInfoStat(x, y, guiLeft + 108, guiTop + 76, 8, 8, guiLeft + 108, guiTop + 76, this.getUpgradeInfo(pyro)); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.pyro.hasCustomInventoryName() ? this.pyro.getInventoryName() : I18n.format(this.pyro.getInventoryName()); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2 - 18, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float interp, int x, int y) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + int i = (int) (pyro.power * 52 / pyro.maxPower); + drawTexturedModalRect(guiLeft + 152, guiTop + 70 - i, 176, 64 - i, 16, i); + + int p = (int) (pyro.progress * 27); + drawTexturedModalRect(guiLeft + 57, guiTop + 47, 176, 0, p, 12); + + pyro.tanks[0].renderTank(guiLeft + 8, guiTop + 70, this.zLevel, 16, 52); + pyro.tanks[1].renderTank(guiLeft + 116, guiTop + 70, this.zLevel, 16, 52); + + this.drawInfoPanel(guiLeft + 108, guiTop + 76, 8, 8, 8); + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 39fff4c81..af36e0fbe 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -957,6 +957,14 @@ public class AssemblerRecipes extends SerializableRecipe { new ComparableStack(ModItems.motor_desh, 2), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID) }, 200); + makeRecipe(new ComparableStack(ModBlocks.machine_pyrooven, 1), new AStack[] { + !exp ? new OreDictStack(STEEL.plateWelded(), 16) : new OreDictStack(STEEL.heavyComp(), 4), + new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), + new ComparableStack(ModItems.ingot_cft, 4), + new OreDictStack(CU.pipe(), 12), + new ComparableStack(ModItems.motor_desh, 1), + new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID) + }, 200); makeRecipe(new ComparableStack(ModBlocks.machine_compressor, 1), new AStack[] { new OreDictStack(STEEL.plateCast(), 8), diff --git a/src/main/java/com/hbm/inventory/recipes/PyroOvenRecipes.java b/src/main/java/com/hbm/inventory/recipes/PyroOvenRecipes.java new file mode 100644 index 000000000..04b3e4d74 --- /dev/null +++ b/src/main/java/com/hbm/inventory/recipes/PyroOvenRecipes.java @@ -0,0 +1,185 @@ +package com.hbm.inventory.recipes; + +import static com.hbm.inventory.OreDictManager.*; +import static com.hbm.inventory.fluid.Fluids.*; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.stream.JsonWriter; +import com.hbm.inventory.FluidStack; +import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.trait.FT_Flammable; +import com.hbm.inventory.recipes.loader.SerializableRecipe; +import com.hbm.items.ItemEnums.EnumAshType; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemFluidIcon; + +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public class PyroOvenRecipes extends SerializableRecipe { + + public static List recipes = new ArrayList(); + + @Override + public void registerDefaults() { + + //solid fuel + registerSFAuto(SMEAR); + registerSFAuto(HEATINGOIL); + registerSFAuto(HEATINGOIL_VACUUM); + registerSFAuto(RECLAIMED); + registerSFAuto(PETROIL); + registerSFAuto(NAPHTHA); + registerSFAuto(NAPHTHA_CRACK); + registerSFAuto(DIESEL); + registerSFAuto(DIESEL_REFORM); + registerSFAuto(DIESEL_CRACK); + registerSFAuto(DIESEL_CRACK_REFORM); + registerSFAuto(LIGHTOIL); + registerSFAuto(LIGHTOIL_CRACK); + registerSFAuto(LIGHTOIL_VACUUM); + registerSFAuto(KEROSENE); + registerSFAuto(KEROSENE_REFORM); + registerSFAuto(SOURGAS); + registerSFAuto(REFORMGAS); + registerSFAuto(SYNGAS); + registerSFAuto(PETROLEUM); + registerSFAuto(LPG); + registerSFAuto(BIOFUEL); + registerSFAuto(AROMATICS); + registerSFAuto(UNSATURATEDS); + registerSFAuto(REFORMATE); + registerSFAuto(XYLENE); + registerSFAuto(BALEFIRE, 24_000_000L, ModItems.solid_fuel_bf); + + //other + recipes.add(new PyroOvenRecipe(100) + .in(new FluidStack(Fluids.STEAM, 500)).in(new OreDictStack(COAL.gem())) + .out(new FluidStack(Fluids.SYNGAS, 1_000))); + recipes.add(new PyroOvenRecipe(100) + .in(new FluidStack(Fluids.STEAM, 500)).in(new OreDictStack(COAL.dust())) + .out(new FluidStack(Fluids.SYNGAS, 1_000))); + recipes.add(new PyroOvenRecipe(100) + .in(new FluidStack(Fluids.STEAM, 250)).in(new OreDictStack(ANY_COKE.gem())) + .out(new FluidStack(Fluids.SYNGAS, 1_000))); + recipes.add(new PyroOvenRecipe(100) + .in(new ComparableStack(ModItems.biomass, 4)) + .out(new FluidStack(Fluids.SYNGAS, 1_000)).out(new ItemStack(Items.coal, 1, 1))); + recipes.add(new PyroOvenRecipe(40) + .out(new FluidStack(Fluids.HYDROGEN, 250)).in(new OreDictStack(ANY_TAR.any(), 8)) + .out(new FluidStack(Fluids.CARBONDIOXIDE, 1_000)).out(DictFrame.fromOne(ModItems.powder_ash, EnumAshType.SOOT))); + } + + private static void registerSFAuto(FluidType fluid) { + registerSFAuto(fluid, 1_440_000L, ModItems.solid_fuel); //3200 burntime * 1.5 burntime bonus * 300 TU/t + } + private static void registerSFAuto(FluidType fluid, long tuPerSF, Item fuel) { + long tuPerBucket = fluid.getTrait(FT_Flammable.class).getHeatEnergy(); + double bonus = 0.5D; //double efficiency!! + + int mB = (int) (tuPerSF * 1000L * bonus / tuPerBucket); + + if(mB > 10_000) mB -= (mB % 1000); + else if(mB > 1_000) mB -= (mB % 100); + else if(mB > 100) mB -= (mB % 10); + + mB = Math.max(mB, 1); + + registerRecipe(fluid, mB, fuel); + } + + private static void registerRecipe(FluidType type, int quantity, Item output) { registerRecipe(type, quantity, new ItemStack(output)); } + private static void registerRecipe(FluidType type, int quantity, ItemStack output) { recipes.add(new PyroOvenRecipe(60).in(new FluidStack(type, quantity)).out(output)); } + + public static HashMap getRecipes() { + HashMap map = new HashMap(); + + for(PyroOvenRecipe rec : recipes) { + + Object[] in = null; + Object[] out = null; + + if(rec.inputFluid != null && rec.inputItem != null) in = new Object[] {ItemFluidIcon.make(rec.inputFluid), rec.inputItem}; + if(rec.inputFluid != null && rec.inputItem == null) in = new Object[] {ItemFluidIcon.make(rec.inputFluid)}; + if(rec.inputFluid == null && rec.inputItem != null) in = new Object[] {rec.inputItem}; + + if(rec.outputFluid != null && rec.outputItem != null) out = new Object[] {rec.outputItem, ItemFluidIcon.make(rec.outputFluid)}; + if(rec.outputFluid != null && rec.outputItem == null) out = new Object[] {ItemFluidIcon.make(rec.outputFluid)}; + if(rec.outputFluid == null && rec.outputItem != null) out = new Object[] {rec.outputItem}; + + if(in != null && out != null) { + map.put(in, out); + } + } + + return map; + } + + @Override + public String getFileName() { + return "hbmPyrolysis.json"; + } + + @Override + public Object getRecipeObject() { + return recipes; + } + + @Override + public void deleteRecipes() { + recipes.clear(); + } + + @Override + public void readRecipe(JsonElement recipe) { + JsonObject obj = (JsonObject) recipe; + + AStack inputItem = obj.has("inputItem") ? this.readAStack(obj.get("inputItem").getAsJsonArray()) : null; + FluidStack inputFluid = obj.has("inputFluid") ? this.readFluidStack(obj.get("inputFluid").getAsJsonArray()) : null; + ItemStack outputItem = obj.has("outputItem") ? this.readItemStack(obj.get("outputItem").getAsJsonArray()) : null; + FluidStack outputFluid = obj.has("outputFluid") ? this.readFluidStack(obj.get("outputFluid").getAsJsonArray()) : null; + int duration = obj.get("duration").getAsInt(); + + recipes.add(new PyroOvenRecipe(duration).in(inputFluid).in(inputItem).out(outputFluid).out(outputItem)); + } + + @Override + public void writeRecipe(Object recipe, JsonWriter writer) throws IOException { + + PyroOvenRecipe rec = (PyroOvenRecipe) recipe; + + if(rec.inputFluid != null) { writer.name("inputFluid"); this.writeFluidStack(rec.inputFluid, writer); } + if(rec.inputItem != null) { writer.name("inputItem"); this.writeAStack(rec.inputItem, writer); } + if(rec.outputFluid != null) { writer.name("outputFluid"); this.writeFluidStack(rec.outputFluid, writer); } + if(rec.outputItem != null) { writer.name("outputItem"); this.writeItemStack(rec.outputItem, writer); } + writer.name("duration").value(rec.duration); + } + + public static class PyroOvenRecipe { + public FluidStack inputFluid; + public AStack inputItem; + public FluidStack outputFluid; + public ItemStack outputItem; + public int duration; + + public PyroOvenRecipe(int duration) { + this.duration = duration; + } + + public PyroOvenRecipe in(FluidStack stack) { this.inputFluid = stack; return this; } + public PyroOvenRecipe in(AStack stack) { this.inputItem = stack; return this; } + public PyroOvenRecipe out(FluidStack stack) { this.outputFluid = stack; return this; } + public PyroOvenRecipe out(ItemStack stack) { this.outputItem = stack; return this; } + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java b/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java index fcef009fe..637779c6a 100644 --- a/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/SolidificationRecipes.java @@ -99,6 +99,7 @@ public class SolidificationRecipes extends SerializableRecipe { registerSFAuto(LIGHTOIL_CRACK); registerSFAuto(LIGHTOIL_VACUUM); registerSFAuto(KEROSENE); + registerSFAuto(KEROSENE_REFORM); //registerSFAuto(GAS); registerSFAuto(SOURGAS); registerSFAuto(REFORMGAS); @@ -111,7 +112,7 @@ public class SolidificationRecipes extends SerializableRecipe { registerSFAuto(UNSATURATEDS); registerSFAuto(REFORMATE); registerSFAuto(XYLENE); - registerSFAuto(BALEFIRE, 24000000L, ModItems.solid_fuel_bf); //holy shit this is energy dense*/ + registerSFAuto(BALEFIRE, 24_000_000L, ModItems.solid_fuel_bf); //holy shit this is energy dense*/ } @@ -127,6 +128,8 @@ public class SolidificationRecipes extends SerializableRecipe { if(mB > 10_000) mB -= (mB % 1000); else if(mB > 1_000) mB -= (mB % 100); else if(mB > 100) mB -= (mB % 10); + + mB = Math.max(mB, 1); registerRecipe(fluid, mB, fuel); } diff --git a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java index 807c78765..ab0d5e9cf 100644 --- a/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java +++ b/src/main/java/com/hbm/inventory/recipes/loader/SerializableRecipe.java @@ -58,6 +58,7 @@ public abstract class SerializableRecipe { recipeHandlers.add(new LiquefactionRecipes()); recipeHandlers.add(new SolidificationRecipes()); recipeHandlers.add(new CokerRecipes()); + recipeHandlers.add(new PyroOvenRecipes()); recipeHandlers.add(new BreederRecipes()); recipeHandlers.add(new CyclotronRecipes()); recipeHandlers.add(new HadronRecipes()); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java index 54100485e..6863d5627 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java @@ -66,8 +66,8 @@ public class Lego { case CYCLE: return new BusAnimation() .addBus("RECOIL", new BusAnimationSequence().addKeyframePosition(0, 0, 0, 50).addKeyframePosition(0, 0, -3, 50).addKeyframePosition(0, 0, 0, 250)) - .addBus("HAMMER", new BusAnimationSequence().addKeyframePosition(0, 0, 1, 50).addKeyframePosition(0, 0, 1, 300).addKeyframePosition(0, 0, 0, 200)) - .addBus("DRUM", new BusAnimationSequence().addKeyframePosition(0, 0, 1, 50)); + .addBus("HAMMER", new BusAnimationSequence().addKeyframePosition(0, 0, 1, 50).addKeyframePosition(0, 0, 1, 300 + 200).addKeyframePosition(0, 0, 0, 200)) + .addBus("DRUM", new BusAnimationSequence().addKeyframePosition(0, 0, 0, 350 + 200).addKeyframePosition(0, 0, 1, 200)); case CYCLE_EMPTY: break; case ALT_CYCLE: break; case EQUIP: return new BusAnimation().addBus("ROTATE", new BusAnimationSequence().addKeyframePosition(-360, 0, 0, 350)); diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 0707248a9..5f925e5a8 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 (5082)"; + public static final String VERSION = "1.0.27 BETA (5089)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 6ad597c84..84dec322d 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -317,6 +317,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineCatalyticReformer.class, new RenderCatalyticReformer()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineHydrotreater.class, new RenderHydrotreater()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineCoker.class, new RenderCoker()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachinePyroOven.class, new RenderPyroOven()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFan.class, new RenderFan()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPistonInserter.class, new RenderPistonInserter()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityConveyorPress.class, new RenderConveyorPress()); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index eab51c13d..bb0ca2cc9 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -105,7 +105,6 @@ import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderPlayer; -import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -1083,15 +1082,16 @@ public class ModEventHandlerClient { boolean gunKey = keyCode == HbmKeybinds.gunPrimaryKey.getKeyCode() || keyCode == HbmKeybinds.gunSecondaryKey.getKeyCode() || keyCode == HbmKeybinds.gunTertiaryKey.getKeyCode() || keyCode == HbmKeybinds.reloadKey.getKeyCode(); - /* Shoot in favor of attacking */ - if(gunKey && keyCode == mc.gameSettings.keyBindAttack.getKeyCode()) { - mc.gameSettings.keyBindAttack.pressed = false; - mc.gameSettings.keyBindAttack.pressTime = 0; - } - EntityPlayer player = mc.thePlayer; if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemGunBaseNT) { + + /* Shoot in favor of attacking */ + if(gunKey && keyCode == mc.gameSettings.keyBindAttack.getKeyCode()) { + mc.gameSettings.keyBindAttack.pressed = false; + mc.gameSettings.keyBindAttack.pressTime = 0; + } + if(gunKey && keyCode == mc.gameSettings.keyBindPickBlock.getKeyCode()) { mc.gameSettings.keyBindPickBlock.pressed = false; mc.gameSettings.keyBindPickBlock.pressTime = 0; diff --git a/src/main/java/com/hbm/main/NEIRegistry.java b/src/main/java/com/hbm/main/NEIRegistry.java index ee7d42e5f..8db11642a 100644 --- a/src/main/java/com/hbm/main/NEIRegistry.java +++ b/src/main/java/com/hbm/main/NEIRegistry.java @@ -51,6 +51,7 @@ public class NEIRegistry { handlers.add(new LiquefactionHandler()); handlers.add(new SolidificationHandler()); handlers.add(new CokingHandler()); + handlers.add(new PyroHandler()); handlers.add(new FractioningHandler()); handlers.add(new BoilingHandler()); handlers.add(new CombinationHandler()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 07f22e0cb..285cd917e 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -82,6 +82,7 @@ public class ResourceManager { public static final IModelCustom solidifier = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/solidifier.obj")).asVBO(); public static final IModelCustom compressor = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/compressor.obj")).asVBO(); public static final IModelCustom coker = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/coker.obj")).asVBO(); + public static final IModelCustom pyrooven = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/pyrooven.obj")).asVBO(); //Flare Stack public static final IModelCustom oilflare = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/flare_stack.obj")).asVBO(); @@ -476,6 +477,7 @@ public class ResourceManager { public static final ResourceLocation solidifier_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/solidifier.png"); public static final ResourceLocation compressor_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/compressor.png"); public static final ResourceLocation coker_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/coker.png"); + public static final ResourceLocation pyrooven_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/pyrooven.png"); //Flare Stack public static final ResourceLocation oilflare_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/flare_stack.png"); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java index 49635e669..840b87052 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java @@ -35,7 +35,8 @@ public class ItemRenderDebug extends ItemRenderWeaponBase { GL11.glRotated(equipSpin[0], 0, 0, 1); double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL"); - GL11.glTranslated(recoil[0], recoil[1], recoil[2]); + //GL11.glTranslated(-recoil[2], 0, 0); + GL11.glTranslated(0, 0, recoil[2]); GL11.glRotated(recoil[2] * 10, 0, 0, 1); GL11.glShadeModel(GL11.GL_SMOOTH); diff --git a/src/main/java/com/hbm/render/tileentity/RenderPyroOven.java b/src/main/java/com/hbm/render/tileentity/RenderPyroOven.java new file mode 100644 index 000000000..bd42f1fc1 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderPyroOven.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.oil.TileEntityMachinePyroOven; +import com.hbm.util.BobMathUtil; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderPyroOven extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float f) { + + 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(180, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + } + + TileEntityMachinePyroOven pyro = (TileEntityMachinePyroOven) tile; + float anim = pyro.prevAnim + (pyro.anim - pyro.prevAnim) * f; + + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.pyrooven_tex); + ResourceManager.pyrooven.renderPart("Oven"); + + GL11.glPushMatrix(); + GL11.glTranslated(BobMathUtil.sps(anim * 0.125) / 2 - 0.5, 0, 0); + ResourceManager.pyrooven.renderPart("Slider"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(1.5, 0, 1.5); + GL11.glRotated(anim * -15D % 360D, 0, 1, 0); + GL11.glTranslated(-1.5, 0, -1.5); + ResourceManager.pyrooven.renderPart("Fan"); + GL11.glPopMatrix(); + + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_pyrooven); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -1, 0); + GL11.glScaled(3.5, 3.5, 3.5); + } + public void renderCommon() { + GL11.glScaled(0.5, 0.5, 0.5); + GL11.glRotatef(90, 0F, 1F, 0F); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.pyrooven_tex); + ResourceManager.pyrooven.renderAll(); + 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 7dc97bf85..e36bb9c52 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -340,6 +340,7 @@ public class TileMappings { put(TileEntityMachineCatalyticReformer.class, "tileentity_catalytic_reformer"); put(TileEntityMachineHydrotreater.class, "tileentity_hydrotreater"); put(TileEntityMachineCoker.class, "tileentity_coker"); + put(TileEntityMachinePyroOven.class, "tileentity_pyrooven"); put(TileEntityChimneyBrick.class, "tileentity_chimney_brick"); put(TileEntityChimneyIndustrial.class, "tileentity_chimney_industrial"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java index 63cda0d05..6655aa7e4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java @@ -37,7 +37,6 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java index 6e30c6cdf..a52ce34f3 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryOutlet.java @@ -1,6 +1,5 @@ package com.hbm.tileentity.machine; -import com.hbm.interfaces.ICopiable; import com.hbm.inventory.material.Mats; import com.hbm.inventory.material.Mats.MaterialStack; import com.hbm.packet.PacketDispatcher; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java index 059fd07b9..2d3746ed8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java @@ -32,7 +32,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.EnumSkyBlock; -import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public class TileEntityHeatBoiler extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine, IFluidCopiable { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java index cde81704a..caeff9522 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java @@ -27,7 +27,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.EnumSkyBlock; -import net.minecraft.world.World; public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver, IConfigurableMachine, IFluidCopiable { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java index 173f912b2..6c5a3dc56 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java @@ -2,7 +2,6 @@ package com.hbm.tileentity.machine; import com.hbm.blocks.BlockDummyable; import com.hbm.interfaces.IControlReceiver; -import com.hbm.interfaces.ICopiable; import com.hbm.inventory.container.ContainerHeaterHeatex; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java index be46200b1..d2b1df919 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java @@ -166,6 +166,7 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachinePollutin }; } + @Override public AudioWrapper createAudioLoop() { return MainRegistry.proxy.getLoopedSound("hbm:block.igeneratorOperate", xCoord, yCoord, zCoord, 1.0F, 10F, 1.0F, 20); } @@ -181,7 +182,6 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachinePollutin @Override public void invalidate() { - super.invalidate(); if(audio != null) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java index 0a2f9a195..2e8b2751a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java @@ -6,7 +6,6 @@ import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerMixer; -import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIMixer; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java index 12be2af04..3c59f1881 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java @@ -2,7 +2,6 @@ package com.hbm.tileentity.machine; import java.util.HashSet; -import com.hbm.interfaces.ICopiable; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.lib.Library; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java index 5afde6a21..11efb7c15 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java @@ -102,7 +102,7 @@ public class TileEntityMachineCoker extends TileEntityMachineBase implements IFl } } - if(wasOn && worldObj.getTotalWorldTime() % 20 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * 20); + if(wasOn && worldObj.getTotalWorldTime() % 5 == 0) PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND * 5); } for(DirPos pos : getConPos()) { diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java new file mode 100644 index 000000000..34a8d918e --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java @@ -0,0 +1,328 @@ +package com.hbm.tileentity.machine.oil; + +import com.hbm.handler.pollution.PollutionHandler; +import com.hbm.handler.pollution.PollutionHandler.PollutionType; +import com.hbm.inventory.container.ContainerPyroOven; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.gui.GUIPyroOven; +import com.hbm.inventory.recipes.PyroOvenRecipes; +import com.hbm.inventory.recipes.PyroOvenRecipes.PyroOvenRecipe; +import com.hbm.lib.Library; +import com.hbm.main.MainRegistry; +import com.hbm.sound.AudioWrapper; +import com.hbm.tileentity.IFluidCopiable; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityMachinePolluting; +import com.hbm.util.fauxpointtwelve.DirPos; + +import api.hbm.energymk2.IEnergyReceiverMK2; +import api.hbm.fluid.IFluidStandardTransceiver; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; +import net.minecraft.client.gui.GuiScreen; +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 TileEntityMachinePyroOven extends TileEntityMachinePolluting implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IFluidCopiable { + + public long power; + public static final long maxPower = 1_000_000; + public boolean isVenting; + public boolean isProgressing; + public float progress; + public int consumption = 10_000; + + public int prevAnim; + public int anim = 0; + + public FluidTank[] tanks; + + private AudioWrapper audio; + + public TileEntityMachinePyroOven() { + super(6, 50); + tanks = new FluidTank[2]; + tanks[0] = new FluidTank(Fluids.NONE, 24_000); + tanks[1] = new FluidTank(Fluids.NONE, 24_000); + } + + @Override + public String getName() { + return "container.machinePyroOven"; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + this.power = Library.chargeTEFromItems(slots, 0, power, maxPower); + tanks[0].setType(3, slots); + + for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + if(tanks[0].getTankType() != Fluids.NONE) this.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + if(tanks[1].getFill() > 0) this.sendFluid(tanks[1], worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); + if(smoke.getFill() > 0) this.sendFluid(smoke, worldObj, xCoord - rot.offsetX, yCoord + 3, zCoord - rot.offsetZ, Library.POS_Y); + + //UpgradeManager.eval(slots, 4, 5); + + this.isProgressing = false; + this.isVenting = false; + + if(this.canProcess()) { + PyroOvenRecipe recipe = getMatchingRecipe(); + this.progress += 1F / recipe.duration; + this.isProgressing = true; + this.power -= this.consumption; + + if(progress >= 1F) { + this.progress = 0F; + this.finishRecipe(recipe); + this.markDirty(); + } + + this.pollute(PollutionType.SOOT, PollutionHandler.SOOT_PER_SECOND); + + } else { + this.progress = 0F; + } + + this.networkPackNT(50); + } else { + + this.prevAnim = this.anim; + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); + + if(isProgressing) { + this.anim++; + + if(audio == null) { + audio = createAudioLoop(); + audio.startSound(); + } else if(!audio.isPlaying()) { + audio = rebootAudio(audio); + } + + audio.keepAlive(); + audio.updateVolume(this.getVolume(1F)); + + if(MainRegistry.proxy.me().getDistance(xCoord + 0.5, yCoord + 3, zCoord + 0.5) < 50) { + if(worldObj.rand.nextInt(20) == 0) worldObj.spawnParticle("cloud", xCoord + 0.5 - rot.offsetX - dir.offsetX * 0.875, yCoord + 3, zCoord + 0.5 - rot.offsetZ - dir.offsetZ * 0.875, 0.0, 0.05, 0.0); + if(worldObj.rand.nextInt(20) == 0) worldObj.spawnParticle("cloud", xCoord + 0.5 - rot.offsetX - dir.offsetX * 2.375, yCoord + 3, zCoord + 0.5 - rot.offsetZ - dir.offsetZ * 2.375, 0.0, 0.05, 0.0); + if(worldObj.rand.nextInt(20) == 0) worldObj.spawnParticle("cloud", xCoord + 0.5 - rot.offsetX + dir.offsetX * 0.875, yCoord + 3, zCoord + 0.5 - rot.offsetZ + dir.offsetZ * 0.875, 0.0, 0.05, 0.0); + if(worldObj.rand.nextInt(20) == 0) worldObj.spawnParticle("cloud", xCoord + 0.5 - rot.offsetX + dir.offsetX * 2.375, yCoord + 3, zCoord + 0.5 - rot.offsetZ + dir.offsetZ * 2.375, 0.0, 0.05, 0.0); + } + + } else { + + if(audio != null) { + audio.stopSound(); + audio = null; + } + } + + if(this.isVenting) { + + if(worldObj.getTotalWorldTime() % 2 == 0) { + NBTTagCompound fx = new NBTTagCompound(); + fx.setString("type", "tower"); + fx.setFloat("lift", 10F); + fx.setFloat("base", 0.25F); + fx.setFloat("max", 2.5F); + fx.setInteger("life", 100 + worldObj.rand.nextInt(20)); + fx.setInteger("color",0x202020); + fx.setDouble("posX", xCoord + 0.5 - rot.offsetX); + fx.setDouble("posY", yCoord + 3); + fx.setDouble("posZ", zCoord + 0.5 - rot.offsetZ); + MainRegistry.proxy.effectNT(fx); + } + } + } + } + + protected PyroOvenRecipe lastValidRecipe; + + public PyroOvenRecipe getMatchingRecipe() { + + if(lastValidRecipe != null && doesRecipeMatch(lastValidRecipe)) return lastValidRecipe; + + for(PyroOvenRecipe rec : PyroOvenRecipes.recipes) { + if(doesRecipeMatch(rec)) { + lastValidRecipe = rec; + return rec; + } + } + + return null; + } + + public boolean doesRecipeMatch(PyroOvenRecipe recipe) { + + if(recipe.inputFluid != null) { + if(tanks[0].getTankType() != recipe.inputFluid.type) return false; // recipe needs fluid, fluid doesn't match + } + if(recipe.inputItem != null) { + if(slots[1] == null) return false; // recipe needs item, no item present + if(!recipe.inputItem.matchesRecipe(slots[1], true)) return false; // recipe needs item, item doesn't match + } else { + if(slots[1] != null) return false; // recipe does not need item, but item is present + } + + return true; + } + + public boolean canProcess() { + if(power < consumption) return false; // not enough power + PyroOvenRecipe recipe = this.getMatchingRecipe(); + if(recipe == null) return false; // no matching recipe + if(recipe.inputFluid != null && tanks[0].getFill() < recipe.inputFluid.fill) return false; // not enough input fluid + if(recipe.inputItem != null && slots[1].stackSize < recipe.inputItem.stacksize) return false; // not enough input item + if(recipe.outputFluid != null && recipe.outputFluid.fill + tanks[1].getFill() > tanks[1].getMaxFill()) return false; // too much output fluid + if(recipe.outputItem != null && slots[2] != null && recipe.outputItem.stackSize + slots[2].stackSize > slots[2].getMaxStackSize()) return false; // too much output item + if(recipe.outputItem != null && slots[2] != null && recipe.outputItem.getItem() != slots[2].getItem()) return false; // output item doesn't match + if(recipe.outputItem != null && slots[2] != null && recipe.outputItem.getItemDamage() != slots[2].getItemDamage()) return false; // output meta doesn't match + + return true; + } + + public void finishRecipe(PyroOvenRecipe recipe) { + if(recipe.outputItem != null) { + if(slots[2] == null) { + slots[2] = recipe.outputItem.copy(); + } else { + slots[2].stackSize += recipe.outputItem.stackSize; + } + } + if(recipe.outputFluid != null) { + tanks[1].setTankType(recipe.outputFluid.type); + tanks[1].setFill(tanks[1].getFill() + recipe.outputFluid.fill); + } + if(recipe.inputItem != null) { + this.decrStackSize(1, recipe.inputItem.stacksize); + } + if(recipe.inputFluid != null) { + tanks[0].setFill(tanks[0].getFill() - recipe.inputFluid.fill); + } + } + + protected DirPos[] getConPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); + + return new DirPos[] { + new DirPos(xCoord + dir.offsetX * 2 + rot.offsetX * 3, yCoord, zCoord + dir.offsetZ * 2 + rot.offsetZ * 3, rot), + new DirPos(xCoord + dir.offsetX * 1 + rot.offsetX * 3, yCoord, zCoord + dir.offsetZ * 1 + rot.offsetZ * 3, rot), + new DirPos(xCoord + rot.offsetX * 3, yCoord, zCoord + rot.offsetZ * 3, rot), + new DirPos(xCoord - dir.offsetX * 1 + rot.offsetX * 3, yCoord, zCoord - dir.offsetZ * 1 + rot.offsetZ * 3, rot), + new DirPos(xCoord - dir.offsetX * 2 + rot.offsetX * 3, yCoord, zCoord - dir.offsetZ * 2 + rot.offsetZ * 3, rot), + }; + } + + @Override public void serialize(ByteBuf buf) { + super.serialize(buf); + tanks[0].serialize(buf); + tanks[1].serialize(buf); + buf.writeLong(power); + buf.writeBoolean(isVenting); + buf.writeBoolean(isProgressing); + buf.writeFloat(progress); + } + + @Override public void deserialize(ByteBuf buf) { + super.deserialize(buf); + tanks[0].deserialize(buf); + tanks[1].deserialize(buf); + power = buf.readLong(); + isVenting = buf.readBoolean(); + isProgressing = buf.readBoolean(); + progress = buf.readFloat(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.tanks[0].readFromNBT(nbt, "t0"); + this.tanks[1].readFromNBT(nbt, "t1"); + this.progress = nbt.getFloat("prog"); + this.power = nbt.getLong("power"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + this.tanks[0].writeToNBT(nbt, "t0"); + this.tanks[1].writeToNBT(nbt, "t1"); + nbt.setFloat("prog", progress); + nbt.setLong("power", power); + } + + @Override public int[] getAccessibleSlotsFromSide(int meta) { return new int[] { 1, 2 }; } + @Override public boolean isItemValidForSlot(int i, ItemStack itemStack) { return i == 1; } + @Override public boolean canExtractItem(int i, ItemStack itemStack, int j) { return i == 2; } + + @Override + public void pollute(PollutionType type, float amount) { + FluidTank tank = type == PollutionType.SOOT ? smoke : type == PollutionType.HEAVYMETAL ? smoke_leaded : smoke_poison; + + int fluidAmount = (int) Math.ceil(amount * 100); + tank.setFill(tank.getFill() + fluidAmount); + + if(tank.getFill() > tank.getMaxFill()) { + int overflow = tank.getFill() - tank.getMaxFill(); + tank.setFill(tank.getMaxFill()); + PollutionHandler.incrementPollution(worldObj, xCoord, yCoord, zCoord, type, overflow / 100F); + this.isVenting = true; + } + } + + @Override public AudioWrapper createAudioLoop() { + return MainRegistry.proxy.getLoopedSound("hbm:block.pyroOperate", xCoord, yCoord, zCoord, 1.0F, 15F, 1.0F, 20); + } + + @Override public void onChunkUnload() { + if(audio != null) { audio.stopSound(); audio = null; } + } + + @Override public void invalidate() { + super.invalidate(); + if(audio != null) { audio.stopSound(); audio = null; } + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + if(bb == null) bb = AxisAlignedBB.getBoundingBox(xCoord - 3, yCoord, zCoord - 3, xCoord + 4, yCoord + 3.5, zCoord + 4); + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override public long getPower() { return power; } + @Override public void setPower(long power) { this.power = power; } + @Override public long getMaxPower() { return maxPower; } + + @Override public FluidTank[] getAllTanks() { return new FluidTank[] { tanks[0], tanks[1], smoke }; } + @Override public FluidTank[] getSendingTanks() { return new FluidTank[] { tanks[1], smoke }; } + @Override public FluidTank[] getReceivingTanks() { return new FluidTank[] { tanks[0] }; } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerPyroOven(player.inventory, this); } + @Override public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPyroOven(player.inventory, this); } +} diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java index e1f9d2969..877d3981d 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java @@ -24,7 +24,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public abstract class TileEntityOilDrillBase extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiver, IConfigurableMachine, IPersistentNBT, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index 29cc6b043..51858b52a 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -8,7 +8,6 @@ import com.hbm.items.ModItems; import com.hbm.module.ModulePatternMatcher; import com.hbm.tileentity.IControlReceiverFilter; import com.hbm.tileentity.IGUIProvider; -import com.hbm.util.ItemStackUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java index c1d717099..18a7df72e 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java @@ -16,7 +16,6 @@ import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Vec3; import net.minecraft.world.World; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java index 223828698..fff678bc1 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java @@ -1,6 +1,5 @@ package com.hbm.tileentity.network; -import com.hbm.blocks.network.FluidDuctBase; import com.hbm.blocks.network.IBlockFluidDuct; import com.hbm.extprop.HbmPlayerProps; import com.hbm.handler.HbmKeybinds; diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 9a0f2e0cc..45b9f383d 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -371,6 +371,7 @@ container.machineLargeTurbine=Industrielle Dampfturbine container.machineLiquefactor=Verflüssiger container.machineMixer=Industrieller Mixer container.machineOreSlopper=B.E.M. +container.machinePyroOven=Pyrolyseofen container.machineRefinery=Ölraffinerie container.machineSelenium=Hochleistungs-Sternmotor container.machineShredder=Brecher @@ -4343,6 +4344,7 @@ tile.machine_powerrtg.name=PT-Isotopenzelle tile.machine_press.name=Befeuerte Presse tile.machine_puf6_tank.name=Plutoniumhexafluorid-Tank tile.machine_pumpjack.name=Pferdekopfpumpe +tile.machine_pyrooven.name=Pyrolyseofen tile.machine_radar.name=Radar tile.machine_radar_large.name=Großes Radar tile.machine_radgen.name=Strahlenbetriebener Generator diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 3dacbd643..134cbe9a5 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -773,6 +773,7 @@ container.machineLargeTurbine=Industrial Steam Turbine container.machineLiquefactor=Liquefactor container.machineMixer=Industrial Mixer container.machineOreSlopper=B.O.P. +container.machinePyroOven=Pyrolysis Oven container.machineRefinery=Oil Refinery container.machineSelenium=Radial Performance Engine container.machineShredder=Shredder @@ -5441,6 +5442,7 @@ tile.machine_powerrtg.name=PT Isotope Cell tile.machine_press.name=Burner Press tile.machine_puf6_tank.name=Plutonium Hexafluoride Tank tile.machine_pumpjack.name=Pumpjack +tile.machine_pyrooven.name=Pyrolysis Oven tile.machine_radar.name=Radar tile.machine_radar_large.name=Large Radar tile.machine_radgen.name=Radiation-Powered Engine diff --git a/src/main/resources/assets/hbm/models/machines/pyrooven.obj b/src/main/resources/assets/hbm/models/machines/pyrooven.obj new file mode 100644 index 000000000..31300255a --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/pyrooven.obj @@ -0,0 +1,3366 @@ +# Blender v2.79 (sub 0) OBJ File: 'pyrooven.blend' +# www.blender.org +o Fan +v 1.500000 1.500000 1.375000 +v 1.391747 1.500000 1.437500 +v 1.391747 1.500000 1.562500 +v 1.500000 1.500000 1.625000 +v 1.608253 1.500000 1.562500 +v 1.608253 1.500000 1.437500 +v 1.500000 1.625000 1.375000 +v 1.391747 1.625000 1.437500 +v 1.391747 1.625000 1.562500 +v 1.500000 1.625000 1.625000 +v 1.608253 1.625000 1.562500 +v 1.608253 1.625000 1.437500 +v 1.608253 1.546324 1.560370 +v 1.608253 1.578676 1.439630 +v 2.041266 1.501839 1.726389 +v 2.041266 1.623161 1.273611 +v 1.498156 1.546324 1.376065 +v 1.393591 1.578676 1.436435 +v 1.425426 1.501839 0.918055 +v 1.033309 1.623161 1.144444 +v 1.393591 1.546324 1.563565 +v 1.498156 1.578676 1.623935 +v 1.033309 1.501839 1.855556 +v 1.425426 1.623161 2.081945 +vt 0.508475 0.829545 +vt 0.514124 0.818182 +vt 0.514124 0.829545 +vt 0.485876 0.829545 +vt 0.491525 0.818182 +vt 0.491525 0.829545 +vt 0.497175 0.829545 +vt 0.502825 0.818182 +vt 0.502825 0.829545 +vt 0.519774 0.818182 +vt 0.519774 0.829545 +vt 0.497175 0.818182 +vt 0.508475 0.818182 +vt 0.511326 0.831160 +vt 0.516923 0.831160 +vt 0.519721 0.840909 +vt 0.485876 0.829545 +vt 0.500000 0.869318 +vt 0.494350 0.869318 +vt 0.485876 0.829545 +vt 0.500000 0.869318 +vt 0.494350 0.869318 +vt 0.494350 0.869318 +vt 0.508475 0.829545 +vt 0.500000 0.869318 +vt 0.485876 0.818182 +vt 0.516923 0.850659 +vt 0.511326 0.850659 +vt 0.508527 0.840909 +vt 0.508475 0.829545 +vt 0.508475 0.829545 +vt 0.485876 0.829545 +vn 0.5000 0.0000 -0.8660 +vn 0.5000 0.0000 0.8660 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -0.5000 0.0000 0.8660 +vn -0.5000 0.0000 -0.8660 +vn 0.0000 1.0000 0.0000 +vn -0.0000 0.9659 0.2588 +vn 0.2241 0.9659 -0.1294 +vn -0.2241 0.9659 -0.1294 +s off +f 1/1/1 12/2/1 6/3/1 +f 5/4/2 10/5/2 4/6/2 +f 3/7/3 8/8/3 2/9/3 +f 6/3/4 11/10/4 5/11/4 +f 4/6/5 9/12/5 3/7/5 +f 2/9/6 7/13/6 1/1/6 +f 11/14/7 12/15/7 7/16/7 +f 15/17/8 14/18/8 13/19/8 +f 19/20/9 18/21/9 17/22/9 +f 21/23/10 24/24/10 22/25/10 +f 1/1/1 7/13/1 12/2/1 +f 5/4/2 11/26/2 10/5/2 +f 3/7/3 9/12/3 8/8/3 +f 6/3/4 12/2/4 11/10/4 +f 4/6/5 10/5/5 9/12/5 +f 2/9/6 8/8/6 7/13/6 +f 7/16/7 8/27/7 9/28/7 +f 9/28/7 10/29/7 7/16/7 +f 10/29/7 11/14/7 7/16/7 +f 15/17/8 16/30/8 14/18/8 +f 19/20/9 20/31/9 18/21/9 +f 21/23/10 23/32/10 24/24/10 +o Slider +v 2.250000 1.250000 0.250000 +v 2.250000 1.250000 -0.250000 +v 1.750000 1.250000 0.250000 +v 1.750000 1.250000 -0.250000 +v 2.250000 1.625000 0.250000 +v 2.250000 1.625000 -0.250000 +v 1.750000 1.625000 0.250000 +v 1.750000 1.625000 -0.250000 +vt 0.361582 0.806818 +vt 0.378531 0.852273 +vt 0.361582 0.852273 +vt 0.378531 0.886364 +vt 0.401130 0.852273 +vt 0.401130 0.886364 +vt 0.418079 0.852273 +vt 0.401130 0.806818 +vt 0.418079 0.806818 +vt 0.378531 0.772727 +vt 0.401130 0.772727 +vt 0.378531 0.806818 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +s off +f 25/33/11 31/34/11 27/35/11 +f 27/36/12 32/37/12 28/38/12 +f 28/39/13 30/40/13 26/41/13 +f 30/40/14 25/42/14 26/43/14 +f 32/37/15 29/44/15 30/40/15 +f 25/33/11 29/44/11 31/34/11 +f 27/36/12 31/34/12 32/37/12 +f 28/39/13 32/37/13 30/40/13 +f 30/40/14 29/44/14 25/42/14 +f 32/37/15 31/34/15 29/44/15 +o Oven +v -2.500000 0.000000 3.500000 +v 2.500000 0.000000 3.500000 +v -2.500000 0.000000 -3.500000 +v 2.500000 0.000000 -3.500000 +v -2.500000 0.500000 3.500000 +v 2.500000 0.500000 3.500000 +v -2.500000 0.500000 -3.500000 +v 2.500000 0.500000 -3.500000 +v -2.375000 0.500000 3.375000 +v 0.375000 0.500000 3.375000 +v -2.375000 0.500000 2.875000 +v 0.375000 0.500000 2.875000 +v -2.375000 2.500000 2.875000 +v -2.375000 2.500000 3.375000 +v 0.375000 2.500000 3.375000 +v 0.375000 2.500000 2.875000 +v -1.625000 3.000000 2.875000 +v -1.625000 3.000000 3.375000 +v -0.375000 3.000000 3.375000 +v -0.375000 3.000000 2.875000 +v -2.375000 0.500000 -2.875000 +v 0.375000 0.500000 -2.875000 +v -2.375000 0.500000 -3.375000 +v 0.375000 0.500000 -3.375000 +v -2.375000 2.500000 -3.375000 +v -2.375000 2.500000 -2.875000 +v 0.375000 2.500000 -2.875000 +v 0.375000 2.500000 -3.375000 +v -1.625000 3.000000 -3.375000 +v -1.625000 3.000000 -2.875000 +v -0.375000 3.000000 -2.875000 +v -0.375000 3.000000 -3.375000 +v -2.375000 0.500000 -1.375000 +v 0.375000 0.500000 -1.375000 +v -2.375000 0.500000 -1.875000 +v 0.375000 0.500000 -1.875000 +v -2.375000 2.500000 -1.875000 +v -2.375000 2.500000 -1.375000 +v 0.375000 2.500000 -1.375000 +v 0.375000 2.500000 -1.875000 +v -1.625000 3.000000 -1.875000 +v -1.625000 3.000000 -1.375000 +v -0.375000 3.000000 -1.375000 +v -0.375000 3.000000 -1.875000 +v -2.375000 0.500000 1.875000 +v 0.375000 0.500000 1.875000 +v -2.375000 0.500000 1.375000 +v 0.375000 0.500000 1.375000 +v -2.375000 2.500000 1.375000 +v -2.375000 2.500000 1.875000 +v 0.375000 2.500000 1.875000 +v 0.375000 2.500000 1.375000 +v -1.625000 3.000000 1.375000 +v -1.625000 3.000000 1.875000 +v -0.375000 3.000000 1.875000 +v -0.375000 3.000000 1.375000 +v 0.250000 0.500000 -1.375000 +v 0.250000 0.500000 1.375000 +v 0.250000 2.375000 -1.375000 +v 0.250000 2.375000 1.375000 +v -0.500000 2.875000 -1.375000 +v -0.500000 2.875000 1.375000 +v -1.500000 2.875000 -1.375000 +v -1.500000 2.875000 1.375000 +v -2.250000 2.375000 -1.375000 +v -2.250000 2.375000 1.375000 +v -2.250000 0.500000 -1.375000 +v -2.250000 0.500000 1.375000 +v 0.250000 0.500000 1.875000 +v 0.250000 2.375000 1.875000 +v -0.500000 2.875000 1.875000 +v -1.500000 2.875000 1.875000 +v -2.250000 2.375000 1.875000 +v -2.250000 0.500000 1.875000 +v 0.250000 0.500000 2.875000 +v 0.250000 2.375000 2.875000 +v -0.500000 2.875000 2.875000 +v -1.500000 2.875000 2.875000 +v -2.250000 2.375000 2.875000 +v -2.250000 0.500000 2.875000 +v 0.250000 0.500000 -2.875000 +v 0.250000 2.375000 -2.875000 +v -0.500000 2.875000 -2.875000 +v -1.500000 2.875000 -2.875000 +v -2.250000 2.375000 -2.875000 +v -2.250000 0.500000 -2.875000 +v 0.250000 0.500000 -1.875000 +v 0.250000 2.375000 -1.875000 +v -0.500000 2.875000 -1.875000 +v -1.500000 2.875000 -1.875000 +v -2.250000 2.375000 -1.875000 +v -2.250000 0.500000 -1.875000 +v -1.000000 2.625000 3.375000 +v -1.500000 2.491026 3.375000 +v -1.866025 2.125000 3.375000 +v -2.000000 1.625000 3.375000 +v -1.866025 1.125000 3.375000 +v -1.500000 0.758975 3.375000 +v -1.000000 0.625000 3.375000 +v -0.500000 0.758975 3.375000 +v -0.133975 1.125000 3.375000 +v 0.000000 1.625000 3.375000 +v -0.133975 2.125000 3.375000 +v -0.500000 2.491025 3.375000 +v -1.000000 2.625000 3.500000 +v -1.500000 2.491026 3.500000 +v -1.866025 2.125000 3.500000 +v -2.000000 1.625000 3.500000 +v -1.866025 1.125000 3.500000 +v -1.500000 0.758975 3.500000 +v -1.000000 0.625000 3.500000 +v -0.500000 0.758975 3.500000 +v -0.133975 1.125000 3.500000 +v 0.000000 1.625000 3.500000 +v -0.133975 2.125000 3.500000 +v -0.500000 2.491025 3.500000 +v -1.500001 2.491025 -3.500000 +v -1.866026 2.125000 -3.500000 +v -2.000000 1.625000 -3.500000 +v -1.866025 1.125000 -3.500000 +v -1.500000 0.758975 -3.500000 +v -1.000000 0.625000 -3.500000 +v -0.500000 0.758975 -3.500000 +v -0.133975 1.125000 -3.500000 +v -0.000000 1.625000 -3.500000 +v -0.133975 2.125000 -3.500000 +v -0.500000 2.491026 -3.500000 +v -1.000000 2.625000 -3.500000 +v -1.500001 2.491025 -3.375000 +v -1.866026 2.125000 -3.375000 +v -2.000000 1.625000 -3.375000 +v -1.866025 1.125000 -3.375000 +v -1.500000 0.758975 -3.375000 +v -1.000000 0.625000 -3.375000 +v -0.500000 0.758975 -3.375000 +v -0.133975 1.125000 -3.375000 +v -0.000000 1.625000 -3.375000 +v -0.133975 2.125000 -3.375000 +v -0.500000 2.491026 -3.375000 +v -1.000000 2.625000 -3.375000 +v -0.625000 2.875000 2.000000 +v -1.375000 2.875000 2.000000 +v -0.625000 2.875000 2.750000 +v -1.375000 2.875000 2.750000 +v -1.312500 3.125000 2.062500 +v -0.687500 3.125000 2.062500 +v -1.312500 3.125000 2.687500 +v -0.687500 3.125000 2.687500 +v -1.375000 3.125000 2.000000 +v -0.625000 3.125000 2.000000 +v -1.375000 3.125000 2.750000 +v -0.625000 3.125000 2.750000 +v -1.312500 3.000000 2.062500 +v -0.687500 3.000000 2.062500 +v -1.312500 3.000000 2.687500 +v -0.687500 3.000000 2.687500 +v -1.312500 3.062500 2.062500 +v -0.687500 3.062500 2.062500 +v -1.312500 3.062500 2.687500 +v -0.687500 3.062500 2.687500 +v -0.625000 2.875000 -2.750000 +v -1.375000 2.875000 -2.750000 +v -0.625000 2.875000 -2.000000 +v -1.375000 2.875000 -2.000000 +v -1.312500 3.125000 -2.687500 +v -0.687500 3.125000 -2.687500 +v -1.312500 3.125000 -2.062500 +v -0.687500 3.125000 -2.062500 +v -1.375000 3.125000 -2.750000 +v -0.625000 3.125000 -2.750000 +v -1.375000 3.125000 -2.000000 +v -0.625000 3.125000 -2.000000 +v -1.312500 3.000000 -2.687500 +v -0.687500 3.000000 -2.687500 +v -1.312500 3.000000 -2.062500 +v -0.687500 3.000000 -2.062500 +v -1.312500 3.062500 -2.687500 +v -0.687500 3.062500 -2.687500 +v -1.312500 3.062500 -2.062500 +v -0.687500 3.062500 -2.062500 +v -0.625000 2.875000 -1.250000 +v -1.375000 2.875000 -1.250000 +v -0.625000 2.875000 -0.500000 +v -1.375000 2.875000 -0.500000 +v -1.312500 3.125000 -1.187500 +v -0.687500 3.125000 -1.187500 +v -1.312500 3.125000 -0.562500 +v -0.687500 3.125000 -0.562500 +v -1.375000 3.125000 -1.250000 +v -0.625000 3.125000 -1.250000 +v -1.375000 3.125000 -0.500000 +v -0.625000 3.125000 -0.500000 +v -1.312500 3.000000 -1.187500 +v -0.687500 3.000000 -1.187500 +v -1.312500 3.000000 -0.562500 +v -0.687500 3.000000 -0.562500 +v -1.312500 3.062500 -1.187500 +v -0.687500 3.062500 -1.187500 +v -1.312500 3.062500 -0.562500 +v -0.687500 3.062500 -0.562500 +v -0.625000 2.875000 0.500000 +v -1.375000 2.875000 0.500000 +v -0.625000 2.875000 1.250000 +v -1.375000 2.875000 1.250000 +v -1.312500 3.125000 0.562500 +v -0.687500 3.125000 0.562500 +v -1.312500 3.125000 1.187500 +v -0.687500 3.125000 1.187500 +v -1.375000 3.125000 0.500000 +v -0.625000 3.125000 0.500000 +v -1.375000 3.125000 1.250000 +v -0.625000 3.125000 1.250000 +v -1.312500 3.000000 0.562500 +v -0.687500 3.000000 0.562500 +v -1.312500 3.000000 1.187500 +v -0.687500 3.000000 1.187500 +v -1.312500 3.062500 0.562500 +v -0.687500 3.062500 0.562500 +v -1.312500 3.062500 1.187500 +v -0.687500 3.062500 1.187500 +v 0.875000 1.750000 2.125000 +v 2.125000 1.750000 2.125000 +v 0.875000 1.750000 0.875000 +v 2.125000 1.750000 0.875000 +v 2.250000 1.500000 0.750000 +v 0.750000 1.500000 0.750000 +v 2.250000 1.500000 2.250000 +v 0.750000 1.500000 2.250000 +v 0.500000 0.500000 -0.500000 +v 2.500000 0.500000 -0.500000 +v 0.500000 0.500000 -2.500000 +v 2.500000 0.500000 -2.500000 +v 2.500000 1.500000 -2.500000 +v 0.500000 1.500000 -2.500000 +v 2.500000 1.500000 -0.500000 +v 0.500000 1.500000 -0.500000 +v 0.500000 1.500000 2.500000 +v 2.500000 1.500000 2.500000 +v 0.500000 1.500000 0.500000 +v 2.500000 1.500000 0.500000 +v 2.500000 0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v 2.500000 0.500000 2.500000 +v 0.500000 0.500000 2.500000 +v 0.750000 1.750000 0.750000 +v 0.750000 1.750000 2.250000 +v 2.250000 1.750000 2.250000 +v 2.250000 1.750000 0.750000 +v 0.875000 1.500000 0.875000 +v 0.875000 1.500000 2.125000 +v 2.125000 1.500000 2.125000 +v 2.125000 1.500000 0.875000 +v -1.375000 3.000000 0.125000 +v -1.125000 3.000000 0.375000 +v -0.875000 3.000000 0.375000 +v -0.625000 3.000000 0.125000 +v -1.125000 3.000000 -0.375000 +v -1.375000 3.000000 -0.125000 +v -0.625000 3.000000 -0.125000 +v -0.875000 3.000000 -0.375000 +v -1.375000 2.875000 -0.125000 +v -1.125000 2.875000 -0.375000 +v -1.125000 2.875000 0.375000 +v -1.375000 2.875000 0.125000 +v -0.625000 2.875000 0.125000 +v -0.875000 2.875000 0.375000 +v -0.875000 2.875000 -0.375000 +v -0.625000 2.875000 -0.125000 +v 0.875000 1.687500 2.125000 +v 2.125000 1.687500 2.125000 +v 0.875000 1.687500 0.875000 +v 2.125000 1.687500 0.875000 +v 1.176777 2.801777 -0.823223 +v 0.875000 2.801777 -0.698223 +v 0.875000 2.625000 -0.625000 +v 0.875000 2.448223 -0.698223 +v 0.875000 2.375000 -0.875000 +v 0.875000 2.448223 -1.051777 +v 0.875000 2.801777 -1.051777 +v 0.875000 2.875000 -0.875000 +v 0.875000 2.000000 -1.500000 +v 0.948223 2.000000 -1.323223 +v 1.125000 2.000000 -1.250000 +v 1.301777 2.000000 -1.323223 +v 1.375000 2.000000 -1.500000 +v 1.301777 2.000000 -1.676777 +v 1.125000 2.000000 -1.750000 +v 0.948223 2.000000 -1.676777 +v 0.948223 2.375000 -1.676777 +v 1.125000 2.375000 -1.750000 +v 1.301777 2.375000 -1.676777 +v 1.375000 2.375000 -1.500000 +v 1.301777 2.375000 -1.323223 +v 1.125000 2.375000 -1.250000 +v 0.948223 2.375000 -1.323223 +v 0.875000 2.375000 -1.500000 +v 0.875000 2.551777 -1.426777 +v 0.948223 2.426777 -1.301777 +v 1.301777 2.426777 -1.301777 +v 1.375000 2.551777 -1.426777 +v 1.301777 2.676777 -1.551777 +v 1.125000 2.728553 -1.603553 +v 2.250000 2.000000 -2.250000 +v 0.750000 2.000000 -2.250000 +v 2.250000 2.000000 -0.750000 +v 0.750000 2.000000 -0.750000 +v 0.750000 1.500000 -0.750000 +v 2.250000 1.500000 -0.750000 +v 0.750000 1.500000 -2.250000 +v 2.250000 1.500000 -2.250000 +v 0.500000 0.500000 0.250000 +v 2.500000 0.500000 0.250000 +v 0.500000 0.500000 -0.250000 +v 2.500000 0.500000 -0.250000 +v 0.500000 1.250000 -0.250000 +v 0.500000 1.250000 0.250000 +v 2.500000 1.250000 0.250000 +v 2.500000 1.250000 -0.250000 +v 0.625000 1.250000 -0.031250 +v 0.625000 1.250000 0.031250 +v 2.375000 1.250000 0.031250 +v 2.375000 1.250000 -0.031250 +v 0.625000 1.500000 -0.031250 +v 0.625000 1.500000 0.031250 +v 2.375000 1.500000 0.031250 +v 2.375000 1.500000 -0.031250 +v 0.625000 1.250000 -0.125000 +v 0.625000 1.250000 -0.062500 +v 2.375000 1.250000 -0.062500 +v 2.375000 1.250000 -0.125000 +v 0.625000 1.500000 -0.125000 +v 0.625000 1.500000 -0.062500 +v 2.375000 1.500000 -0.062500 +v 2.375000 1.500000 -0.125000 +v 0.625000 1.250000 0.062500 +v 0.625000 1.250000 0.125000 +v 2.375000 1.250000 0.125000 +v 2.375000 1.250000 0.062500 +v 0.625000 1.500000 0.062500 +v 0.625000 1.500000 0.125000 +v 2.375000 1.500000 0.125000 +v 2.375000 1.500000 0.062500 +v 0.625000 1.250000 -0.218750 +v 0.625000 1.250000 -0.156250 +v 2.375000 1.250000 -0.156250 +v 2.375000 1.250000 -0.218750 +v 0.625000 1.500000 -0.218750 +v 0.625000 1.500000 -0.156250 +v 2.375000 1.500000 -0.156250 +v 2.375000 1.500000 -0.218750 +v 0.625000 1.250000 0.156250 +v 0.625000 1.250000 0.218750 +v 2.375000 1.250000 0.218750 +v 2.375000 1.250000 0.156250 +v 0.625000 1.500000 0.156250 +v 0.625000 1.500000 0.218750 +v 2.375000 1.500000 0.218750 +v 2.375000 1.500000 0.156250 +v 1.500000 1.125000 0.500000 +v 1.323223 1.051777 0.500000 +v 1.250000 0.875000 0.500000 +v 1.323223 0.698223 0.500000 +v 1.500000 0.625000 0.500000 +v 1.676777 0.698223 0.500000 +v 1.750000 0.875000 0.500000 +v 1.676777 1.051777 0.500000 +v 1.500000 1.125000 -0.500000 +v 1.323223 1.051777 -0.500000 +v 1.250000 0.875000 -0.500000 +v 1.323223 0.698223 -0.500000 +v 1.500000 0.625000 -0.500000 +v 1.676777 0.698223 -0.500000 +v 1.750000 0.875000 -0.500000 +v 1.676777 1.051777 -0.500000 +v 2.125000 1.125000 0.500000 +v 1.948223 1.051777 0.500000 +v 1.875000 0.875000 0.500000 +v 1.948223 0.698223 0.500000 +v 2.125000 0.625000 0.500000 +v 2.301777 0.698223 0.500000 +v 2.375000 0.875000 0.500000 +v 2.301777 1.051777 0.500000 +v 2.125000 1.125000 -0.500000 +v 1.948223 1.051777 -0.500000 +v 1.875000 0.875000 -0.500000 +v 1.948223 0.698223 -0.500000 +v 2.125000 0.625000 -0.500000 +v 2.301777 0.698223 -0.500000 +v 2.375000 0.875000 -0.500000 +v 2.301777 1.051777 -0.500000 +v 0.875000 1.125000 0.500000 +v 0.698223 1.051777 0.500000 +v 0.625000 0.875000 0.500000 +v 0.698223 0.698223 0.500000 +v 0.875000 0.625000 0.500000 +v 1.051777 0.698223 0.500000 +v 1.125000 0.875000 0.500000 +v 1.051777 1.051777 0.500000 +v 0.875000 1.125000 -0.500000 +v 0.698223 1.051777 -0.500000 +v 0.625000 0.875000 -0.500000 +v 0.698223 0.698223 -0.500000 +v 0.875000 0.625000 -0.500000 +v 1.051777 0.698223 -0.500000 +v 1.125000 0.875000 -0.500000 +v 1.051777 1.051777 -0.500000 +v 1.429917 1.382583 2.500000 +v 1.562500 1.437500 2.500000 +v 1.695083 1.382583 2.500000 +v 1.750000 1.250000 2.500000 +v 1.695083 1.117417 2.500000 +v 1.562500 1.062500 2.500000 +v 1.429917 1.117417 2.500000 +v 1.413833 1.117417 2.538833 +v 1.507583 1.062500 2.632582 +v 1.601333 1.117417 2.726332 +v 1.640165 1.250000 2.765165 +v 1.601333 1.382583 2.726332 +v 1.507583 1.437500 2.632582 +v 1.413833 1.382583 2.538833 +v 1.375000 1.250000 2.500000 +v 1.375000 1.382583 2.554918 +v 1.375000 1.437500 2.687500 +v 1.375000 1.382583 2.820082 +v 1.375000 1.250000 2.875000 +v 1.375000 1.117417 2.820082 +v 1.375000 1.062500 2.687500 +v 1.375000 1.117417 2.554918 +v 0.250000 1.117417 2.554918 +v 0.250000 1.062500 2.687500 +v 0.250000 1.117417 2.820082 +v 0.250000 1.250000 2.875000 +v 0.250000 1.382583 2.820082 +v 0.250000 1.437500 2.687500 +v 0.250000 1.382583 2.554918 +v 0.250000 1.250000 2.500000 +v 0.375000 1.250000 2.937500 +v 0.375000 1.382583 2.992418 +v 0.375000 1.437500 3.125000 +v 0.375000 1.382583 3.257582 +v 0.375000 1.250000 3.312500 +v 0.375000 1.117417 3.257582 +v 0.375000 1.062500 3.125000 +v 0.375000 1.117417 2.992418 +v 1.875000 1.117417 2.992418 +v 1.875000 1.062500 3.125000 +v 1.875000 1.117417 3.257582 +v 1.875000 1.250000 3.312500 +v 1.875000 1.382583 3.257582 +v 1.875000 1.437500 3.125000 +v 1.875000 1.382583 2.992418 +v 1.875000 1.250000 2.937500 +v 1.913833 1.382583 2.976333 +v 2.007583 1.437500 3.070082 +v 2.101333 1.382583 3.163832 +v 2.140165 1.250000 3.202665 +v 2.101333 1.117417 3.163832 +v 2.007583 1.062500 3.070082 +v 1.913833 1.117417 2.976333 +v 1.929917 1.117417 2.937500 +v 2.062500 1.062500 2.937500 +v 2.195083 1.117417 2.937500 +v 2.250000 1.250000 2.937500 +v 2.195083 1.382583 2.937500 +v 2.062500 1.437500 2.937500 +v 1.929917 1.382583 2.937500 +v 1.929917 1.382583 2.500000 +v 2.062500 1.437500 2.500000 +v 2.195083 1.382583 2.500000 +v 2.250000 1.250000 2.500000 +v 2.195083 1.117417 2.500000 +v 2.062500 1.062500 2.500000 +v 1.929917 1.117417 2.500000 +v 1.875000 1.250000 2.500000 +v 0.948223 2.676777 -1.551777 +v 0.948223 2.801777 -1.250000 +v 1.125000 2.875000 -1.250000 +v 1.301777 2.801777 -1.250000 +v 1.375000 2.625000 -1.250000 +v 1.301777 2.448223 -1.250000 +v 0.948223 2.448223 -1.250000 +v 0.875000 2.625000 -1.250000 +v 1.625000 2.625000 -1.250000 +v 1.698223 2.448223 -1.250000 +v 2.051777 2.448223 -1.250000 +v 2.125000 2.625000 -1.250000 +v 2.051777 2.801777 -1.250000 +v 1.875000 2.875000 -1.250000 +v 1.698223 2.801777 -1.250000 +v 1.698223 2.676777 -1.551777 +v 1.875000 2.728553 -1.603553 +v 2.051777 2.676777 -1.551777 +v 2.125000 2.551777 -1.426777 +v 2.051777 2.426777 -1.301777 +v 1.698223 2.426777 -1.301777 +v 1.625000 2.551777 -1.426777 +v 1.625000 2.375000 -1.500000 +v 1.698223 2.375000 -1.323223 +v 1.875000 2.375000 -1.250000 +v 2.051777 2.375000 -1.323223 +v 2.125000 2.375000 -1.500000 +v 2.051777 2.375000 -1.676777 +v 1.875000 2.375000 -1.750000 +v 1.698223 2.375000 -1.676777 +v 1.698223 2.000000 -1.676777 +v 1.875000 2.000000 -1.750000 +v 2.051777 2.000000 -1.676777 +v 2.125000 2.000000 -1.500000 +v 2.051777 2.000000 -1.323223 +v 1.875000 2.000000 -1.250000 +v 1.698223 2.000000 -1.323223 +v 1.625000 2.000000 -1.500000 +v 1.625000 2.875000 0.875000 +v 1.625000 2.801777 0.698223 +v 1.625000 2.448223 0.698223 +v 1.625000 2.375000 0.875000 +v 1.625000 2.448223 1.051777 +v 1.625000 2.625000 1.125000 +v 1.625000 2.801777 1.051777 +v 1.926777 2.801777 0.926777 +v 1.978553 2.625000 0.978553 +v 1.926777 2.448223 0.926777 +v 1.801777 2.375000 0.801777 +v 1.676777 2.448223 0.676777 +v 1.676777 2.801777 0.676777 +v 1.801777 2.875000 0.801777 +v 1.875000 2.875000 0.625000 +v 1.698223 2.801777 0.625000 +v 1.625000 2.625000 0.625000 +v 1.698223 2.448223 0.625000 +v 1.875000 2.375000 0.625000 +v 2.051777 2.448223 0.625000 +v 2.125000 2.625000 0.625000 +v 2.051777 2.801777 0.625000 +v 0.948223 2.801777 -1.125000 +v 1.125000 2.875000 -1.125000 +v 1.051777 2.875000 -0.948223 +v 0.926777 2.801777 -1.073223 +v 0.926777 2.448223 -1.073223 +v 1.051777 2.375000 -0.948223 +v 1.176777 2.448223 -0.823223 +v 1.228553 2.625000 -0.771447 +v -0.500000 2.875000 0.875000 +v -0.500000 2.801777 0.698223 +v -0.500000 2.448223 0.698223 +v -0.500000 2.375000 0.875000 +v -0.500000 2.448223 1.051777 +v -0.500000 2.625000 1.125000 +v -0.500000 2.801777 1.051777 +v -0.500000 2.625000 0.625000 +v 0.875000 2.625000 -1.125000 +v 0.948223 2.448223 -1.125000 +v 1.125000 2.375000 -1.125000 +v 1.301777 2.448223 -1.125000 +v 1.375000 2.625000 -1.125000 +v 1.301777 2.801777 -1.125000 +v -0.500000 2.875000 -0.875000 +v -0.500000 2.801777 -1.051777 +v -0.500000 2.448223 -1.051777 +v -0.500000 2.375000 -0.875000 +v -0.500000 2.448223 -0.698223 +v -0.500000 2.625000 -0.625000 +v -0.500000 2.801777 -0.698223 +v -0.500000 2.625000 -1.125000 +v 2.000000 2.000000 -2.250000 +v 2.000000 2.000000 -0.750000 +v 2.000000 1.500000 -0.750000 +v 2.000000 1.500000 -2.250000 +v 2.000000 2.125000 -2.250000 +v 2.000000 2.125000 -0.750000 +v 2.000000 2.000000 -0.625000 +v 2.000000 1.500000 -0.625000 +v 2.000000 2.000000 -2.375000 +v 2.000000 1.500000 -2.375000 +v 1.750000 2.000000 -2.250000 +v 1.750000 1.500000 -2.250000 +v 1.750000 2.000000 -0.750000 +v 1.750000 1.500000 -0.750000 +v 1.750000 2.125000 -0.750000 +v 1.750000 2.125000 -2.250000 +v 1.750000 2.000000 -0.625000 +v 1.750000 1.500000 -0.625000 +v 1.750000 2.000000 -2.375000 +v 1.750000 1.500000 -2.375000 +v 1.250000 2.000000 -2.250000 +v 1.250000 2.000000 -0.750000 +v 1.250000 1.500000 -0.750000 +v 1.250000 1.500000 -2.250000 +v 1.250000 2.125000 -2.250000 +v 1.250000 2.125000 -0.750000 +v 1.250000 2.000000 -0.625000 +v 1.250000 1.500000 -0.625000 +v 1.250000 2.000000 -2.375000 +v 1.250000 1.500000 -2.375000 +v 1.000000 2.000000 -2.250000 +v 1.000000 1.500000 -2.250000 +v 1.000000 2.000000 -0.750000 +v 1.000000 1.500000 -0.750000 +v 1.000000 2.125000 -0.750000 +v 1.000000 2.125000 -2.250000 +v 1.000000 2.000000 -0.625000 +v 1.000000 1.500000 -0.625000 +v 1.000000 2.000000 -2.375000 +v 1.000000 1.500000 -2.375000 +v 1.429917 0.882583 2.500000 +v 1.562500 0.937500 2.500000 +v 1.695083 0.882583 2.500000 +v 1.750000 0.750000 2.500000 +v 1.695083 0.617417 2.500000 +v 1.562500 0.562500 2.500000 +v 1.429917 0.617417 2.500000 +v 1.413833 0.617417 2.538833 +v 1.507583 0.562500 2.632582 +v 1.601333 0.617417 2.726332 +v 1.640165 0.750000 2.765165 +v 1.601333 0.882583 2.726332 +v 1.507583 0.937500 2.632582 +v 1.413833 0.882583 2.538833 +v 1.375000 0.750000 2.500000 +v 1.375000 0.882583 2.554918 +v 1.375000 0.937500 2.687500 +v 1.375000 0.882583 2.820082 +v 1.375000 0.750000 2.875000 +v 1.375000 0.617417 2.820082 +v 1.375000 0.562500 2.687500 +v 1.375000 0.617417 2.554918 +v 0.250000 0.617417 2.554918 +v 0.250000 0.562500 2.687500 +v 0.250000 0.617417 2.820082 +v 0.250000 0.750000 2.875000 +v 0.250000 0.882583 2.820082 +v 0.250000 0.937500 2.687500 +v 0.250000 0.882583 2.554918 +v 0.250000 0.750000 2.500000 +v 0.375000 0.750000 2.937500 +v 0.375000 0.882583 2.992418 +v 0.375000 0.937500 3.125000 +v 0.375000 0.882583 3.257582 +v 0.375000 0.750000 3.312500 +v 0.375000 0.617417 3.257582 +v 0.375000 0.562500 3.125000 +v 0.375000 0.617417 2.992418 +v 1.875000 0.617417 2.992418 +v 1.875000 0.562500 3.125000 +v 1.875000 0.617417 3.257582 +v 1.875000 0.750000 3.312500 +v 1.875000 0.882583 3.257582 +v 1.875000 0.937500 3.125000 +v 1.875000 0.882583 2.992418 +v 1.875000 0.750000 2.937500 +v 1.913833 0.882583 2.976333 +v 2.007583 0.937500 3.070082 +v 2.101333 0.882583 3.163832 +v 2.140165 0.750000 3.202665 +v 2.101333 0.617417 3.163832 +v 2.007583 0.562500 3.070082 +v 1.913833 0.617417 2.976333 +v 1.929917 0.617417 2.937500 +v 2.062500 0.562500 2.937500 +v 2.195083 0.617417 2.937500 +v 2.250000 0.750000 2.937500 +v 2.195083 0.882583 2.937500 +v 2.062500 0.937500 2.937500 +v 1.929917 0.882583 2.937500 +v 1.929917 0.882583 2.500000 +v 2.062500 0.937500 2.500000 +v 2.195083 0.882583 2.500000 +v 2.250000 0.750000 2.500000 +v 2.195083 0.617417 2.500000 +v 2.062500 0.562500 2.500000 +v 1.929917 0.617417 2.500000 +v 1.875000 0.750000 2.500000 +v 1.429917 1.382583 -2.500000 +v 1.562500 1.437500 -2.500000 +v 1.695083 1.382583 -2.500000 +v 1.750000 1.250000 -2.500000 +v 1.695083 1.117417 -2.500000 +v 1.562500 1.062500 -2.500000 +v 1.429917 1.117417 -2.500000 +v 1.413833 1.117417 -2.538833 +v 1.507583 1.062500 -2.632582 +v 1.601333 1.117417 -2.726332 +v 1.640165 1.250000 -2.765165 +v 1.601333 1.382583 -2.726332 +v 1.507583 1.437500 -2.632582 +v 1.413833 1.382583 -2.538833 +v 1.375000 1.250000 -2.500000 +v 1.375000 1.382583 -2.554918 +v 1.375000 1.437500 -2.687500 +v 1.375000 1.382583 -2.820082 +v 1.375000 1.250000 -2.875000 +v 1.375000 1.117417 -2.820082 +v 1.375000 1.062500 -2.687500 +v 1.375000 1.117417 -2.554918 +v 0.250000 1.117417 -2.554918 +v 0.250000 1.062500 -2.687500 +v 0.250000 1.117417 -2.820082 +v 0.250000 1.250000 -2.875000 +v 0.250000 1.382583 -2.820082 +v 0.250000 1.437500 -2.687500 +v 0.250000 1.382583 -2.554918 +v 0.250000 1.250000 -2.500000 +v 0.375000 1.250000 -2.937500 +v 0.375000 1.382583 -2.992418 +v 0.375000 1.437500 -3.125000 +v 0.375000 1.382583 -3.257582 +v 0.375000 1.250000 -3.312500 +v 0.375000 1.117417 -3.257582 +v 0.375000 1.062500 -3.125000 +v 0.375000 1.117417 -2.992418 +v 1.875000 1.117417 -2.992418 +v 1.875000 1.062500 -3.125000 +v 1.875000 1.117417 -3.257582 +v 1.875000 1.250000 -3.312500 +v 1.875000 1.382583 -3.257582 +v 1.875000 1.437500 -3.125000 +v 1.875000 1.382583 -2.992418 +v 1.875000 1.250000 -2.937500 +v 1.913833 1.382583 -2.976333 +v 2.007583 1.437500 -3.070082 +v 2.101333 1.382583 -3.163832 +v 2.140165 1.250000 -3.202665 +v 2.101333 1.117417 -3.163832 +v 2.007583 1.062500 -3.070082 +v 1.913833 1.117417 -2.976333 +v 1.929917 1.117417 -2.937500 +v 2.062500 1.062500 -2.937500 +v 2.195083 1.117417 -2.937500 +v 2.250000 1.250000 -2.937500 +v 2.195083 1.382583 -2.937500 +v 2.062500 1.437500 -2.937500 +v 1.929917 1.382583 -2.937500 +v 1.929917 1.382583 -2.500000 +v 2.062500 1.437500 -2.500000 +v 2.195083 1.382583 -2.500000 +v 2.250000 1.250000 -2.500000 +v 2.195083 1.117417 -2.500000 +v 2.062500 1.062500 -2.500000 +v 1.929917 1.117417 -2.500000 +v 1.875000 1.250000 -2.500000 +v 1.429917 0.882583 -2.500000 +v 1.562500 0.937500 -2.500000 +v 1.695083 0.882583 -2.500000 +v 1.750000 0.750000 -2.500000 +v 1.695083 0.617417 -2.500000 +v 1.562500 0.562500 -2.500000 +v 1.429917 0.617417 -2.500000 +v 1.413833 0.617417 -2.538833 +v 1.507583 0.562500 -2.632582 +v 1.601333 0.617417 -2.726332 +v 1.640165 0.750000 -2.765165 +v 1.601333 0.882583 -2.726332 +v 1.507583 0.937500 -2.632582 +v 1.413833 0.882583 -2.538833 +v 1.375000 0.750000 -2.500000 +v 1.375000 0.882583 -2.554918 +v 1.375000 0.937500 -2.687500 +v 1.375000 0.882583 -2.820082 +v 1.375000 0.750000 -2.875000 +v 1.375000 0.617417 -2.820082 +v 1.375000 0.562500 -2.687500 +v 1.375000 0.617417 -2.554918 +v 0.250000 0.617417 -2.554918 +v 0.250000 0.562500 -2.687500 +v 0.250000 0.617417 -2.820082 +v 0.250000 0.750000 -2.875000 +v 0.250000 0.882583 -2.820082 +v 0.250000 0.937500 -2.687500 +v 0.250000 0.882583 -2.554918 +v 0.250000 0.750000 -2.500000 +v 0.375000 0.750000 -2.937500 +v 0.375000 0.882583 -2.992418 +v 0.375000 0.937500 -3.125000 +v 0.375000 0.882583 -3.257582 +v 0.375000 0.750000 -3.312500 +v 0.375000 0.617417 -3.257582 +v 0.375000 0.562500 -3.125000 +v 0.375000 0.617417 -2.992418 +v 1.875000 0.617417 -2.992418 +v 1.875000 0.562500 -3.125000 +v 1.875000 0.617417 -3.257582 +v 1.875000 0.750000 -3.312500 +v 1.875000 0.882583 -3.257582 +v 1.875000 0.937500 -3.125000 +v 1.875000 0.882583 -2.992418 +v 1.875000 0.750000 -2.937500 +v 1.913833 0.882583 -2.976333 +v 2.007583 0.937500 -3.070082 +v 2.101333 0.882583 -3.163832 +v 2.140165 0.750000 -3.202665 +v 2.101333 0.617417 -3.163832 +v 2.007583 0.562500 -3.070082 +v 1.913833 0.617417 -2.976333 +v 1.929917 0.617417 -2.937500 +v 2.062500 0.562500 -2.937500 +v 2.195083 0.617417 -2.937500 +v 2.250000 0.750000 -2.937500 +v 2.195083 0.882583 -2.937500 +v 2.062500 0.937500 -2.937500 +v 1.929917 0.882583 -2.937500 +v 1.929917 0.882583 -2.500000 +v 2.062500 0.937500 -2.500000 +v 2.195083 0.882583 -2.500000 +v 2.250000 0.750000 -2.500000 +v 2.195083 0.617417 -2.500000 +v 2.062500 0.562500 -2.500000 +v 1.929917 0.617417 -2.500000 +v 1.875000 0.750000 -2.500000 +vt 0.338983 0.000000 +vt 0.022599 0.454545 +vt 0.022599 0.000000 +vt 0.022599 0.500000 +vt 0.338983 0.954545 +vt 0.022599 0.954545 +vt 0.361582 0.954545 +vt 0.338983 0.500000 +vt 0.361582 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.954545 +vt 0.338983 0.454545 +vt 0.022599 1.000000 +vt 0.338983 1.000000 +vt 0.361582 0.227273 +vt 0.395480 0.272727 +vt 0.361582 0.272727 +vt 0.361582 0.227273 +vt 0.395480 0.272727 +vt 0.361582 0.272727 +vt 0.508475 -0.000000 +vt 0.485876 0.181818 +vt 0.485876 -0.000000 +vt 0.361582 -0.000000 +vt 0.338983 0.181818 +vt 0.338983 -0.000000 +vt 0.361582 0.500000 +vt 0.485876 0.318182 +vt 0.485876 0.500000 +vt 0.361582 0.181818 +vt 0.451977 0.227273 +vt 0.395480 0.227273 +vt 0.361582 0.318182 +vt 0.451977 0.272727 +vt 0.485876 0.272727 +vt 0.485876 0.227273 +vt 0.508475 -0.000000 +vt 0.485876 0.181818 +vt 0.485876 -0.000000 +vt 0.361582 -0.000000 +vt 0.338983 0.181818 +vt 0.338983 -0.000000 +vt 0.361582 0.500000 +vt 0.485876 0.318182 +vt 0.485876 0.500000 +vt 0.361582 0.181818 +vt 0.451977 0.227273 +vt 0.395480 0.227273 +vt 0.361582 0.318182 +vt 0.451977 0.272727 +vt 0.485876 0.272727 +vt 0.485876 0.227273 +vt 0.361582 0.227273 +vt 0.395480 0.272727 +vt 0.361582 0.272727 +vt 0.508475 -0.000000 +vt 0.485876 0.181818 +vt 0.485876 -0.000000 +vt 0.361582 -0.000000 +vt 0.338983 0.181818 +vt 0.338983 -0.000000 +vt 0.361582 0.500000 +vt 0.485876 0.318182 +vt 0.485876 0.500000 +vt 0.361582 0.181818 +vt 0.451977 0.227273 +vt 0.395480 0.227273 +vt 0.361582 0.318182 +vt 0.451977 0.272727 +vt 0.485876 0.272727 +vt 0.485876 0.227273 +vt 0.361582 0.227273 +vt 0.395480 0.272727 +vt 0.361582 0.272727 +vt 0.508475 -0.000000 +vt 0.485876 0.181818 +vt 0.485876 -0.000000 +vt 0.361582 -0.000000 +vt 0.338983 0.181818 +vt 0.338983 -0.000000 +vt 0.361582 0.500000 +vt 0.485876 0.318182 +vt 0.485876 0.500000 +vt 0.361582 0.181818 +vt 0.451977 0.227273 +vt 0.395480 0.227273 +vt 0.361582 0.318182 +vt 0.451977 0.272727 +vt 0.485876 0.272727 +vt 0.485876 0.227273 +vt 0.677966 0.170455 +vt 0.553672 -0.000000 +vt 0.677966 -0.000000 +vt 0.553672 0.238636 +vt 0.553672 0.170455 +vt 0.677966 0.238636 +vt 0.553672 0.329545 +vt 0.677966 0.329545 +vt 0.553672 0.397727 +vt 0.677966 0.397727 +vt 0.553672 0.568182 +vt 0.553672 0.397727 +vt 0.508475 0.329545 +vt 0.553672 0.329545 +vt 0.553672 0.238636 +vt 0.508475 0.170455 +vt 0.553672 0.170455 +vt 0.553672 0.568182 +vt 0.508475 0.397727 +vt 0.508475 0.238636 +vt 0.553672 -0.000000 +vt 0.723164 0.397727 +vt 0.677966 0.329545 +vt 0.723164 0.329545 +vt 0.723164 0.238636 +vt 0.677966 0.170455 +vt 0.723164 0.170455 +vt 0.723164 0.568182 +vt 0.677966 0.397727 +vt 0.677966 0.238636 +vt 0.723164 -0.000000 +vt 0.988274 0.136340 +vt 0.949153 0.181770 +vt 0.910031 0.045479 +vt 0.988274 0.045478 +vt 0.988274 0.136340 +vt 0.949153 0.181770 +vt 0.497175 0.886364 +vt 0.429379 0.909091 +vt 0.429379 0.886364 +vt 0.632768 0.886364 +vt 0.564972 0.909091 +vt 0.564972 0.886364 +vt 0.497175 0.909091 +vt 0.361582 0.909091 +vt 0.361582 0.886364 +vt 0.666667 0.676136 +vt 0.694915 0.664773 +vt 0.694915 0.676136 +vt 0.697740 0.568182 +vt 0.663842 0.590909 +vt 0.663842 0.568182 +vt 0.646893 0.602273 +vt 0.658192 0.670455 +vt 0.646893 0.670455 +vt 0.663842 0.704545 +vt 0.697740 0.681818 +vt 0.697740 0.704545 +vt 0.714689 0.670455 +vt 0.703390 0.602273 +vt 0.714689 0.602273 +vt 0.700565 0.607955 +vt 0.703390 0.670455 +vt 0.700565 0.664773 +vt 0.661017 0.664773 +vt 0.658192 0.602273 +vt 0.661017 0.607955 +vt 0.663842 0.681818 +vt 0.666667 0.596591 +vt 0.697740 0.590909 +vt 0.694915 0.596591 +vt 0.666667 0.607955 +vt 0.694915 0.607955 +vt 0.666667 0.664773 +vt 0.629943 0.761364 +vt 0.601695 0.704545 +vt 0.629943 0.704545 +vt 0.666667 0.676136 +vt 0.694915 0.664773 +vt 0.694915 0.676136 +vt 0.697740 0.568182 +vt 0.663842 0.590909 +vt 0.663842 0.568182 +vt 0.646893 0.602273 +vt 0.658192 0.670455 +vt 0.646893 0.670455 +vt 0.663842 0.704545 +vt 0.697740 0.681818 +vt 0.697740 0.704545 +vt 0.714689 0.670455 +vt 0.703390 0.602273 +vt 0.714689 0.602273 +vt 0.700565 0.607955 +vt 0.703390 0.670455 +vt 0.700565 0.664773 +vt 0.661017 0.664773 +vt 0.658192 0.602273 +vt 0.661017 0.607955 +vt 0.663842 0.681818 +vt 0.666667 0.596591 +vt 0.697740 0.590909 +vt 0.694915 0.596591 +vt 0.666667 0.607955 +vt 0.694915 0.607955 +vt 0.666667 0.664773 +vt 0.629943 0.761364 +vt 0.601695 0.704545 +vt 0.629943 0.704545 +vt 0.666667 0.676136 +vt 0.694915 0.664773 +vt 0.694915 0.676136 +vt 0.697740 0.568182 +vt 0.663842 0.590909 +vt 0.663842 0.568182 +vt 0.646893 0.602273 +vt 0.658192 0.670455 +vt 0.646893 0.670455 +vt 0.663842 0.704545 +vt 0.697740 0.681818 +vt 0.697740 0.704545 +vt 0.714689 0.670455 +vt 0.703390 0.602273 +vt 0.714689 0.602273 +vt 0.700565 0.607955 +vt 0.703390 0.670455 +vt 0.700565 0.664773 +vt 0.661017 0.664773 +vt 0.658192 0.602273 +vt 0.661017 0.607955 +vt 0.663842 0.681818 +vt 0.666667 0.596591 +vt 0.697740 0.590909 +vt 0.694915 0.596591 +vt 0.666667 0.607955 +vt 0.694915 0.607955 +vt 0.666667 0.664773 +vt 0.629943 0.761364 +vt 0.601695 0.704545 +vt 0.629943 0.704545 +vt 0.666667 0.676136 +vt 0.694915 0.664773 +vt 0.694915 0.676136 +vt 0.697740 0.568182 +vt 0.663842 0.590909 +vt 0.663842 0.568182 +vt 0.646893 0.602273 +vt 0.658192 0.670455 +vt 0.646893 0.670455 +vt 0.663842 0.704545 +vt 0.697740 0.681818 +vt 0.697740 0.704545 +vt 0.714689 0.670455 +vt 0.703390 0.602273 +vt 0.714689 0.602273 +vt 0.700565 0.607955 +vt 0.703390 0.670455 +vt 0.700565 0.664773 +vt 0.661017 0.664773 +vt 0.658192 0.602273 +vt 0.661017 0.607955 +vt 0.663842 0.681818 +vt 0.666667 0.596591 +vt 0.697740 0.590909 +vt 0.694915 0.596591 +vt 0.666667 0.607955 +vt 0.694915 0.607955 +vt 0.666667 0.664773 +vt 0.629943 0.761364 +vt 0.601695 0.704545 +vt 0.629943 0.704545 +vt 0.559322 0.920455 +vt 0.502825 0.943182 +vt 0.502825 0.920455 +vt 0.587571 0.590909 +vt 0.590395 0.750000 +vt 0.587571 0.750000 +vt 0.768362 0.454545 +vt 0.858757 0.636364 +vt 0.768362 0.636364 +vt 0.723164 0.454545 +vt 0.723164 0.636364 +vt 0.903955 0.636364 +vt 0.858757 0.454545 +vt 0.903955 0.454545 +vt 0.768362 0.727273 +vt 0.858757 0.727273 +vt 0.858757 0.363636 +vt 0.768362 0.363636 +vt 0.858757 -0.000000 +vt 0.768362 0.090909 +vt 0.768362 -0.000000 +vt 0.768362 0.363636 +vt 0.858757 0.272727 +vt 0.858757 0.363636 +vt 0.903955 0.272727 +vt 0.858757 0.090909 +vt 0.903955 0.090909 +vt 0.723164 0.090909 +vt 0.768362 0.272727 +vt 0.723164 0.272727 +vt 0.587571 0.590909 +vt 0.590395 0.750000 +vt 0.587571 0.750000 +vt 0.570621 0.920455 +vt 0.632768 0.909091 +vt 0.627119 0.920455 +vt 0.367232 0.920455 +vt 0.423729 0.920455 +vt 0.435028 0.920455 +vt 0.491525 0.920455 +vt 0.367232 0.943182 +vt 0.435028 0.943182 +vt 0.570621 0.943182 +vt 0.728814 0.693182 +vt 0.723164 0.670455 +vt 0.728814 0.670455 +vt 0.740113 0.647727 +vt 0.751412 0.636364 +vt 0.751412 0.647727 +vt 0.762712 0.670455 +vt 0.768362 0.693182 +vt 0.762712 0.693182 +vt 0.751412 0.715909 +vt 0.762712 0.647727 +vt 0.762712 0.727273 +vt 0.751412 0.727273 +vt 0.740113 0.727273 +vt 0.728814 0.715909 +vt 0.740113 0.715909 +vt 0.728814 0.636364 +vt 0.740113 0.636364 +vt 0.418079 0.886364 +vt 0.474576 0.772727 +vt 0.474576 0.886364 +vt 0.451977 0.681818 +vt 0.384181 0.545455 +vt 0.451977 0.545455 +vt 0.474576 0.545455 +vt 0.474576 0.681818 +vt 0.384181 0.681818 +vt 0.451977 0.727273 +vt 0.384181 0.727273 +vt 0.384181 0.500000 +vt 0.451977 0.500000 +vt 0.361582 0.681818 +vt 0.361582 0.545455 +vt 0.601695 0.750000 +vt 0.590395 0.590909 +vt 0.601695 0.590909 +vt 0.519774 0.636364 +vt 0.542373 0.818182 +vt 0.519774 0.818182 +vt 0.542373 0.568182 +vt 0.519774 0.568182 +vt 0.519774 0.886364 +vt 0.542373 0.886364 +vt 0.576271 0.818182 +vt 0.542373 0.636364 +vt 0.576271 0.636364 +vt 0.485876 0.636364 +vt 0.485876 0.818182 +vt 0.576271 0.590909 +vt 0.576271 0.750000 +vt 0.590395 0.568182 +vt 0.587571 0.568182 +vt 0.587571 0.772727 +vt 0.590395 0.772727 +vt 0.601695 0.750000 +vt 0.590395 0.590909 +vt 0.601695 0.590909 +vt 0.576271 0.590909 +vt 0.576271 0.750000 +vt 0.590395 0.568182 +vt 0.587571 0.568182 +vt 0.587571 0.772727 +vt 0.590395 0.772727 +vt 0.587571 0.590909 +vt 0.590395 0.750000 +vt 0.587571 0.750000 +vt 0.601695 0.750000 +vt 0.590395 0.590909 +vt 0.601695 0.590909 +vt 0.576271 0.590909 +vt 0.576271 0.750000 +vt 0.590395 0.568182 +vt 0.587571 0.568182 +vt 0.587571 0.772727 +vt 0.590395 0.772727 +vt 0.587571 0.590909 +vt 0.590395 0.750000 +vt 0.587571 0.750000 +vt 0.601695 0.750000 +vt 0.590395 0.590909 +vt 0.601695 0.590909 +vt 0.576271 0.590909 +vt 0.576271 0.750000 +vt 0.590395 0.568182 +vt 0.587571 0.568182 +vt 0.587571 0.772727 +vt 0.590395 0.772727 +vt 0.587571 0.590909 +vt 0.590395 0.750000 +vt 0.587571 0.750000 +vt 0.601695 0.750000 +vt 0.590395 0.590909 +vt 0.601695 0.590909 +vt 0.576271 0.590909 +vt 0.576271 0.750000 +vt 0.590395 0.568182 +vt 0.587571 0.568182 +vt 0.587571 0.772727 +vt 0.590395 0.772727 +vt 0.457627 0.738636 +vt 0.389830 0.727273 +vt 0.457627 0.727273 +vt 0.384181 0.727273 +vt 0.361582 0.738636 +vt 0.361582 0.727273 +vt 0.485876 0.738636 +vt 0.463277 0.727273 +vt 0.485876 0.727273 +vt 0.463277 0.738636 +vt 0.457627 0.727273 +vt 0.389830 0.727273 +vt 0.384181 0.738636 +vt 0.389830 0.772727 +vt 0.457627 0.761364 +vt 0.457627 0.772727 +vt 0.361582 0.761364 +vt 0.384181 0.772727 +vt 0.361582 0.772727 +vt 0.463277 0.772727 +vt 0.485876 0.761364 +vt 0.485876 0.772727 +vt 0.457627 0.772727 +vt 0.463277 0.761364 +vt 0.389830 0.772727 +vt 0.384181 0.761364 +vt 0.389830 0.727273 +vt 0.384181 0.738636 +vt 0.384181 0.727273 +vt 0.463277 0.727273 +vt 0.463277 0.738636 +vt 0.457627 0.727273 +vt 0.389830 0.761364 +vt 0.389830 0.738636 +vt 0.485876 0.738636 +vt 0.485876 0.727273 +vt 0.361582 0.738636 +vt 0.361582 0.727273 +vt 0.457627 0.738636 +vt 0.389830 0.727273 +vt 0.457627 0.727273 +vt 0.389830 0.772727 +vt 0.457627 0.761364 +vt 0.457627 0.772727 +vt 0.361582 0.761364 +vt 0.384181 0.772727 +vt 0.361582 0.772727 +vt 0.463277 0.772727 +vt 0.485876 0.761364 +vt 0.485876 0.772727 +vt 0.457627 0.772727 +vt 0.463277 0.761364 +vt 0.389830 0.772727 +vt 0.384181 0.761364 +vt 0.389830 0.761364 +vt 0.389830 0.738636 +vt 0.508475 0.181818 +vt 0.508475 0.181818 +vt 0.508475 0.181818 +vt 0.508475 0.181818 +vt 0.677966 0.568182 +vt 0.508475 0.568182 +vt 0.508475 -0.000000 +vt 0.677966 0.568182 +vt 0.677966 -0.000000 +vt 0.926566 0.169597 +vt 0.910031 0.136340 +vt 0.903979 0.090909 +vt 0.926566 0.012221 +vt 0.988274 0.045478 +vt 0.949153 0.000048 +vt 0.971740 0.012221 +vt 0.994327 0.090909 +vt 0.971740 0.169597 +vt 0.926566 0.169597 +vt 0.910031 0.136340 +vt 0.903979 0.090909 +vt 0.910031 0.045479 +vt 0.926566 0.012221 +vt 0.949153 0.000048 +vt 0.971740 0.012221 +vt 0.994327 0.090909 +vt 0.971740 0.169597 +vt 0.601695 0.761364 +vt 0.601695 0.761364 +vt 0.601695 0.761364 +vt 0.601695 0.761364 +vt 0.559322 0.943182 +vt 0.423729 0.943182 +vt 0.491525 0.943182 +vt 0.627119 0.943182 +vt 0.723164 0.693182 +vt 0.768362 0.670455 +vt 0.762712 0.636364 +vt 0.762712 0.715909 +vt 0.728814 0.727273 +vt 0.728814 0.647727 +vt 0.418079 0.772727 +vt 1.000000 0.454545 +vt 0.994350 0.409091 +vt 1.000000 0.409091 +vt 1.000000 0.227273 +vt 0.994350 0.181818 +vt 1.000000 0.181818 +vt 1.000000 0.318182 +vt 0.994350 0.272727 +vt 1.000000 0.272727 +vt 1.000000 0.090909 +vt 0.994350 0.045455 +vt 1.000000 0.045455 +vt 1.000000 0.500000 +vt 0.994350 0.454545 +vt 0.994350 0.227273 +vt 1.000000 0.363636 +vt 0.994350 0.318182 +vt 1.000000 0.136364 +vt 0.994350 0.090909 +vt 1.000000 0.545455 +vt 0.994350 0.500000 +vt 0.994350 0.363636 +vt 0.994350 0.136364 +vt 0.994350 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.045455 +vt 0.994350 0.000000 +vt 1.000000 0.000000 +vt 1.000000 0.136364 +vt 0.994350 0.181818 +vt 0.994350 0.136364 +vt 1.000000 0.409091 +vt 0.994350 0.363636 +vt 1.000000 0.363636 +vt 1.000000 0.545455 +vt 0.994350 0.500000 +vt 1.000000 0.500000 +vt 0.994350 0.090909 +vt 1.000000 0.090909 +vt 0.994350 0.318182 +vt 1.000000 0.318182 +vt 1.000000 0.272727 +vt 0.994350 0.227273 +vt 1.000000 0.227273 +vt 0.994350 0.454545 +vt 1.000000 0.454545 +vt 0.994350 0.045455 +vt 0.994350 0.272727 +vt 1.000000 0.181818 +vt 0.994350 0.409091 +vt 0.884181 0.823864 +vt 0.892655 0.795455 +vt 0.892655 0.829545 +vt 0.909605 0.812500 +vt 0.901130 0.795455 +vt 0.909605 0.795455 +vt 0.875706 0.812500 +vt 0.867232 0.795455 +vt 0.875706 0.795455 +vt 0.884181 0.795455 +vt 0.901130 0.823864 +vt 0.918079 0.795455 +vt 0.909605 0.778409 +vt 0.918079 0.789773 +vt 0.901130 0.767045 +vt 0.875706 0.778409 +vt 0.884181 0.767045 +vt 0.901130 0.875000 +vt 0.901130 0.869318 +vt 0.909605 0.875000 +vt 0.901130 0.880682 +vt 0.918079 0.869318 +vt 0.918079 0.875000 +vt 0.918079 0.880682 +vt 0.875706 0.875000 +vt 0.867232 0.846591 +vt 0.875706 0.840909 +vt 0.892655 0.875000 +vt 0.884181 0.846591 +vt 0.892655 0.857955 +vt 0.926554 0.857955 +vt 0.926554 0.875000 +vt 0.909605 0.943182 +vt 0.918079 0.909091 +vt 0.918079 0.943182 +vt 0.892655 0.943182 +vt 0.901130 0.909091 +vt 0.901130 0.943182 +vt 0.875706 0.943182 +vt 0.884181 0.909091 +vt 0.884181 0.943182 +vt 0.646893 0.568182 +vt 0.601695 0.585227 +vt 0.601695 0.568182 +vt 0.646893 0.670455 +vt 0.601695 0.687500 +vt 0.601695 0.670455 +vt 0.646893 0.636364 +vt 0.601695 0.653409 +vt 0.601695 0.636364 +vt 0.646893 0.619318 +vt 0.601695 0.619318 +vt 0.646893 0.585227 +vt 0.601695 0.602273 +vt 0.646893 0.687500 +vt 0.601695 0.704545 +vt 0.646893 0.653409 +vt 0.646893 0.602273 +vt 0.646893 0.568182 +vt 0.601695 0.585227 +vt 0.601695 0.568182 +vt 0.646893 0.670455 +vt 0.601695 0.687500 +vt 0.601695 0.670455 +vt 0.646893 0.636364 +vt 0.601695 0.653409 +vt 0.601695 0.636364 +vt 0.646893 0.619318 +vt 0.601695 0.619318 +vt 0.646893 0.585227 +vt 0.601695 0.602273 +vt 0.646893 0.687500 +vt 0.601695 0.704545 +vt 0.646893 0.653409 +vt 0.646893 0.602273 +vt 0.646893 0.568182 +vt 0.601695 0.585227 +vt 0.601695 0.568182 +vt 0.646893 0.670455 +vt 0.601695 0.687500 +vt 0.601695 0.670455 +vt 0.646893 0.636364 +vt 0.601695 0.653409 +vt 0.601695 0.636364 +vt 0.646893 0.619318 +vt 0.601695 0.619318 +vt 0.646893 0.585227 +vt 0.601695 0.602273 +vt 0.646893 0.687500 +vt 0.601695 0.704545 +vt 0.646893 0.653409 +vt 0.646893 0.602273 +vt 0.694915 0.909091 +vt 0.694915 0.897727 +vt 0.697740 0.897727 +vt 0.692090 0.897727 +vt 0.694915 0.818182 +vt 0.697740 0.829545 +vt 0.694915 0.829545 +vt 0.692090 0.829545 +vt 0.694915 0.840909 +vt 0.706215 0.852273 +vt 0.694915 0.852273 +vt 0.694915 0.875000 +vt 0.706215 0.863636 +vt 0.706215 0.875000 +vt 0.694915 0.886364 +vt 0.700565 0.840909 +vt 0.694915 0.863636 +vt 0.700565 0.886364 +vt 0.689266 0.840909 +vt 0.683616 0.852273 +vt 0.689266 0.886364 +vt 0.683616 0.863636 +vt 0.683616 0.875000 +vt 0.632768 0.829545 +vt 0.683616 0.840909 +vt 0.632768 0.840909 +vt 0.632768 0.852273 +vt 0.632768 0.863636 +vt 0.632768 0.875000 +vt 0.683616 0.886364 +vt 0.632768 0.886364 +vt 0.632768 0.897727 +vt 0.683616 0.909091 +vt 0.632768 0.909091 +vt 0.632768 0.818182 +vt 0.683616 0.829545 +vt 0.683616 0.897727 +vt 0.632768 0.795455 +vt 0.700565 0.806818 +vt 0.632768 0.806818 +vt 0.632768 0.772727 +vt 0.700565 0.784091 +vt 0.632768 0.784091 +vt 0.632768 0.750000 +vt 0.700565 0.761364 +vt 0.632768 0.761364 +vt 0.632768 0.727273 +vt 0.700565 0.738636 +vt 0.632768 0.738636 +vt 0.700565 0.818182 +vt 0.632768 0.818182 +vt 0.700565 0.795455 +vt 0.700565 0.772727 +vt 0.700565 0.750000 +vt 0.711864 0.784091 +vt 0.706215 0.795455 +vt 0.711864 0.806818 +vt 0.709040 0.806818 +vt 0.706215 0.750000 +vt 0.711864 0.738636 +vt 0.711864 0.750000 +vt 0.711864 0.772727 +vt 0.711864 0.795455 +vt 0.711864 0.761364 +vt 0.717514 0.795455 +vt 0.723164 0.772727 +vt 0.714689 0.738636 +vt 0.717514 0.750000 +vt 0.714689 0.806818 +vt 0.723164 0.784091 +vt 0.723164 0.761364 +vt 0.709040 0.738636 +vt 0.711864 0.727273 +vt 0.711864 0.818182 +vt 0.723164 0.750000 +vt 0.742938 0.761364 +vt 0.742938 0.784091 +vt 0.723164 0.727273 +vt 0.742938 0.738636 +vt 0.723164 0.738636 +vt 0.723164 0.806818 +vt 0.742938 0.818182 +vt 0.723164 0.818182 +vt 0.723164 0.795455 +vt 0.742938 0.806818 +vt 0.742938 0.750000 +vt 0.742938 0.772727 +vt 0.742938 0.795455 +vt 0.858757 0.943182 +vt 0.867232 0.909091 +vt 0.867232 0.943182 +vt 0.926554 0.909091 +vt 0.926554 0.943182 +vt 0.909605 0.909091 +vt 0.892655 0.909091 +vt 0.875706 0.909091 +vt 0.892655 0.892045 +vt 0.867232 0.903409 +vt 0.884181 0.875000 +vt 0.926554 0.892045 +vt 0.858757 0.892045 +vt 0.867232 0.875000 +vt 0.884181 0.903409 +vt 0.858757 0.875000 +vt 0.926554 0.647727 +vt 0.935028 0.619318 +vt 0.935028 0.647727 +vt 0.943503 0.647727 +vt 0.951977 0.619318 +vt 0.951977 0.647727 +vt 0.968927 0.647727 +vt 0.960452 0.630682 +vt 0.968927 0.642045 +vt 0.951977 0.676136 +vt 0.926554 0.664773 +vt 0.935028 0.676136 +vt 0.985876 0.653409 +vt 0.994350 0.647727 +vt 0.994350 0.664773 +vt 0.960452 0.664773 +vt 0.960452 0.647727 +vt 0.943503 0.681818 +vt 0.968927 0.653409 +vt 0.935028 0.715909 +vt 0.943503 0.715909 +vt 0.951977 0.715909 +vt 0.960452 0.681818 +vt 0.960452 0.715909 +vt 0.968927 0.715909 +vt 0.977401 0.681818 +vt 0.977401 0.715909 +vt 0.985876 0.715909 +vt 0.994350 0.681818 +vt 0.994350 0.715909 +vt 0.926554 0.715909 +vt 0.935028 0.681818 +vt 0.951977 0.681818 +vt 0.968927 0.681818 +vt 0.985876 0.681818 +vt 0.985876 0.647727 +vt 0.994350 0.630682 +vt 0.943503 0.613636 +vt 0.977401 0.647727 +vt 0.985876 0.642045 +vt 0.943503 0.409091 +vt 0.951977 0.380682 +vt 0.951977 0.409091 +vt 0.960452 0.409091 +vt 0.968927 0.380682 +vt 0.968927 0.409091 +vt 0.985876 0.409091 +vt 0.977401 0.392045 +vt 0.985876 0.403409 +vt 0.960452 0.443182 +vt 0.968927 0.437500 +vt 0.951977 0.437500 +vt 0.943503 0.426136 +vt 0.935028 0.409091 +vt 0.977401 0.409091 +vt 0.977401 0.426136 +vt 0.985876 0.414773 +vt 0.935028 0.613636 +vt 0.943503 0.443182 +vt 0.926554 0.613636 +vt 0.935028 0.443182 +vt 0.985876 0.613636 +vt 0.994350 0.443182 +vt 0.994350 0.613636 +vt 0.977401 0.613636 +vt 0.985876 0.443182 +vt 0.968927 0.613636 +vt 0.977401 0.443182 +vt 0.960452 0.613636 +vt 0.968927 0.443182 +vt 0.951977 0.613636 +vt 0.951977 0.443182 +vt 0.943503 0.392045 +vt 0.960452 0.375000 +vt 0.935028 0.414773 +vt 0.926554 0.409091 +vt 0.935028 0.403409 +vt 0.994350 0.409091 +vt 0.951977 0.375000 +vt 0.960452 0.181818 +vt 0.968927 0.375000 +vt 0.977401 0.181818 +vt 0.977401 0.375000 +vt 0.935028 0.375000 +vt 0.943503 0.181818 +vt 0.943503 0.375000 +vt 0.985876 0.375000 +vt 0.994350 0.181818 +vt 0.994350 0.375000 +vt 0.926554 0.375000 +vt 0.935028 0.181818 +vt 0.951977 0.181818 +vt 0.968927 0.181818 +vt 0.985876 0.181818 +vt 0.918079 0.801136 +vt 0.867232 0.840909 +vt 0.875706 0.829545 +vt 0.858757 0.840909 +vt 0.867232 0.829545 +vt 0.926554 0.840909 +vt 0.918079 0.829545 +vt 0.926554 0.829545 +vt 0.909605 0.840909 +vt 0.918079 0.840909 +vt 0.901130 0.840909 +vt 0.909605 0.829545 +vt 0.892655 0.840909 +vt 0.901130 0.829545 +vt 0.884181 0.840909 +vt 0.884181 0.829545 +vt 0.892655 0.761364 +vt 0.867232 0.801136 +vt 0.858757 0.795455 +vt 0.867232 0.789773 +vt 0.926554 0.795455 +vt 0.884181 0.761364 +vt 0.892655 0.636364 +vt 0.901130 0.761364 +vt 0.909605 0.636364 +vt 0.909605 0.761364 +vt 0.867232 0.761364 +vt 0.875706 0.636364 +vt 0.875706 0.761364 +vt 0.918079 0.761364 +vt 0.926554 0.636364 +vt 0.926554 0.761364 +vt 0.858757 0.761364 +vt 0.867232 0.636364 +vt 0.884181 0.636364 +vt 0.901130 0.636364 +vt 0.918079 0.636364 +vt 0.694915 0.909091 +vt 0.694915 0.897727 +vt 0.697740 0.897727 +vt 0.692090 0.897727 +vt 0.694915 0.818182 +vt 0.697740 0.829545 +vt 0.694915 0.829545 +vt 0.692090 0.829545 +vt 0.694915 0.840909 +vt 0.706215 0.852273 +vt 0.694915 0.852273 +vt 0.694915 0.875000 +vt 0.706215 0.863636 +vt 0.706215 0.875000 +vt 0.694915 0.886364 +vt 0.700565 0.840909 +vt 0.694915 0.863636 +vt 0.700565 0.886364 +vt 0.689266 0.840909 +vt 0.683616 0.852273 +vt 0.689266 0.886364 +vt 0.683616 0.863636 +vt 0.683616 0.875000 +vt 0.632768 0.829545 +vt 0.683616 0.840909 +vt 0.632768 0.840909 +vt 0.632768 0.852273 +vt 0.632768 0.863636 +vt 0.632768 0.875000 +vt 0.683616 0.886364 +vt 0.632768 0.886364 +vt 0.632768 0.897727 +vt 0.683616 0.909091 +vt 0.632768 0.909091 +vt 0.632768 0.818182 +vt 0.683616 0.829545 +vt 0.683616 0.897727 +vt 0.632768 0.795455 +vt 0.700565 0.806818 +vt 0.632768 0.806818 +vt 0.632768 0.772727 +vt 0.700565 0.784091 +vt 0.632768 0.784091 +vt 0.632768 0.750000 +vt 0.700565 0.761364 +vt 0.632768 0.761364 +vt 0.632768 0.727273 +vt 0.700565 0.738636 +vt 0.632768 0.738636 +vt 0.700565 0.818182 +vt 0.632768 0.818182 +vt 0.700565 0.795455 +vt 0.700565 0.772727 +vt 0.700565 0.750000 +vt 0.711864 0.784091 +vt 0.706215 0.795455 +vt 0.711864 0.806818 +vt 0.709040 0.806818 +vt 0.706215 0.750000 +vt 0.711864 0.738636 +vt 0.711864 0.750000 +vt 0.711864 0.772727 +vt 0.711864 0.795455 +vt 0.711864 0.761364 +vt 0.717514 0.795455 +vt 0.723164 0.761364 +vt 0.723164 0.772727 +vt 0.717514 0.750000 +vt 0.714689 0.806818 +vt 0.723164 0.784091 +vt 0.709040 0.738636 +vt 0.711864 0.727273 +vt 0.714689 0.738636 +vt 0.711864 0.818182 +vt 0.723164 0.750000 +vt 0.742938 0.761364 +vt 0.742938 0.784091 +vt 0.723164 0.727273 +vt 0.742938 0.738636 +vt 0.723164 0.738636 +vt 0.723164 0.806818 +vt 0.742938 0.818182 +vt 0.723164 0.818182 +vt 0.723164 0.795455 +vt 0.742938 0.806818 +vt 0.742938 0.750000 +vt 0.742938 0.772727 +vt 0.742938 0.795455 +vt 0.694915 0.909091 +vt 0.697740 0.897727 +vt 0.694915 0.897727 +vt 0.692090 0.897727 +vt 0.694915 0.818182 +vt 0.694915 0.829545 +vt 0.697740 0.829545 +vt 0.692090 0.829545 +vt 0.706215 0.852273 +vt 0.694915 0.840909 +vt 0.694915 0.852273 +vt 0.694915 0.875000 +vt 0.706215 0.863636 +vt 0.694915 0.863636 +vt 0.700565 0.886364 +vt 0.694915 0.886364 +vt 0.700565 0.840909 +vt 0.706215 0.875000 +vt 0.689266 0.840909 +vt 0.683616 0.852273 +vt 0.689266 0.886364 +vt 0.683616 0.875000 +vt 0.683616 0.863636 +vt 0.683616 0.840909 +vt 0.632768 0.829545 +vt 0.632768 0.840909 +vt 0.632768 0.852273 +vt 0.632768 0.863636 +vt 0.683616 0.886364 +vt 0.632768 0.875000 +vt 0.632768 0.886364 +vt 0.683616 0.909091 +vt 0.632768 0.897727 +vt 0.632768 0.909091 +vt 0.683616 0.829545 +vt 0.632768 0.818182 +vt 0.683616 0.897727 +vt 0.700565 0.806818 +vt 0.632768 0.795455 +vt 0.632768 0.806818 +vt 0.700565 0.784091 +vt 0.632768 0.772727 +vt 0.632768 0.784091 +vt 0.700565 0.761364 +vt 0.632768 0.750000 +vt 0.632768 0.761364 +vt 0.700565 0.738636 +vt 0.632768 0.727273 +vt 0.632768 0.738636 +vt 0.700565 0.818182 +vt 0.632768 0.818182 +vt 0.700565 0.795455 +vt 0.700565 0.772727 +vt 0.700565 0.750000 +vt 0.711864 0.784091 +vt 0.711864 0.806818 +vt 0.706215 0.795455 +vt 0.709040 0.806818 +vt 0.706215 0.750000 +vt 0.711864 0.738636 +vt 0.709040 0.738636 +vt 0.711864 0.772727 +vt 0.711864 0.795455 +vt 0.711864 0.750000 +vt 0.717514 0.795455 +vt 0.723164 0.772727 +vt 0.711864 0.761364 +vt 0.717514 0.750000 +vt 0.723164 0.761364 +vt 0.711864 0.727273 +vt 0.714689 0.738636 +vt 0.711864 0.818182 +vt 0.714689 0.806818 +vt 0.742938 0.761364 +vt 0.723164 0.750000 +vt 0.742938 0.784091 +vt 0.723164 0.784091 +vt 0.742938 0.738636 +vt 0.723164 0.727273 +vt 0.723164 0.738636 +vt 0.742938 0.818182 +vt 0.723164 0.806818 +vt 0.723164 0.818182 +vt 0.742938 0.806818 +vt 0.723164 0.795455 +vt 0.742938 0.750000 +vt 0.742938 0.772727 +vt 0.742938 0.795455 +vt 0.694915 0.909091 +vt 0.697740 0.897727 +vt 0.694915 0.897727 +vt 0.692090 0.897727 +vt 0.694915 0.818182 +vt 0.694915 0.829545 +vt 0.697740 0.829545 +vt 0.692090 0.829545 +vt 0.706215 0.852273 +vt 0.694915 0.840909 +vt 0.694915 0.852273 +vt 0.694915 0.875000 +vt 0.706215 0.863636 +vt 0.694915 0.863636 +vt 0.700565 0.886364 +vt 0.694915 0.886364 +vt 0.700565 0.840909 +vt 0.706215 0.875000 +vt 0.689266 0.840909 +vt 0.683616 0.852273 +vt 0.689266 0.886364 +vt 0.683616 0.875000 +vt 0.683616 0.863636 +vt 0.683616 0.840909 +vt 0.632768 0.829545 +vt 0.632768 0.840909 +vt 0.632768 0.852273 +vt 0.632768 0.863636 +vt 0.683616 0.886364 +vt 0.632768 0.875000 +vt 0.632768 0.886364 +vt 0.683616 0.909091 +vt 0.632768 0.897727 +vt 0.632768 0.909091 +vt 0.683616 0.829545 +vt 0.632768 0.818182 +vt 0.683616 0.897727 +vt 0.700565 0.806818 +vt 0.632768 0.795455 +vt 0.632768 0.806818 +vt 0.700565 0.784091 +vt 0.632768 0.772727 +vt 0.632768 0.784091 +vt 0.700565 0.761364 +vt 0.632768 0.750000 +vt 0.632768 0.761364 +vt 0.700565 0.738636 +vt 0.632768 0.727273 +vt 0.632768 0.738636 +vt 0.700565 0.818182 +vt 0.632768 0.818182 +vt 0.700565 0.795455 +vt 0.700565 0.772727 +vt 0.700565 0.750000 +vt 0.711864 0.784091 +vt 0.711864 0.806818 +vt 0.706215 0.795455 +vt 0.709040 0.806818 +vt 0.706215 0.750000 +vt 0.711864 0.738636 +vt 0.709040 0.738636 +vt 0.711864 0.772727 +vt 0.711864 0.795455 +vt 0.711864 0.750000 +vt 0.717514 0.795455 +vt 0.723164 0.772727 +vt 0.711864 0.761364 +vt 0.717514 0.750000 +vt 0.723164 0.761364 +vt 0.711864 0.727273 +vt 0.714689 0.738636 +vt 0.711864 0.818182 +vt 0.714689 0.806818 +vt 0.742938 0.761364 +vt 0.723164 0.750000 +vt 0.742938 0.784091 +vt 0.723164 0.784091 +vt 0.742938 0.738636 +vt 0.723164 0.727273 +vt 0.723164 0.738636 +vt 0.742938 0.818182 +vt 0.723164 0.806818 +vt 0.723164 0.818182 +vt 0.742938 0.806818 +vt 0.723164 0.795455 +vt 0.742938 0.750000 +vt 0.742938 0.772727 +vt 0.742938 0.795455 +vt 0.994350 0.545455 +vt 0.994350 0.545455 +vt 0.646893 0.704545 +vt 0.646893 0.704545 +vt 0.646893 0.704545 +vt 0.683616 0.818182 +vt 0.700565 0.727273 +vt 0.742938 0.727273 +vt 0.858757 0.909091 +vt 0.858757 0.857955 +vt 0.926554 0.630682 +vt 0.926554 0.681818 +vt 0.926554 0.443182 +vt 0.926554 0.181818 +vt 0.858757 0.829545 +vt 0.858757 0.636364 +vt 0.683616 0.818182 +vt 0.700565 0.727273 +vt 0.742938 0.727273 +vt 0.683616 0.818182 +vt 0.700565 0.727273 +vt 0.742938 0.727273 +vt 0.683616 0.818182 +vt 0.700565 0.727273 +vt 0.742938 0.727273 +vn 0.0000 -1.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 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.5547 0.8321 0.0000 +vn 0.5547 0.8321 0.0000 +vn 0.7071 0.0000 -0.7071 +vn -0.7071 0.0000 -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.0000 0.7071 0.7071 +vn -0.8660 -0.5000 0.0000 +vn 0.5000 0.8660 0.0000 +vn 0.8660 0.5000 0.0000 +vn -0.5000 0.8660 0.0000 +vn 0.8660 -0.5000 0.0000 +vn 0.5000 -0.8660 0.0000 +vn -0.5000 -0.8660 0.0000 +vn -0.8660 0.5000 0.0000 +vn 0.7194 0.6794 0.1448 +vn 0.9824 -0.0000 0.1866 +vn 0.0473 -0.9987 0.0196 +vn 0.5294 -0.6630 0.5294 +vn 0.0671 -0.9955 0.0671 +vn 0.0473 0.9987 0.0196 +vn -0.4617 0.7574 -0.4617 +vn 0.0671 0.9955 0.0671 +vn 0.5294 0.6630 0.5294 +vn 0.7194 -0.6794 0.1448 +vn -0.4617 -0.7574 -0.4617 +vn 0.0196 -0.9987 0.0473 +vn -0.1363 -0.7263 -0.6737 +vn 0.1448 -0.6794 0.7194 +vn 0.0196 0.9987 0.0473 +vn 0.1448 0.6794 0.7194 +vn 0.7574 -0.4617 0.4617 +vn 0.7263 -0.6737 0.1363 +vn -0.0000 -0.7071 0.7071 +vn 0.7263 -0.1363 0.6737 +vn -0.7263 -0.6737 0.1363 +vn -0.7574 -0.4617 0.4617 +vn -0.7263 -0.1363 0.6737 +vn -0.6794 0.7194 -0.1448 +vn 0.0000 0.9824 -0.1866 +vn 0.9955 0.0671 -0.0671 +vn 0.6794 0.7194 -0.1448 +vn 0.9987 0.0473 -0.0196 +vn -0.9987 0.0473 -0.0196 +vn -0.9955 0.0671 -0.0671 +vn 0.6794 0.1448 -0.7194 +vn 0.7071 -0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.1944 0.0000 -0.9809 +vn -0.6303 0.7311 -0.2611 +vn -0.1363 0.7263 -0.6737 +vn -0.6303 -0.7311 -0.2611 +vn 0.7150 -0.6333 0.2962 +vn 0.9239 0.0000 0.3827 +vn 0.7150 0.6333 0.2962 +vn 0.0948 -0.9947 0.0393 +vn 0.0948 0.9947 0.0393 +vn 0.1866 -0.0000 0.9824 +vn 0.0000 -0.7071 -0.7071 +vn -0.6737 -0.7263 -0.1363 +vn -0.6737 0.7263 -0.1363 +vn -0.6794 0.1448 -0.7194 +vn -0.9987 0.0196 -0.0473 +vn 0.9987 0.0196 -0.0473 +vn 0.0000 0.1866 -0.9824 +vn 0.6630 0.5294 -0.5294 +vn -0.6630 0.5294 -0.5294 +vn -0.1944 0.0000 0.9809 +vn -0.6303 0.7311 0.2611 +vn -0.4617 0.7574 0.4617 +vn -0.1363 0.7263 0.6737 +vn -0.4617 -0.7574 0.4617 +vn -0.6303 -0.7311 0.2611 +vn -0.1363 -0.7263 0.6737 +vn 0.7150 -0.6333 -0.2962 +vn 0.0671 -0.9955 -0.0671 +vn 0.5294 -0.6630 -0.5294 +vn 0.5294 0.6630 -0.5294 +vn 0.9239 0.0000 -0.3827 +vn 0.0948 0.9947 -0.0393 +vn 0.0671 0.9955 -0.0671 +vn 0.0948 -0.9947 -0.0393 +vn 0.7150 0.6333 -0.2962 +vn 0.0196 -0.9987 -0.0473 +vn 0.1448 -0.6794 -0.7194 +vn 0.0196 0.9987 -0.0473 +vn 0.1448 0.6794 -0.7194 +vn 0.1866 -0.0000 -0.9824 +vn 0.0473 0.9987 -0.0196 +vn 0.9824 -0.0000 -0.1866 +vn 0.0473 -0.9987 -0.0196 +vn 0.7194 -0.6794 -0.1448 +vn -0.6737 -0.7263 0.1363 +vn -0.6737 0.7263 0.1363 +vn 0.7194 0.6794 -0.1448 +s off +f 35/45/16 34/46/16 33/47/16 +f 38/48/17 39/49/17 37/50/17 +f 35/51/18 40/52/18 36/53/18 +f 34/54/19 37/50/19 33/55/19 +f 36/56/20 38/48/20 34/46/20 +f 33/57/21 39/49/21 35/58/21 +f 58/59/22 61/60/22 57/61/22 +f 46/62/22 49/63/22 45/64/22 +f 44/65/20 47/66/20 42/67/20 +f 41/68/21 45/69/21 43/70/21 +f 43/71/18 48/72/18 44/73/18 +f 42/67/19 46/74/19 41/68/19 +f 51/75/17 49/63/17 50/76/17 +f 45/77/18 52/78/18 48/72/18 +f 47/66/19 50/76/19 46/74/19 +f 48/79/23 51/75/23 47/80/23 +f 56/81/20 59/82/20 54/83/20 +f 53/84/21 57/85/21 55/86/21 +f 55/87/18 60/88/18 56/89/18 +f 54/83/19 58/90/19 53/84/19 +f 63/91/17 61/60/17 62/92/17 +f 57/93/18 64/94/18 60/88/18 +f 59/82/19 62/92/19 58/90/19 +f 60/95/23 63/91/23 59/96/23 +f 70/97/22 73/98/22 69/99/22 +f 68/100/20 71/101/20 66/102/20 +f 65/103/21 69/104/21 67/105/21 +f 67/106/18 72/107/18 68/108/18 +f 66/102/19 70/109/19 65/103/19 +f 75/110/17 73/98/17 74/111/17 +f 69/112/18 76/113/18 72/107/18 +f 71/101/19 74/111/19 70/109/19 +f 72/114/23 75/110/23 71/115/23 +f 82/116/22 85/117/22 81/118/22 +f 80/119/20 83/120/20 78/121/20 +f 77/122/21 81/123/21 79/124/21 +f 79/125/18 84/126/18 80/127/18 +f 78/121/19 82/128/19 77/122/19 +f 87/129/17 85/117/17 86/130/17 +f 81/131/18 88/132/18 84/126/18 +f 83/120/19 86/130/19 82/128/19 +f 84/133/23 87/129/23 83/134/23 +f 91/135/20 90/136/20 89/137/20 +f 91/135/23 94/138/23 92/139/23 +f 93/140/17 96/141/17 94/138/17 +f 95/142/22 98/143/22 96/141/22 +f 97/144/21 100/145/21 98/143/21 +f 105/146/22 110/147/22 104/148/22 +f 103/149/23 108/150/23 102/151/23 +f 106/152/21 111/153/21 105/146/21 +f 104/148/17 109/154/17 103/149/17 +f 108/150/20 101/155/20 102/151/20 +f 117/156/22 122/157/22 116/158/22 +f 115/159/23 120/160/23 114/161/23 +f 118/162/21 123/163/21 117/156/21 +f 116/158/17 121/164/17 115/159/17 +f 120/160/20 113/165/20 114/161/20 +f 147/166/19 137/167/19 141/168/19 +f 152/169/18 150/170/18 160/171/18 +f 257/172/20 279/173/20 259/174/20 +f 260/175/21 277/176/21 258/177/21 +f 258/177/18 280/178/18 257/172/18 +f 259/174/19 278/179/19 260/180/19 +f 179/181/20 185/182/20 177/183/20 +f 173/184/20 184/185/20 175/186/20 +f 175/187/19 183/188/19 176/189/19 +f 176/190/21 181/191/21 174/192/21 +f 174/193/18 182/194/18 173/195/18 +f 178/196/17 181/197/17 177/198/17 +f 179/199/17 184/200/17 180/201/17 +f 177/183/17 183/202/17 179/181/17 +f 180/203/17 182/204/17 178/205/17 +f 185/182/17 188/206/17 186/207/17 +f 177/198/19 186/207/19 178/196/19 +f 178/205/21 188/206/21 180/203/21 +f 180/201/18 187/208/18 179/199/18 +f 189/209/17 192/210/17 190/211/17 +f 199/212/20 205/213/20 197/214/20 +f 193/215/20 204/216/20 195/217/20 +f 195/218/19 203/219/19 196/220/19 +f 196/221/21 201/222/21 194/223/21 +f 194/224/18 202/225/18 193/226/18 +f 198/227/17 201/228/17 197/229/17 +f 199/230/17 204/231/17 200/232/17 +f 197/214/17 203/233/17 199/212/17 +f 200/234/17 202/235/17 198/236/17 +f 205/213/17 208/237/17 206/238/17 +f 197/229/19 206/238/19 198/227/19 +f 198/236/21 208/237/21 200/234/21 +f 200/232/18 207/239/18 199/230/18 +f 209/240/17 212/241/17 210/242/17 +f 219/243/20 225/244/20 217/245/20 +f 213/246/20 224/247/20 215/248/20 +f 215/249/19 223/250/19 216/251/19 +f 216/252/21 221/253/21 214/254/21 +f 214/255/18 222/256/18 213/257/18 +f 218/258/17 221/259/17 217/260/17 +f 219/261/17 224/262/17 220/263/17 +f 217/245/17 223/264/17 219/243/17 +f 220/265/17 222/266/17 218/267/17 +f 225/244/17 228/268/17 226/269/17 +f 217/260/19 226/269/19 218/258/19 +f 218/267/21 228/268/21 220/265/21 +f 220/263/18 227/270/18 219/261/18 +f 229/271/17 232/272/17 230/273/17 +f 239/274/20 245/275/20 237/276/20 +f 233/277/20 244/278/20 235/279/20 +f 235/280/19 243/281/19 236/282/19 +f 236/283/21 241/284/21 234/285/21 +f 234/286/18 242/287/18 233/288/18 +f 238/289/17 241/290/17 237/291/17 +f 239/292/17 244/293/17 240/294/17 +f 237/276/17 243/295/17 239/274/17 +f 240/296/17 242/297/17 238/298/17 +f 245/275/17 248/299/17 246/300/17 +f 237/291/19 246/300/19 238/289/19 +f 238/298/21 248/299/21 240/296/21 +f 240/294/18 247/301/18 239/292/18 +f 249/302/17 252/303/17 250/304/17 +f 255/305/19 284/306/19 256/307/19 +f 357/308/17 355/309/17 356/310/17 +f 267/311/17 266/312/17 268/313/17 +f 262/314/19 268/313/19 261/315/19 +f 263/316/18 265/317/18 264/318/18 +f 261/319/21 266/312/21 263/320/21 +f 264/321/20 267/311/20 262/322/20 +f 273/323/20 270/324/20 275/325/20 +f 276/326/21 271/327/21 274/328/21 +f 274/329/18 272/330/18 273/331/18 +f 275/332/19 269/333/19 276/334/19 +f 270/324/17 271/327/17 269/333/17 +f 365/335/17 363/336/17 364/337/17 +f 255/338/17 278/339/17 253/340/17 +f 253/341/17 279/173/17 254/342/17 +f 254/343/17 280/178/17 256/344/17 +f 256/307/17 277/176/17 255/305/17 +f 254/342/18 282/345/18 253/341/18 +f 256/344/21 283/346/21 254/343/21 +f 253/340/20 281/347/20 255/338/20 +f 286/348/19 298/349/19 287/350/19 +f 288/351/20 300/352/20 291/353/20 +f 292/354/18 294/355/18 289/356/18 +f 288/351/17 292/354/17 290/357/17 +f 300/352/24 292/358/24 291/353/24 +f 290/357/25 294/359/25 293/360/25 +f 296/361/26 286/362/26 285/363/26 +f 288/351/27 298/364/27 297/365/27 +f 290/357/21 296/361/21 285/363/21 +f 301/366/17 304/367/17 303/368/17 +f 336/369/17 337/370/17 335/371/17 +f 336/369/18 342/372/18 341/373/18 +f 338/374/21 341/375/21 339/376/21 +f 335/371/20 340/377/20 342/378/20 +f 337/370/19 339/379/19 340/380/19 +f 351/381/18 358/382/18 354/383/18 +f 349/384/17 347/385/17 348/386/17 +f 346/387/20 349/384/20 344/388/20 +f 343/389/21 347/385/21 345/390/21 +f 345/391/18 350/392/18 346/393/18 +f 344/394/19 348/386/19 343/395/19 +f 353/396/19 356/310/19 352/397/19 +f 354/398/20 357/308/20 353/399/20 +f 352/400/21 355/309/21 351/401/21 +f 359/402/18 366/403/18 362/404/18 +f 361/405/19 364/337/19 360/406/19 +f 362/407/20 365/335/20 361/408/20 +f 360/409/21 363/336/21 359/410/21 +f 373/411/17 371/412/17 372/413/17 +f 367/414/18 374/415/18 370/416/18 +f 369/417/19 372/413/19 368/418/19 +f 370/419/20 373/411/20 369/420/20 +f 368/421/21 371/412/21 367/422/21 +f 381/423/17 379/424/17 380/425/17 +f 375/426/18 382/427/18 378/428/18 +f 377/429/19 380/425/19 376/430/19 +f 378/431/20 381/423/20 377/432/20 +f 376/433/21 379/424/21 375/434/21 +f 389/435/17 387/436/17 388/437/17 +f 383/438/18 390/439/18 386/440/18 +f 385/441/19 388/437/19 384/442/19 +f 386/443/20 389/435/20 385/444/20 +f 384/445/21 387/436/21 383/446/21 +f 601/447/20 598/448/20 597/449/20 +f 598/450/20 604/451/20 599/452/20 +f 606/453/20 597/454/20 600/455/20 +f 597/454/20 605/456/20 601/457/20 +f 602/458/20 603/459/20 598/450/20 +f 609/460/21 612/461/21 607/462/21 +f 614/463/21 609/464/21 610/465/21 +f 607/466/21 616/467/21 608/468/21 +f 607/466/21 612/469/21 615/470/21 +f 611/471/21 609/464/21 613/472/21 +f 622/473/20 623/474/20 618/475/20 +f 615/470/28 601/447/28 605/456/28 +f 617/476/20 625/477/20 621/478/20 +f 616/467/18 605/456/18 606/453/18 +f 613/472/19 604/451/19 603/459/19 +f 611/479/29 603/459/29 602/480/29 +f 612/461/17 602/480/17 601/447/17 +f 626/481/20 617/476/20 620/482/20 +f 618/475/20 624/483/20 619/484/20 +f 621/485/20 618/486/20 617/487/20 +f 629/488/21 632/489/21 627/490/21 +f 634/491/21 629/492/21 630/493/21 +f 627/494/21 636/495/21 628/496/21 +f 627/494/21 632/497/21 635/498/21 +f 631/499/21 629/492/21 633/500/21 +f 635/498/28 621/485/28 625/477/28 +f 636/495/18 625/477/18 626/481/18 +f 633/500/19 624/483/19 623/474/19 +f 631/501/29 623/474/29 622/502/29 +f 632/489/17 622/502/17 621/485/17 +f 35/45/16 36/56/16 34/46/16 +f 38/48/17 40/52/17 39/49/17 +f 35/51/18 39/49/18 40/52/18 +f 34/54/19 38/48/19 37/50/19 +f 36/56/20 40/52/20 38/48/20 +f 33/57/21 37/50/21 39/49/21 +f 58/59/22 62/92/22 61/60/22 +f 46/62/22 50/76/22 49/63/22 +f 44/65/20 48/503/20 47/66/20 +f 41/68/21 46/74/21 45/69/21 +f 43/71/18 45/77/18 48/72/18 +f 42/67/19 47/66/19 46/74/19 +f 51/75/17 52/78/17 49/63/17 +f 45/77/18 49/63/18 52/78/18 +f 47/66/19 51/75/19 50/76/19 +f 48/79/23 52/78/23 51/75/23 +f 56/81/20 60/504/20 59/82/20 +f 53/84/21 58/90/21 57/85/21 +f 55/87/18 57/93/18 60/88/18 +f 54/83/19 59/82/19 58/90/19 +f 63/91/17 64/94/17 61/60/17 +f 57/93/18 61/60/18 64/94/18 +f 59/82/19 63/91/19 62/92/19 +f 60/95/23 64/94/23 63/91/23 +f 70/97/22 74/111/22 73/98/22 +f 68/100/20 72/505/20 71/101/20 +f 65/103/21 70/109/21 69/104/21 +f 67/106/18 69/112/18 72/107/18 +f 66/102/19 71/101/19 70/109/19 +f 75/110/17 76/113/17 73/98/17 +f 69/112/18 73/98/18 76/113/18 +f 71/101/19 75/110/19 74/111/19 +f 72/114/23 76/113/23 75/110/23 +f 82/116/22 86/130/22 85/117/22 +f 80/119/20 84/506/20 83/120/20 +f 77/122/21 82/128/21 81/123/21 +f 79/125/18 81/131/18 84/126/18 +f 78/121/19 83/120/19 82/128/19 +f 87/129/17 88/132/17 85/117/17 +f 81/131/18 85/117/18 88/132/18 +f 83/120/19 87/129/19 86/130/19 +f 84/133/23 88/132/23 87/129/23 +f 91/135/20 92/139/20 90/136/20 +f 91/135/23 93/140/23 94/138/23 +f 93/140/17 95/142/17 96/141/17 +f 95/142/22 97/144/22 98/143/22 +f 97/144/21 99/507/21 100/145/21 +f 105/146/22 111/153/22 110/147/22 +f 103/149/23 109/154/23 108/150/23 +f 106/152/21 112/508/21 111/153/21 +f 104/148/17 110/147/17 109/154/17 +f 108/150/20 107/509/20 101/155/20 +f 117/156/22 123/163/22 122/157/22 +f 115/159/23 121/164/23 120/160/23 +f 118/162/21 124/510/21 123/163/21 +f 116/158/17 122/157/17 121/164/17 +f 120/160/20 119/511/20 113/165/20 +f 137/167/19 138/512/19 139/513/19 +f 139/513/19 140/514/19 141/168/19 +f 141/168/19 142/515/19 145/516/19 +f 142/515/19 143/517/19 145/516/19 +f 143/517/19 144/518/19 145/516/19 +f 145/516/19 146/519/19 147/166/19 +f 147/166/19 148/520/19 137/167/19 +f 137/167/19 139/513/19 141/168/19 +f 145/516/19 147/166/19 141/168/19 +f 160/171/18 159/521/18 158/522/18 +f 158/522/18 157/523/18 156/524/18 +f 156/524/18 155/525/18 154/526/18 +f 154/526/18 153/527/18 152/169/18 +f 152/169/18 151/528/18 150/170/18 +f 150/170/18 149/529/18 160/171/18 +f 160/171/18 158/522/18 156/524/18 +f 156/524/18 154/526/18 160/171/18 +f 154/526/18 152/169/18 160/171/18 +f 257/172/20 280/178/20 279/173/20 +f 260/175/21 278/339/21 277/176/21 +f 258/177/18 277/176/18 280/178/18 +f 259/174/19 279/173/19 278/179/19 +f 179/181/20 187/208/20 185/182/20 +f 173/184/20 182/204/20 184/185/20 +f 175/187/19 184/200/19 183/188/19 +f 176/190/21 183/202/21 181/191/21 +f 174/193/18 181/197/18 182/194/18 +f 178/196/17 182/194/17 181/197/17 +f 179/199/17 183/188/17 184/200/17 +f 177/183/17 181/191/17 183/202/17 +f 180/203/17 184/185/17 182/204/17 +f 185/182/17 187/208/17 188/206/17 +f 177/198/19 185/182/19 186/207/19 +f 178/205/21 186/207/21 188/206/21 +f 180/201/18 188/206/18 187/208/18 +f 189/209/17 191/530/17 192/210/17 +f 199/212/20 207/239/20 205/213/20 +f 193/215/20 202/235/20 204/216/20 +f 195/218/19 204/231/19 203/219/19 +f 196/221/21 203/233/21 201/222/21 +f 194/224/18 201/228/18 202/225/18 +f 198/227/17 202/225/17 201/228/17 +f 199/230/17 203/219/17 204/231/17 +f 197/214/17 201/222/17 203/233/17 +f 200/234/17 204/216/17 202/235/17 +f 205/213/17 207/239/17 208/237/17 +f 197/229/19 205/213/19 206/238/19 +f 198/236/21 206/238/21 208/237/21 +f 200/232/18 208/237/18 207/239/18 +f 209/240/17 211/531/17 212/241/17 +f 219/243/20 227/270/20 225/244/20 +f 213/246/20 222/266/20 224/247/20 +f 215/249/19 224/262/19 223/250/19 +f 216/252/21 223/264/21 221/253/21 +f 214/255/18 221/259/18 222/256/18 +f 218/258/17 222/256/17 221/259/17 +f 219/261/17 223/250/17 224/262/17 +f 217/245/17 221/253/17 223/264/17 +f 220/265/17 224/247/17 222/266/17 +f 225/244/17 227/270/17 228/268/17 +f 217/260/19 225/244/19 226/269/19 +f 218/267/21 226/269/21 228/268/21 +f 220/263/18 228/268/18 227/270/18 +f 229/271/17 231/532/17 232/272/17 +f 239/274/20 247/301/20 245/275/20 +f 233/277/20 242/297/20 244/278/20 +f 235/280/19 244/293/19 243/281/19 +f 236/283/21 243/295/21 241/284/21 +f 234/286/18 241/290/18 242/287/18 +f 238/289/17 242/287/17 241/290/17 +f 239/292/17 243/281/17 244/293/17 +f 237/276/17 241/284/17 243/295/17 +f 240/296/17 244/278/17 242/297/17 +f 245/275/17 247/301/17 248/299/17 +f 237/291/19 245/275/19 246/300/19 +f 238/298/21 246/300/21 248/299/21 +f 240/294/18 248/299/18 247/301/18 +f 249/302/17 251/533/17 252/303/17 +f 255/305/19 281/534/19 284/306/19 +f 357/308/17 358/382/17 355/309/17 +f 267/311/17 265/317/17 266/312/17 +f 262/314/19 267/311/19 268/313/19 +f 263/316/18 266/312/18 265/317/18 +f 261/319/21 268/313/21 266/312/21 +f 264/321/20 265/317/20 267/311/20 +f 273/323/20 272/330/20 270/324/20 +f 276/326/21 269/333/21 271/327/21 +f 274/329/18 271/327/18 272/330/18 +f 275/332/19 270/324/19 269/333/19 +f 270/324/17 272/330/17 271/327/17 +f 365/335/17 366/403/17 363/336/17 +f 255/338/17 277/176/17 278/339/17 +f 253/341/17 278/179/17 279/173/17 +f 254/343/17 279/173/17 280/178/17 +f 256/307/17 280/178/17 277/176/17 +f 254/342/18 283/535/18 282/345/18 +f 256/344/21 284/536/21 283/346/21 +f 253/340/20 282/537/20 281/347/20 +f 286/348/19 295/538/19 298/349/19 +f 288/351/20 297/365/20 300/352/20 +f 292/354/18 299/539/18 294/355/18 +f 290/357/17 285/363/17 286/348/17 +f 286/348/17 287/350/17 288/351/17 +f 288/351/17 291/353/17 292/354/17 +f 292/354/17 289/356/17 290/357/17 +f 290/357/17 286/348/17 288/351/17 +f 300/352/24 299/540/24 292/358/24 +f 290/357/25 289/541/25 294/359/25 +f 296/361/26 295/542/26 286/362/26 +f 288/351/27 287/543/27 298/364/27 +f 290/357/21 293/360/21 296/361/21 +f 301/366/17 302/544/17 304/367/17 +f 336/369/17 338/374/17 337/370/17 +f 336/369/18 335/371/18 342/372/18 +f 338/374/21 336/369/21 341/375/21 +f 335/371/20 337/370/20 340/377/20 +f 337/370/19 338/374/19 339/379/19 +f 351/381/18 355/309/18 358/382/18 +f 349/384/17 350/392/17 347/385/17 +f 346/387/20 350/392/20 349/384/20 +f 343/389/21 348/386/21 347/385/21 +f 345/391/18 347/385/18 350/392/18 +f 344/394/19 349/384/19 348/386/19 +f 353/396/19 357/308/19 356/310/19 +f 354/398/20 358/382/20 357/308/20 +f 352/400/21 356/310/21 355/309/21 +f 359/402/18 363/336/18 366/403/18 +f 361/405/19 365/335/19 364/337/19 +f 362/407/20 366/403/20 365/335/20 +f 360/409/21 364/337/21 363/336/21 +f 373/411/17 374/415/17 371/412/17 +f 367/414/18 371/412/18 374/415/18 +f 369/417/19 373/411/19 372/413/19 +f 370/419/20 374/415/20 373/411/20 +f 368/421/21 372/413/21 371/412/21 +f 381/423/17 382/427/17 379/424/17 +f 375/426/18 379/424/18 382/427/18 +f 377/429/19 381/423/19 380/425/19 +f 378/431/20 382/427/20 381/423/20 +f 376/433/21 380/425/21 379/424/21 +f 389/435/17 390/439/17 387/436/17 +f 383/438/18 387/436/18 390/439/18 +f 385/441/19 389/435/19 388/437/19 +f 386/443/20 390/439/20 389/435/20 +f 384/445/21 388/437/21 387/436/21 +f 601/447/20 602/480/20 598/448/20 +f 598/450/20 603/459/20 604/451/20 +f 606/453/20 605/456/20 597/454/20 +f 609/460/21 611/479/21 612/461/21 +f 614/463/21 613/472/21 609/464/21 +f 607/466/21 615/470/21 616/467/21 +f 615/470/28 612/461/28 601/447/28 +f 616/467/18 615/470/18 605/456/18 +f 613/472/19 614/463/19 604/451/19 +f 611/479/29 613/472/29 603/459/29 +f 612/461/17 611/479/17 602/480/17 +f 626/481/20 625/477/20 617/476/20 +f 618/475/20 623/474/20 624/483/20 +f 621/485/20 622/502/20 618/486/20 +f 629/488/21 631/501/21 632/489/21 +f 634/491/21 633/500/21 629/492/21 +f 627/494/21 635/498/21 636/495/21 +f 635/498/28 632/489/28 621/485/28 +f 636/495/18 635/498/18 625/477/18 +f 633/500/19 634/491/19 624/483/19 +f 631/501/29 633/500/29 623/474/29 +f 632/489/17 631/501/17 622/502/17 +s 1 +f 129/545/30 140/546/21 128/547/21 +f 136/548/31 147/549/32 135/550/32 +f 126/551/33 137/552/17 125/553/17 +f 133/554/34 144/555/35 132/556/35 +f 130/557/36 141/558/30 129/545/30 +f 125/553/17 148/559/31 136/548/31 +f 127/560/37 138/561/33 126/551/33 +f 134/562/20 145/563/34 133/554/34 +f 131/564/16 142/565/36 130/557/36 +f 128/547/21 139/566/37 127/560/37 +f 135/550/32 146/567/20 134/562/20 +f 132/556/35 143/568/16 131/569/16 +f 165/570/36 154/571/16 166/572/16 +f 163/573/21 150/574/37 151/575/21 +f 169/576/20 158/577/32 170/578/32 +f 166/579/16 155/580/35 167/581/35 +f 163/573/21 152/582/30 164/583/30 +f 170/578/32 159/584/31 171/585/31 +f 172/586/17 149/587/33 161/588/33 +f 167/581/35 156/589/34 168/590/34 +f 164/583/30 153/591/36 165/570/36 +f 171/585/31 160/592/17 172/586/17 +f 161/588/33 150/574/37 162/593/37 +f 168/590/34 157/594/20 169/576/20 +f 588/595/38 574/596/27 587/597/39 +f 585/598/40 573/599/41 572/600/42 +f 568/601/43 570/602/44 569/603/45 +f 588/595/38 569/603/45 305/604/46 +f 587/597/39 573/599/41 586/605/47 +f 571/606/48 309/607/49 310/608/50 +f 574/596/27 308/609/51 573/599/41 +f 305/604/46 312/610/52 306/611/53 +f 331/612/54 512/613/55 326/614/56 +f 325/615/57 331/612/54 326/614/56 +f 513/616/58 330/617/59 326/614/56 +f 327/618/60 326/614/56 330/617/59 +f 334/619/28 508/620/61 509/621/62 +f 332/622/63 510/623/64 511/624/65 +f 330/617/59 514/625/66 329/626/67 +f 315/627/19 327/628/60 314/629/26 +f 317/630/20 325/631/57 316/632/27 +f 319/633/18 323/634/68 318/635/24 +f 403/636/16 396/637/69 395/638/16 +f 401/639/21 394/640/70 393/641/21 +f 399/642/17 392/643/71 391/644/17 +f 406/645/72 391/644/17 398/646/72 +f 404/647/69 397/648/20 396/637/69 +f 402/649/70 395/650/16 394/640/70 +f 400/651/71 393/641/21 392/643/71 +f 405/652/20 398/646/72 397/648/20 +f 419/653/16 412/654/69 411/655/16 +f 417/656/21 410/657/70 409/658/21 +f 415/659/17 408/660/71 407/661/17 +f 422/662/72 407/661/17 414/663/72 +f 420/664/69 413/665/20 412/654/69 +f 418/666/70 411/667/16 410/657/70 +f 416/668/71 409/658/21 408/660/71 +f 421/669/20 414/663/72 413/665/20 +f 435/670/16 428/671/69 427/672/16 +f 433/673/21 426/674/70 425/675/21 +f 431/676/17 424/677/71 423/678/17 +f 438/679/72 423/678/17 430/680/72 +f 436/681/69 429/682/20 428/671/69 +f 434/683/70 427/684/16 426/674/70 +f 432/685/71 425/675/21 424/677/71 +f 437/686/20 430/680/72 429/682/20 +f 453/687/73 452/688/44 439/689/74 +f 453/687/73 454/690/75 452/688/44 +f 453/691/73 445/692/76 446/693/48 +f 446/693/48 460/694/50 453/691/73 +f 447/695/42 443/696/77 448/697/41 +f 450/698/46 442/699/78 441/700/79 +f 451/701/45 439/689/74 452/688/44 +f 446/693/48 444/702/80 447/695/42 +f 448/697/41 442/699/78 449/703/27 +f 451/701/45 441/700/79 440/704/81 +f 459/705/49 448/697/41 458/706/51 +f 455/707/52 450/698/46 451/701/45 +f 458/706/51 449/703/27 457/708/82 +f 459/705/49 446/693/48 447/695/42 +f 455/707/52 452/688/44 454/690/75 +f 457/708/82 450/698/46 456/709/53 +f 461/710/83 459/711/49 462/712/16 +f 463/713/56 457/708/82 464/714/19 +f 465/715/29 455/716/52 466/717/17 +f 467/718/28 453/719/73 468/720/18 +f 468/721/18 460/722/50 461/710/83 +f 462/712/16 458/706/51 463/713/56 +f 464/714/19 456/709/53 465/715/29 +f 466/717/17 454/723/75 467/718/28 +f 471/724/17 483/725/75 470/726/28 +f 473/727/19 481/728/53 472/729/29 +f 475/730/16 479/731/51 474/732/56 +f 469/733/18 477/734/50 476/735/83 +f 470/726/28 484/736/25 469/737/18 +f 472/729/29 482/738/52 471/724/17 +f 474/732/56 480/739/82 473/727/19 +f 476/735/83 478/740/49 475/730/16 +f 480/739/82 487/741/46 481/728/53 +f 482/742/52 485/743/44 483/744/75 +f 478/745/49 491/746/48 490/747/42 +f 479/731/51 488/748/27 480/739/82 +f 481/728/53 486/749/45 482/742/52 +f 479/731/51 490/747/42 489/750/41 +f 487/741/46 497/751/43 486/749/45 +f 489/750/41 495/752/39 488/748/27 +f 490/747/42 492/753/84 493/754/40 +f 485/743/44 497/751/43 498/755/85 +f 487/741/46 495/752/39 496/756/38 +f 490/747/42 494/757/47 489/750/41 +f 491/746/48 477/758/50 484/759/25 +f 484/759/25 492/753/84 491/746/48 +f 484/760/25 483/744/75 485/743/44 +f 484/760/25 485/743/44 498/755/85 +f 493/761/40 503/762/69 494/757/47 +f 495/752/39 501/763/72 496/756/38 +f 484/764/25 505/765/70 492/766/84 +f 498/767/85 506/768/21 484/769/25 +f 497/770/43 499/771/71 498/767/85 +f 492/766/84 504/772/16 493/761/40 +f 494/757/47 502/773/20 495/752/39 +f 496/756/38 500/774/17 497/770/43 +f 313/775/21 321/776/86 320/777/25 +f 314/629/26 328/778/87 313/779/21 +f 316/632/27 326/780/56 315/627/19 +f 318/635/24 324/781/88 317/630/20 +f 320/777/25 322/782/89 319/633/18 +f 324/783/88 331/612/54 325/615/57 +f 321/784/86 334/619/28 322/782/89 +f 324/783/88 333/785/90 332/622/63 +f 328/786/87 330/617/59 329/626/67 +f 328/787/87 507/788/91 321/784/86 +f 322/782/89 333/785/90 323/789/68 +f 331/612/54 511/624/65 512/613/55 +f 334/619/28 510/623/64 333/785/90 +f 329/790/67 508/620/61 507/788/91 +f 528/791/67 521/792/61 522/793/91 +f 523/794/28 519/795/64 524/796/90 +f 526/797/54 518/798/65 517/799/55 +f 534/800/68 523/794/28 524/796/90 +f 529/801/87 522/793/91 536/802/86 +f 530/803/60 528/804/67 529/805/87 +f 533/806/88 524/796/90 525/807/63 +f 536/802/86 523/794/28 535/808/89 +f 533/806/88 526/797/54 532/809/57 +f 537/810/25 535/808/89 538/811/18 +f 539/812/24 533/813/88 540/814/20 +f 541/815/27 531/816/56 542/817/19 +f 543/818/26 529/819/87 544/820/21 +f 544/821/21 536/822/86 537/810/25 +f 538/811/18 534/823/68 539/812/24 +f 540/814/20 532/824/57 541/815/27 +f 542/817/19 530/825/60 543/818/26 +f 527/826/59 515/827/66 528/804/67 +f 525/807/63 519/795/64 518/798/65 +f 522/793/91 520/828/62 523/794/28 +f 530/803/60 531/829/56 527/826/59 +f 516/830/58 527/826/59 531/829/56 +f 532/809/57 526/797/54 531/829/56 +f 526/797/54 517/799/55 531/829/56 +f 558/831/45 551/832/53 552/833/46 +f 553/834/27 549/835/51 554/836/41 +f 556/837/48 548/838/49 547/839/50 +f 565/840/39 554/836/41 564/841/47 +f 566/842/38 558/831/45 552/833/46 +f 559/843/43 557/844/44 558/831/45 +f 564/841/47 555/845/42 563/846/40 +f 565/840/39 552/833/46 553/834/27 +f 563/846/40 556/837/48 562/847/84 +f 521/848/61 559/849/43 520/828/62 +f 515/850/66 560/851/85 521/848/61 +f 516/852/58 561/853/25 515/854/66 +f 531/855/56 562/856/84 516/852/58 +f 517/857/55 563/858/40 531/855/56 +f 518/859/65 564/860/47 517/857/55 +f 519/861/64 565/840/39 518/859/65 +f 520/828/62 566/862/38 519/861/64 +f 557/844/44 545/863/52 558/831/45 +f 555/845/42 549/835/51 548/838/49 +f 553/834/27 551/832/53 550/864/82 +f 560/865/85 561/866/25 557/844/44 +f 546/867/75 557/844/44 561/866/25 +f 562/847/84 556/837/48 561/868/25 +f 556/837/48 547/839/50 561/868/25 +f 551/869/53 580/870/19 550/864/82 +f 549/871/51 578/872/16 548/873/49 +f 546/874/75 575/875/17 545/876/52 +f 547/877/50 582/878/18 561/879/25 +f 561/880/25 576/881/28 546/874/75 +f 545/876/52 581/882/29 551/869/53 +f 550/864/82 579/883/56 549/871/51 +f 548/873/49 577/884/83 547/877/50 +f 585/598/40 571/606/48 584/885/84 +f 508/886/61 568/887/43 509/621/62 +f 514/888/66 567/889/85 508/886/61 +f 514/890/66 584/891/84 583/892/25 +f 326/893/56 584/891/84 513/894/58 +f 512/895/55 585/896/40 326/893/56 +f 511/897/65 586/898/47 512/895/55 +f 510/899/64 587/597/39 511/897/65 +f 509/621/62 588/900/38 510/899/64 +f 570/602/44 312/610/52 569/603/45 +f 573/599/41 309/607/49 572/600/42 +f 574/596/27 306/611/53 307/901/82 +f 567/902/85 583/903/25 570/602/44 +f 311/904/75 570/602/44 583/903/25 +f 584/885/84 571/606/48 583/905/25 +f 571/606/48 310/608/50 583/905/25 +f 306/906/53 594/907/19 307/901/82 +f 308/908/51 592/909/16 309/910/49 +f 311/911/75 589/912/17 312/913/52 +f 310/914/50 596/915/18 583/916/25 +f 583/917/25 590/918/28 311/911/75 +f 312/913/52 595/919/29 306/906/53 +f 307/901/82 593/920/56 308/908/51 +f 309/910/49 591/921/83 310/914/50 +f 651/922/73 650/923/44 637/924/74 +f 651/922/73 652/925/75 650/923/44 +f 651/926/73 643/927/76 644/928/48 +f 644/928/48 658/929/50 651/926/73 +f 645/930/42 641/931/77 646/932/41 +f 648/933/46 640/934/78 639/935/79 +f 649/936/45 637/924/74 650/923/44 +f 644/928/48 642/937/80 645/930/42 +f 646/932/41 640/934/78 647/938/27 +f 649/936/45 639/935/79 638/939/81 +f 657/940/49 646/932/41 656/941/51 +f 653/942/52 648/933/46 649/936/45 +f 656/941/51 647/938/27 655/943/82 +f 657/940/49 644/928/48 645/930/42 +f 653/942/52 650/923/44 652/925/75 +f 655/943/82 648/933/46 654/944/53 +f 659/945/83 657/946/49 660/947/16 +f 661/948/56 655/943/82 662/949/19 +f 663/950/29 653/951/52 664/952/17 +f 665/953/28 651/954/73 666/955/18 +f 666/956/18 658/957/50 659/945/83 +f 660/947/16 656/941/51 661/948/56 +f 662/949/19 654/944/53 663/950/29 +f 664/952/17 652/958/75 665/953/28 +f 669/959/17 681/960/75 668/961/28 +f 671/962/19 679/963/53 670/964/29 +f 673/965/16 677/966/51 672/967/56 +f 667/968/18 675/969/50 674/970/83 +f 668/961/28 682/971/25 667/972/18 +f 670/964/29 680/973/52 669/959/17 +f 672/967/56 678/974/82 671/962/19 +f 674/970/83 676/975/49 673/965/16 +f 678/974/82 685/976/46 679/963/53 +f 680/977/52 683/978/44 681/979/75 +f 676/980/49 689/981/48 688/982/42 +f 677/966/51 686/983/27 678/974/82 +f 679/963/53 684/984/45 680/977/52 +f 677/966/51 688/982/42 687/985/41 +f 685/976/46 695/986/43 684/984/45 +f 686/983/27 692/987/47 693/988/39 +f 689/981/48 691/989/40 688/982/42 +f 684/984/45 696/990/85 683/978/44 +f 685/976/46 693/988/39 694/991/38 +f 688/982/42 692/987/47 687/985/41 +f 689/981/48 675/992/50 682/993/25 +f 682/993/25 690/994/84 689/981/48 +f 682/995/25 681/979/75 683/978/44 +f 682/995/25 683/978/44 696/990/85 +f 691/996/40 701/997/69 692/987/47 +f 693/988/39 699/998/72 694/991/38 +f 682/999/25 703/1000/70 690/1001/84 +f 696/1002/85 704/1003/21 682/1004/25 +f 695/1005/43 697/1006/71 696/1002/85 +f 690/1001/84 702/1007/16 691/996/40 +f 692/987/47 700/1008/20 693/988/39 +f 694/991/38 698/1009/17 695/1005/43 +f 719/1010/92 705/1011/93 718/1012/94 +f 719/1010/92 718/1012/94 720/1013/95 +f 719/1014/92 712/1015/96 711/1016/97 +f 712/1015/96 719/1014/92 726/1017/98 +f 709/1018/99 713/1019/100 714/1020/101 +f 716/1021/102 708/1022/103 715/1023/24 +f 718/1012/94 706/1024/104 717/1025/105 +f 710/1026/106 712/1015/96 713/1019/100 +f 708/1022/103 714/1020/101 715/1023/24 +f 717/1025/105 707/1027/107 716/1021/102 +f 714/1020/101 725/1028/108 724/1029/109 +f 721/1030/110 716/1021/102 722/1031/111 +f 715/1023/24 724/1029/109 723/1032/112 +f 725/1028/108 712/1015/96 726/1017/98 +f 718/1012/94 721/1030/110 720/1013/95 +f 716/1021/102 723/1032/112 722/1031/111 +f 725/1033/108 727/1034/56 728/1035/16 +f 723/1032/112 729/1036/83 730/1037/18 +f 721/1038/110 731/1039/28 732/1040/17 +f 719/1041/92 733/1042/29 734/1043/19 +f 726/1044/98 734/1045/19 727/1034/56 +f 724/1029/109 728/1035/16 729/1036/83 +f 722/1031/111 730/1037/18 731/1039/28 +f 720/1046/95 732/1040/17 733/1042/29 +f 749/1047/95 737/1048/17 736/1049/29 +f 747/1050/111 739/1051/18 738/1052/28 +f 745/1053/109 741/1054/16 740/1055/83 +f 743/1056/98 735/1057/19 742/1058/56 +f 750/1059/26 736/1049/29 735/1060/19 +f 748/1061/110 738/1052/28 737/1048/17 +f 746/1062/112 740/1055/83 739/1051/18 +f 744/1063/108 742/1058/56 741/1054/16 +f 753/1064/102 746/1062/112 747/1050/111 +f 751/1065/94 748/1066/110 749/1067/95 +f 744/1068/108 757/1069/96 743/1070/98 +f 754/1071/24 745/1053/109 746/1062/112 +f 752/1072/105 747/1050/111 748/1066/110 +f 745/1053/109 756/1073/100 744/1068/108 +f 763/1074/113 753/1064/102 752/1072/105 +f 761/1075/114 755/1076/101 754/1071/24 +f 759/1077/115 757/1069/96 756/1073/100 +f 751/1065/94 763/1074/113 752/1072/105 +f 753/1064/102 761/1075/114 754/1071/24 +f 760/1078/116 756/1073/100 755/1076/101 +f 757/1069/96 750/1079/26 743/1070/98 +f 750/1079/26 757/1069/96 758/1080/117 +f 750/1081/26 751/1065/94 749/1067/95 +f 750/1081/26 764/1082/118 751/1065/94 +f 769/1083/69 759/1084/115 760/1078/116 +f 767/1085/72 761/1075/114 762/1086/119 +f 771/1087/70 750/1088/26 758/1089/117 +f 772/1090/21 764/1091/118 750/1092/26 +f 765/1093/71 763/1094/113 764/1091/118 +f 770/1095/16 758/1089/117 759/1084/115 +f 768/1096/20 760/1078/116 761/1075/114 +f 766/1097/17 762/1086/119 763/1094/113 +f 787/1098/92 773/1099/93 786/1100/94 +f 787/1098/92 786/1100/94 788/1101/95 +f 787/1102/92 780/1103/96 779/1104/97 +f 780/1103/96 787/1102/92 794/1105/98 +f 777/1106/99 781/1107/100 782/1108/101 +f 784/1109/102 776/1110/103 783/1111/24 +f 786/1100/94 774/1112/104 785/1113/105 +f 778/1114/106 780/1103/96 781/1107/100 +f 776/1110/103 782/1108/101 783/1111/24 +f 785/1113/105 775/1115/107 784/1109/102 +f 782/1108/101 793/1116/108 792/1117/109 +f 789/1118/110 784/1109/102 790/1119/111 +f 783/1111/24 792/1117/109 791/1120/112 +f 793/1116/108 780/1103/96 794/1105/98 +f 786/1100/94 789/1118/110 788/1101/95 +f 784/1109/102 791/1120/112 790/1119/111 +f 793/1121/108 795/1122/56 796/1123/16 +f 791/1120/112 797/1124/83 798/1125/18 +f 789/1126/110 799/1127/28 800/1128/17 +f 787/1129/92 801/1130/29 802/1131/19 +f 794/1132/98 802/1133/19 795/1122/56 +f 792/1117/109 796/1123/16 797/1124/83 +f 790/1119/111 798/1125/18 799/1127/28 +f 788/1134/95 800/1128/17 801/1130/29 +f 817/1135/95 805/1136/17 804/1137/29 +f 815/1138/111 807/1139/18 806/1140/28 +f 813/1141/109 809/1142/16 808/1143/83 +f 811/1144/98 803/1145/19 810/1146/56 +f 818/1147/26 804/1137/29 803/1148/19 +f 816/1149/110 806/1140/28 805/1136/17 +f 814/1150/112 808/1143/83 807/1139/18 +f 812/1151/108 810/1146/56 809/1142/16 +f 821/1152/102 814/1150/112 815/1138/111 +f 819/1153/94 816/1154/110 817/1155/95 +f 812/1156/108 825/1157/96 811/1158/98 +f 822/1159/24 813/1141/109 814/1150/112 +f 820/1160/105 815/1138/111 816/1154/110 +f 813/1141/109 824/1161/100 812/1156/108 +f 831/1162/113 821/1152/102 820/1160/105 +f 829/1163/114 823/1164/101 822/1159/24 +f 827/1165/115 825/1157/96 824/1161/100 +f 819/1153/94 831/1162/113 820/1160/105 +f 821/1152/102 829/1163/114 822/1159/24 +f 828/1166/116 824/1161/100 823/1164/101 +f 825/1157/96 818/1167/26 811/1158/98 +f 818/1167/26 825/1157/96 826/1168/117 +f 818/1169/26 819/1153/94 817/1155/95 +f 818/1169/26 832/1170/118 819/1153/94 +f 837/1171/69 827/1172/115 828/1166/116 +f 835/1173/72 829/1163/114 830/1174/119 +f 839/1175/70 818/1176/26 826/1177/117 +f 840/1178/21 832/1179/118 818/1180/26 +f 833/1181/71 831/1182/113 832/1179/118 +f 838/1183/16 826/1177/117 827/1172/115 +f 836/1184/20 828/1166/116 829/1163/114 +f 834/1185/17 830/1174/119 831/1182/113 +f 129/545/30 141/558/30 140/546/21 +f 136/548/31 148/559/31 147/549/32 +f 126/551/33 138/561/33 137/552/17 +f 133/554/34 145/563/34 144/555/35 +f 130/557/36 142/565/36 141/558/30 +f 125/553/17 137/552/17 148/559/31 +f 127/560/37 139/566/37 138/561/33 +f 134/562/20 146/567/20 145/563/34 +f 131/564/16 143/1186/16 142/565/36 +f 128/547/21 140/546/21 139/566/37 +f 135/550/32 147/549/32 146/567/20 +f 132/556/35 144/555/35 143/568/16 +f 165/570/36 153/591/36 154/571/16 +f 163/573/21 162/593/37 150/574/37 +f 169/576/20 157/594/20 158/577/32 +f 166/579/16 154/1187/16 155/580/35 +f 163/573/21 151/575/21 152/582/30 +f 170/578/32 158/577/32 159/584/31 +f 172/586/17 160/592/17 149/587/33 +f 167/581/35 155/580/35 156/589/34 +f 164/583/30 152/582/30 153/591/36 +f 171/585/31 159/584/31 160/592/17 +f 161/588/33 149/587/33 150/574/37 +f 168/590/34 156/589/34 157/594/20 +f 588/595/38 305/604/46 574/596/27 +f 585/598/40 586/605/47 573/599/41 +f 568/601/43 567/902/85 570/602/44 +f 588/595/38 568/601/43 569/603/45 +f 587/597/39 574/596/27 573/599/41 +f 571/606/48 572/600/42 309/607/49 +f 574/596/27 307/901/82 308/609/51 +f 305/604/46 569/603/45 312/610/52 +f 334/619/28 507/788/91 508/620/61 +f 332/622/63 333/785/90 510/623/64 +f 330/617/59 513/616/58 514/625/66 +f 315/627/19 326/780/56 327/628/60 +f 317/630/20 324/781/88 325/631/57 +f 319/633/18 322/782/89 323/634/68 +f 403/636/16 404/647/69 396/637/69 +f 401/639/21 402/649/70 394/640/70 +f 399/642/17 400/651/71 392/643/71 +f 406/645/72 399/642/17 391/644/17 +f 404/647/69 405/652/20 397/648/20 +f 402/649/70 403/1188/16 395/650/16 +f 400/651/71 401/639/21 393/641/21 +f 405/652/20 406/645/72 398/646/72 +f 419/653/16 420/664/69 412/654/69 +f 417/656/21 418/666/70 410/657/70 +f 415/659/17 416/668/71 408/660/71 +f 422/662/72 415/659/17 407/661/17 +f 420/664/69 421/669/20 413/665/20 +f 418/666/70 419/1189/16 411/667/16 +f 416/668/71 417/656/21 409/658/21 +f 421/669/20 422/662/72 414/663/72 +f 435/670/16 436/681/69 428/671/69 +f 433/673/21 434/683/70 426/674/70 +f 431/676/17 432/685/71 424/677/71 +f 438/679/72 431/676/17 423/678/17 +f 436/681/69 437/686/20 429/682/20 +f 434/683/70 435/1190/16 427/684/16 +f 432/685/71 433/673/21 425/675/21 +f 437/686/20 438/679/72 430/680/72 +f 447/695/42 444/702/80 443/696/77 +f 450/698/46 449/703/27 442/699/78 +f 451/701/45 440/704/81 439/689/74 +f 446/693/48 445/692/76 444/702/80 +f 448/697/41 443/696/77 442/699/78 +f 451/701/45 450/698/46 441/700/79 +f 459/705/49 447/695/42 448/697/41 +f 455/707/52 456/709/53 450/698/46 +f 458/706/51 448/697/41 449/703/27 +f 459/705/49 460/694/50 446/693/48 +f 455/707/52 451/701/45 452/688/44 +f 457/708/82 449/703/27 450/698/46 +f 461/710/83 460/722/50 459/711/49 +f 463/713/56 458/706/51 457/708/82 +f 465/715/29 456/709/53 455/716/52 +f 467/718/28 454/723/75 453/719/73 +f 468/721/18 453/1191/73 460/722/50 +f 462/712/16 459/711/49 458/706/51 +f 464/714/19 457/708/82 456/709/53 +f 466/717/17 455/716/52 454/723/75 +f 471/724/17 482/738/52 483/725/75 +f 473/727/19 480/739/82 481/728/53 +f 475/730/16 478/740/49 479/731/51 +f 469/733/18 484/1192/25 477/734/50 +f 470/726/28 483/725/75 484/736/25 +f 472/729/29 481/728/53 482/738/52 +f 474/732/56 479/731/51 480/739/82 +f 476/735/83 477/734/50 478/740/49 +f 480/739/82 488/748/27 487/741/46 +f 482/742/52 486/749/45 485/743/44 +f 478/745/49 477/758/50 491/746/48 +f 479/731/51 489/750/41 488/748/27 +f 481/728/53 487/741/46 486/749/45 +f 479/731/51 478/745/49 490/747/42 +f 487/741/46 496/756/38 497/751/43 +f 489/750/41 494/757/47 495/752/39 +f 490/747/42 491/746/48 492/753/84 +f 485/743/44 486/749/45 497/751/43 +f 487/741/46 488/748/27 495/752/39 +f 490/747/42 493/754/40 494/757/47 +f 493/761/40 504/772/16 503/762/69 +f 495/752/39 502/773/20 501/763/72 +f 484/764/25 506/1193/21 505/765/70 +f 498/767/85 499/771/71 506/768/21 +f 497/770/43 500/774/17 499/771/71 +f 492/766/84 505/765/70 504/772/16 +f 494/757/47 503/762/69 502/773/20 +f 496/756/38 501/763/72 500/774/17 +f 313/775/21 328/1194/87 321/776/86 +f 314/629/26 327/628/60 328/778/87 +f 316/632/27 325/631/57 326/780/56 +f 318/635/24 323/634/68 324/781/88 +f 320/777/25 321/776/86 322/782/89 +f 324/783/88 332/622/63 331/612/54 +f 321/784/86 507/788/91 334/619/28 +f 324/783/88 323/789/68 333/785/90 +f 328/786/87 327/618/60 330/617/59 +f 328/787/87 329/790/67 507/788/91 +f 322/782/89 334/619/28 333/785/90 +f 331/612/54 332/622/63 511/624/65 +f 334/619/28 509/621/62 510/623/64 +f 329/790/67 514/1195/66 508/620/61 +f 528/791/67 515/1196/66 521/792/61 +f 523/794/28 520/828/62 519/795/64 +f 526/797/54 525/807/63 518/798/65 +f 534/800/68 535/808/89 523/794/28 +f 529/801/87 528/791/67 522/793/91 +f 530/803/60 527/826/59 528/804/67 +f 533/806/88 534/800/68 524/796/90 +f 536/802/86 522/793/91 523/794/28 +f 533/806/88 525/807/63 526/797/54 +f 537/810/25 536/822/86 535/808/89 +f 539/812/24 534/823/68 533/813/88 +f 541/815/27 532/824/57 531/816/56 +f 543/818/26 530/825/60 529/819/87 +f 544/821/21 529/1197/87 536/822/86 +f 538/811/18 535/808/89 534/823/68 +f 540/814/20 533/813/88 532/824/57 +f 542/817/19 531/816/56 530/825/60 +f 527/826/59 516/830/58 515/827/66 +f 525/807/63 524/796/90 519/795/64 +f 522/793/91 521/792/61 520/828/62 +f 558/831/45 545/863/52 551/832/53 +f 553/834/27 550/864/82 549/835/51 +f 556/837/48 555/845/42 548/838/49 +f 565/840/39 553/834/27 554/836/41 +f 566/842/38 559/843/43 558/831/45 +f 559/843/43 560/865/85 557/844/44 +f 564/841/47 554/836/41 555/845/42 +f 565/840/39 566/842/38 552/833/46 +f 563/846/40 555/845/42 556/837/48 +f 521/848/61 560/851/85 559/849/43 +f 515/850/66 561/1198/25 560/851/85 +f 516/852/58 562/856/84 561/853/25 +f 531/855/56 563/858/40 562/856/84 +f 517/857/55 564/860/47 563/858/40 +f 518/859/65 565/840/39 564/860/47 +f 519/861/64 566/862/38 565/840/39 +f 520/828/62 559/849/43 566/862/38 +f 557/844/44 546/867/75 545/863/52 +f 555/845/42 554/836/41 549/835/51 +f 553/834/27 552/833/46 551/832/53 +f 551/869/53 581/882/29 580/870/19 +f 549/871/51 579/883/56 578/872/16 +f 546/874/75 576/881/28 575/875/17 +f 547/877/50 577/884/83 582/878/18 +f 561/880/25 582/1199/18 576/881/28 +f 545/876/52 575/875/17 581/882/29 +f 550/864/82 580/870/19 579/883/56 +f 548/873/49 578/872/16 577/884/83 +f 585/598/40 572/600/42 571/606/48 +f 508/886/61 567/889/85 568/887/43 +f 514/888/66 583/1200/25 567/889/85 +f 514/890/66 513/894/58 584/891/84 +f 326/893/56 585/896/40 584/891/84 +f 512/895/55 586/898/47 585/896/40 +f 511/897/65 587/597/39 586/898/47 +f 510/899/64 588/900/38 587/597/39 +f 509/621/62 568/887/43 588/900/38 +f 570/602/44 311/904/75 312/610/52 +f 573/599/41 308/609/51 309/607/49 +f 574/596/27 305/604/46 306/611/53 +f 306/906/53 595/919/29 594/907/19 +f 308/908/51 593/920/56 592/909/16 +f 311/911/75 590/918/28 589/912/17 +f 310/914/50 591/921/83 596/915/18 +f 583/917/25 596/1201/18 590/918/28 +f 312/913/52 589/912/17 595/919/29 +f 307/901/82 594/907/19 593/920/56 +f 309/910/49 592/909/16 591/921/83 +f 645/930/42 642/937/80 641/931/77 +f 648/933/46 647/938/27 640/934/78 +f 649/936/45 638/939/81 637/924/74 +f 644/928/48 643/927/76 642/937/80 +f 646/932/41 641/931/77 640/934/78 +f 649/936/45 648/933/46 639/935/79 +f 657/940/49 645/930/42 646/932/41 +f 653/942/52 654/944/53 648/933/46 +f 656/941/51 646/932/41 647/938/27 +f 657/940/49 658/929/50 644/928/48 +f 653/942/52 649/936/45 650/923/44 +f 655/943/82 647/938/27 648/933/46 +f 659/945/83 658/957/50 657/946/49 +f 661/948/56 656/941/51 655/943/82 +f 663/950/29 654/944/53 653/951/52 +f 665/953/28 652/958/75 651/954/73 +f 666/956/18 651/1202/73 658/957/50 +f 660/947/16 657/946/49 656/941/51 +f 662/949/19 655/943/82 654/944/53 +f 664/952/17 653/951/52 652/958/75 +f 669/959/17 680/973/52 681/960/75 +f 671/962/19 678/974/82 679/963/53 +f 673/965/16 676/975/49 677/966/51 +f 667/968/18 682/1203/25 675/969/50 +f 668/961/28 681/960/75 682/971/25 +f 670/964/29 679/963/53 680/973/52 +f 672/967/56 677/966/51 678/974/82 +f 674/970/83 675/969/50 676/975/49 +f 678/974/82 686/983/27 685/976/46 +f 680/977/52 684/984/45 683/978/44 +f 676/980/49 675/992/50 689/981/48 +f 677/966/51 687/985/41 686/983/27 +f 679/963/53 685/976/46 684/984/45 +f 677/966/51 676/980/49 688/982/42 +f 685/976/46 694/991/38 695/986/43 +f 686/983/27 687/985/41 692/987/47 +f 689/981/48 690/994/84 691/989/40 +f 684/984/45 695/986/43 696/990/85 +f 685/976/46 686/983/27 693/988/39 +f 688/982/42 691/989/40 692/987/47 +f 691/996/40 702/1007/16 701/997/69 +f 693/988/39 700/1008/20 699/998/72 +f 682/999/25 704/1204/21 703/1000/70 +f 696/1002/85 697/1006/71 704/1003/21 +f 695/1005/43 698/1009/17 697/1006/71 +f 690/1001/84 703/1000/70 702/1007/16 +f 692/987/47 701/997/69 700/1008/20 +f 694/991/38 699/998/72 698/1009/17 +f 709/1018/99 710/1026/106 713/1019/100 +f 716/1021/102 707/1027/107 708/1022/103 +f 718/1012/94 705/1011/93 706/1024/104 +f 710/1026/106 711/1016/97 712/1015/96 +f 708/1022/103 709/1018/99 714/1020/101 +f 717/1025/105 706/1024/104 707/1027/107 +f 714/1020/101 713/1019/100 725/1028/108 +f 721/1030/110 717/1025/105 716/1021/102 +f 715/1023/24 714/1020/101 724/1029/109 +f 725/1028/108 713/1019/100 712/1015/96 +f 718/1012/94 717/1025/105 721/1030/110 +f 716/1021/102 715/1023/24 723/1032/112 +f 725/1033/108 726/1044/98 727/1034/56 +f 723/1032/112 724/1029/109 729/1036/83 +f 721/1038/110 722/1031/111 731/1039/28 +f 719/1041/92 720/1046/95 733/1042/29 +f 726/1044/98 719/1205/92 734/1045/19 +f 724/1029/109 725/1033/108 728/1035/16 +f 722/1031/111 723/1032/112 730/1037/18 +f 720/1046/95 721/1038/110 732/1040/17 +f 749/1047/95 748/1061/110 737/1048/17 +f 747/1050/111 746/1062/112 739/1051/18 +f 745/1053/109 744/1063/108 741/1054/16 +f 743/1056/98 750/1206/26 735/1057/19 +f 750/1059/26 749/1047/95 736/1049/29 +f 748/1061/110 747/1050/111 738/1052/28 +f 746/1062/112 745/1053/109 740/1055/83 +f 744/1063/108 743/1056/98 742/1058/56 +f 753/1064/102 754/1071/24 746/1062/112 +f 751/1065/94 752/1072/105 748/1066/110 +f 744/1068/108 756/1073/100 757/1069/96 +f 754/1071/24 755/1076/101 745/1053/109 +f 752/1072/105 753/1064/102 747/1050/111 +f 745/1053/109 755/1076/101 756/1073/100 +f 763/1074/113 762/1086/119 753/1064/102 +f 761/1075/114 760/1078/116 755/1076/101 +f 759/1077/115 758/1080/117 757/1069/96 +f 751/1065/94 764/1082/118 763/1074/113 +f 753/1064/102 762/1086/119 761/1075/114 +f 760/1078/116 759/1077/115 756/1073/100 +f 769/1083/69 770/1095/16 759/1084/115 +f 767/1085/72 768/1096/20 761/1075/114 +f 771/1087/70 772/1207/21 750/1088/26 +f 772/1090/21 765/1093/71 764/1091/118 +f 765/1093/71 766/1097/17 763/1094/113 +f 770/1095/16 771/1087/70 758/1089/117 +f 768/1096/20 769/1083/69 760/1078/116 +f 766/1097/17 767/1085/72 762/1086/119 +f 777/1106/99 778/1114/106 781/1107/100 +f 784/1109/102 775/1115/107 776/1110/103 +f 786/1100/94 773/1099/93 774/1112/104 +f 778/1114/106 779/1104/97 780/1103/96 +f 776/1110/103 777/1106/99 782/1108/101 +f 785/1113/105 774/1112/104 775/1115/107 +f 782/1108/101 781/1107/100 793/1116/108 +f 789/1118/110 785/1113/105 784/1109/102 +f 783/1111/24 782/1108/101 792/1117/109 +f 793/1116/108 781/1107/100 780/1103/96 +f 786/1100/94 785/1113/105 789/1118/110 +f 784/1109/102 783/1111/24 791/1120/112 +f 793/1121/108 794/1132/98 795/1122/56 +f 791/1120/112 792/1117/109 797/1124/83 +f 789/1126/110 790/1119/111 799/1127/28 +f 787/1129/92 788/1134/95 801/1130/29 +f 794/1132/98 787/1208/92 802/1133/19 +f 792/1117/109 793/1121/108 796/1123/16 +f 790/1119/111 791/1120/112 798/1125/18 +f 788/1134/95 789/1126/110 800/1128/17 +f 817/1135/95 816/1149/110 805/1136/17 +f 815/1138/111 814/1150/112 807/1139/18 +f 813/1141/109 812/1151/108 809/1142/16 +f 811/1144/98 818/1209/26 803/1145/19 +f 818/1147/26 817/1135/95 804/1137/29 +f 816/1149/110 815/1138/111 806/1140/28 +f 814/1150/112 813/1141/109 808/1143/83 +f 812/1151/108 811/1144/98 810/1146/56 +f 821/1152/102 822/1159/24 814/1150/112 +f 819/1153/94 820/1160/105 816/1154/110 +f 812/1156/108 824/1161/100 825/1157/96 +f 822/1159/24 823/1164/101 813/1141/109 +f 820/1160/105 821/1152/102 815/1138/111 +f 813/1141/109 823/1164/101 824/1161/100 +f 831/1162/113 830/1174/119 821/1152/102 +f 829/1163/114 828/1166/116 823/1164/101 +f 827/1165/115 826/1168/117 825/1157/96 +f 819/1153/94 832/1170/118 831/1162/113 +f 821/1152/102 830/1174/119 829/1163/114 +f 828/1166/116 827/1165/115 824/1161/100 +f 837/1171/69 838/1183/16 827/1172/115 +f 835/1173/72 836/1184/20 829/1163/114 +f 839/1175/70 840/1210/21 818/1176/26 +f 840/1178/21 833/1181/71 832/1179/118 +f 833/1181/71 834/1185/17 831/1182/113 +f 838/1183/16 839/1175/70 826/1177/117 +f 836/1184/20 837/1171/69 828/1166/116 +f 834/1185/17 835/1173/72 830/1174/119 diff --git a/src/main/resources/assets/hbm/models/weapons/stg77.obj b/src/main/resources/assets/hbm/models/weapons/stg77.obj new file mode 100644 index 000000000..239e56bbb --- /dev/null +++ b/src/main/resources/assets/hbm/models/weapons/stg77.obj @@ -0,0 +1,4289 @@ +# Blender v2.79 (sub 0) OBJ File: 'stg77.blend' +# www.blender.org +o Cylinder +v 0.000000 0.187500 -3.000000 +v 0.000000 0.187500 6.500000 +v 0.093750 0.162380 -3.000000 +v 0.093750 0.162380 6.500000 +v 0.162380 0.093750 -3.000000 +v 0.162380 0.093750 6.500000 +v 0.187500 0.000000 -3.000000 +v 0.187500 -0.000000 6.500000 +v 0.162380 -0.093750 -3.000000 +v 0.162380 -0.093750 6.500000 +v 0.093750 -0.162380 -3.000000 +v 0.093750 -0.162380 6.500000 +v 0.000000 -0.187500 -3.000000 +v 0.000000 -0.187500 6.500000 +v -0.093750 -0.162380 -3.000000 +v -0.093750 -0.162380 6.500000 +v -0.162380 -0.093750 -3.000000 +v -0.162380 -0.093750 6.500000 +v -0.187500 -0.000000 -3.000000 +v -0.187500 -0.000000 6.500000 +v -0.162380 0.093750 -3.000000 +v -0.162380 0.093750 6.500000 +v -0.093750 0.162380 -3.000000 +v -0.093750 0.162380 6.500000 +v 0.000000 0.250000 6.500000 +v -0.125000 0.216506 6.500000 +v -0.216506 0.125000 6.500000 +v -0.250000 -0.000000 6.500000 +v -0.216506 -0.125000 6.500000 +v -0.125000 -0.216506 6.500000 +v 0.000000 -0.250000 6.500000 +v 0.125000 -0.216507 6.500000 +v 0.216506 -0.125000 6.500000 +v 0.250000 -0.000000 6.500000 +v 0.216506 0.125000 6.500000 +v 0.125000 0.216506 6.500000 +v 0.000000 0.250000 6.625000 +v -0.125000 0.216506 6.625000 +v -0.216506 0.125000 6.625000 +v -0.250000 -0.000000 6.625000 +v -0.216506 -0.125000 6.625000 +v -0.125000 -0.216506 6.625000 +v 0.000000 -0.250000 6.625000 +v 0.125000 -0.216507 6.625000 +v 0.216506 -0.125000 6.625000 +v 0.250000 -0.000000 6.625000 +v 0.216506 0.125000 6.625000 +v 0.125000 0.216506 6.625000 +v 0.000000 0.187500 6.625000 +v 0.093750 0.162380 6.625000 +v 0.162380 0.093750 6.625000 +v 0.187500 -0.000000 6.625000 +v 0.162380 -0.093750 6.625000 +v 0.093750 -0.162380 6.625000 +v 0.000000 -0.187500 6.625000 +v -0.093750 -0.162380 6.625000 +v -0.162380 -0.093750 6.625000 +v -0.187500 -0.000000 6.625000 +v -0.162380 0.093750 6.625000 +v -0.093750 0.162380 6.625000 +v 0.000000 0.250000 6.750000 +v -0.125000 0.216506 6.750000 +v -0.216506 0.125000 6.750000 +v -0.250000 -0.000000 6.750000 +v -0.216506 -0.125000 6.750000 +v -0.125000 -0.216506 6.750000 +v 0.000000 -0.250000 6.750000 +v 0.125000 -0.216507 6.750000 +v 0.216506 -0.125000 6.750000 +v 0.250000 -0.000000 6.750000 +v 0.216506 0.125000 6.750000 +v 0.125000 0.216506 6.750000 +v 0.000000 0.250000 7.000000 +v -0.125000 0.216506 7.000000 +v -0.216506 0.125000 7.000000 +v -0.250000 -0.000000 7.000000 +v -0.216506 -0.125000 7.000000 +v -0.125000 -0.216506 7.000000 +v 0.000000 -0.250000 7.000000 +v 0.125000 -0.216507 7.000000 +v 0.216506 -0.125000 7.000000 +v 0.250000 -0.000000 7.000000 +v 0.216506 0.125000 7.000000 +v 0.125000 0.216506 7.000000 +v 0.000000 0.187500 7.125000 +v 0.093750 0.162380 7.125000 +v 0.162380 0.093750 7.125000 +v 0.187500 -0.000000 7.125000 +v 0.162380 -0.093750 7.125000 +v 0.093750 -0.162380 7.125000 +v 0.000000 -0.187500 7.125000 +v -0.093750 -0.162380 7.125000 +v -0.162380 -0.093750 7.125000 +v -0.187500 -0.000000 7.125000 +v -0.162380 0.093750 7.125000 +v -0.093750 0.162380 7.125000 +v 0.000000 0.250000 7.125000 +v -0.125000 0.216506 7.125000 +v -0.216506 0.125000 7.125000 +v -0.250000 -0.000000 7.125000 +v -0.216506 -0.125000 7.125000 +v -0.125000 -0.216506 7.125000 +v 0.000000 -0.250000 7.125000 +v 0.125000 -0.216507 7.125000 +v 0.216506 -0.125000 7.125000 +v 0.250000 -0.000000 7.125000 +v 0.216506 0.125000 7.125000 +v 0.125000 0.216506 7.125000 +v 0.000000 0.250000 7.250000 +v -0.125000 0.216506 7.250000 +v -0.216506 0.125000 7.250000 +v -0.250000 -0.000000 7.250000 +v -0.216506 -0.125000 7.250000 +v -0.125000 -0.216506 7.250000 +v 0.000000 -0.250000 7.250000 +v 0.125000 -0.216507 7.250000 +v 0.216506 -0.125000 7.250000 +v 0.250000 -0.000000 7.250000 +v 0.216506 0.125000 7.250000 +v 0.125000 0.216506 7.250000 +v 0.000000 0.187500 7.875000 +v 0.093750 0.162380 7.875000 +v 0.162380 0.093750 7.875000 +v 0.125000 0.000000 6.750000 +v 0.162380 -0.093750 7.875000 +v 0.093750 -0.162380 7.875000 +v 0.000000 -0.187500 7.875000 +v -0.093750 -0.162380 7.875000 +v -0.162380 -0.093750 7.875000 +v 0.108253 -0.062500 6.750000 +v -0.162380 0.093750 7.875000 +v -0.093750 0.162380 7.875000 +v 0.000000 0.250000 7.875000 +v -0.125000 0.216506 7.875000 +v -0.216506 0.125000 7.875000 +v 0.062500 -0.108253 6.750000 +v -0.216506 -0.125000 7.875000 +v -0.125000 -0.216506 7.875000 +v 0.000000 -0.250000 7.875000 +v 0.125000 -0.216507 7.875000 +v 0.216506 -0.125000 7.875000 +v 0.000000 -0.125000 6.750000 +v 0.216506 0.125000 7.875000 +v 0.125000 0.216506 7.875000 +v 0.000000 0.250000 8.000000 +v -0.125000 0.216506 8.000000 +v -0.216506 0.125000 8.000000 +v -0.062500 -0.108253 6.750000 +v -0.216506 -0.125000 8.000000 +v -0.125000 -0.216506 8.000000 +v 0.000000 -0.250000 8.000000 +v 0.125000 -0.216507 8.000000 +v 0.216506 -0.125000 8.000000 +v -0.108253 -0.062500 6.750000 +v 0.216506 0.125000 8.000000 +v 0.125000 0.216506 8.000000 +v 0.000000 0.125000 7.875000 +v -0.062500 0.108253 7.875000 +v -0.108253 0.062500 7.875000 +v -0.125000 0.000000 6.750000 +v -0.108253 -0.062500 7.875000 +v -0.062500 -0.108254 7.875000 +v 0.000000 -0.125000 7.875000 +v 0.062500 -0.108254 7.875000 +v 0.108253 -0.062500 7.875000 +v -0.108253 0.062500 6.750000 +v 0.108253 0.062500 7.875000 +v 0.062500 0.108253 7.875000 +v 0.000000 0.125000 7.250000 +v -0.062500 0.108253 7.250000 +v -0.108253 0.062500 7.250000 +v -0.125000 -0.000000 7.250000 +v -0.108253 -0.062500 7.250000 +v -0.062500 -0.108254 7.250000 +v 0.000000 -0.125000 7.250000 +v 0.062500 -0.108254 7.250000 +v 0.108253 -0.062500 7.250000 +v 0.125000 -0.000000 7.250000 +v 0.108253 0.062500 7.250000 +v 0.062500 0.108253 7.250000 +v 0.000000 0.187500 8.000000 +v 0.093750 0.162380 8.000000 +v 0.162380 0.093750 8.000000 +v 0.000000 0.125000 6.750000 +v 0.162380 -0.093750 8.000000 +v 0.093750 -0.162380 8.000000 +v 0.000000 -0.187500 8.000000 +v -0.093750 -0.162380 8.000000 +v -0.162380 -0.093750 8.000000 +v -0.062500 0.108253 6.750000 +v -0.162380 0.093750 8.000000 +v -0.093750 0.162380 8.000000 +v 0.108253 0.062500 6.750000 +v 0.062500 0.108253 6.750000 +v 0.000000 0.250000 2.812500 +v -0.125000 0.216506 2.812500 +v -0.216506 0.125000 2.812500 +v -0.250000 -0.000000 2.812500 +v -0.216506 -0.125000 2.812500 +v -0.125000 -0.216506 2.812500 +v 0.000000 -0.250000 2.812500 +v 0.125000 -0.216507 2.812500 +v 0.216506 -0.125000 2.812500 +v 0.250000 -0.000000 2.812500 +v 0.216506 0.125000 2.812500 +v 0.125000 0.216506 2.812500 +v 0.000000 0.250000 3.750000 +v -0.125000 0.216506 3.750000 +v -0.216506 0.125000 3.750000 +v -0.250000 -0.000000 3.750000 +v -0.216506 -0.125000 3.750000 +v -0.125000 -0.216506 3.750000 +v 0.000000 -0.250000 3.750000 +v 0.125000 -0.216507 3.750000 +v 0.216506 -0.125000 3.750000 +v 0.250000 -0.000000 3.750000 +v 0.216506 0.125000 3.750000 +v 0.125000 0.216506 3.750000 +v 0.125000 0.312500 2.750000 +v -0.125000 0.312500 2.750000 +v -0.125000 0.437500 -7.500000 +v 0.125000 0.437500 -7.500000 +v 0.500000 -0.187500 2.750000 +v -0.500000 -0.187500 2.750000 +v -0.500000 -0.187500 -7.750000 +v 0.500000 -0.187500 -7.750000 +v -0.500000 -0.437500 -1.500000 +v 0.500000 -0.437500 2.750000 +v -0.500000 -0.437500 2.750000 +v 0.500000 -0.437500 -1.500000 +v -0.250000 -0.687500 -1.500000 +v 0.250000 -0.687500 2.750000 +v -0.250000 -0.687500 2.750000 +v 0.250000 -0.687500 -1.500000 +v -0.250000 -0.687500 2.750000 +v 0.250000 -0.687500 2.750000 +v -0.500000 -0.437500 2.750000 +v 0.500000 -0.437500 2.750000 +v -0.500000 -0.187500 2.750000 +v 0.500000 -0.187500 2.750000 +v -0.125000 0.312500 2.750000 +v 0.125000 0.312500 2.750000 +v -0.500000 -0.187500 -0.250000 +v 0.500000 -0.187500 -0.250000 +v -0.125000 0.312500 -0.250000 +v 0.125000 0.312500 -0.250000 +v -0.125000 0.437500 -0.250000 +v 0.125000 0.437500 -0.250000 +v -0.125000 0.312500 2.875000 +v 0.125000 0.312500 2.875000 +v 0.500000 -0.437500 2.875000 +v 0.500000 -0.187500 2.875000 +v -0.500000 -0.187500 2.875000 +v -0.500000 -0.437500 2.875000 +v 0.250000 -0.687500 2.875000 +v -0.250000 -0.687500 2.875000 +v -0.187500 -0.125000 3.250000 +v -0.125000 -0.125000 3.250000 +v -0.187500 -0.125000 2.875000 +v -0.125000 -0.125000 2.875000 +v -0.187500 -0.687500 2.875000 +v -0.187500 -0.687500 3.125000 +v -0.125000 -0.687500 3.125000 +v -0.125000 -0.687500 2.875000 +v 0.000000 1.687500 1.500000 +v -0.125000 1.654006 1.500000 +v -0.216506 1.562500 1.500000 +v -0.250000 1.437500 1.500000 +v -0.216506 1.312500 1.500000 +v -0.125000 1.220994 1.500000 +v 0.000000 1.187500 1.500000 +v 0.125000 1.220994 1.500000 +v 0.216506 1.312500 1.500000 +v 0.250000 1.437500 1.500000 +v 0.216506 1.562500 1.500000 +v 0.125000 1.654006 1.500000 +v 0.000000 1.687500 -0.750000 +v -0.125000 1.654006 -0.750000 +v -0.216506 1.562500 -0.750000 +v -0.250000 1.437500 -0.750000 +v -0.216506 1.312500 -0.750000 +v -0.125000 1.220994 -0.750000 +v 0.000000 1.187500 -0.750000 +v 0.125000 1.220994 -0.750000 +v 0.216506 1.312500 -0.750000 +v 0.250000 1.437500 -0.750000 +v 0.216506 1.562500 -0.750000 +v 0.125000 1.654006 -0.750000 +v 0.000000 1.750000 -1.250000 +v -0.156250 1.708133 -1.250000 +v -0.270633 1.593750 -1.250000 +v -0.312500 1.437500 -1.250000 +v -0.270633 1.281250 -1.250000 +v -0.156250 1.166867 -1.250000 +v 0.000000 1.125000 -1.250000 +v 0.156250 1.166867 -1.250000 +v 0.270633 1.281250 -1.250000 +v 0.312500 1.437500 -1.250000 +v 0.270633 1.593750 -1.250000 +v 0.156250 1.708133 -1.250000 +v 0.000000 1.750000 -2.750000 +v -0.156250 1.708133 -2.750000 +v -0.270633 1.593750 -2.750000 +v -0.312500 1.437500 -2.750000 +v -0.270633 1.281250 -2.750000 +v -0.156250 1.166867 -2.750000 +v 0.000000 1.125000 -2.750000 +v 0.156250 1.166867 -2.750000 +v 0.270633 1.281250 -2.750000 +v 0.312500 1.437500 -2.750000 +v 0.270633 1.593750 -2.750000 +v 0.156250 1.708133 -2.750000 +v 0.000000 1.687500 -2.750000 +v -0.125000 1.654006 -2.750000 +v -0.216506 1.562500 -2.750000 +v -0.250000 1.437500 -2.750000 +v -0.216506 1.312500 -2.750000 +v -0.125000 1.220994 -2.750000 +v 0.000000 1.187500 -2.750000 +v 0.125000 1.220994 -2.750000 +v 0.216506 1.312500 -2.750000 +v 0.250000 1.437500 -2.750000 +v 0.216506 1.562500 -2.750000 +v 0.125000 1.654006 -2.750000 +v 0.000000 1.625000 1.500000 +v -0.093750 1.599880 1.500000 +v -0.162380 1.531250 1.500000 +v -0.187500 1.437500 1.500000 +v -0.162380 1.343750 1.500000 +v -0.093750 1.275120 1.500000 +v 0.000000 1.250000 1.500000 +v 0.093750 1.275120 1.500000 +v 0.162380 1.343750 1.500000 +v 0.187500 1.437500 1.500000 +v 0.162380 1.531250 1.500000 +v 0.093750 1.599880 1.500000 +v 0.500000 -0.437500 -7.750000 +v -0.500000 -0.437500 -7.750000 +v 0.125000 -2.812500 -7.250000 +v -0.125000 -2.812500 -7.250000 +v -0.125000 -0.562500 -8.000000 +v 0.125000 -0.562500 -8.000000 +v 0.125000 0.062500 -8.000000 +v -0.125000 0.062500 -8.000000 +v 0.125000 -2.812500 -5.750000 +v -0.125000 -2.812500 -5.750000 +v 0.125000 -2.562500 -5.500000 +v -0.125000 -2.562500 -5.500000 +v 0.125000 -2.312500 -5.750000 +v -0.125000 -2.312500 -5.750000 +v -0.250000 -1.312500 -4.500000 +v 0.250000 -1.312500 -4.500000 +v -0.375000 -1.437500 -4.500000 +v 0.375000 -1.437500 -4.500000 +v -0.375000 -1.062500 -3.000000 +v 0.375000 -1.062500 -3.000000 +v -0.125000 0.312500 2.750000 +v 0.125000 0.312500 2.750000 +v -0.125000 0.312500 2.625000 +v 0.125000 0.312500 2.625000 +v -0.125000 0.687500 2.000000 +v 0.125000 0.687500 2.000000 +v -0.125000 0.687500 1.875000 +v 0.125000 0.687500 1.875000 +v -0.125000 1.250000 1.500000 +v 0.125000 1.250000 1.500000 +v -0.125000 1.250000 1.375000 +v 0.125000 1.250000 1.375000 +v -0.062500 0.312500 2.625000 +v 0.062500 0.312500 2.625000 +v -0.062500 0.687500 1.875000 +v 0.062500 0.687500 1.875000 +v -0.062500 1.250000 1.375000 +v 0.062500 1.250000 1.375000 +v -0.062500 0.437500 2.125000 +v 0.062500 0.437500 2.125000 +v -0.062500 0.687500 1.625000 +v 0.062500 0.687500 1.625000 +v -0.062500 1.250000 1.125000 +v 0.062500 1.250000 1.125000 +v -0.187500 1.437500 -0.750000 +v -0.162380 1.531250 -0.750000 +v -0.093750 1.599880 -0.750000 +v 0.000000 1.625000 -0.750000 +v -0.162380 1.343750 -0.750000 +v -0.093750 1.275120 -0.750000 +v 0.000000 1.250000 -0.750000 +v 0.093750 1.275120 -0.750000 +v 0.162380 1.343750 -0.750000 +v 0.187500 1.437500 -0.750000 +v 0.162380 1.531250 -0.750000 +v 0.093750 1.599880 -0.750000 +v 0.000000 1.687500 -1.250000 +v -0.125000 1.654006 -1.250000 +v -0.216506 1.562500 -1.250000 +v -0.250000 1.437500 -1.250000 +v -0.216506 1.312500 -1.250000 +v -0.125000 1.220994 -1.250000 +v 0.000000 1.187500 -1.250000 +v 0.125000 1.220994 -1.250000 +v 0.216506 1.312500 -1.250000 +v 0.250000 1.437500 -1.250000 +v 0.216506 1.562500 -1.250000 +v 0.125000 1.654006 -1.250000 +v -0.125000 0.312500 -0.125000 +v 0.125000 0.312500 -0.125000 +v -0.125000 0.312500 -0.250000 +v 0.125000 0.312500 -0.250000 +v 0.125000 0.562500 -0.125000 +v -0.125000 0.562500 -0.125000 +v -0.125000 0.562500 -0.250000 +v 0.125000 0.562500 -0.250000 +v 0.125000 0.812500 -0.375000 +v -0.125000 0.812500 -0.375000 +v -0.125000 0.812500 -0.500000 +v 0.125000 0.812500 -0.500000 +v 0.125000 1.187500 -1.250000 +v -0.125000 1.187500 -1.250000 +v -0.125000 1.187500 -1.375000 +v 0.125000 1.187500 -1.375000 +v -0.062500 0.312500 -0.125000 +v 0.062500 0.312500 -0.125000 +v -0.062500 0.312500 0.125000 +v 0.062500 0.312500 0.125000 +v -0.062500 0.562500 -0.125000 +v 0.062500 0.562500 -0.125000 +v -0.062500 0.562500 0.125000 +v 0.062500 0.562500 0.125000 +v -0.062500 0.812500 -0.375000 +v 0.062500 0.812500 -0.375000 +v -0.062500 0.812500 0.000000 +v 0.062500 0.812500 0.000000 +v -0.062500 1.187500 -1.250000 +v 0.062500 1.187500 -1.250000 +v -0.062500 1.250000 -0.500000 +v 0.062500 1.250000 -0.500000 +v 0.375000 -0.562500 -4.500000 +v -0.375000 -0.562500 -4.500000 +v 0.375000 -0.562500 -3.000000 +v -0.375000 -0.562500 -3.000000 +v -0.250000 -0.687500 1.750000 +v 0.250000 -0.687500 1.750000 +v -0.250000 -0.687500 0.750000 +v 0.250000 -0.687500 0.750000 +v -0.250000 -0.937500 1.250000 +v 0.250000 -0.937500 1.250000 +v -0.250000 -0.937500 0.875000 +v 0.250000 -0.937500 0.875000 +v -0.250000 -2.187500 0.000000 +v 0.250000 -2.187500 0.000000 +v -0.250000 -2.187500 0.375000 +v 0.250000 -2.187500 0.375000 +v -0.250000 -2.562500 -0.500000 +v 0.250000 -2.562500 -0.500000 +v -0.250000 -2.562500 -0.875000 +v 0.250000 -2.562500 -0.875000 +v -0.250000 -2.312500 -1.125000 +v 0.250000 -2.312500 -1.125000 +v -0.250000 -1.312500 -0.625000 +v 0.250000 -1.312500 -0.625000 +v -0.250000 -1.312500 -0.375000 +v 0.250000 -1.312500 -0.375000 +v -0.250000 -1.000000 -0.500000 +v 0.250000 -1.000000 -0.500000 +v -0.250000 -0.687500 -0.375000 +v 0.250000 -0.687500 -0.375000 +v -0.250000 -2.812500 -0.250000 +v 0.250000 -2.812500 -0.250000 +v -0.250000 -2.812500 -1.750000 +v 0.250000 -2.812500 -1.750000 +v -0.250000 -2.062500 -1.750000 +v 0.250000 -2.062500 -1.750000 +v -0.250000 -0.937500 -1.250000 +v 0.250000 -0.937500 -1.250000 +v -0.250000 -0.687500 -1.500000 +v 0.250000 -0.687500 -1.500000 +v 0.000000 -0.750000 2.937500 +v 0.000000 -0.500000 2.937500 +v 0.088388 -0.750000 2.974112 +v 0.088388 -0.500000 2.974112 +v 0.125000 -0.750000 3.062500 +v 0.125000 -0.500000 3.062500 +v 0.088388 -0.750000 3.150888 +v 0.088388 -0.500000 3.150888 +v 0.000000 -0.750000 3.187500 +v 0.000000 -0.500000 3.187500 +v -0.088388 -0.750000 3.150888 +v -0.088388 -0.500000 3.150888 +v -0.125000 -0.750000 3.062500 +v -0.125000 -0.500000 3.062500 +v -0.088388 -0.750000 2.974112 +v -0.088388 -0.500000 2.974112 +v 0.125000 -0.125000 3.250000 +v 0.187500 -0.125000 3.250000 +v 0.125000 -0.125000 2.875000 +v 0.187500 -0.125000 2.875000 +v 0.125000 -0.687500 2.875000 +v 0.125000 -0.687500 3.125000 +v 0.187500 -0.687500 3.125000 +v 0.187500 -0.687500 2.875000 +v -0.125000 -0.437500 3.125000 +v -0.125000 -0.437500 2.875000 +v 0.125000 -0.437500 2.875000 +v 0.125000 -0.437500 3.125000 +v -0.125000 -0.187500 3.125000 +v 0.125000 -0.187500 3.125000 +v -0.125000 -0.750000 3.250000 +v 0.125000 -0.750000 3.250000 +v -0.125000 -0.750000 2.625000 +v 0.125000 -0.750000 2.625000 +v -0.125000 -1.250000 2.750000 +v -0.125000 -1.250000 3.250000 +v 0.125000 -1.250000 3.250000 +v 0.125000 -1.250000 2.750000 +v -0.125000 -1.625000 2.750000 +v -0.125000 -1.500000 3.312500 +v 0.125000 -1.500000 3.312500 +v 0.125000 -1.625000 2.750000 +v -0.125000 -2.750000 3.375000 +v 0.125000 -2.750000 3.375000 +v -0.125000 -2.750000 2.750000 +v 0.125000 -2.750000 2.750000 +v -0.125000 -2.125000 2.625000 +v -0.125000 -2.125000 3.312500 +v 0.125000 -2.125000 3.312500 +v 0.125000 -2.125000 2.625000 +v -0.125000 -2.625000 2.625000 +v -0.125000 -2.500000 3.250000 +v 0.125000 -2.500000 3.250000 +v 0.125000 -2.625000 2.625000 +v 0.250000 -0.750000 3.125000 +v 0.250000 -0.750000 2.750000 +v 0.250000 -1.250000 3.125000 +v 0.250000 -1.250000 2.875000 +v 0.250000 -1.500000 3.187500 +v 0.250000 -1.625000 2.875000 +v 0.250000 -2.750000 3.250000 +v 0.250000 -2.750000 2.875000 +v 0.250000 -2.125000 3.187500 +v 0.250000 -2.125000 2.750000 +v 0.250000 -2.500000 3.125000 +v 0.250000 -2.625000 2.750000 +v -0.250000 -0.750000 2.750000 +v -0.250000 -0.750000 3.125000 +v -0.250000 -1.250000 2.875000 +v -0.250000 -1.250000 3.125000 +v -0.250000 -1.625000 2.875000 +v -0.250000 -1.500000 3.187500 +v -0.250000 -2.750000 2.875000 +v -0.250000 -2.750000 3.250000 +v -0.250000 -2.125000 2.750000 +v -0.250000 -2.125000 3.187500 +v -0.250000 -2.625000 2.750000 +v -0.250000 -2.500000 3.125000 +v 0.312500 -0.625000 2.500000 +v 0.250000 -0.687500 2.536612 +v 0.224112 -0.713388 2.625000 +v 0.250000 -0.687500 2.713388 +v 0.312500 -0.625000 2.750000 +v 0.375000 -0.562500 2.713388 +v 0.400888 -0.536612 2.625000 +v 0.375000 -0.562500 2.536612 +v 0.294194 -0.731694 2.536612 +v 0.356694 -0.669194 2.500000 +v 0.268306 -0.757582 2.625000 +v 0.294194 -0.731694 2.713388 +v 0.356694 -0.669194 2.750000 +v 0.419194 -0.606694 2.713388 +v 0.445083 -0.580806 2.625000 +v 0.419194 -0.606694 2.536612 +v 0.369638 -0.744638 2.580806 +v 0.400888 -0.713388 2.562500 +v 0.356694 -0.757583 2.625000 +v 0.369638 -0.744638 2.669194 +v 0.400888 -0.713388 2.687500 +v 0.432138 -0.682138 2.669194 +v 0.445083 -0.669194 2.625000 +v 0.432138 -0.682138 2.580806 +v -0.625000 -0.812500 -0.625000 +v -0.625000 -0.562500 -0.625000 +v -0.625000 -0.812500 -0.875000 +v -0.625000 -0.562500 -0.875000 +v 0.375000 -0.812500 -0.625000 +v 0.375000 -0.562500 -0.625000 +v 0.375000 -0.812500 -0.875000 +v 0.375000 -0.562500 -0.875000 +v 0.375000 -0.812500 -0.625000 +v 0.375000 -0.562500 -0.625000 +v 0.375000 -0.812500 -0.875000 +v 0.375000 -0.562500 -0.875000 +v 0.250000 -0.937500 -0.625000 +v 0.250000 -0.937500 -0.875000 +v 0.250000 -0.812500 -0.500000 +v 0.250000 -0.562500 -0.500000 +v 0.250000 -0.812500 -1.000000 +v 0.250000 -0.562500 -1.000000 +v -0.250000 -0.937500 -0.625000 +v -0.250000 -0.937500 -0.875000 +v -0.250000 -0.812500 -0.500000 +v -0.250000 -0.562500 -0.500000 +v -0.250000 -0.812500 -1.000000 +v -0.250000 -0.562500 -1.000000 +v -0.375000 -0.812500 -0.625000 +v -0.375000 -0.562500 -0.625000 +v -0.375000 -0.812500 -0.875000 +v -0.375000 -0.562500 -0.875000 +v -0.125000 -1.187500 -0.125000 +v 0.125000 -1.187500 -0.125000 +v -0.125000 -0.937500 -0.187500 +v 0.125000 -0.937500 -0.187500 +v -0.125000 -0.687500 -0.125000 +v 0.125000 -0.687500 -0.125000 +v -0.125000 -1.187500 -0.500000 +v 0.125000 -1.187500 -0.500000 +v -0.125000 -0.937500 -0.500000 +v 0.125000 -0.937500 -0.500000 +v -0.125000 -0.687500 -0.375000 +v 0.125000 -0.687500 -0.375000 +v 0.000000 0.125000 -3.000000 +v -0.062500 0.108253 -3.000000 +v -0.108253 0.062500 -3.000000 +v -0.125000 -0.000000 -3.000000 +v -0.108253 -0.062500 -3.000000 +v -0.062500 -0.108253 -3.000000 +v 0.000000 -0.125000 -3.000000 +v 0.062500 -0.108253 -3.000000 +v 0.108253 -0.062500 -3.000000 +v 0.125000 -0.000000 -3.000000 +v 0.108253 0.062500 -3.000000 +v 0.062500 0.108253 -3.000000 +v 0.000000 0.125000 -2.000000 +v -0.062500 0.108253 -2.000000 +v -0.108253 0.062500 -2.000000 +v -0.125000 -0.000000 -2.000000 +v -0.108253 -0.062500 -2.000000 +v -0.062500 -0.108253 -2.000000 +v 0.000000 -0.125000 -2.000000 +v 0.062500 -0.108253 -2.000000 +v 0.108253 -0.062500 -2.000000 +v 0.125000 -0.000000 -2.000000 +v 0.108253 0.062500 -2.000000 +v 0.062500 0.108253 -2.000000 +v -0.250000 -0.625000 -3.062500 +v 0.250000 -0.625000 -3.062500 +v -0.250000 -0.250000 -4.437500 +v 0.250000 -0.250000 -4.437500 +v -0.250000 -1.625000 -4.437500 +v -0.250000 -1.250000 -3.062500 +v 0.250000 -1.250000 -3.062500 +v 0.250000 -1.625000 -4.437500 +v -0.250000 -3.625000 -3.937500 +v 0.250000 -3.625000 -3.937500 +v -0.250000 -3.250000 -2.562500 +v 0.250000 -3.250000 -2.562500 +v 0.250000 -0.953125 -3.062500 +v -0.250000 -0.953125 -3.062500 +v -0.250000 -1.421875 -4.437500 +v -0.250000 -1.078125 -3.062500 +v 0.250000 -1.296875 -4.437500 +v -0.250000 -1.296875 -4.437500 +v 0.250000 -1.421875 -4.437500 +v 0.250000 -1.078125 -3.062500 +v -0.062500 -0.250000 -4.375000 +v -0.125000 -0.266747 -4.375000 +v -0.170753 -0.312500 -4.375000 +v -0.187500 -0.375000 -4.375000 +v -0.170753 -0.437500 -4.375000 +v -0.125000 -0.483253 -4.375000 +v -0.062500 -0.500000 -4.375000 +v 0.000000 -0.483253 -4.375000 +v 0.045753 -0.437500 -4.375000 +v 0.062500 -0.375000 -4.375000 +v 0.045753 -0.312500 -4.375000 +v 0.000000 -0.266747 -4.375000 +v -0.062500 -0.250000 -3.625000 +v -0.125000 -0.266747 -3.625000 +v -0.170753 -0.312500 -3.625000 +v -0.187500 -0.375000 -3.625000 +v -0.170753 -0.437500 -3.625000 +v -0.125000 -0.483253 -3.625000 +v -0.062500 -0.500000 -3.625000 +v 0.000000 -0.483253 -3.625000 +v 0.045753 -0.437500 -3.625000 +v 0.062500 -0.375000 -3.625000 +v 0.045753 -0.312500 -3.625000 +v 0.000000 -0.266747 -3.625000 +v -0.062500 -0.281250 -3.500000 +v -0.109375 -0.293810 -3.500000 +v -0.143690 -0.328125 -3.500000 +v -0.156250 -0.375000 -3.500000 +v -0.143690 -0.421875 -3.500000 +v -0.109375 -0.456190 -3.500000 +v -0.062500 -0.468750 -3.500000 +v -0.015625 -0.456190 -3.500000 +v 0.018690 -0.421875 -3.500000 +v 0.031250 -0.375000 -3.500000 +v 0.018690 -0.328125 -3.500000 +v -0.015625 -0.293810 -3.500000 +v -0.062500 -0.281250 -3.375000 +v -0.109375 -0.293810 -3.375000 +v -0.143690 -0.328125 -3.375000 +v -0.156250 -0.375000 -3.375000 +v -0.143690 -0.421875 -3.375000 +v -0.109375 -0.456190 -3.375000 +v -0.062500 -0.468750 -3.375000 +v -0.015625 -0.456190 -3.375000 +v 0.018690 -0.421875 -3.375000 +v 0.031250 -0.375000 -3.375000 +v 0.018690 -0.328125 -3.375000 +v -0.015625 -0.293810 -3.375000 +v -0.062500 -0.375000 -3.125000 +v -0.250000 -0.375000 -3.312500 +v 0.250000 -0.375000 -3.312500 +v 0.062500 -0.467817 -4.375000 +v 0.000000 -0.484564 -4.375000 +v -0.045753 -0.530317 -4.375000 +v -0.062500 -0.592817 -4.375000 +v -0.045753 -0.655317 -4.375000 +v 0.000000 -0.701071 -4.375000 +v 0.062500 -0.717817 -4.375000 +v 0.125000 -0.701071 -4.375000 +v 0.170753 -0.655317 -4.375000 +v 0.187500 -0.592817 -4.375000 +v 0.170753 -0.530317 -4.375000 +v 0.125000 -0.484564 -4.375000 +v 0.062500 -0.467817 -3.625000 +v 0.000000 -0.484564 -3.625000 +v -0.045753 -0.530317 -3.625000 +v -0.062500 -0.592817 -3.625000 +v -0.045753 -0.655317 -3.625000 +v 0.000000 -0.701071 -3.625000 +v 0.062500 -0.717817 -3.625000 +v 0.125000 -0.701071 -3.625000 +v 0.170753 -0.655317 -3.625000 +v 0.187500 -0.592817 -3.625000 +v 0.170753 -0.530317 -3.625000 +v 0.125000 -0.484564 -3.625000 +v 0.062500 -0.499067 -3.500000 +v 0.015625 -0.511627 -3.500000 +v -0.018690 -0.545942 -3.500000 +v -0.031250 -0.592817 -3.500000 +v -0.018690 -0.639692 -3.500000 +v 0.015625 -0.674007 -3.500000 +v 0.062500 -0.686567 -3.500000 +v 0.109375 -0.674007 -3.500000 +v 0.143690 -0.639692 -3.500000 +v 0.156250 -0.592817 -3.500000 +v 0.143690 -0.545942 -3.500000 +v 0.109375 -0.511627 -3.500000 +v 0.062500 -0.499067 -3.375000 +v 0.015625 -0.511627 -3.375000 +v -0.018690 -0.545942 -3.375000 +v -0.031250 -0.592817 -3.375000 +v -0.018690 -0.639692 -3.375000 +v 0.015625 -0.674007 -3.375000 +v 0.062500 -0.686567 -3.375000 +v 0.109375 -0.674007 -3.375000 +v 0.143690 -0.639692 -3.375000 +v 0.156250 -0.592817 -3.375000 +v 0.143690 -0.545942 -3.375000 +v 0.109375 -0.511627 -3.375000 +v 0.062500 -0.592817 -3.125000 +v -0.250000 -0.375000 -3.562500 +v 0.250000 -0.375000 -3.562500 +v -0.250000 -0.250000 -3.812500 +v 0.250000 -0.250000 -3.812500 +v -0.125000 -0.250000 -4.437500 +v -0.125000 -0.375000 -3.312500 +v -0.125000 -0.375000 -3.562500 +v -0.125000 -0.250000 -3.812500 +v 0.125000 -0.250000 -4.437500 +v 0.125000 -0.375000 -3.312500 +v 0.125000 -0.375000 -3.562500 +v 0.125000 -0.250000 -3.812500 +v -0.125000 -0.562500 -3.125000 +v 0.125000 -0.562500 -3.125000 +v -0.125000 -0.687500 -3.125000 +v 0.125000 -0.687500 -3.125000 +v -0.125000 -0.687500 -4.375000 +v 0.125000 -0.687500 -4.375000 +v -0.125000 -0.437500 -4.437500 +v 0.125000 -0.437500 -4.437500 +v -0.125000 -0.437500 -4.375000 +v 0.125000 -0.437500 -4.375000 +v 0.343750 -0.008373 2.687500 +v 0.406250 -0.116627 2.687500 +v 0.343750 -0.008373 2.062500 +v 0.406250 -0.116627 2.062500 +v 0.452003 0.054127 2.687500 +v 0.514503 -0.054127 2.687500 +v -0.281250 -0.031250 -3.250000 +v 0.560256 0.116627 2.437500 +v 0.622756 0.008373 2.437500 +v -0.093750 0.281250 -3.250000 +v -0.093750 0.281250 -4.750000 +v 0.885016 0.304127 2.437500 +v 0.947516 0.195873 2.437500 +v -0.281250 -0.031250 -4.750000 +v 0.993269 0.366626 2.062500 +v 0.993269 0.366626 2.500000 +v 1.055769 0.258373 2.500000 +v 1.055769 0.258373 2.062500 +v -0.406250 -0.031250 -4.750000 +v -0.156250 0.281250 -3.250000 +v -0.218750 0.281250 -4.750000 +v -0.218750 0.281250 -3.250000 +v -0.343750 -0.031250 -3.250000 +v -0.406250 -0.031250 -3.250000 +v -0.156250 0.281250 -4.750000 +v -0.343750 -0.031250 -4.750000 +v -0.093750 0.281250 -4.750000 +v -0.281250 -0.031250 -4.750000 +v -0.125000 -1.375000 -4.500000 +v 0.125000 -1.375000 -4.500000 +v -0.125000 -1.750000 -4.875000 +v 0.125000 -1.750000 -4.875000 +v -0.125000 -1.312500 -4.500000 +v 0.125000 -1.312500 -4.500000 +v -0.125000 -1.687500 -5.000000 +v 0.125000 -1.687500 -5.000000 +v 0.000000 1.687500 -2.250000 +v -0.125000 1.654006 -2.250000 +v -0.216506 1.562500 -2.250000 +v -0.250000 1.437500 -2.250000 +v -0.216506 1.312500 -2.250000 +v -0.125000 1.220994 -2.250000 +v 0.000000 1.187500 -2.250000 +v 0.125000 1.220994 -2.250000 +v 0.216506 1.312500 -2.250000 +v 0.250000 1.437500 -2.250000 +v 0.216506 1.562500 -2.250000 +v 0.125000 1.654006 -2.250000 +v -0.062500 0.312500 2.000000 +v 0.062500 0.312500 2.000000 +v 0.437500 -1.031250 -6.625000 +v 0.437500 -0.781250 -6.625000 +v -0.562500 -0.812500 -7.187500 +v 0.562500 -0.812500 -7.187500 +v -0.562500 -0.856694 -7.169194 +v 0.562500 -0.856694 -7.169194 +v -0.562500 -0.875000 -7.125000 +v 0.562500 -0.875000 -7.125000 +v -0.562500 -0.856694 -7.080806 +v 0.562500 -0.856694 -7.080806 +v -0.562500 -0.812500 -7.062500 +v 0.562500 -0.812500 -7.062500 +v -0.562500 -0.768306 -7.080806 +v 0.562500 -0.768306 -7.080806 +v -0.562500 -0.750000 -7.125000 +v 0.562500 -0.750000 -7.125000 +v -0.562500 -0.768306 -7.169194 +v 0.562500 -0.768306 -7.169194 +v 0.437500 -0.781250 -7.625000 +v 0.437500 -1.031250 -7.625000 +v 0.437500 -0.968750 -7.562500 +v 0.437500 -0.843750 -7.562500 +v 0.437500 -0.968750 -6.687500 +v 0.437500 -0.843750 -6.687500 +v 0.500000 -0.968750 -7.562500 +v 0.500000 -0.843750 -7.562500 +v 0.500000 -0.968750 -6.687500 +v 0.500000 -0.843750 -6.687500 +v 0.500000 -1.031250 -7.625000 +v 0.500000 -0.781250 -7.625000 +v 0.500000 -1.031250 -6.625000 +v 0.500000 -0.781250 -6.625000 +v 0.417387 0.411639 2.581886 +v 0.292387 0.320139 2.778107 +v -0.573638 0.531448 2.324953 +v -0.448637 0.622948 2.128732 +v -0.425761 0.586866 2.206109 +v -0.488261 0.541116 2.304220 +v 0.332011 0.401971 2.602619 +v 0.269511 0.356221 2.700729 +v -0.425761 0.643510 2.232523 +v -0.488261 0.597761 2.330633 +v 0.332011 0.458615 2.629033 +v 0.269511 0.412865 2.727143 +v -0.448637 0.679592 2.155145 +v -0.573638 0.588092 2.351367 +v 0.417387 0.468283 2.608299 +v 0.292387 0.376783 2.804521 +v -0.250000 -0.062500 3.875000 +v -0.156250 -0.087620 3.875000 +v -0.087620 -0.156250 3.875000 +v -0.062500 -0.250000 3.875000 +v -0.087620 -0.343750 3.875000 +v -0.156250 -0.412380 3.875000 +v -0.250000 -0.437500 3.875000 +v -0.343750 -0.412380 3.875000 +v -0.412380 -0.343750 3.875000 +v -0.437500 -0.250000 3.875000 +v -0.412380 -0.156250 3.875000 +v -0.343750 -0.087620 3.875000 +v -0.250000 -0.062500 2.875000 +v -0.156250 -0.087620 2.875000 +v -0.087620 -0.156250 2.875000 +v -0.062500 -0.250000 2.875000 +v -0.087620 -0.343750 2.875000 +v -0.156250 -0.412380 2.875000 +v -0.250000 -0.437500 2.875000 +v -0.343750 -0.412380 2.875000 +v -0.412380 -0.343750 2.875000 +v -0.437500 -0.250000 2.875000 +v -0.412380 -0.156250 2.875000 +v -0.343750 -0.087620 2.875000 +v -0.437500 -0.281250 3.875000 +v -0.312500 -0.281250 3.875000 +v -0.437500 -0.218750 3.875000 +v -0.312500 -0.218750 3.875000 +v -0.437500 -0.218750 3.937500 +v -0.437500 -0.281250 3.937500 +v -0.312500 -0.281250 4.000000 +v -0.312500 -0.218750 4.000000 +v -0.187500 -0.281250 3.875000 +v -0.062500 -0.281250 3.875000 +v -0.187500 -0.218750 3.875000 +v -0.062500 -0.218750 3.875000 +v -0.187500 -0.218750 4.000000 +v -0.187500 -0.281250 4.000000 +v -0.062500 -0.281250 3.937500 +v -0.062500 -0.218750 3.937500 +v -0.250000 -0.687500 -0.250000 +v 0.250000 -0.687500 -0.250000 +v -0.500000 -0.437500 -0.250000 +v 0.500000 -0.437500 -0.250000 +vt 0.696970 0.132530 +vt 0.693182 0.144578 +vt 0.693182 0.132530 +vt 0.117424 0.048193 +vt 0.113636 0.060241 +vt 0.113636 0.048193 +vt 0.117424 0.060241 +vt 0.113636 0.072289 +vt 0.117424 0.084337 +vt 0.117424 0.072289 +vt 0.117424 0.096386 +vt 0.113636 0.084337 +vt 0.117424 0.108434 +vt 0.113636 0.096386 +vt 0.113636 0.120482 +vt 0.113636 0.108434 +vt 0.117424 0.120482 +vt 0.113636 0.132530 +vt 0.117424 0.144578 +vt 0.117424 0.132530 +vt 0.117424 0.012048 +vt 0.113636 -0.000000 +vt 0.117424 0.000000 +vt 0.113636 0.024096 +vt 0.113636 0.012048 +vt 0.117424 0.024096 +vt 0.113636 0.036145 +vt 0.117424 0.036145 +vt 0.106061 0.072289 +vt 0.102273 0.060241 +vt 0.106061 0.060241 +vt 0.102273 0.048193 +vt 0.106061 0.048193 +vt 0.102273 0.036145 +vt 0.106061 0.036145 +vt 0.102273 0.024096 +vt 0.106061 0.024096 +vt 0.102273 0.012048 +vt 0.106061 0.012048 +vt 0.106061 -0.000000 +vt 0.102273 0.144578 +vt 0.106061 0.132530 +vt 0.106061 0.144578 +vt 0.102273 0.120482 +vt 0.106061 0.120482 +vt 0.102273 0.108434 +vt 0.106061 0.108434 +vt 0.106061 0.096386 +vt 0.102273 0.096386 +vt 0.106061 0.084337 +vt 0.102273 0.084337 +vt 0.071970 0.048193 +vt 0.068182 0.060241 +vt 0.068182 0.048193 +vt 0.071970 0.060241 +vt 0.068182 0.072289 +vt 0.071970 0.084337 +vt 0.071970 0.072289 +vt 0.071970 0.096386 +vt 0.068182 0.084337 +vt 0.071970 0.108434 +vt 0.068182 0.096386 +vt 0.068182 0.120482 +vt 0.068182 0.108434 +vt 0.071970 0.120482 +vt 0.068182 0.132530 +vt 0.071970 0.144578 +vt 0.071970 0.132530 +vt 0.071970 0.012048 +vt 0.068182 -0.000000 +vt 0.071970 -0.000000 +vt 0.068182 0.024096 +vt 0.068182 0.012048 +vt 0.071970 0.024096 +vt 0.068182 0.036145 +vt 0.071970 0.036145 +vt 0.022727 0.048193 +vt 0.018939 0.060241 +vt 0.018939 0.048193 +vt 0.022727 0.060241 +vt 0.018939 0.072289 +vt 0.022727 0.084337 +vt 0.022727 0.072289 +vt 0.022727 0.096386 +vt 0.018939 0.084337 +vt 0.022727 0.120482 +vt 0.018939 0.132530 +vt 0.018939 0.120482 +vt 0.022727 0.144578 +vt 0.022727 0.132530 +vt 0.022727 0.012048 +vt 0.018939 -0.000000 +vt 0.022727 -0.000000 +vt 0.018939 0.024096 +vt 0.018939 0.012048 +vt 0.105008 0.234905 +vt 0.098485 0.240894 +vt 0.091962 0.222926 +vt 0.060606 0.024096 +vt 0.053030 0.036145 +vt 0.053030 0.030120 +vt 0.060606 0.048193 +vt 0.060606 0.036145 +vt 0.060606 0.120482 +vt 0.053030 0.108434 +vt 0.060606 0.108434 +vt 0.060606 0.096386 +vt 0.053030 0.102410 +vt 0.045455 0.204819 +vt 0.007576 0.198795 +vt 0.045455 0.192771 +vt 0.007576 0.186747 +vt 0.045455 0.180723 +vt 0.045455 0.192771 +vt 0.007576 0.150602 +vt 0.045455 0.156627 +vt 0.007576 0.156627 +vt 0.007576 0.234940 +vt 0.045455 0.228916 +vt 0.045455 0.240964 +vt 0.011364 0.072289 +vt 0.007576 0.060241 +vt 0.011364 0.060241 +vt 0.007576 0.048193 +vt 0.011364 0.048193 +vt 0.000000 0.234940 +vt 0.007576 0.240964 +vt 0.007576 0.192771 +vt 0.000000 0.198795 +vt 0.011364 0.024096 +vt 0.007576 0.012048 +vt 0.011364 0.012048 +vt 0.011364 -0.000000 +vt 0.007576 0.144578 +vt 0.011364 0.132530 +vt 0.011364 0.144578 +vt 0.007576 0.120482 +vt 0.011364 0.120482 +vt 0.000000 0.186747 +vt 0.007576 0.180723 +vt 0.007576 0.144578 +vt 0.000000 0.150602 +vt 0.007576 0.096386 +vt 0.011364 0.084337 +vt 0.011364 0.096386 +vt 0.007576 0.084337 +vt 0.060606 0.240964 +vt 0.242424 0.289157 +vt 0.060606 0.289157 +vt 0.060606 0.530120 +vt 0.242424 0.506024 +vt 0.242424 0.530120 +vt 0.250000 0.433735 +vt 0.522727 0.448795 +vt 0.704545 0.433735 +vt 0.060606 0.481928 +vt 0.060606 0.506024 +vt 0.242424 0.337349 +vt 0.060606 0.313253 +vt 0.242424 0.313253 +vt 0.000000 0.337349 +vt 0.000000 0.313253 +vt 0.689394 0.493976 +vt 0.250000 0.433735 +vt 0.704545 0.433735 +vt 0.992424 0.487952 +vt 0.931818 0.463855 +vt 0.992424 0.463855 +vt 0.045455 0.289157 +vt 0.969697 0.536145 +vt 0.931818 0.487952 +vt 0.931818 0.656627 +vt 0.924242 0.632530 +vt 0.931818 0.632530 +vt 0.946970 0.439759 +vt 0.060606 0.337349 +vt 0.022727 0.385542 +vt 0.242424 0.397590 +vt 0.060606 0.397590 +vt 0.060606 0.421687 +vt 0.242424 0.481928 +vt 0.242424 0.421687 +vt 0.250000 0.493976 +vt 0.242424 0.518072 +vt 0.242424 0.493976 +vt 0.242424 0.493976 +vt 0.250000 0.493976 +vt 0.924242 0.439759 +vt 0.931818 0.439759 +vt 0.931818 0.548193 +vt 0.924242 0.487952 +vt 0.863636 0.463855 +vt 0.909091 0.439759 +vt 0.924242 0.463855 +vt 0.886364 0.536145 +vt 0.863636 0.487952 +vt 0.250000 0.518072 +vt 0.689394 0.518072 +vt 0.931818 0.572289 +vt 0.924242 0.548193 +vt 0.924242 0.391566 +vt 0.931818 0.391566 +vt 0.924242 0.572289 +vt 0.931818 0.680723 +vt 0.924242 0.656627 +vt 0.071970 0.759009 +vt 0.085106 0.771071 +vt 0.071970 0.807256 +vt 0.196970 0.813253 +vt 0.181818 0.819277 +vt 0.181818 0.813253 +vt 0.147727 0.813253 +vt 0.147727 0.819277 +vt 0.196970 0.873494 +vt 0.196970 0.819277 +vt 0.196970 0.759036 +vt 0.174242 0.759036 +vt 0.643939 0.566265 +vt 0.640152 0.578313 +vt 0.640152 0.566265 +vt 0.643939 0.590361 +vt 0.640152 0.590361 +vt 0.640152 0.602410 +vt 0.643939 0.602410 +vt 0.640152 0.614458 +vt 0.643939 0.614458 +vt 0.640152 0.626506 +vt 0.643939 0.638554 +vt 0.640152 0.638554 +vt 0.643939 0.650602 +vt 0.640152 0.650602 +vt 0.640152 0.662651 +vt 0.643939 0.518072 +vt 0.640152 0.530120 +vt 0.640152 0.518072 +vt 0.643939 0.530120 +vt 0.640152 0.542169 +vt 0.643939 0.542169 +vt 0.640152 0.554217 +vt 0.382576 0.578313 +vt 0.378788 0.566265 +vt 0.382576 0.566265 +vt 0.378788 0.554217 +vt 0.382576 0.554217 +vt 0.382576 0.542169 +vt 0.378788 0.542169 +vt 0.382576 0.530120 +vt 0.378788 0.530120 +vt 0.378788 0.518072 +vt 0.382576 0.518072 +vt 0.382576 0.662651 +vt 0.378788 0.650602 +vt 0.382576 0.650602 +vt 0.378788 0.638554 +vt 0.382576 0.638554 +vt 0.378788 0.626506 +vt 0.382576 0.626506 +vt 0.382576 0.614458 +vt 0.378788 0.614458 +vt 0.382576 0.602410 +vt 0.378788 0.602410 +vt 0.378788 0.590361 +vt 0.382576 0.590361 +vt 0.378788 0.578313 +vt 0.136364 0.530120 +vt 0.143939 0.668675 +vt 0.136364 0.674699 +vt 0.712121 0.662651 +vt 0.704545 0.698795 +vt 0.704545 0.662651 +vt 0.681818 0.662651 +vt 0.689394 0.698795 +vt 0.681818 0.698795 +vt 0.689394 0.753012 +vt 0.681818 0.753012 +vt 0.712121 0.698795 +vt 0.704545 0.753012 +vt 0.715909 0.753012 +vt 0.731061 0.698795 +vt 0.731061 0.753012 +vt 0.715909 0.698795 +vt 0.731061 0.674699 +vt 0.689394 0.753012 +vt 0.681818 0.777108 +vt 0.681818 0.753012 +vt 0.678030 0.753012 +vt 0.662879 0.698795 +vt 0.678030 0.698795 +vt 0.662879 0.674699 +vt 0.678030 0.662651 +vt 0.712121 0.753012 +vt 0.704545 0.777108 +vt 0.704545 0.753012 +vt 0.678030 0.777108 +vt 0.662879 0.753012 +vt 0.678030 0.753012 +vt 0.689394 0.777108 +vt 0.681818 0.801205 +vt 0.712121 0.801205 +vt 0.704545 0.801205 +vt 0.731061 0.777108 +vt 0.715909 0.753012 +vt 0.731061 0.753012 +vt 0.712121 0.843373 +vt 0.704545 0.843373 +vt 0.689394 0.801205 +vt 0.681818 0.843373 +vt 0.655303 0.801205 +vt 0.662879 0.777108 +vt 0.738636 0.801205 +vt 0.715909 0.777108 +vt 0.678030 0.801205 +vt 0.632576 0.849398 +vt 0.761364 0.849398 +vt 0.715909 0.801205 +vt 0.325758 0.385542 +vt 0.704545 0.409639 +vt 0.325758 0.409639 +vt 0.704545 0.409639 +vt 0.325758 0.385542 +vt 0.325758 0.409639 +vt 0.136364 0.759036 +vt 0.045455 0.710843 +vt 0.045455 0.759036 +vt -0.000000 0.710843 +vt 0.272727 0.710843 +vt 0.181818 0.759036 +vt 0.181818 0.674699 +vt 0.359848 0.915663 +vt 0.329545 0.891566 +vt 0.299242 0.915663 +vt 0.359848 0.915663 +vt 0.329545 0.891566 +vt 0.352273 0.891566 +vt 0.352273 0.891566 +vt 0.382576 0.771084 +vt 0.382576 0.771084 +vt 0.405303 0.771084 +vt 0.420455 0.710843 +vt 0.420455 0.710843 +vt 0.405303 0.771084 +vt 0.458333 0.734940 +vt 0.511364 0.710843 +vt 0.511364 0.710843 +vt 0.458333 0.734940 +vt 0.428030 0.855422 +vt 0.435606 0.885542 +vt 0.443182 0.855422 +vt 0.428030 0.855422 +vt 0.443182 0.855422 +vt 0.435606 0.885542 +vt 0.428030 0.915663 +vt 0.481061 0.891566 +vt 0.481061 0.891566 +vt 0.428030 0.915663 +vt 0.511364 0.783133 +vt 0.473485 0.759036 +vt 0.212180 0.795180 +vt 0.219696 0.783226 +vt 0.227213 0.795180 +vt 0.196970 0.813253 +vt 0.181818 0.819277 +vt 0.181818 0.813253 +vt 0.147727 0.813253 +vt 0.147727 0.819277 +vt 0.196970 0.873494 +vt 0.196970 0.819277 +vt 0.196970 0.759036 +vt 0.174242 0.759036 +vt 0.212121 0.759036 +vt 0.196970 0.783133 +vt 0.196970 0.759036 +vt 0.212121 0.783133 +vt 0.196970 0.807229 +vt 0.594697 0.951807 +vt 0.602273 0.963855 +vt 0.594697 1.000000 +vt 0.564394 0.759036 +vt 0.556818 0.746988 +vt 0.564394 0.710843 +vt 0.242193 0.795181 +vt 0.234848 0.806862 +vt 0.227503 0.795181 +vt 0.840909 0.572289 +vt 0.856061 0.548193 +vt 0.856061 0.572289 +vt 0.840909 0.548193 +vt 0.780303 0.524096 +vt 0.840909 0.524096 +vt 0.780303 0.548193 +vt 0.765152 0.572289 +vt 0.765152 0.548193 +vt 0.780303 0.572289 +vt 0.840909 0.596386 +vt 0.780303 0.596386 +vt 0.840909 0.500000 +vt 0.295455 0.777108 +vt 0.272727 0.746988 +vt 0.295455 0.746988 +vt 0.280303 0.807229 +vt 0.276515 0.777108 +vt 0.310606 0.777108 +vt 0.333333 0.746988 +vt 0.329545 0.777108 +vt 0.325758 0.807229 +vt 0.310606 0.807229 +vt 0.310606 0.710843 +vt 0.310606 0.746988 +vt 0.693182 0.120482 +vt 0.696970 0.126506 +vt 0.696970 0.108434 +vt 0.693182 0.108434 +vt 0.693182 0.096386 +vt 0.696970 0.102410 +vt 0.696970 0.084337 +vt 0.693182 0.084337 +vt 0.693182 0.072289 +vt 0.696970 0.078313 +vt 0.696970 0.060241 +vt 0.693182 0.060241 +vt 0.693182 0.048193 +vt 0.696970 0.054217 +vt 0.696970 0.036145 +vt 0.693182 0.036145 +vt 0.693182 0.024096 +vt 0.696970 0.030120 +vt 0.696970 0.012048 +vt 0.693182 0.012048 +vt 0.693182 -0.000000 +vt 0.696970 0.006024 +vt 0.089865 0.222918 +vt 0.089865 0.234913 +vt 0.076801 0.234913 +vt 0.878788 0.132530 +vt 0.840909 0.144578 +vt 0.840909 0.132530 +vt 0.893939 0.132530 +vt 0.878788 0.144578 +vt 0.909091 0.132530 +vt 0.893939 0.144578 +vt 0.810606 0.132530 +vt 0.772727 0.144578 +vt 0.772727 0.132530 +vt 0.912879 0.391566 +vt 1.000000 0.192771 +vt 1.000000 0.391566 +vt 0.795455 0.192771 +vt 0.882576 0.391566 +vt 0.795455 0.391566 +vt 0.882576 0.144578 +vt 0.882576 0.192771 +vt 0.174242 0.536145 +vt 0.166667 0.668675 +vt 0.166667 0.536145 +vt 0.143939 0.548193 +vt 0.143939 0.536145 +vt 0.174242 0.656627 +vt 0.174242 0.668675 +vt 0.151515 0.668675 +vt 0.181818 0.530120 +vt 0.809524 0.602471 +vt 0.809524 0.614396 +vt 0.796536 0.614396 +vt 0.757576 0.144578 +vt 0.757576 0.132530 +vt 0.809524 0.602471 +vt 0.809524 0.614396 +vt 0.796536 0.614396 +vt 0.810606 -0.000000 +vt 0.757576 0.120482 +vt 0.840909 -0.000000 +vt 0.924242 0.036145 +vt 0.893939 0.120482 +vt 0.742424 0.144578 +vt 0.742424 0.132530 +vt 0.704545 0.102410 +vt 0.696970 0.120482 +vt 0.696970 0.096386 +vt 0.719697 0.102410 +vt 0.727273 0.096386 +vt 0.727273 0.120482 +vt 0.765152 0.433735 +vt 0.772727 0.457831 +vt 0.765152 0.457831 +vt 0.772727 0.433735 +vt 0.848485 0.457831 +vt 0.833333 0.114458 +vt 0.818182 0.120482 +vt 0.818182 0.114458 +vt 0.863636 0.433735 +vt 0.848485 0.433735 +vt 0.772727 0.469880 +vt 0.848485 0.481928 +vt 0.772727 0.421687 +vt 0.784091 0.403614 +vt 0.799242 0.403614 +vt 0.799242 0.487952 +vt 0.662879 0.849398 +vt 0.625000 0.861446 +vt 0.625000 0.849398 +vt 0.617424 0.861446 +vt 0.625000 0.873494 +vt 0.617424 0.873494 +vt 0.693182 0.885542 +vt 0.670455 0.933735 +vt 0.670455 0.861446 +vt 0.617424 0.897590 +vt 0.662879 0.933735 +vt 0.662879 0.861446 +vt 0.625000 0.897590 +vt 0.617424 0.933735 +vt 0.636364 0.933735 +vt 0.662879 0.945783 +vt 0.636364 0.945783 +vt 0.640152 0.885542 +vt 0.295455 0.186747 +vt 0.287879 0.156627 +vt 0.295455 0.156627 +vt 0.625000 0.945783 +vt 0.617424 0.945783 +vt 0.196970 0.156627 +vt 0.287879 0.186747 +vt 0.196970 0.186747 +vt 0.196970 0.198795 +vt 0.287879 0.198795 +vt 0.287879 0.144578 +vt 0.196970 0.144578 +vt 0.431818 0.448795 +vt 0.189394 0.186747 +vt 0.689394 0.493976 +vt 0.431818 0.478916 +vt 0.522727 0.478916 +vt 0.196970 0.198795 +vt 0.287879 0.228916 +vt 0.196970 0.228916 +vt 0.193182 0.198795 +vt 0.170455 0.156627 +vt 0.140152 0.180723 +vt 0.140152 0.156627 +vt 0.178030 0.156627 +vt 0.170455 0.180723 +vt 0.174242 0.144578 +vt 0.136364 0.150602 +vt 0.174242 0.192771 +vt 0.886904 0.951811 +vt 0.939394 0.807222 +vt 0.991884 0.951811 +vt 0.640152 0.662651 +vt 0.715909 0.662651 +vt 0.753788 0.662651 +vt 0.071968 0.951608 +vt 0.068305 0.945782 +vt 0.071968 0.939956 +vt 0.087121 0.909639 +vt 0.075758 0.915663 +vt 0.079545 0.909639 +vt 0.071969 0.939389 +vt 0.069456 0.937733 +vt 0.074483 0.929738 +vt 0.075758 0.921687 +vt 0.087121 0.927711 +vt 0.079545 0.927711 +vt 0.090909 0.921687 +vt 0.147727 0.927711 +vt 0.094697 0.927711 +vt -0.000000 0.921687 +vt 0.011364 0.927711 +vt 0.003788 0.927711 +vt 0.015152 0.921687 +vt 0.071970 0.927711 +vt 0.018939 0.927711 +vt 0.147727 0.909639 +vt 0.090909 0.915663 +vt 0.094697 0.909639 +vt 0.011364 0.909639 +vt -0.000000 0.915663 +vt 0.003788 0.909639 +vt 0.071970 0.909639 +vt 0.015152 0.915663 +vt 0.018939 0.909639 +vt 0.071970 0.903614 +vt 0.018939 0.903614 +vt 0.011364 0.903614 +vt 0.003788 0.903614 +vt 0.147727 0.903614 +vt 0.094697 0.903614 +vt 0.087121 0.903614 +vt 0.079545 0.903614 +vt 0.151515 0.915663 +vt 0.151515 0.921687 +vt 0.011364 0.909639 +vt -0.000000 0.915663 +vt 0.003788 0.909639 +vt -0.000000 0.921687 +vt 0.011364 0.927711 +vt 0.003788 0.927711 +vt 0.018939 0.927711 +vt 0.075758 0.921687 +vt 0.071970 0.927711 +vt 0.087121 0.927711 +vt 0.079545 0.927711 +vt 0.090909 0.921687 +vt 0.147727 0.927711 +vt 0.094697 0.927711 +vt 0.018939 0.909639 +vt 0.075758 0.915663 +vt 0.015152 0.915663 +vt 0.079545 0.909639 +vt 0.090909 0.915663 +vt 0.147727 0.909639 +vt 0.094697 0.909639 +vt 0.147727 0.903614 +vt 0.094697 0.903614 +vt 0.087121 0.903614 +vt 0.079545 0.903614 +vt 0.015152 0.921687 +vt 0.018939 0.903614 +vt 0.071970 0.909639 +vt 0.011364 0.903614 +vt 0.003788 0.903614 +vt 0.151515 0.921687 +vt 0.151515 0.915663 +vt 0.065955 0.834302 +vt 0.075758 0.807301 +vt 0.085560 0.834302 +vt 0.087121 0.867470 +vt 0.083333 0.855422 +vt 0.087121 0.855422 +vt 0.071970 0.849398 +vt 0.064394 0.855422 +vt 0.064394 0.849398 +vt 0.087121 0.849398 +vt 0.083333 0.849398 +vt 0.075758 0.849398 +vt 0.071970 0.861446 +vt 0.075758 0.861446 +vt 0.083333 0.855422 +vt 0.087121 0.867470 +vt 0.083333 0.867470 +vt 0.075758 0.849398 +vt 0.075758 0.861446 +vt 0.071970 0.861446 +vt 0.071970 0.849398 +vt 0.087121 0.849398 +vt 0.083333 0.849398 +vt 0.064394 0.855422 +vt 0.064394 0.849398 +vt 0.250000 0.409639 +vt 0.250000 0.385542 +vt 0.250000 0.409639 +vt 0.071970 0.843373 +vt 0.064394 0.843373 +vt 0.071970 0.843373 +vt 0.696970 0.138554 +vt 0.113636 0.144578 +vt 0.102273 0.072289 +vt 0.102273 0.000000 +vt 0.102273 0.132530 +vt 0.068182 0.144578 +vt 0.018939 0.096386 +vt 0.018939 0.144578 +vt 0.022727 0.024096 +vt 0.094719 0.239289 +vt 0.091962 0.234905 +vt 0.090953 0.228916 +vt 0.094719 0.218542 +vt 0.098485 0.216937 +vt 0.102251 0.218542 +vt 0.105008 0.222926 +vt 0.106017 0.228916 +vt 0.102251 0.239289 +vt 0.053030 0.042169 +vt 0.053030 0.114458 +vt 0.007576 0.204819 +vt 0.045455 0.144578 +vt 0.007576 0.228916 +vt 0.007576 0.072289 +vt 0.000000 0.240964 +vt 0.000000 0.192771 +vt 0.007576 0.024096 +vt 0.007576 -0.000000 +vt 0.007576 0.132530 +vt 0.007576 0.192771 +vt 0.000000 0.192771 +vt 0.000000 0.144578 +vt 0.242424 0.240964 +vt 0.015152 0.289157 +vt 0.954545 0.536145 +vt 0.977273 0.439759 +vt 0.037879 0.385542 +vt 0.878788 0.439759 +vt 0.901515 0.536145 +vt 0.924242 0.680723 +vt 0.064385 0.804024 +vt 0.058833 0.771071 +vt 0.058833 0.795195 +vt 0.056801 0.783133 +vt 0.064385 0.762241 +vt 0.079554 0.762241 +vt 0.087138 0.783133 +vt 0.085106 0.795195 +vt 0.079554 0.804025 +vt 0.174242 0.873494 +vt 0.643939 0.578313 +vt 0.643939 0.626506 +vt 0.643939 0.662651 +vt 0.643939 0.554217 +vt 0.378788 0.662651 +vt 0.689394 0.662651 +vt 0.712121 0.753012 +vt 0.662879 0.753012 +vt 0.712121 0.777108 +vt 0.689394 0.843373 +vt 0.678030 0.843373 +vt 0.715909 0.843373 +vt -0.000000 0.759036 +vt 0.272727 0.759036 +vt 0.299242 0.915663 +vt 0.435606 0.734940 +vt 0.435606 0.734940 +vt 0.473485 0.759036 +vt 0.496212 0.915663 +vt 0.496212 0.915663 +vt 0.511364 0.783133 +vt 0.225011 0.803633 +vt 0.219696 0.807134 +vt 0.214381 0.803633 +vt 0.214381 0.786728 +vt 0.225011 0.786728 +vt 0.174242 0.873494 +vt 0.212121 0.807229 +vt 0.602273 0.987952 +vt 0.571970 1.000000 +vt 0.571970 0.951807 +vt 0.564394 0.987952 +vt 0.564394 0.963855 +vt 0.556818 0.722892 +vt 0.587121 0.710843 +vt 0.587121 0.759036 +vt 0.594697 0.722892 +vt 0.594697 0.746988 +vt 0.229654 0.786921 +vt 0.234848 0.783500 +vt 0.240042 0.786921 +vt 0.240042 0.803441 +vt 0.229654 0.803441 +vt 0.780303 0.500000 +vt 0.295455 0.807229 +vt 0.295455 0.710843 +vt 0.696970 0.120482 +vt 0.696970 0.114458 +vt 0.696970 0.096386 +vt 0.696970 0.090361 +vt 0.696970 0.072289 +vt 0.696970 0.066265 +vt 0.696970 0.048193 +vt 0.696970 0.042169 +vt 0.696970 0.024096 +vt 0.696970 0.018072 +vt 0.696970 -0.000000 +vt 0.087105 0.239304 +vt 0.083333 0.240911 +vt 0.079562 0.239304 +vt 0.075791 0.228916 +vt 0.076801 0.222918 +vt 0.079562 0.218527 +vt 0.083333 0.216920 +vt 0.087105 0.218527 +vt 0.090876 0.228916 +vt 0.909091 0.144578 +vt 0.810606 0.144578 +vt 0.912879 0.192771 +vt 0.795455 0.144578 +vt 0.174242 0.548193 +vt 0.143939 0.656627 +vt 0.151515 0.536145 +vt 0.806780 0.618761 +vt 0.803030 0.620359 +vt 0.799281 0.618761 +vt 0.795532 0.608434 +vt 0.796536 0.602471 +vt 0.799281 0.598106 +vt 0.803030 0.596508 +vt 0.806780 0.598106 +vt 0.810529 0.608434 +vt 0.806780 0.618761 +vt 0.803030 0.620359 +vt 0.799281 0.618761 +vt 0.795532 0.608434 +vt 0.796536 0.602471 +vt 0.799281 0.598106 +vt 0.803030 0.596508 +vt 0.806780 0.598106 +vt 0.810529 0.608434 +vt 0.742424 0.120482 +vt 0.727273 0.036145 +vt 0.924242 0.096386 +vt 0.909091 0.120482 +vt 0.704545 0.120482 +vt 0.719697 0.120482 +vt 0.833333 0.120482 +vt 0.863636 0.457831 +vt 0.848485 0.409639 +vt 0.814394 0.391566 +vt 0.852273 0.391566 +vt 0.852273 0.409639 +vt 0.852273 0.481928 +vt 0.852273 0.500000 +vt 0.814394 0.500000 +vt 0.784091 0.487952 +vt 0.708333 0.861446 +vt 0.708333 0.873494 +vt 0.693182 0.921687 +vt 0.696970 0.933735 +vt 0.625000 0.933735 +vt 0.640152 0.921687 +vt 0.189394 0.156627 +vt 0.287879 0.198795 +vt 0.193182 0.228916 +vt 0.178030 0.180723 +vt 0.136364 0.186747 +vt 0.969699 0.987093 +vt 0.939394 1.000007 +vt 0.909088 0.987093 +vt 0.878783 0.903614 +vt 0.886904 0.855418 +vt 0.909089 0.820136 +vt 0.969699 0.820136 +vt 0.991884 0.855418 +vt 1.000005 0.903614 +vt 0.074559 0.941663 +vt 0.075631 0.945782 +vt 0.074559 0.949902 +vt 0.069378 0.949902 +vt 0.069378 0.941663 +vt 0.068414 0.933736 +vt 0.069456 0.929738 +vt 0.071969 0.928082 +vt 0.075524 0.933736 +vt 0.074483 0.937733 +vt 0.087121 0.909639 +vt 0.071970 0.903614 +vt 0.081417 0.840890 +vt 0.075758 0.843302 +vt 0.070098 0.840890 +vt 0.064439 0.825301 +vt 0.065955 0.816301 +vt 0.070098 0.809712 +vt 0.081417 0.809712 +vt 0.085560 0.816301 +vt 0.087076 0.825301 +vt 0.083333 0.867470 +vt 0.087121 0.855422 +vt 0.250000 0.385542 +vt 0.064394 0.843373 +vt 0.094697 0.060241 +vt 0.094697 0.048193 +vt 0.094697 0.084337 +vt 0.094697 0.072289 +vt 0.094697 0.096386 +vt 0.094697 0.120482 +vt 0.094697 0.108434 +vt 0.094697 0.144578 +vt 0.094697 0.132530 +vt 0.094697 -0.000000 +vt 0.094697 0.024096 +vt 0.094697 0.012048 +vt 0.094697 0.036145 +vt 0.079545 0.096386 +vt 0.079545 0.036145 +vt 0.079545 -0.000000 +vt 0.079545 0.108434 +vt 0.079545 0.048193 +vt 0.079545 0.072289 +vt 0.079545 0.012048 +vt 0.079545 0.120482 +vt 0.079545 0.060241 +vt 0.079545 0.084337 +vt 0.079545 0.024096 +vt 0.079545 0.132530 +vt 0.060606 -0.000000 +vt 0.060606 0.072289 +vt 0.060606 0.012048 +vt 0.060606 0.060241 +vt 0.060606 0.084337 +vt 0.060606 0.132530 +vt 0.045455 0.174699 +vt 0.075758 0.168675 +vt 0.075758 0.174699 +vt 0.045455 0.150602 +vt 0.075758 0.156627 +vt 0.060606 0.144578 +vt 0.045455 0.210843 +vt 0.075758 0.204819 +vt 0.075758 0.210843 +vt 0.045455 0.216867 +vt 0.075758 0.222892 +vt 0.045455 0.222892 +vt 0.079545 0.144578 +vt 0.075758 0.180723 +vt 0.075758 0.162651 +vt 0.045455 0.162651 +vt 0.075758 0.216867 +vt 0.075758 0.228916 +vt 0.075758 0.186747 +vt 0.045455 0.186747 +vt 0.045455 0.168675 +vt 0.075758 0.234940 +vt 0.045455 0.234940 +vt 0.007576 0.174699 +vt 0.007576 0.216867 +vt 0.007576 0.222892 +vt 0.007576 0.210843 +vt 0.007576 0.168675 +vt 0.007576 0.162651 +vt 0.045455 0.198795 +vt -0.000000 0.060241 +vt -0.000000 0.066265 +vt 0.000000 0.054217 +vt 0.000000 0.012048 +vt 0.000000 0.018072 +vt 0.000000 0.132530 +vt 0.000000 0.138554 +vt 0.000000 0.084337 +vt -0.000000 0.090361 +vt 0.056818 0.795181 +vt -0.000000 0.783133 +vt 0.056818 0.783133 +vt 0.056818 0.903614 +vt -0.000000 0.891566 +vt 0.056818 0.891566 +vt 0.056818 0.867470 +vt -0.000000 0.855422 +vt 0.056818 0.855422 +vt 0.056818 0.807229 +vt -0.000000 0.795181 +vt 0.056818 0.771084 +vt -0.000000 0.759036 +vt 0.056818 0.759036 +vt 0.056818 0.879518 +vt -0.000000 0.867470 +vt 0.056818 0.819277 +vt -0.000000 0.807229 +vt 0.056818 0.843373 +vt -0.000000 0.831325 +vt 0.056818 0.831325 +vt -0.000000 0.771084 +vt -0.000000 0.879518 +vt -0.000000 0.819277 +vt -0.000000 0.843373 +vt 0.295455 0.192771 +vt 0.477273 0.144578 +vt 0.477273 0.192771 +vt 0.518939 0.614458 +vt 0.518939 0.554217 +vt 0.518939 0.518072 +vt 0.518939 0.626506 +vt 0.518939 0.566265 +vt 0.518939 0.590361 +vt 0.518939 0.530120 +vt 0.518939 0.638554 +vt 0.518939 0.578313 +vt 0.518939 0.602410 +vt 0.518939 0.542169 +vt 0.518939 0.650602 +vt 0.549242 0.554217 +vt 0.549242 0.578313 +vt 0.549242 0.590361 +vt 0.549242 0.614458 +vt 0.549242 0.626506 +vt 0.549242 0.638554 +vt 0.549242 0.650602 +vt 0.518939 0.662651 +vt 0.549242 0.518072 +vt 0.549242 0.530120 +vt 0.549242 0.542169 +vt 0.549242 0.566265 +vt 0.549242 0.602410 +vt 0.549242 0.662651 +vt 0.742424 0.493976 +vt 0.742424 0.457831 +vt 0.765152 0.433735 +vt 0.742424 0.180723 +vt 0.765152 0.409639 +vt 0.742424 0.397590 +vt 0.727273 0.457831 +vt 0.727273 0.397590 +vt 0.727273 0.180723 +vt 0.242424 0.554217 +vt 0.727273 0.493976 +vt 0.242424 0.614458 +vt 0.242424 0.650602 +vt 0.242424 0.542169 +vt 0.242424 0.602410 +vt 0.242424 0.578313 +vt 0.242424 0.638554 +vt 0.242424 0.530120 +vt 0.242424 0.590361 +vt 0.242424 0.566265 +vt 0.242424 0.626506 +vt 0.242424 0.518072 +vt 0.674242 0.180723 +vt 0.583333 0.156627 +vt 0.674242 0.156627 +vt 0.583333 0.180723 +vt 0.568182 0.156627 +vt 0.568182 0.180723 +vt 0.553030 0.156627 +vt 0.553030 0.180723 +vt 0.761364 0.674699 +vt 0.753788 0.698795 +vt 0.753788 0.674699 +vt 0.761364 0.698795 +vt 0.753788 0.753012 +vt 0.734848 0.638554 +vt 0.734848 0.578313 +vt 0.734848 0.602410 +vt 0.734848 0.542169 +vt 0.734848 0.650602 +vt 0.734848 0.590361 +vt 0.734848 0.614458 +vt 0.734848 0.554217 +vt 0.734848 0.662651 +vt 0.734848 0.626506 +vt 0.734848 0.566265 +vt 0.734848 0.530120 +vt 0.765152 0.662651 +vt 0.765152 0.650602 +vt 0.765152 0.638554 +vt 0.765152 0.626506 +vt 0.765152 0.614458 +vt 0.765152 0.602410 +vt 0.765152 0.590361 +vt 0.765152 0.578313 +vt 0.765152 0.566265 +vt 0.765152 0.554217 +vt 0.765152 0.542169 +vt 0.765152 0.530120 +vt 0.734848 0.518072 +vt 0.765152 0.518072 +vt 0.768939 0.777108 +vt 0.761364 0.753012 +vt 0.768939 0.753012 +vt 0.768939 0.801205 +vt 0.761364 0.777108 +vt 0.768939 0.849398 +vt 0.761364 0.801205 +vt 0.583333 0.180723 +vt 0.583333 0.228916 +vt 0.674242 0.180723 +vt 0.583333 0.228916 +vt 0.507576 0.325301 +vt 0.507576 0.325301 +vt 0.276515 0.915663 +vt 0.291667 0.963855 +vt 0.276515 0.963855 +vt 0.306818 0.662651 +vt 0.276515 0.710843 +vt 0.276515 0.662651 +vt 0.291667 0.915663 +vt 0.367424 0.963855 +vt 0.412879 0.915663 +vt 0.397727 0.963855 +vt 0.397727 0.915663 +vt 0.382576 0.662651 +vt 0.306818 0.710843 +vt 0.367424 0.915663 +vt 0.428030 0.963855 +vt 0.412879 0.963855 +vt 0.428030 0.915663 +vt 0.488636 0.963855 +vt 0.488636 0.915663 +vt 0.503788 0.963855 +vt 0.503788 0.915663 +vt 0.522727 0.963855 +vt 0.522727 0.915663 +vt 0.541667 0.963855 +vt 0.420455 0.662651 +vt 0.382576 0.710843 +vt 0.511364 0.662651 +vt 0.556818 0.710843 +vt 0.556818 0.662651 +vt 0.625000 0.710843 +vt 0.625000 0.662651 +vt 0.640152 0.710843 +vt 0.272727 0.783133 +vt 0.265152 0.759036 +vt 0.272727 0.759036 +vt 0.265152 0.783133 +vt 0.257576 0.759036 +vt 0.257576 0.783133 +vt 0.250000 0.759036 +vt 0.250000 0.783133 +vt 0.242424 0.759036 +vt 0.242424 0.783133 +vt 0.234848 0.759036 +vt 0.234848 0.783133 +vt 0.227273 0.759036 +vt 0.227273 0.783133 +vt 0.219697 0.759036 +vt 0.219697 0.783133 +vt 0.212121 0.759036 +vt 0.602273 0.903614 +vt 0.617424 0.867470 +vt 0.617424 0.903614 +vt 0.602273 0.951807 +vt 0.617424 0.951807 +vt 0.541667 0.951807 +vt 0.556818 0.903614 +vt 0.556818 0.951807 +vt 0.560606 0.879518 +vt 0.568182 0.819277 +vt 0.560606 0.819277 +vt 0.564394 0.783133 +vt 0.568182 0.819277 +vt 0.560606 0.819277 +vt 0.541667 0.903614 +vt 0.556818 0.879518 +vt 0.594697 0.903614 +vt 0.587121 0.903614 +vt 0.594697 0.759036 +vt 0.594697 0.771084 +vt 0.602273 0.771084 +vt 0.602273 0.819277 +vt 0.617424 0.771084 +vt 0.617424 0.819277 +vt 0.594697 0.867470 +vt 0.587121 0.903614 +vt 0.594697 0.903614 +vt 0.602273 0.867470 +vt 0.541667 0.879518 +vt 0.556818 0.819277 +vt 0.602273 0.759036 +vt 0.617424 0.759036 +vt 0.541667 0.819277 +vt 0.556818 0.783133 +vt 0.568182 0.879518 +vt 0.560606 0.879518 +vt 0.541667 0.759036 +vt 0.556818 0.759036 +vt 0.564394 0.951807 +vt 0.571970 0.903614 +vt 0.564394 0.903614 +vt 0.564394 0.903614 +vt 0.564394 0.951807 +vt 0.587121 0.867470 +vt 0.594697 0.819277 +vt 0.571970 0.783133 +vt 0.594697 0.771084 +vt 0.594697 0.867470 +vt 0.602273 0.771084 +vt 0.571970 0.903614 +vt 0.595599 0.759478 +vt 0.571970 0.951807 +vt 0.568182 0.879518 +vt 0.587121 0.867470 +vt 0.594697 0.819277 +vt 0.571970 0.783133 +vt 0.587121 0.759036 +vt 0.564394 0.759036 +vt 0.564394 0.783133 +vt 0.556818 0.759036 +vt 0.594697 0.951807 +vt 0.602273 0.951807 +vt 0.602273 0.819277 +vt 0.257576 0.789157 +vt 0.253788 0.795181 +vt 0.253788 0.789157 +vt 0.257576 0.783133 +vt 0.261364 0.789157 +vt 0.265152 0.783133 +vt 0.268939 0.789157 +vt 0.265152 0.789157 +vt 0.246212 0.783133 +vt 0.242424 0.789157 +vt 0.242424 0.783133 +vt 0.253788 0.783133 +vt 0.261364 0.783133 +vt 0.268939 0.783133 +vt 0.272727 0.789157 +vt 0.250000 0.783133 +vt 0.246212 0.789157 +vt 0.250000 0.789157 +vt 0.243588 0.797031 +vt 0.246212 0.795303 +vt 0.246212 0.807105 +vt 0.261364 0.795181 +vt 0.272727 0.795181 +vt 0.268939 0.795181 +vt 0.246212 0.795181 +vt 0.250000 0.795181 +vt 0.257576 0.795181 +vt 0.265152 0.795181 +vt 0.242424 0.795181 +vt 0.772727 0.608434 +vt 0.787879 0.596386 +vt 0.787879 0.608434 +vt 0.772727 0.632530 +vt 0.765152 0.608434 +vt 0.795455 0.608434 +vt 0.787879 0.632530 +vt 0.772727 0.596386 +vt 0.795455 0.632530 +vt 0.787879 0.608434 +vt 0.795455 0.608434 +vt 0.772727 0.608434 +vt 0.765152 0.632530 +vt 0.765152 0.608434 +vt 0.787879 0.596386 +vt 0.772727 0.596386 +vt 0.136364 0.174699 +vt 0.075758 0.168675 +vt 0.136364 0.168675 +vt 0.136364 0.204819 +vt 0.075758 0.198795 +vt 0.136364 0.198795 +vt 0.136364 0.150602 +vt 0.075758 0.144578 +vt 0.136364 0.144578 +vt 0.075758 0.162651 +vt 0.136364 0.162651 +vt 0.075758 0.192771 +vt 0.136364 0.192771 +vt 0.136364 0.216867 +vt 0.075758 0.210843 +vt 0.136364 0.210843 +vt 0.075758 0.156627 +vt 0.136364 0.156627 +vt 0.075758 0.186747 +vt 0.136364 0.186747 +vt 0.136364 0.180723 +vt 0.075758 0.174699 +vt 0.075758 0.204819 +vt 0.075758 0.150602 +vt 0.075758 0.180723 +vt 0.765152 0.391566 +vt 0.799242 0.632530 +vt 0.795455 0.704819 +vt 0.795455 0.632530 +vt 0.780303 0.632530 +vt 0.776515 0.704819 +vt 0.776515 0.632530 +vt 0.768939 0.632530 +vt 0.765152 0.704819 +vt 0.765152 0.632530 +vt 0.803030 0.632530 +vt 0.799242 0.704819 +vt 0.784091 0.632530 +vt 0.780303 0.704819 +vt 0.791667 0.632530 +vt 0.787879 0.704819 +vt 0.787879 0.632530 +vt 0.772727 0.632530 +vt 0.768939 0.704819 +vt 0.806818 0.632530 +vt 0.803030 0.704819 +vt 0.784091 0.704819 +vt 0.791667 0.704819 +vt 0.772727 0.704819 +vt 0.810606 0.632530 +vt 0.806818 0.704819 +vt 0.768939 0.716867 +vt 0.803030 0.716867 +vt 0.784091 0.716867 +vt 0.795455 0.716867 +vt 0.791667 0.716867 +vt 0.776515 0.716867 +vt 0.772727 0.716867 +vt 0.810606 0.704819 +vt 0.806818 0.716867 +vt 0.780303 0.716867 +vt 0.765152 0.716867 +vt 0.799242 0.716867 +vt 0.787879 0.716867 +vt 0.787879 0.728916 +vt 0.768939 0.728916 +vt 0.803030 0.728916 +vt 0.784091 0.728916 +vt 0.791667 0.728916 +vt 0.772727 0.728916 +vt 0.810606 0.716867 +vt 0.806818 0.728916 +vt 0.795455 0.728916 +vt 0.776515 0.728916 +vt 0.765152 0.728916 +vt 0.799242 0.728916 +vt 0.780303 0.728916 +vt 0.787879 0.753012 +vt 0.795455 0.753012 +vt 0.776515 0.753012 +vt 0.810606 0.728916 +vt 0.810606 0.753012 +vt 0.799242 0.753012 +vt 0.780303 0.753012 +vt 0.768939 0.753012 +vt 0.803030 0.753012 +vt 0.784091 0.753012 +vt 0.772727 0.753012 +vt 0.806818 0.753012 +vt 0.791667 0.753012 +vt 0.799242 0.632530 +vt 0.795455 0.704819 +vt 0.795455 0.632530 +vt 0.780303 0.632530 +vt 0.776515 0.704819 +vt 0.776515 0.632530 +vt 0.768939 0.632530 +vt 0.765152 0.704819 +vt 0.765152 0.632530 +vt 0.803030 0.632530 +vt 0.799242 0.704819 +vt 0.784091 0.632530 +vt 0.780303 0.704819 +vt 0.791667 0.632530 +vt 0.787879 0.704819 +vt 0.787879 0.632530 +vt 0.772727 0.632530 +vt 0.768939 0.704819 +vt 0.806818 0.632530 +vt 0.803030 0.704819 +vt 0.784091 0.704819 +vt 0.791667 0.704819 +vt 0.772727 0.704819 +vt 0.810606 0.632530 +vt 0.806818 0.704819 +vt 0.772727 0.716867 +vt 0.768939 0.716867 +vt 0.806818 0.716867 +vt 0.803030 0.716867 +vt 0.784091 0.716867 +vt 0.795455 0.716867 +vt 0.791667 0.716867 +vt 0.810606 0.704819 +vt 0.780303 0.716867 +vt 0.776515 0.716867 +vt 0.765152 0.716867 +vt 0.799242 0.716867 +vt 0.787879 0.716867 +vt 0.787879 0.728916 +vt 0.768939 0.728916 +vt 0.803030 0.728916 +vt 0.784091 0.728916 +vt 0.791667 0.728916 +vt 0.772727 0.728916 +vt 0.810606 0.716867 +vt 0.806818 0.728916 +vt 0.795455 0.728916 +vt 0.776515 0.728916 +vt 0.765152 0.728916 +vt 0.799242 0.728916 +vt 0.780303 0.728916 +vt 0.787879 0.753012 +vt 0.795455 0.753012 +vt 0.776515 0.753012 +vt 0.810606 0.728916 +vt 0.810606 0.753012 +vt 0.799242 0.753012 +vt 0.780303 0.753012 +vt 0.768939 0.753012 +vt 0.803030 0.753012 +vt 0.784091 0.753012 +vt 0.772727 0.753012 +vt 0.806818 0.753012 +vt 0.791667 0.753012 +vt 0.833333 0.132530 +vt 0.761364 0.662651 +vt 0.000000 0.939759 +vt 0.068182 0.933735 +vt 0.068182 0.939759 +vt 0.000000 0.933735 +vt 0.068182 0.927711 +vt 0.000000 0.975904 +vt 0.068182 0.969880 +vt 0.068182 0.975904 +vt 0.000000 0.969880 +vt 0.068182 0.963855 +vt 0.000000 0.963855 +vt 0.068182 0.957831 +vt 0.000000 0.957831 +vt 0.068182 0.951807 +vt 0.000000 0.951807 +vt 0.068182 0.945783 +vt 0.000000 0.945783 +vt 0.087121 0.783133 +vt 0.147727 0.795181 +vt 0.087121 0.795181 +vt 0.087121 0.843373 +vt 0.147727 0.855422 +vt 0.087121 0.855422 +vt 0.087121 0.819277 +vt 0.147727 0.831325 +vt 0.087121 0.831325 +vt 0.087121 0.879518 +vt 0.147727 0.891566 +vt 0.087121 0.891566 +vt 0.087121 0.771084 +vt 0.147727 0.783133 +vt 0.147727 0.843373 +vt 0.087121 0.807229 +vt 0.147727 0.819277 +vt 0.087121 0.867470 +vt 0.147727 0.879518 +vt 0.087121 0.759036 +vt 0.147727 0.771084 +vt 0.147727 0.807229 +vt 0.147727 0.867470 +vt 0.147727 0.903614 +vt 0.087121 0.903614 +vt 0.325758 0.337349 +vt 0.075758 0.150602 +vt 0.075758 0.198795 +vt 0.000000 0.006024 +vt -0.000000 0.126506 +vt -0.000000 0.078313 +vt -0.000000 0.903614 +vt 0.295455 0.144578 +vt 0.242424 0.662651 +vt 0.761364 0.753012 +vt 0.568182 0.204819 +vt 0.568182 0.204819 +vt 0.541667 0.915663 +vt 0.640152 0.662651 +vt 0.212121 0.783133 +vt 0.541667 0.783133 +vt 0.272727 0.783133 +vt 0.248835 0.797031 +vt 0.249922 0.801204 +vt 0.248835 0.805376 +vt 0.243588 0.805376 +vt 0.242501 0.801204 +vt 0.765152 0.632530 +vt 0.795455 0.632530 +vt 0.787879 0.632530 +vt 0.772727 0.632530 +vt 0.075758 0.216867 +vt 0.696970 0.036145 +vt 0.765152 0.192771 +vt 0.818182 0.132530 +vt 0.000000 0.927711 +vt 0.147727 0.759036 +vt 0.250000 0.337349 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -0.5000 -0.8660 -0.0000 +vn -0.5000 0.8660 -0.0000 +vn 0.5000 0.8660 0.0000 +vn 0.5000 -0.8660 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.8575 0.5145 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.8575 0.5145 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.8000 0.6000 0.0000 +vn -0.8000 0.6000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -0.2169 0.9762 +vn 0.0000 -0.9701 0.2425 +vn -0.7071 0.7071 0.0000 +vn 0.0000 0.8944 0.4472 +vn 0.0000 -0.9648 0.2631 +vn 0.0000 0.7071 0.7071 +vn -0.8660 -0.5000 0.0000 +vn 0.7746 0.4472 0.4472 +vn 0.8660 0.5000 0.0000 +vn -0.3873 -0.2236 0.8944 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 -0.8944 -0.4472 +vn 0.0000 0.9063 0.4226 +vn 0.0000 -0.9063 -0.4226 +vn 0.5000 0.3660 -0.7849 +vn 0.8660 -0.2113 0.4532 +vn -0.8660 0.2113 -0.4532 +vn -0.5000 -0.3660 0.7849 +vn -0.4472 0.0000 0.8944 +vn 0.4472 0.0000 0.8944 +vn 0.8660 -0.5000 -0.0000 +vn -0.8660 0.5000 0.0000 +vn 0.7746 0.4472 -0.4472 +vn 0.4472 0.7746 -0.4472 +vn 0.0000 0.8944 -0.4472 +vn -0.4472 0.7746 -0.4472 +vn -0.7746 0.4472 -0.4472 +vn -0.8944 -0.0000 -0.4472 +vn -0.7746 -0.4472 -0.4472 +vn -0.4472 -0.7746 -0.4472 +vn 0.4472 -0.7746 -0.4472 +vn 0.7746 -0.4472 -0.4472 +vn 0.8944 0.0000 -0.4472 +vn -0.0000 -0.9988 0.0494 +vn 0.8184 0.5737 0.0327 +vn 0.0000 0.9988 0.0494 +vn 0.4994 -0.8650 0.0494 +vn -0.8184 -0.5737 0.0327 +vn 0.4994 0.8650 0.0494 +vn -0.4994 0.8650 0.0494 +vn 0.8184 -0.5737 0.0327 +vn -0.4994 -0.8650 0.0494 +vn -0.8184 0.5737 0.0327 +vn -0.0000 0.9950 0.0995 +vn 0.4975 0.8617 0.0995 +vn -0.8181 0.5751 0.0000 +vn 0.4975 -0.8617 0.0995 +vn -0.4975 -0.8617 0.0995 +vn -0.7038 0.7038 0.0961 +vn 0.4472 0.7746 0.4472 +vn -0.4472 0.7746 0.4472 +vn -0.7746 0.4472 0.4472 +vn -0.8944 0.0000 0.4472 +vn -0.7746 -0.4472 0.4472 +vn -0.4472 -0.7746 0.4472 +vn -0.0000 -0.8944 0.4472 +vn 0.4472 -0.7746 0.4472 +vn 0.7746 -0.4472 0.4472 +vn 0.8944 0.0000 0.4472 +vn 0.8181 0.5751 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.8181 -0.5751 -0.0000 +vn 0.8181 -0.5751 -0.0000 +vn -0.6367 -0.6367 0.4349 +vn -0.6367 0.6367 0.4349 +vn 0.6367 0.6367 0.4349 +vn 0.6367 -0.6367 0.4349 +vn 0.0000 -0.9947 0.1025 +vn 0.0000 -0.9073 0.4205 +vn 0.9923 -0.0000 0.1240 +vn 0.8593 0.4961 0.1240 +vn 0.4961 0.8593 0.1240 +vn 0.0000 0.9923 0.1240 +vn -0.4961 0.8593 0.1240 +vn -0.8593 0.4961 0.1240 +vn -0.9923 0.0000 0.1240 +vn -0.8593 -0.4961 0.1240 +vn -0.4961 -0.8593 0.1240 +vn 0.0000 -0.9923 0.1240 +vn 0.4961 -0.8593 0.1240 +vn 0.8593 -0.4961 0.1240 +vn -0.2300 0.7786 -0.5839 +vn -0.3299 0.4380 -0.8363 +vn -0.6301 0.1931 -0.7521 +vn -0.0656 -0.3155 -0.9466 +vn -0.5758 -0.1060 -0.8107 +vn -0.2968 -0.1599 -0.9415 +vn 0.3299 0.4380 -0.8363 +vn 0.2968 -0.1599 -0.9415 +vn 0.5758 -0.1060 -0.8107 +vn 0.0656 -0.3155 -0.9466 +vn -0.9980 -0.0000 -0.0628 +vn 0.6301 0.1931 -0.7521 +vn 0.2300 0.7786 -0.5839 +vn 0.8643 -0.4990 -0.0628 +vn 0.4990 0.8643 -0.0628 +vn -0.8643 0.4990 -0.0628 +vn 0.4990 -0.8643 -0.0628 +vn -0.4990 -0.8643 -0.0628 +vn 0.8643 0.4990 -0.0628 +vn -0.4990 0.8643 -0.0628 +vn -0.0000 -0.9980 -0.0628 +vn -0.8643 -0.4990 -0.0628 +vn 0.9980 0.0000 -0.0628 +vn 0.0000 0.9980 -0.0628 +vn 0.0000 -0.9239 0.3827 +vn 0.0000 -0.7809 0.6247 +vn 0.0000 0.7937 0.6083 +vn 0.0000 -0.6644 -0.7474 +vn 0.0000 -0.7937 -0.6083 +vn 0.0000 0.6644 0.7474 +vn 0.0000 -0.1602 -0.9871 +vn 0.0000 -0.3827 -0.9239 +vn 0.8644 0.4991 -0.0615 +vn -0.4991 -0.8644 -0.0615 +vn 0.4991 -0.8644 -0.0615 +vn -0.8644 0.4991 -0.0615 +vn 0.4991 0.8644 -0.0615 +vn -0.0000 -0.9981 -0.0615 +vn 0.8644 -0.4991 -0.0615 +vn -0.9981 -0.0000 -0.0615 +vn -0.0000 0.9981 -0.0615 +vn 0.9981 0.0000 -0.0615 +vn -0.8644 -0.4991 -0.0615 +vn -0.4991 0.8644 -0.0615 +vn 0.0000 0.2298 0.9732 +vn 0.0000 -0.8281 -0.5606 +vn 0.0000 -0.9191 -0.3939 +vn 0.0000 0.6114 0.7913 +vn 0.0000 0.7526 0.6585 +vn 0.0000 0.9191 0.3939 +vn 0.0000 0.8281 0.5606 +vn 0.0000 0.3827 0.9239 +vn -0.9956 -0.0906 0.0222 +vn -0.9920 -0.1196 0.0399 +vn 0.9956 -0.0906 0.0222 +vn 0.9920 -0.1196 0.0399 +vn -0.9872 -0.1545 0.0398 +vn -0.9866 -0.1600 0.0328 +vn 0.9872 -0.1545 0.0398 +vn 0.9866 -0.1600 0.0328 +vn 0.9867 -0.1589 0.0331 +vn -0.9867 -0.1589 0.0331 +vn 0.0000 -0.4472 -0.8944 +vn 0.0000 0.0735 -0.9973 +vn 0.0000 -0.7571 0.6532 +vn 0.0000 0.6954 -0.7186 +vn 0.0000 0.9239 0.3827 +vn 0.0000 0.9487 -0.3162 +vn 0.0000 -0.6427 0.7661 +vn 0.0000 0.1602 0.9871 +vn 0.0000 -0.8507 0.5257 +vn 0.0000 0.3714 0.9285 +vn 0.0000 -0.3714 0.9285 +vn 0.0000 0.2076 -0.9782 +vn 0.0000 -0.1826 -0.9832 +vn 0.0000 -0.7071 -0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.3916 -0.1153 -0.9129 +vn -0.3916 0.1153 -0.9129 +vn -0.3916 -0.1153 -0.9129 +vn 0.3538 -0.2269 -0.9074 +vn -0.3538 -0.2269 -0.9074 +vn -0.3827 0.0000 0.9239 +vn 0.3916 0.1153 0.9129 +vn 0.3827 0.0000 0.9239 +vn -0.3711 0.1112 0.9219 +vn -0.9163 -0.0343 0.3990 +vn -0.3750 -0.0754 0.9239 +vn 0.4082 0.1464 0.9011 +vn 0.9163 -0.0343 0.3990 +vn 0.3750 -0.0754 0.9239 +vn -0.3916 0.1153 0.9129 +vn 0.3711 0.1112 0.9219 +vn 0.8970 -0.1072 -0.4287 +vn 0.9337 -0.0415 -0.3557 +vn -0.3458 -0.6635 -0.6635 +vn -0.8727 -0.2257 -0.4330 +vn -0.3416 -0.3416 -0.8756 +vn 0.3711 0.1112 -0.9219 +vn -0.3711 0.1112 -0.9219 +vn -0.9337 -0.0415 -0.3557 +vn 0.3916 0.1153 -0.9129 +vn 0.3458 -0.6635 -0.6635 +vn 0.9123 0.0530 0.4062 +vn -0.3158 0.4243 0.8487 +vn 0.3158 0.4243 0.8487 +vn -0.9337 0.0415 0.3557 +vn 0.9239 0.0000 0.3827 +vn 0.9337 0.0415 -0.3557 +vn 0.9123 0.0530 -0.4062 +vn 0.9489 0.0415 0.3128 +vn 0.8727 -0.2257 -0.4330 +vn 0.9607 -0.1962 -0.1962 +vn 0.8592 0.2288 0.4576 +vn 0.3416 -0.3416 -0.8756 +vn 0.9337 0.0415 0.3557 +vn -0.9239 0.0000 0.3827 +vn -0.9123 0.0530 0.4062 +vn -0.9337 0.0415 -0.3557 +vn -0.9123 0.0530 -0.4062 +vn -0.9489 0.0415 0.3128 +vn -0.9607 -0.1962 -0.1962 +vn -0.8592 0.2288 0.4576 +vn -0.4082 0.1464 0.9011 +vn -0.8970 -0.1072 -0.4287 +vn 0.9113 0.4118 0.0000 +vn 0.8576 -0.3996 -0.3238 +vn 0.7175 0.2181 -0.6615 +vn 0.7175 0.2181 0.6615 +vn -0.2181 -0.7175 0.6615 +vn 0.2497 -0.2497 0.9356 +vn -0.5000 -0.5000 -0.7071 +vn -0.4118 -0.9113 -0.0000 +vn 0.5000 0.5000 -0.7071 +vn 0.5000 0.5000 0.7071 +vn -0.5000 -0.5000 0.7071 +vn -0.2181 -0.7175 -0.6615 +vn 0.2497 -0.2497 -0.9356 +vn 0.3996 -0.8576 0.3238 +vn 0.3048 -0.9524 -0.0000 +vn 0.9524 -0.3048 0.0000 +vn 0.8576 -0.3996 0.3238 +vn 0.3996 -0.8576 -0.3238 +vn 0.6286 -0.6286 -0.4580 +vn 0.6286 -0.6286 0.4580 +vn 0.7588 -0.4606 0.4606 +vn 0.6861 -0.6861 -0.2418 +vn 0.7588 -0.4606 -0.4606 +vn 0.6861 -0.2418 0.6861 +vn 0.6861 -0.2418 -0.6861 +vn 0.6861 -0.6861 0.2418 +vn -0.7588 -0.4606 0.4606 +vn -0.6861 -0.2418 0.6861 +vn -0.7588 -0.4606 -0.4606 +vn -0.6861 -0.2418 -0.6861 +vn -0.6861 -0.6861 0.2418 +vn -0.6861 -0.6861 -0.2418 +vn 0.0000 0.2425 0.9701 +vn 0.0000 -0.2425 0.9701 +vn 0.0000 -0.1222 -0.9925 +vn 0.0000 -0.2425 -0.9701 +vn 0.0000 0.1222 0.9925 +vn 0.8402 -0.4851 0.2425 +vn 0.4851 -0.8402 0.2425 +vn -0.4851 -0.8402 0.2425 +vn -0.8402 -0.4851 0.2425 +vn 0.0000 0.9701 0.2425 +vn 0.4851 0.8402 0.2425 +vn -0.4851 0.8402 0.2425 +vn -0.8402 0.4851 0.2425 +vn 0.9701 -0.0000 0.2425 +vn -0.9701 -0.0000 0.2425 +vn 0.8402 0.4851 0.2425 +vn 0.0000 0.9848 0.1735 +vn 0.4924 -0.8529 0.1735 +vn -0.8529 -0.4924 0.1735 +vn 0.4924 0.8529 0.1735 +vn -0.4924 0.8529 0.1735 +vn 0.8529 -0.4924 0.1735 +vn -0.4924 -0.8529 0.1735 +vn -0.8529 0.4924 0.1735 +vn 0.9848 -0.0000 0.1735 +vn 0.0000 -0.9848 0.1735 +vn -0.9848 0.0000 0.1735 +vn 0.8529 0.4924 0.1735 +vn 0.0000 0.7071 -0.7071 +vn 0.7038 0.7038 0.0961 +vn 0.7038 -0.7038 0.0961 +vn 0.0000 -0.9950 0.0995 +vn -0.7038 -0.7038 0.0961 +vn -0.4975 0.8617 0.0995 +s off +f 624/1/1 13/2/1 15/3/1 +f 6/4/1 36/5/1 35/6/1 +f 4/7/1 25/8/1 36/5/1 +f 24/9/1 25/8/1 2/10/1 +f 22/11/1 26/12/1 24/9/1 +f 20/13/1 27/14/1 22/11/1 +f 20/13/1 29/15/1 28/16/1 +f 18/17/1 30/18/1 29/15/1 +f 14/19/1 30/18/1 16/20/1 +f 12/21/1 31/22/1 14/23/1 +f 12/21/1 33/24/1 32/25/1 +f 10/26/1 34/27/1 33/24/1 +f 8/28/1 35/6/1 34/27/1 +f 37/29/2 50/30/2 48/31/2 +f 48/31/2 51/32/2 47/33/2 +f 47/33/2 52/34/2 46/35/2 +f 46/35/2 53/36/2 45/37/2 +f 45/37/2 54/38/2 44/39/2 +f 54/38/2 43/40/2 44/39/2 +f 55/41/2 42/42/2 43/43/2 +f 42/42/2 57/44/2 41/45/2 +f 41/45/2 58/46/2 40/47/2 +f 58/46/2 39/48/2 40/47/2 +f 59/49/2 38/50/2 39/48/2 +f 60/51/2 37/29/2 38/50/2 +f 87/52/1 108/53/1 107/54/1 +f 86/55/1 97/56/1 108/53/1 +f 96/57/1 97/56/1 85/58/1 +f 95/59/1 98/60/1 96/57/1 +f 94/61/1 99/62/1 95/59/1 +f 94/61/1 101/63/1 100/64/1 +f 93/65/1 102/66/1 101/63/1 +f 91/67/1 102/66/1 92/68/1 +f 90/69/1 103/70/1 91/71/1 +f 90/69/1 105/72/1 104/73/1 +f 89/74/1 106/75/1 105/72/1 +f 88/76/1 107/54/1 106/75/1 +f 123/77/1 144/78/1 143/79/1 +f 122/80/1 133/81/1 144/78/1 +f 132/82/1 133/81/1 121/83/1 +f 131/84/1 134/85/1 132/82/1 +f 129/86/1 138/87/1 137/88/1 +f 127/89/1 138/87/1 128/90/1 +f 126/91/1 139/92/1 127/93/1 +f 126/91/1 141/94/1 140/95/1 +f 193/96/2 184/97/2 154/98/2 +f 117/99/2 178/100/2 177/101/2 +f 119/102/2 178/100/2 118/103/2 +f 113/104/2 172/105/2 112/106/2 +f 111/107/2 172/105/2 171/108/2 +f 171/109/3 131/110/3 111/111/3 +f 129/112/4 173/113/4 113/114/4 +f 125/115/5 177/116/5 165/117/5 +f 123/118/6 179/119/6 119/120/6 +f 145/121/2 182/122/2 156/123/2 +f 156/123/2 183/124/2 155/125/2 +f 183/126/6 123/118/6 143/127/6 +f 135/128/3 131/110/3 191/129/3 +f 153/130/2 186/131/2 152/132/2 +f 186/131/2 151/133/2 152/132/2 +f 187/134/2 150/135/2 151/136/2 +f 150/135/2 189/137/2 149/138/2 +f 189/139/4 161/140/4 129/112/4 +f 141/141/5 125/115/5 185/142/5 +f 191/143/2 146/144/2 147/145/2 +f 192/146/2 145/121/2 146/144/2 +f 235/147/7 924/148/7 236/149/7 +f 235/150/8 925/151/8 923/152/8 +f 243/153/9 803/154/9 225/155/9 +f 239/156/10 925/151/10 237/157/10 +f 244/158/11 238/159/11 926/160/11 +f 238/159/2 239/161/2 237/162/2 +f 222/163/12 244/164/12 226/165/12 +f 224/166/1 228/167/1 229/168/1 +f 236/149/13 926/160/13 238/159/13 +f 237/162/2 236/169/2 238/159/2 +f 220/170/1 223/171/1 224/166/1 +f 229/172/10 253/173/10 224/174/10 +f 232/175/1 229/168/1 228/167/1 +f 240/176/2 241/177/2 239/161/2 +f 240/176/14 246/178/14 242/179/14 +f 241/180/15 243/181/15 239/156/15 +f 242/179/16 245/182/16 241/180/16 +f 248/183/2 245/184/2 246/185/2 +f 246/185/2 244/164/2 248/183/2 +f 243/153/2 245/186/2 247/187/2 +f 228/167/13 255/188/13 232/189/13 +f 219/190/14 252/191/14 223/171/14 +f 254/192/2 255/193/2 251/194/2 +f 252/191/2 249/195/2 253/196/2 +f 251/194/2 253/196/2 254/192/2 +f 247/197/16 222/163/16 221/198/16 +f 223/171/11 251/194/11 228/167/11 +f 220/199/16 250/200/16 219/190/16 +f 232/189/7 256/201/7 233/202/7 +f 224/174/15 249/203/15 220/199/15 +f 233/204/8 254/205/8 229/172/8 +f 213/206/2 215/207/2 207/208/2 +f 261/209/7 263/210/7 262/211/7 +f 257/212/17 263/210/17 258/213/17 +f 260/214/11 263/210/11 264/215/11 +f 259/216/10 262/211/10 257/217/10 +f 323/218/1 312/219/1 311/220/1 +f 312/219/1 313/221/1 301/222/1 +f 313/221/1 302/223/1 301/222/1 +f 314/224/1 303/225/1 302/223/1 +f 315/226/1 304/227/1 303/225/1 +f 304/227/1 317/228/1 305/229/1 +f 305/229/1 318/230/1 306/231/1 +f 318/230/1 307/232/1 306/231/1 +f 319/233/1 308/234/1 307/235/1 +f 320/236/1 309/237/1 308/234/1 +f 321/238/1 310/239/1 309/237/1 +f 310/239/1 323/218/1 311/220/1 +f 276/240/2 335/241/2 275/242/2 +f 275/242/2 334/243/2 274/244/2 +f 273/245/2 334/243/2 333/246/2 +f 272/247/2 333/246/2 332/248/2 +f 272/247/2 331/249/2 271/250/2 +f 271/251/2 330/252/2 270/253/2 +f 270/253/2 329/254/2 269/255/2 +f 269/255/2 328/256/2 268/257/2 +f 267/258/2 328/256/2 327/259/2 +f 266/260/2 327/259/2 326/261/2 +f 266/260/2 325/262/2 265/263/2 +f 265/263/2 336/264/2 276/240/2 +f 356/265/18 661/266/18 354/267/18 +f 360/268/11 362/269/11 358/270/11 +f 359/271/10 361/272/10 363/273/10 +f 363/273/10 365/274/10 367/275/10 +f 364/276/11 366/277/11 362/269/11 +f 374/278/11 378/279/11 380/280/11 +f 372/281/11 376/282/11 378/279/11 +f 408/283/11 409/284/11 406/285/11 +f 373/286/10 377/287/10 371/288/10 +f 371/288/10 375/289/10 369/290/10 +f 405/291/10 411/292/10 407/293/10 +f 426/294/11 424/295/11 422/296/11 +f 412/297/11 413/298/11 409/284/11 +f 411/292/10 414/299/10 415/300/10 +f 427/301/10 421/302/10 423/303/10 +f 415/300/10 418/304/10 419/305/10 +f 416/306/11 417/307/11 413/298/11 +f 426/294/11 432/308/11 428/309/11 +f 431/310/10 425/311/10 427/301/10 +f 430/312/11 436/313/11 432/308/11 +f 435/314/10 429/315/10 431/310/10 +f 234/316/13 337/317/13 230/318/13 +f 338/319/8 231/320/8 227/321/8 +f 437/322/11 356/323/11 354/267/11 +f 439/324/2 355/325/2 356/323/2 +f 355/326/10 438/327/10 353/328/10 +f 438/327/1 354/267/1 353/328/1 +f 443/329/10 445/330/10 441/331/10 +f 444/332/11 446/333/11 448/334/11 +f 447/335/10 451/336/10 445/330/10 +f 452/337/11 448/334/11 446/333/11 +f 449/338/10 467/339/10 451/336/10 +f 468/340/11 450/341/11 452/337/11 +f 455/342/10 469/343/10 467/339/10 +f 468/340/11 470/344/11 456/345/11 +f 461/346/10 463/347/10 459/348/10 +f 462/349/11 460/350/11 464/351/11 +f 465/352/10 473/353/10 463/347/10 +f 474/354/11 466/355/11 464/351/11 +f 471/356/10 469/343/10 457/357/10 +f 474/354/11 464/351/11 460/350/11 +f 490/358/16 486/359/16 482/360/16 +f 497/361/7 499/362/7 498/363/7 +f 493/364/17 499/362/17 494/365/17 +f 496/366/11 499/362/11 500/367/11 +f 495/368/10 498/363/10 493/369/10 +f 503/370/7 501/371/7 502/372/7 +f 504/373/2 505/374/2 501/371/2 +f 532/375/16 510/376/16 543/377/16 +f 537/378/7 520/379/7 550/380/7 +f 559/381/19 561/382/19 555/383/19 +f 580/384/10 581/385/10 579/386/10 +f 582/387/1 585/388/1 581/389/1 +f 586/390/11 583/391/11 585/392/11 +f 584/393/2 579/394/2 583/395/2 +f 585/388/7 579/396/7 581/389/7 +f 582/387/16 584/393/16 586/390/16 +f 609/397/10 613/398/10 607/399/10 +f 609/397/10 617/400/10 615/401/10 +f 610/402/11 614/403/11 616/404/11 +f 610/402/11 618/405/11 612/406/11 +f 607/399/7 614/407/7 608/408/7 +f 17/409/1 624/410/1 15/3/1 +f 622/411/1 17/409/1 19/412/1 +f 21/413/1 622/414/1 19/412/1 +f 620/415/1 21/413/1 23/416/1 +f 1/417/1 620/418/1 23/416/1 +f 630/419/1 1/417/1 3/420/1 +f 5/421/1 630/422/1 3/420/1 +f 628/423/1 5/421/1 7/424/1 +f 9/425/1 628/426/1 7/424/1 +f 626/427/1 9/425/1 11/428/1 +f 13/429/1 626/430/1 11/428/1 +f 635/431/1 633/432/1 641/433/1 +f 765/434/16 767/435/16 645/436/16 +f 763/437/20 770/438/20 765/434/20 +f 712/439/16 769/440/16 763/437/16 +f 646/441/16 774/442/16 766/443/16 +f 647/444/10 653/445/10 648/446/10 +f 654/447/11 650/448/11 649/449/11 +f 654/447/21 651/450/21 652/451/21 +f 658/452/11 660/453/11 656/454/11 +f 658/452/1 655/455/1 662/456/1 +f 661/266/2 660/457/2 657/458/2 +f 661/266/18 353/328/18 354/267/18 +f 662/456/10 659/459/10 661/266/10 +f 657/458/18 355/460/18 353/328/18 +f 658/452/18 356/265/18 355/460/18 +f 667/461/1 665/462/1 673/463/1 +f 766/443/20 773/464/20 764/465/20 +f 718/466/1 716/467/1 724/468/1 +f 650/469/11 766/443/11 764/470/11 +f 647/471/10 648/472/10 763/473/10 +f 764/465/16 772/474/16 713/475/16 +f 775/476/22 712/477/22 643/478/22 +f 776/479/22 643/478/22 644/480/22 +f 713/481/22 776/479/22 644/480/22 +f 776/482/1 777/483/1 775/484/1 +f 778/485/16 779/486/16 777/483/16 +f 781/487/16 784/488/16 782/489/16 +f 784/490/2 779/486/2 780/491/2 +f 775/492/11 779/486/11 783/493/11 +f 776/494/10 780/491/10 778/485/10 +f 776/494/10 772/495/10 773/496/10 +f 769/497/11 775/492/11 783/493/11 +f 787/498/23 786/499/23 785/500/23 +f 785/501/2 790/502/2 789/503/2 +f 792/504/4 799/505/4 787/506/4 +f 790/502/24 792/507/24 789/503/24 +f 787/506/1 802/508/1 788/509/1 +f 793/510/2 796/511/2 792/507/2 +f 801/512/25 799/513/25 800/514/25 +f 786/499/6 788/509/6 793/515/6 +f 806/516/1 791/517/1 808/518/1 +f 796/511/26 801/519/26 800/520/26 +f 798/521/9 794/522/9 795/523/9 +f 805/524/7 794/522/7 806/525/7 +f 808/526/16 798/521/16 803/527/16 +f 247/187/9 808/528/9 243/153/9 +f 805/529/2 798/521/2 795/523/2 +f 221/530/9 806/531/9 247/187/9 +f 221/530/9 803/154/9 805/532/9 +f 810/533/9 804/534/9 809/535/9 +f 809/535/1 812/536/1 810/533/1 +f 815/537/27 814/538/27 813/539/27 +f 819/540/28 816/541/28 815/537/28 +f 819/542/10 813/539/10 817/543/10 +f 820/544/11 814/538/11 816/541/11 +f 831/545/1 827/546/1 823/547/1 +f 375/289/10 833/548/10 369/290/10 +f 376/282/11 370/549/11 834/550/11 +f 850/551/11 846/552/11 842/553/11 +f 859/554/11 864/555/11 860/556/11 +f 849/557/10 851/558/10 843/559/10 +f 853/560/10 855/561/10 856/562/10 +f 854/563/10 857/564/10 855/565/10 +f 835/566/10 858/567/10 857/568/10 +f 836/569/10 856/570/10 858/571/10 +f 861/572/11 863/573/11 859/574/11 +f 862/575/11 865/576/11 861/577/11 +f 860/578/11 866/579/11 862/580/11 +f 856/581/7 862/580/7 858/582/7 +f 835/566/2 866/579/2 836/569/2 +f 858/583/1 861/577/1 857/584/1 +f 853/560/1 863/573/1 854/563/1 +f 857/585/16 859/574/16 855/586/16 +f 855/587/2 860/556/2 856/588/2 +f 836/569/16 864/555/16 853/560/16 +f 854/563/7 865/589/7 835/590/7 +f 875/591/29 880/592/29 876/593/29 +f 869/594/30 871/595/30 872/596/30 +f 871/597/30 867/598/30 873/599/30 +f 867/598/30 874/600/30 873/601/30 +f 868/602/30 872/603/30 874/604/30 +f 875/605/29 881/606/29 879/607/29 +f 877/608/29 882/609/29 881/606/29 +f 876/610/29 882/609/29 878/611/29 +f 872/612/31 878/611/31 874/613/31 +f 867/598/32 882/609/32 868/602/32 +f 874/614/33 877/608/33 873/615/33 +f 869/594/33 879/607/33 870/616/33 +f 871/617/34 877/618/34 875/605/34 +f 871/619/32 876/593/32 872/620/32 +f 869/621/34 882/609/34 880/622/34 +f 870/616/31 881/606/31 867/598/31 +f 893/623/2 889/624/2 885/625/2 +f 913/626/35 911/627/35 912/628/35 +f 908/629/7 912/630/7 907/631/7 +f 907/632/10 911/627/10 909/633/10 +f 910/634/11 913/635/11 908/629/11 +f 910/634/16 911/627/16 914/636/16 +f 921/637/36 919/638/36 920/639/36 +f 915/640/7 921/637/7 920/641/7 +f 915/640/10 919/642/10 917/643/10 +f 918/644/11 921/637/11 916/645/11 +f 917/643/16 922/646/16 918/647/16 +f 926/648/13 234/316/13 230/318/13 +f 923/649/8 227/321/8 231/320/8 +f 244/164/11 926/648/11 230/318/11 +f 227/321/10 925/650/10 243/153/10 +f 910/651/1 907/631/1 909/652/1 +f 918/647/1 915/653/1 917/643/1 +f 624/1/1 625/654/1 13/2/1 +f 6/4/1 4/7/1 36/5/1 +f 4/7/1 2/10/1 25/8/1 +f 24/9/1 26/12/1 25/8/1 +f 22/11/1 27/14/1 26/12/1 +f 20/13/1 28/16/1 27/14/1 +f 20/13/1 18/17/1 29/15/1 +f 18/17/1 16/20/1 30/18/1 +f 14/19/1 31/655/1 30/18/1 +f 12/21/1 32/25/1 31/22/1 +f 12/21/1 10/26/1 33/24/1 +f 10/26/1 8/28/1 34/27/1 +f 8/28/1 6/4/1 35/6/1 +f 37/29/2 49/656/2 50/30/2 +f 48/31/2 50/30/2 51/32/2 +f 47/33/2 51/32/2 52/34/2 +f 46/35/2 52/34/2 53/36/2 +f 45/37/2 53/36/2 54/38/2 +f 54/38/2 55/657/2 43/40/2 +f 55/41/2 56/658/2 42/42/2 +f 42/42/2 56/658/2 57/44/2 +f 41/45/2 57/44/2 58/46/2 +f 58/46/2 59/49/2 39/48/2 +f 59/49/2 60/51/2 38/50/2 +f 60/51/2 49/656/2 37/29/2 +f 87/52/1 86/55/1 108/53/1 +f 86/55/1 85/58/1 97/56/1 +f 96/57/1 98/60/1 97/56/1 +f 95/59/1 99/62/1 98/60/1 +f 94/61/1 100/64/1 99/62/1 +f 94/61/1 93/65/1 101/63/1 +f 93/65/1 92/68/1 102/66/1 +f 91/67/1 103/659/1 102/66/1 +f 90/69/1 104/73/1 103/70/1 +f 90/69/1 89/74/1 105/72/1 +f 89/74/1 88/76/1 106/75/1 +f 88/76/1 87/52/1 107/54/1 +f 123/77/1 122/80/1 144/78/1 +f 122/80/1 121/83/1 133/81/1 +f 132/82/1 134/85/1 133/81/1 +f 131/84/1 135/660/1 134/85/1 +f 129/86/1 128/90/1 138/87/1 +f 127/89/1 139/661/1 138/87/1 +f 126/91/1 140/95/1 139/92/1 +f 126/91/1 125/662/1 141/94/1 +f 184/97/2 190/663/2 154/98/2 +f 190/663/2 166/664/2 154/98/2 +f 166/664/2 160/665/2 154/98/2 +f 154/98/2 148/666/2 142/667/2 +f 142/667/2 136/668/2 130/669/2 +f 130/669/2 124/670/2 193/96/2 +f 193/96/2 194/671/2 184/97/2 +f 154/98/2 142/667/2 130/669/2 +f 130/669/2 193/96/2 154/98/2 +f 117/99/2 118/103/2 178/100/2 +f 119/102/2 179/672/2 178/100/2 +f 113/104/2 173/673/2 172/105/2 +f 111/107/2 112/106/2 172/105/2 +f 171/109/3 159/674/3 131/110/3 +f 129/112/4 161/140/4 173/113/4 +f 125/115/5 117/675/5 177/116/5 +f 123/118/6 167/676/6 179/119/6 +f 145/121/2 181/677/2 182/122/2 +f 156/123/2 182/122/2 183/124/2 +f 143/127/6 155/678/6 183/126/6 +f 183/126/6 167/676/6 123/118/6 +f 191/129/3 147/679/3 135/128/3 +f 131/110/3 159/674/3 191/129/3 +f 153/130/2 185/680/2 186/131/2 +f 186/131/2 187/681/2 151/133/2 +f 187/134/2 188/682/2 150/135/2 +f 150/135/2 188/682/2 189/137/2 +f 137/683/4 149/684/4 129/112/4 +f 149/684/4 189/139/4 129/112/4 +f 185/142/5 153/685/5 141/141/5 +f 125/115/5 165/117/5 185/142/5 +f 191/143/2 192/146/2 146/144/2 +f 192/146/2 181/677/2 145/121/2 +f 235/147/7 923/686/7 924/148/7 +f 235/150/8 237/157/8 925/151/8 +f 243/153/9 808/528/9 803/154/9 +f 239/156/10 243/181/10 925/151/10 +f 244/158/11 240/176/11 238/159/11 +f 238/159/2 240/176/2 239/161/2 +f 222/163/12 248/183/12 244/164/12 +f 224/166/1 223/171/1 228/167/1 +f 236/149/13 924/148/13 926/160/13 +f 237/162/2 235/687/2 236/169/2 +f 220/170/1 219/688/1 223/171/1 +f 229/172/10 254/205/10 253/173/10 +f 232/175/1 233/689/1 229/168/1 +f 240/176/2 242/690/2 241/177/2 +f 240/176/14 244/158/14 246/178/14 +f 241/180/15 245/182/15 243/181/15 +f 242/179/16 246/178/16 245/182/16 +f 248/183/2 247/197/2 245/184/2 +f 228/167/13 251/194/13 255/188/13 +f 219/190/14 250/200/14 252/191/14 +f 254/192/2 256/691/2 255/193/2 +f 252/191/2 250/692/2 249/195/2 +f 251/194/2 252/191/2 253/196/2 +f 247/197/16 248/183/16 222/163/16 +f 223/171/11 252/191/11 251/194/11 +f 220/199/16 249/203/16 250/200/16 +f 232/189/7 255/188/7 256/201/7 +f 224/174/15 253/173/15 249/203/15 +f 233/204/8 256/693/8 254/205/8 +f 207/208/2 208/694/2 211/695/2 +f 208/694/2 209/696/2 211/695/2 +f 209/696/2 210/697/2 211/695/2 +f 211/695/2 212/698/2 213/206/2 +f 213/206/2 214/699/2 215/207/2 +f 215/207/2 216/700/2 217/701/2 +f 217/701/2 218/702/2 215/207/2 +f 218/702/2 207/208/2 215/207/2 +f 211/695/2 213/206/2 207/208/2 +f 261/209/7 264/215/7 263/210/7 +f 257/212/17 262/211/17 263/210/17 +f 260/214/11 258/703/11 263/210/11 +f 259/216/10 261/209/10 262/211/10 +f 323/218/1 324/704/1 312/219/1 +f 312/219/1 324/704/1 313/221/1 +f 313/221/1 314/224/1 302/223/1 +f 314/224/1 315/226/1 303/225/1 +f 315/226/1 316/705/1 304/227/1 +f 304/227/1 316/705/1 317/228/1 +f 305/229/1 317/228/1 318/230/1 +f 318/230/1 319/706/1 307/232/1 +f 319/233/1 320/236/1 308/234/1 +f 320/236/1 321/238/1 309/237/1 +f 321/238/1 322/707/1 310/239/1 +f 310/239/1 322/707/1 323/218/1 +f 276/240/2 336/264/2 335/241/2 +f 275/242/2 335/241/2 334/243/2 +f 273/245/2 274/244/2 334/243/2 +f 272/247/2 273/245/2 333/246/2 +f 272/247/2 332/248/2 331/249/2 +f 271/251/2 331/708/2 330/252/2 +f 270/253/2 330/252/2 329/254/2 +f 269/255/2 329/254/2 328/256/2 +f 267/258/2 268/257/2 328/256/2 +f 266/260/2 267/258/2 327/259/2 +f 266/260/2 326/261/2 325/262/2 +f 265/263/2 325/262/2 336/264/2 +f 356/265/18 662/456/18 661/266/18 +f 360/268/11 364/276/11 362/269/11 +f 359/271/10 357/709/10 361/272/10 +f 363/273/10 361/272/10 365/274/10 +f 364/276/11 368/710/11 366/277/11 +f 374/278/11 372/281/11 378/279/11 +f 372/281/11 370/549/11 376/282/11 +f 408/283/11 412/297/11 409/284/11 +f 373/286/10 379/711/10 377/287/10 +f 371/288/10 377/287/10 375/289/10 +f 405/291/10 410/712/10 411/292/10 +f 426/294/11 428/309/11 424/295/11 +f 412/297/11 416/306/11 413/298/11 +f 411/292/10 410/712/10 414/299/10 +f 427/301/10 425/311/10 421/302/10 +f 415/300/10 414/299/10 418/304/10 +f 416/306/11 420/713/11 417/307/11 +f 426/294/11 430/312/11 432/308/11 +f 431/310/10 429/315/10 425/311/10 +f 430/312/11 434/714/11 436/313/11 +f 435/314/10 433/715/10 429/315/10 +f 437/322/11 439/324/11 356/323/11 +f 439/324/2 440/716/2 355/325/2 +f 355/326/10 440/717/10 438/327/10 +f 438/327/1 437/322/1 354/267/1 +f 443/329/10 447/335/10 445/330/10 +f 444/332/11 442/718/11 446/333/11 +f 447/335/10 449/338/10 451/336/10 +f 452/337/11 450/341/11 448/334/11 +f 449/338/10 453/719/10 467/339/10 +f 468/340/11 454/720/11 450/341/11 +f 467/339/10 453/719/10 455/342/10 +f 455/342/10 457/357/10 469/343/10 +f 456/345/11 454/720/11 468/340/11 +f 470/344/11 458/721/11 456/345/11 +f 465/352/10 475/722/10 473/353/10 +f 474/354/11 476/723/11 466/355/11 +f 457/357/10 459/348/10 471/356/10 +f 459/348/10 463/347/10 473/353/10 +f 471/356/10 459/348/10 473/353/10 +f 460/350/11 458/721/11 472/724/11 +f 458/721/11 470/344/11 472/724/11 +f 472/724/11 474/354/11 460/350/11 +f 482/360/16 480/725/16 478/726/16 +f 478/726/16 492/727/16 490/358/16 +f 490/358/16 488/728/16 486/359/16 +f 486/359/16 484/729/16 482/360/16 +f 482/360/16 478/726/16 490/358/16 +f 497/361/7 500/367/7 499/362/7 +f 493/364/17 498/363/17 499/362/17 +f 496/366/11 494/730/11 499/362/11 +f 495/368/10 497/361/10 498/363/10 +f 503/370/7 504/373/7 501/371/7 +f 504/373/2 506/731/2 505/374/2 +f 510/376/16 509/732/16 543/377/16 +f 543/377/16 544/733/16 531/734/16 +f 544/733/16 507/735/16 531/734/16 +f 507/735/16 508/736/16 531/734/16 +f 531/734/16 532/375/16 543/377/16 +f 520/379/7 519/737/7 550/380/7 +f 550/380/7 549/738/7 538/739/7 +f 549/738/7 521/740/7 538/739/7 +f 521/740/7 522/741/7 538/739/7 +f 538/739/7 537/378/7 550/380/7 +f 555/383/19 556/742/19 557/743/19 +f 557/743/19 558/744/19 559/381/19 +f 559/381/19 560/745/19 561/382/19 +f 561/382/19 562/746/19 555/383/19 +f 555/383/19 557/743/19 559/381/19 +f 580/384/10 582/387/10 581/385/10 +f 582/387/1 586/390/1 585/388/1 +f 586/390/11 584/393/11 583/391/11 +f 584/393/2 580/384/2 579/394/2 +f 585/388/7 583/747/7 579/396/7 +f 582/387/16 580/384/16 584/393/16 +f 609/397/10 615/401/10 613/398/10 +f 609/397/10 611/748/10 617/400/10 +f 610/402/11 608/408/11 614/403/11 +f 610/402/11 616/404/11 618/405/11 +f 607/399/7 613/749/7 614/407/7 +f 17/409/1 623/750/1 624/410/1 +f 622/411/1 623/751/1 17/409/1 +f 21/413/1 621/752/1 622/414/1 +f 620/415/1 621/753/1 21/413/1 +f 1/417/1 619/754/1 620/418/1 +f 630/419/1 619/755/1 1/417/1 +f 5/421/1 629/756/1 630/422/1 +f 628/423/1 629/757/1 5/421/1 +f 9/425/1 627/758/1 628/426/1 +f 626/427/1 627/759/1 9/425/1 +f 13/429/1 625/760/1 626/430/1 +f 633/432/1 632/761/1 631/762/1 +f 631/762/1 642/763/1 641/433/1 +f 641/433/1 640/764/1 639/765/1 +f 639/765/1 638/766/1 637/767/1 +f 637/767/1 636/768/1 635/431/1 +f 635/431/1 634/769/1 633/432/1 +f 633/432/1 631/762/1 641/433/1 +f 641/433/1 639/765/1 637/767/1 +f 637/767/1 635/431/1 641/433/1 +f 765/434/16 770/438/16 767/435/16 +f 763/437/20 769/440/20 770/438/20 +f 712/439/16 768/770/16 769/440/16 +f 646/441/16 771/771/16 774/442/16 +f 647/444/10 651/772/10 653/445/10 +f 654/447/11 652/451/11 650/448/11 +f 654/447/21 653/773/21 651/450/21 +f 658/452/11 657/458/11 660/453/11 +f 658/452/1 656/774/1 655/455/1 +f 661/266/2 659/775/2 660/457/2 +f 661/266/18 657/458/18 353/328/18 +f 662/456/10 655/776/10 659/459/10 +f 657/458/18 658/452/18 355/460/18 +f 658/452/18 662/456/18 356/265/18 +f 665/462/1 664/777/1 663/778/1 +f 663/778/1 674/779/1 673/463/1 +f 673/463/1 672/780/1 671/781/1 +f 671/781/1 670/782/1 669/783/1 +f 669/783/1 668/784/1 667/461/1 +f 667/461/1 666/785/1 665/462/1 +f 665/462/1 663/778/1 673/463/1 +f 673/463/1 671/781/1 669/783/1 +f 669/783/1 667/461/1 673/463/1 +f 766/443/20 774/442/20 773/464/20 +f 716/467/1 715/786/1 714/787/1 +f 714/787/1 725/788/1 724/468/1 +f 724/468/1 723/789/1 722/790/1 +f 722/790/1 721/791/1 720/792/1 +f 720/792/1 719/793/1 718/466/1 +f 718/466/1 717/794/1 716/467/1 +f 716/467/1 714/787/1 724/468/1 +f 724/468/1 722/790/1 720/792/1 +f 720/792/1 718/466/1 724/468/1 +f 764/470/11 713/795/11 644/480/11 +f 644/480/11 649/796/11 764/470/11 +f 649/796/11 650/469/11 764/470/11 +f 650/469/11 646/441/11 766/443/11 +f 648/472/10 643/797/10 763/473/10 +f 643/797/10 712/798/10 763/473/10 +f 763/473/10 765/434/10 647/471/10 +f 765/434/10 645/436/10 647/471/10 +f 764/465/16 773/464/16 772/474/16 +f 775/476/22 768/799/22 712/477/22 +f 776/479/22 775/476/22 643/478/22 +f 713/481/22 772/800/22 776/479/22 +f 776/482/1 778/485/1 777/483/1 +f 778/485/16 780/491/16 779/486/16 +f 781/487/16 783/801/16 784/488/16 +f 784/490/2 783/802/2 779/486/2 +f 775/492/11 777/483/11 779/486/11 +f 776/494/10 784/803/10 780/491/10 +f 773/496/10 774/804/10 784/803/10 +f 774/804/10 771/805/10 784/803/10 +f 771/805/10 782/806/10 784/803/10 +f 784/803/10 776/494/10 773/496/10 +f 781/807/11 767/808/11 783/493/11 +f 767/808/11 770/809/11 783/493/11 +f 769/497/11 768/810/11 775/492/11 +f 770/809/11 769/497/11 783/493/11 +f 787/498/23 788/509/23 786/499/23 +f 785/501/2 786/499/2 790/502/2 +f 785/811/4 789/812/4 792/504/4 +f 796/813/4 800/814/4 799/505/4 +f 787/506/4 785/811/4 792/504/4 +f 792/504/4 796/813/4 799/505/4 +f 790/502/24 793/510/24 792/507/24 +f 787/506/1 799/505/1 802/508/1 +f 793/510/2 797/815/2 796/511/2 +f 801/512/25 802/508/25 799/513/25 +f 788/509/6 802/508/6 793/515/6 +f 802/508/6 801/512/6 797/816/6 +f 802/508/6 797/816/6 793/515/6 +f 790/502/6 786/499/6 793/515/6 +f 806/516/1 794/522/1 791/517/1 +f 796/511/26 797/815/26 801/519/26 +f 798/521/9 791/517/9 794/522/9 +f 805/524/7 795/523/7 794/522/7 +f 808/526/16 791/517/16 798/521/16 +f 247/187/9 806/531/9 808/528/9 +f 805/529/2 803/817/2 798/521/2 +f 221/530/9 805/532/9 806/531/9 +f 221/530/9 225/155/9 803/154/9 +f 810/533/9 807/818/9 804/534/9 +f 809/535/1 811/819/1 812/536/1 +f 815/537/27 816/541/27 814/538/27 +f 819/540/28 820/820/28 816/541/28 +f 819/542/10 815/537/10 813/539/10 +f 820/544/11 818/821/11 814/538/11 +f 823/547/1 822/822/1 821/823/1 +f 821/823/1 832/824/1 823/547/1 +f 832/824/1 831/545/1 823/547/1 +f 831/545/1 830/825/1 827/546/1 +f 830/825/1 829/826/1 827/546/1 +f 829/826/1 828/827/1 827/546/1 +f 827/546/1 826/828/1 825/829/1 +f 825/829/1 824/830/1 827/546/1 +f 824/830/1 823/547/1 827/546/1 +f 842/553/11 840/831/11 838/832/11 +f 838/832/11 852/833/11 850/551/11 +f 850/551/11 848/834/11 846/552/11 +f 846/552/11 844/835/11 842/553/11 +f 842/553/11 838/832/11 850/551/11 +f 859/554/11 863/573/11 864/555/11 +f 851/558/10 837/836/10 839/837/10 +f 839/837/10 841/838/10 851/558/10 +f 841/838/10 843/559/10 851/558/10 +f 843/559/10 845/839/10 847/840/10 +f 847/840/10 849/557/10 843/559/10 +f 853/560/10 854/563/10 855/561/10 +f 854/563/10 835/590/10 857/564/10 +f 835/566/10 836/569/10 858/567/10 +f 836/569/10 853/560/10 856/570/10 +f 861/572/11 865/589/11 863/573/11 +f 862/575/11 866/579/11 865/576/11 +f 860/578/11 864/555/11 866/579/11 +f 856/581/7 860/578/7 862/580/7 +f 835/566/2 865/576/2 866/579/2 +f 858/583/1 862/575/1 861/577/1 +f 853/560/1 864/555/1 863/573/1 +f 857/585/16 861/572/16 859/574/16 +f 855/587/2 859/554/2 860/556/2 +f 836/569/16 866/579/16 864/555/16 +f 854/563/7 863/573/7 865/589/7 +f 875/591/29 879/607/29 880/592/29 +f 869/594/30 870/616/30 871/595/30 +f 871/597/30 870/616/30 867/598/30 +f 867/598/30 868/602/30 874/600/30 +f 868/602/30 869/621/30 872/603/30 +f 875/605/29 877/618/29 881/606/29 +f 877/608/29 878/841/29 882/609/29 +f 876/610/29 880/622/29 882/609/29 +f 872/612/31 876/610/31 878/611/31 +f 867/598/32 881/606/32 882/609/32 +f 874/614/33 878/841/33 877/608/33 +f 869/594/33 880/592/33 879/607/33 +f 871/617/34 873/842/34 877/618/34 +f 871/619/32 875/591/32 876/593/32 +f 869/621/34 868/602/34 882/609/34 +f 870/616/31 879/607/31 881/606/31 +f 885/625/2 884/843/2 893/623/2 +f 884/843/2 883/844/2 893/623/2 +f 883/844/2 894/845/2 893/623/2 +f 893/623/2 892/846/2 891/847/2 +f 891/847/2 890/848/2 889/624/2 +f 889/624/2 888/849/2 885/625/2 +f 888/849/2 887/850/2 885/625/2 +f 887/850/2 886/851/2 885/625/2 +f 893/623/2 891/847/2 889/624/2 +f 913/626/35 914/852/35 911/627/35 +f 908/629/7 913/635/7 912/630/7 +f 907/632/10 912/628/10 911/627/10 +f 910/634/11 914/636/11 913/635/11 +f 910/634/16 909/633/16 911/627/16 +f 921/637/36 922/853/36 919/638/36 +f 915/640/7 916/645/7 921/637/7 +f 915/640/10 920/641/10 919/642/10 +f 918/644/11 922/853/11 921/637/11 +f 917/643/16 919/642/16 922/646/16 +f 926/648/13 924/854/13 234/316/13 +f 923/649/8 925/650/8 227/321/8 +f 337/317/11 226/165/11 230/318/11 +f 226/165/11 244/164/11 230/318/11 +f 243/153/10 225/155/10 227/321/10 +f 225/155/10 338/319/10 227/321/10 +f 910/651/1 908/629/1 907/631/1 +f 918/647/1 916/855/1 915/653/1 +s 1 +f 2/10/16 3/420/5 1/417/16 +f 4/7/5 5/421/25 3/420/5 +f 6/4/25 7/424/11 5/421/25 +f 8/28/11 9/425/37 7/424/11 +f 10/26/37 11/428/6 9/425/37 +f 12/21/6 13/429/7 11/428/6 +f 14/19/7 15/3/3 13/2/7 +f 16/20/3 17/409/23 15/3/3 +f 18/17/23 19/412/10 17/409/23 +f 20/13/10 21/413/38 19/412/10 +f 22/11/38 23/416/4 21/413/38 +f 24/9/4 1/417/16 23/416/4 +f 32/25/6 43/40/7 31/22/7 +f 29/15/23 40/47/10 28/16/10 +f 36/5/5 47/33/25 35/6/25 +f 26/12/4 37/29/16 25/8/16 +f 33/24/37 44/39/6 32/25/6 +f 30/18/3 41/45/23 29/15/23 +f 25/8/16 48/31/5 36/5/5 +f 27/14/38 38/50/4 26/12/4 +f 34/27/11 45/37/37 33/24/37 +f 31/655/7 42/42/3 30/18/3 +f 28/16/10 39/48/38 27/14/38 +f 35/6/25 46/35/11 34/27/11 +f 51/32/39 72/856/40 71/857/39 +f 49/656/41 72/856/40 50/30/40 +f 49/656/41 62/858/42 61/859/41 +f 60/51/42 63/860/43 62/858/42 +f 58/46/44 63/860/43 59/49/43 +f 58/46/44 65/861/45 64/862/44 +f 56/658/46 65/861/45 57/44/45 +f 56/658/46 67/863/28 66/864/46 +f 54/38/47 67/865/28 55/657/28 +f 54/38/47 69/866/48 68/867/47 +f 52/34/49 69/866/48 53/36/48 +f 52/34/49 71/857/39 70/868/49 +f 64/862/10 75/869/38 63/860/38 +f 71/857/25 82/870/11 70/868/11 +f 68/867/6 79/871/7 67/865/7 +f 65/861/23 76/872/10 64/862/10 +f 72/856/5 83/873/25 71/857/25 +f 62/858/4 73/874/16 61/859/16 +f 69/866/37 80/875/6 68/867/6 +f 66/864/3 77/876/23 65/861/23 +f 61/859/16 84/877/5 72/856/5 +f 63/860/38 74/878/4 62/858/4 +f 70/868/11 81/879/37 69/866/37 +f 67/863/7 78/880/3 66/864/3 +f 104/73/6 115/881/50 103/70/7 +f 101/63/23 112/106/10 100/64/10 +f 108/53/5 119/102/51 107/54/25 +f 98/60/4 109/882/52 97/56/16 +f 105/72/37 116/883/53 104/73/6 +f 102/66/3 113/104/54 101/63/23 +f 97/56/16 120/884/55 108/53/5 +f 99/62/38 110/885/56 98/60/4 +f 106/75/11 117/99/57 105/72/37 +f 103/659/7 114/886/58 102/66/3 +f 100/64/10 111/107/59 99/62/38 +f 107/54/25 118/103/11 106/75/11 +f 121/83/60 120/884/55 109/882/52 +f 122/80/61 119/102/51 120/884/55 +f 174/887/5 142/888/16 148/889/5 +f 178/890/10 130/891/38 177/116/62 +f 117/99/57 126/91/63 116/883/53 +f 126/91/63 115/881/50 116/883/53 +f 115/892/50 128/90/64 114/886/58 +f 128/90/64 113/104/54 114/886/58 +f 170/893/6 166/894/37 190/895/6 +f 169/896/7 194/897/3 180/898/3 +f 131/84/65 110/885/56 111/107/59 +f 110/885/56 121/83/60 109/882/52 +f 84/877/66 87/52/24 83/873/24 +f 85/58/20 84/877/66 73/874/20 +f 74/878/67 85/58/20 73/874/20 +f 75/869/68 96/57/67 74/878/67 +f 94/61/69 75/869/68 76/872/69 +f 77/876/70 94/61/69 76/872/69 +f 92/68/71 77/876/70 78/880/71 +f 91/67/72 78/880/71 79/899/72 +f 80/875/73 91/71/72 79/871/72 +f 81/879/74 90/69/73 80/875/73 +f 88/76/75 81/879/74 82/870/75 +f 83/873/24 88/76/75 82/870/75 +f 140/95/6 151/133/7 139/92/7 +f 174/887/5 154/900/25 173/113/76 +f 144/78/5 155/125/77 143/79/77 +f 134/85/4 145/121/16 133/81/16 +f 141/94/13 152/132/6 140/95/6 +f 138/87/3 149/138/8 137/88/8 +f 133/81/16 156/123/5 144/78/5 +f 135/660/19 146/144/4 134/85/4 +f 177/116/62 136/901/4 176/902/4 +f 139/661/7 150/135/3 138/87/3 +f 170/893/6 184/903/7 169/896/7 +f 180/898/3 193/904/23 179/119/78 +f 173/113/76 160/905/11 172/906/11 +f 176/902/4 142/888/16 175/907/16 +f 179/119/78 124/908/10 178/909/10 +f 162/910/5 173/113/76 161/140/77 +f 157/911/7 180/898/3 168/912/3 +f 159/674/13 170/893/6 158/913/6 +f 163/914/16 174/887/5 162/910/5 +f 164/915/4 175/907/16 163/914/16 +f 168/912/3 179/119/78 167/676/8 +f 158/913/6 169/896/7 157/911/7 +f 165/117/19 176/902/4 164/915/4 +f 172/916/11 166/894/37 171/109/79 +f 168/917/71 181/677/72 157/918/72 +f 167/919/80 182/122/71 168/917/71 +f 164/920/67 185/680/81 165/921/81 +f 164/920/67 187/681/20 186/131/67 +f 162/922/66 187/134/20 163/923/20 +f 162/922/66 189/137/82 188/682/66 +f 158/924/73 191/143/83 159/925/83 +f 158/924/73 181/677/72 192/146/73 +f 204/926/11 215/927/37 203/928/37 +f 201/929/7 212/930/3 200/931/3 +f 198/932/10 209/933/38 197/934/38 +f 205/935/25 216/936/11 204/926/11 +f 202/937/6 213/938/7 201/939/7 +f 199/940/23 210/941/10 198/932/10 +f 206/942/5 217/943/25 205/935/25 +f 196/944/4 207/945/16 195/946/16 +f 203/928/37 214/947/6 202/937/6 +f 200/931/3 211/948/23 199/940/23 +f 195/946/16 218/949/5 206/942/5 +f 197/934/38 208/950/4 196/944/4 +f 234/951/84 351/952/85 352/953/85 +f 279/954/38 268/257/10 267/258/38 +f 286/955/11 275/242/25 274/244/11 +f 283/956/7 272/247/6 271/250/7 +f 280/957/10 269/255/23 268/257/10 +f 287/958/25 276/240/5 275/242/25 +f 277/959/16 266/260/4 265/263/16 +f 284/960/6 273/245/37 272/247/6 +f 281/961/23 270/253/3 269/255/23 +f 288/962/5 265/263/16 276/240/5 +f 278/963/4 267/258/38 266/260/4 +f 285/964/37 274/244/11 273/245/37 +f 282/965/3 271/251/7 270/253/3 +f 298/966/86 287/958/87 286/955/86 +f 287/958/87 300/967/88 288/962/88 +f 300/967/88 277/959/89 288/962/88 +f 289/968/89 278/963/90 277/959/89 +f 278/963/90 291/969/91 279/954/91 +f 279/954/91 292/970/92 280/957/92 +f 292/970/92 281/961/93 280/957/92 +f 293/971/93 282/965/94 281/961/93 +f 294/972/94 283/973/95 282/965/94 +f 295/974/95 284/960/96 283/956/95 +f 296/975/96 285/964/97 284/960/96 +f 297/976/97 286/955/86 285/964/97 +f 299/977/25 312/219/5 300/967/5 +f 289/968/16 302/223/4 290/978/4 +f 296/975/6 309/237/37 297/976/37 +f 293/971/23 306/231/3 294/972/3 +f 300/967/5 301/222/16 289/968/16 +f 290/978/4 303/225/38 291/969/38 +f 297/976/37 310/239/11 298/966/11 +f 294/972/3 307/232/7 295/979/7 +f 291/969/38 304/227/10 292/970/10 +f 298/966/11 311/220/25 299/977/25 +f 295/974/7 308/234/6 296/975/6 +f 292/970/10 305/229/23 293/971/23 +f 221/980/98 344/981/99 225/982/100 +f 340/983/101 338/984/102 341/985/103 +f 343/986/104 341/985/103 344/981/99 +f 225/982/100 341/985/103 338/984/102 +f 342/987/105 337/317/106 339/988/107 +f 335/241/23 390/989/108 334/243/10 +f 342/987/105 226/165/109 337/317/106 +f 226/165/109 343/986/104 222/990/110 +f 340/983/101 342/987/105 339/988/107 +f 328/256/11 382/991/111 327/259/37 +f 331/708/16 386/992/112 330/252/5 +f 334/243/10 389/993/113 333/246/38 +f 327/259/37 383/994/114 326/261/6 +f 325/262/7 392/995/115 336/264/3 +f 222/990/110 344/981/99 221/980/98 +f 330/252/5 385/996/116 329/254/25 +f 333/246/38 388/997/117 332/248/4 +f 326/261/6 384/998/118 325/262/7 +f 336/264/3 391/999/119 335/241/23 +f 329/254/25 381/1000/120 328/256/11 +f 332/248/4 387/1001/121 331/249/16 +f 339/1002/7 346/1003/122 340/1004/7 +f 345/1005/122 348/1006/2 346/1003/122 +f 347/1007/2 350/1008/22 348/1006/2 +f 349/1009/123 351/952/85 350/1008/123 +f 362/269/124 357/709/20 358/270/20 +f 368/710/125 372/281/126 374/278/125 +f 366/277/127 361/272/124 362/269/124 +f 364/276/126 370/549/28 372/281/126 +f 359/271/28 371/288/126 369/290/28 +f 371/288/126 367/275/125 373/286/125 +f 375/1010/128 378/1011/126 376/1012/128 +f 377/1013/126 380/1014/125 378/1011/126 +f 407/293/1 412/297/129 408/283/1 +f 316/705/11 397/1015/130 317/228/25 +f 323/218/23 404/1016/131 324/704/3 +f 313/221/7 394/1017/132 314/224/6 +f 320/236/4 401/1018/133 321/238/38 +f 317/228/25 398/1019/134 318/230/5 +f 324/704/3 393/1020/135 313/221/7 +f 314/224/6 395/1021/136 315/226/37 +f 321/238/38 402/1022/137 322/707/10 +f 318/230/5 399/1023/138 319/706/16 +f 315/226/37 396/1024/139 316/705/11 +f 322/707/10 403/1025/140 323/218/23 +f 319/233/16 400/1026/141 320/236/4 +f 387/1027/121 398/1019/134 386/1028/112 +f 386/1028/112 397/1015/130 385/1029/116 +f 385/1029/116 396/1024/139 381/1030/120 +f 381/1030/120 395/1021/136 382/1031/111 +f 382/1031/111 394/1017/132 383/1032/114 +f 384/1033/118 394/1017/132 393/1020/135 +f 384/1033/118 404/1016/131 392/1034/115 +f 391/1035/119 404/1016/131 403/1025/140 +f 391/1035/119 402/1022/137 390/1036/108 +f 390/1036/108 401/1018/133 389/1037/113 +f 389/1037/113 400/1026/141 388/1038/117 +f 388/1038/117 399/1039/138 387/1040/121 +f 428/1041/142 423/1042/2 424/1043/2 +f 411/292/129 416/306/143 412/297/129 +f 415/300/143 420/713/144 416/306/143 +f 432/1044/145 427/1045/142 428/1041/142 +f 436/1046/146 431/1047/145 432/1044/145 +f 417/307/147 430/312/148 413/298/148 +f 413/298/148 426/294/149 409/284/149 +f 409/284/149 422/296/2 406/285/2 +f 405/291/2 425/311/149 410/712/149 +f 410/712/149 429/315/148 414/299/148 +f 414/299/148 433/715/147 418/304/147 +f 346/1048/10 350/1049/150 340/1050/151 +f 349/1051/152 345/1005/11 339/1002/153 +f 338/319/154 350/1049/150 351/1052/155 +f 337/317/156 352/1053/157 349/1051/152 +f 352/1053/157 337/317/156 234/316/158 +f 231/320/159 338/319/154 351/1052/155 +f 444/1054/160 447/1055/161 443/1056/160 +f 349/1051/152 339/1002/153 337/317/156 +f 350/1049/150 338/319/154 340/1050/151 +f 445/1057/162 442/1058/72 441/1059/72 +f 448/1060/161 449/1061/163 447/1055/161 +f 456/1062/164 453/1063/165 454/1064/165 +f 451/1065/166 446/1066/162 445/1057/162 +f 454/1064/165 449/1061/163 450/1067/163 +f 456/1062/164 457/1068/167 455/1069/164 +f 458/1070/167 459/1071/168 457/1068/167 +f 460/1072/168 461/1073/7 459/1071/168 +f 462/1074/169 463/1075/2 461/1073/169 +f 464/1076/2 465/1077/170 463/1075/2 +f 467/1078/122 452/1079/166 451/1065/166 +f 467/1078/122 470/344/7 468/340/122 +f 469/1080/1 472/1081/171 470/344/1 +f 471/1082/171 474/1083/172 472/1081/171 +f 473/1084/172 476/1085/173 474/1083/172 +f 478/1086/1 479/1087/174 477/1088/1 +f 480/1089/174 481/1090/11 479/1087/174 +f 482/1091/11 483/1092/175 481/1090/11 +f 484/1093/175 485/1094/2 483/1092/175 +f 486/1095/2 487/1096/176 485/1094/2 +f 488/1097/176 489/1098/10 487/1096/176 +f 490/1099/10 491/1100/177 489/1098/10 +f 492/1101/177 477/1102/1 491/1100/177 +f 514/1103/178 515/1104/179 511/1105/180 +f 510/1106/181 511/1105/180 509/1107/182 +f 507/1108/183 513/1109/184 508/1110/185 +f 516/1111/186 552/1112/187 524/1113/188 +f 529/1114/189 539/1115/190 525/1116/191 +f 512/1117/192 517/1118/193 513/1109/184 +f 514/1119/178 532/375/194 534/1120/195 +f 521/1121/196 553/1122/197 527/1123/198 +f 526/1124/199 527/1125/198 523/1126/200 +f 515/1127/179 545/1128/201 511/1129/180 +f 518/1130/202 523/1126/200 515/1104/179 +f 516/1131/186 525/1132/191 517/1118/193 +f 527/1125/198 522/1133/203 521/1134/196 +f 524/1135/188 529/1136/189 525/1132/191 +f 525/1116/191 535/1137/204 517/1138/193 +f 529/1136/189 519/1139/205 520/1140/206 +f 507/1141/183 546/1142/207 512/1143/192 +f 513/1144/184 531/734/208 508/1145/185 +f 531/734/208 534/1120/195 532/375/194 +f 536/1146/209 539/1115/190 540/1147/210 +f 534/1120/195 535/1137/204 536/1146/209 +f 540/1147/210 541/1148/211 542/1149/212 +f 538/739/213 541/1148/211 537/378/214 +f 518/1150/202 540/1147/210 526/1124/199 +f 526/1124/199 542/1149/212 530/1151/215 +f 513/1144/184 535/1137/204 533/1152/216 +f 529/1114/189 537/378/214 541/1148/211 +f 514/1119/178 536/1146/209 518/1150/202 +f 522/1153/203 542/1149/212 538/739/213 +f 544/1154/217 545/1128/201 546/1142/207 +f 545/1128/201 548/1155/218 546/1142/207 +f 547/1156/219 552/1112/187 548/1155/218 +f 551/1157/220 554/1158/221 552/1112/187 +f 554/1158/221 549/1159/222 550/1160/223 +f 528/1161/224 552/1112/187 554/1158/221 +f 512/1143/192 548/1155/218 516/1111/186 +f 528/1161/224 550/1160/223 519/1162/205 +f 511/1129/180 543/1163/225 509/1164/182 +f 515/1127/179 551/1157/220 547/1156/219 +f 527/1123/198 551/1157/220 523/1165/200 +f 569/1166/226 578/1167/227 570/1168/228 +f 561/1169/77 568/1170/229 569/1166/226 +f 559/1171/2 566/1172/230 567/1173/231 +f 556/1174/232 565/1175/233 557/1176/8 +f 561/1169/77 570/1168/228 562/1177/234 +f 560/1178/235 567/1173/231 568/1170/229 +f 558/1179/236 565/1180/233 566/1172/230 +f 555/1181/1 563/1182/237 556/1174/232 +f 562/1177/234 564/1183/238 555/1181/1 +f 574/1184/239 573/1185/240 577/1186/241 +f 567/1173/231 576/1187/242 568/1170/229 +f 566/1172/230 573/1188/240 574/1189/239 +f 564/1183/238 571/1190/243 563/1182/237 +f 570/1168/228 572/1191/244 564/1183/238 +f 569/1166/226 576/1187/242 577/1192/241 +f 567/1173/231 574/1189/239 575/1193/245 +f 563/1182/237 573/1194/240 565/1175/233 +f 587/1195/246 592/1196/247 589/1197/248 +f 588/1198/175 593/1199/249 587/1195/246 +f 595/1200/250 590/1201/174 589/1197/248 +f 587/1195/246 593/1199/249 591/1202/251 +f 589/1197/248 592/1196/247 595/1200/250 +f 600/1203/176 603/1204/252 599/1205/253 +f 605/1206/254 602/1207/177 601/1208/255 +f 597/1209/256 605/1206/254 598/1210/257 +f 601/1208/255 598/1210/257 605/1206/254 +f 599/1205/253 603/1204/252 597/1209/256 +f 608/408/258 609/397/2 607/399/258 +f 610/402/2 611/748/259 609/397/2 +f 620/1211/6 633/1212/37 621/1213/37 +f 627/1214/38 640/1215/10 628/1216/10 +f 624/1217/5 637/1218/16 625/1219/16 +f 621/1213/37 634/1220/11 622/1221/11 +f 628/1216/10 641/1222/23 629/1223/23 +f 625/1224/16 638/1225/4 626/1226/4 +f 622/1221/11 635/1227/25 623/1228/25 +f 629/1223/23 642/1229/3 630/1230/3 +f 619/1231/7 632/1232/6 620/1211/6 +f 626/1226/4 639/1233/38 627/1214/38 +f 623/1228/25 636/1234/5 624/1217/5 +f 630/1230/3 631/1235/7 619/1231/7 +f 650/448/260 651/772/261 647/444/260 +f 643/478/2 649/796/262 644/480/2 +f 648/1236/262 654/447/258 649/449/262 +f 666/1237/10 677/1238/38 665/1239/38 +f 673/1240/25 684/1241/11 672/1242/11 +f 670/1243/6 681/1244/7 669/1245/7 +f 667/1246/23 678/1247/10 666/1237/10 +f 674/1248/5 685/1249/25 673/1240/25 +f 664/1250/4 675/1251/16 663/1252/16 +f 671/1253/37 682/1254/6 670/1243/6 +f 668/1255/3 679/1256/23 667/1246/23 +f 663/1252/16 686/1257/5 674/1248/5 +f 665/1239/38 676/1258/4 664/1250/4 +f 672/1242/11 683/1259/37 671/1253/37 +f 669/1260/7 680/1261/3 668/1255/3 +f 683/1259/263 694/1262/264 682/1254/264 +f 680/1261/265 691/1263/266 679/1256/266 +f 675/1251/267 698/1264/268 686/1257/268 +f 676/1258/269 689/1265/270 688/1266/269 +f 683/1259/263 696/1267/271 695/1268/263 +f 681/1269/18 692/1270/265 680/1261/265 +f 678/1247/272 689/1265/270 677/1238/270 +f 684/1241/271 697/1271/273 696/1267/271 +f 681/1244/18 694/1262/264 693/1272/18 +f 679/1256/266 690/1273/272 678/1247/272 +f 686/1257/268 697/1271/273 685/1249/273 +f 675/1251/267 688/1266/269 687/1274/267 +f 688/1266/4 699/1275/274 687/1274/16 +f 695/1268/37 706/1276/275 694/1262/6 +f 692/1270/3 703/1277/276 691/1263/23 +f 687/1274/16 710/1278/277 698/1264/5 +f 689/1265/38 700/1279/278 688/1266/4 +f 696/1267/11 707/1280/279 695/1268/37 +f 693/1281/7 704/1282/280 692/1270/3 +f 690/1273/10 701/1283/281 689/1265/38 +f 697/1271/25 708/1284/282 696/1267/11 +f 694/1262/6 705/1285/283 693/1272/7 +f 691/1263/23 702/1286/284 690/1273/10 +f 698/1264/5 709/1287/285 697/1271/25 +f 699/1275/274 711/1288/2 710/1278/277 +f 701/1283/281 711/1289/2 700/1279/278 +f 708/1284/282 711/1290/2 707/1280/279 +f 705/1291/283 711/1292/2 704/1282/280 +f 702/1286/284 711/1293/2 701/1283/281 +f 709/1287/285 711/1294/2 708/1284/282 +f 706/1276/275 711/1295/2 705/1285/283 +f 703/1277/276 711/1296/2 702/1286/284 +f 710/1278/277 711/1297/2 709/1287/285 +f 707/1280/279 711/1298/2 706/1276/275 +f 704/1282/280 711/1299/2 703/1277/276 +f 700/1279/278 711/1300/2 699/1275/274 +f 717/1301/10 728/1302/38 716/1303/38 +f 724/1304/25 735/1305/11 723/1306/11 +f 721/1307/6 732/1308/7 720/1309/7 +f 718/1310/23 729/1311/10 717/1301/10 +f 725/1312/5 736/1313/25 724/1304/25 +f 715/1314/4 726/1315/16 714/1316/16 +f 722/1317/37 733/1318/6 721/1307/6 +f 719/1319/3 730/1320/23 718/1310/23 +f 714/1316/16 737/1321/5 725/1312/5 +f 716/1303/38 727/1322/4 715/1314/4 +f 723/1306/11 734/1323/37 722/1317/37 +f 720/1324/7 731/1325/3 719/1319/3 +f 733/1318/264 746/1326/263 745/1327/264 +f 730/1320/266 743/1328/265 742/1329/266 +f 726/1315/267 749/1330/268 737/1321/268 +f 727/1322/269 740/1331/270 739/1332/269 +f 735/1305/271 746/1326/263 734/1323/263 +f 732/1333/18 743/1328/265 731/1325/265 +f 729/1311/272 740/1331/270 728/1302/270 +f 735/1305/271 748/1334/273 747/1335/271 +f 732/1308/18 745/1327/264 744/1336/18 +f 729/1311/272 742/1329/266 741/1337/272 +f 737/1321/268 748/1334/273 736/1313/273 +f 726/1315/267 739/1332/269 738/1338/267 +f 739/1332/4 750/1339/274 738/1338/16 +f 746/1326/37 757/1340/275 745/1327/6 +f 743/1328/3 754/1341/276 742/1329/23 +f 738/1338/16 761/1342/277 749/1330/5 +f 740/1331/38 751/1343/278 739/1332/4 +f 747/1335/11 758/1344/279 746/1326/37 +f 744/1345/7 755/1346/280 743/1328/3 +f 741/1337/10 752/1347/281 740/1331/38 +f 748/1334/25 759/1348/282 747/1335/11 +f 745/1327/6 756/1349/283 744/1336/7 +f 742/1329/23 753/1350/284 741/1337/10 +f 749/1330/5 760/1351/285 748/1334/25 +f 750/1339/274 762/1352/2 761/1342/277 +f 752/1347/281 762/1353/2 751/1343/278 +f 759/1348/282 762/1354/2 758/1344/279 +f 756/1355/283 762/1356/2 755/1346/280 +f 753/1350/284 762/1357/2 752/1347/281 +f 760/1351/285 762/1358/2 759/1348/282 +f 757/1340/275 762/1359/2 756/1349/283 +f 754/1341/276 762/1360/2 753/1350/284 +f 761/1342/277 762/1361/2 760/1351/285 +f 758/1344/279 762/1362/2 757/1340/275 +f 755/1346/280 762/1363/2 754/1341/276 +f 751/1343/278 762/1364/2 750/1339/274 +f 782/489/1 646/441/1 650/469/260 +f 647/471/260 782/489/1 650/469/260 +f 781/487/1 645/436/1 767/1365/1 +f 376/1012/128 833/1366/286 375/1010/128 +f 838/1367/1 839/1368/173 837/1369/1 +f 840/1370/173 841/1371/7 839/1368/173 +f 842/1372/7 843/1373/27 841/1374/7 +f 844/1375/27 845/1376/2 843/1373/27 +f 846/1377/2 847/1378/22 845/1376/2 +f 848/1379/22 849/1380/16 847/1378/22 +f 850/1381/16 851/1382/286 849/1380/16 +f 852/1383/286 837/1369/1 851/1382/286 +f 887/1384/37 898/1385/11 886/1386/11 +f 894/1387/4 905/1388/38 893/1389/38 +f 884/1390/5 895/1391/16 883/1392/16 +f 891/1393/23 902/1394/3 890/1395/3 +f 888/1396/6 899/1397/37 887/1384/37 +f 883/1392/16 906/1398/4 894/1387/4 +f 885/1399/25 896/1400/5 884/1390/5 +f 892/1401/10 903/1402/23 891/1393/23 +f 889/1403/7 900/1404/6 888/1396/6 +f 886/1386/11 897/1405/25 885/1399/25 +f 893/1389/38 904/1406/10 892/1401/10 +f 890/1395/3 901/1407/7 889/1408/7 +f 924/854/7 231/1409/84 234/316/84 +f 2/10/16 4/7/5 3/420/5 +f 4/7/5 6/4/25 5/421/25 +f 6/4/25 8/28/11 7/424/11 +f 8/28/11 10/26/37 9/425/37 +f 10/26/37 12/21/6 11/428/6 +f 12/21/6 14/23/7 13/429/7 +f 14/19/7 16/20/3 15/3/3 +f 16/20/3 18/17/23 17/409/23 +f 18/17/23 20/13/10 19/412/10 +f 20/13/10 22/11/38 21/413/38 +f 22/11/38 24/9/4 23/416/4 +f 24/9/4 2/10/16 1/417/16 +f 32/25/6 44/39/6 43/40/7 +f 29/15/23 41/45/23 40/47/10 +f 36/5/5 48/31/5 47/33/25 +f 26/12/4 38/50/4 37/29/16 +f 33/24/37 45/37/37 44/39/6 +f 30/18/3 42/42/3 41/45/23 +f 25/8/16 37/29/16 48/31/5 +f 27/14/38 39/48/38 38/50/4 +f 34/27/11 46/35/11 45/37/37 +f 31/655/7 43/43/7 42/42/3 +f 28/16/10 40/47/10 39/48/38 +f 35/6/25 47/33/25 46/35/11 +f 51/32/39 50/30/40 72/856/40 +f 49/656/41 61/859/41 72/856/40 +f 49/656/41 60/51/42 62/858/42 +f 60/51/42 59/49/43 63/860/43 +f 58/46/44 64/862/44 63/860/43 +f 58/46/44 57/44/45 65/861/45 +f 56/658/46 66/864/46 65/861/45 +f 56/658/46 55/41/28 67/863/28 +f 54/38/47 68/867/47 67/865/28 +f 54/38/47 53/36/48 69/866/48 +f 52/34/49 70/868/49 69/866/48 +f 52/34/49 51/32/39 71/857/39 +f 64/862/10 76/872/10 75/869/38 +f 71/857/25 83/873/25 82/870/11 +f 68/867/6 80/875/6 79/871/7 +f 65/861/23 77/876/23 76/872/10 +f 72/856/5 84/877/5 83/873/25 +f 62/858/4 74/878/4 73/874/16 +f 69/866/37 81/879/37 80/875/6 +f 66/864/3 78/880/3 77/876/23 +f 61/859/16 73/874/16 84/877/5 +f 63/860/38 75/869/38 74/878/4 +f 70/868/11 82/870/11 81/879/37 +f 67/863/7 79/899/7 78/880/3 +f 104/73/6 116/883/53 115/881/50 +f 101/63/23 113/104/54 112/106/10 +f 108/53/5 120/884/55 119/102/51 +f 98/60/4 110/885/56 109/882/52 +f 105/72/37 117/99/57 116/883/53 +f 102/66/3 114/886/58 113/104/54 +f 97/56/16 109/882/52 120/884/55 +f 99/62/38 111/107/59 110/885/56 +f 106/75/11 118/103/11 117/99/57 +f 103/659/7 115/892/50 114/886/58 +f 100/64/10 112/106/10 111/107/59 +f 107/54/25 119/102/51 118/103/11 +f 121/83/60 122/80/61 120/884/55 +f 122/80/61 123/77/287 119/102/51 +f 174/887/5 175/907/16 142/888/16 +f 178/890/10 124/1410/10 130/891/38 +f 117/99/57 125/662/288 126/91/63 +f 126/91/63 127/93/289 115/881/50 +f 115/892/50 127/89/289 128/90/64 +f 128/90/64 129/86/290 113/104/54 +f 170/893/6 171/109/79 166/894/37 +f 169/896/7 184/903/7 194/897/3 +f 131/84/65 132/82/291 110/885/56 +f 110/885/56 132/82/291 121/83/60 +f 84/877/66 86/55/66 87/52/24 +f 85/58/20 86/55/66 84/877/66 +f 74/878/67 96/57/67 85/58/20 +f 75/869/68 95/59/68 96/57/67 +f 94/61/69 95/59/68 75/869/68 +f 77/876/70 93/65/70 94/61/69 +f 92/68/71 93/65/70 77/876/70 +f 91/67/72 92/68/71 78/880/71 +f 80/875/73 90/69/73 91/71/72 +f 81/879/74 89/74/74 90/69/73 +f 88/76/75 89/74/74 81/879/74 +f 83/873/24 87/52/24 88/76/75 +f 140/95/6 152/132/6 151/133/7 +f 174/887/5 148/889/5 154/900/25 +f 144/78/5 156/123/5 155/125/77 +f 134/85/4 146/144/4 145/121/16 +f 141/94/13 153/130/13 152/132/6 +f 138/87/3 150/135/3 149/138/8 +f 133/81/16 145/121/16 156/123/5 +f 135/660/19 147/145/19 146/144/4 +f 177/116/62 130/891/38 136/901/4 +f 139/661/7 151/136/7 150/135/3 +f 170/893/6 190/895/6 184/903/7 +f 180/898/3 194/897/3 193/904/23 +f 173/113/76 154/900/25 160/905/11 +f 176/902/4 136/901/4 142/888/16 +f 179/119/78 193/904/23 124/908/10 +f 162/910/5 174/887/5 173/113/76 +f 157/911/7 169/896/7 180/898/3 +f 159/674/13 171/109/79 170/893/6 +f 163/914/16 175/907/16 174/887/5 +f 164/915/4 176/902/4 175/907/16 +f 168/912/3 180/898/3 179/119/78 +f 158/913/6 170/893/6 169/896/7 +f 165/117/19 177/116/62 176/902/4 +f 172/916/11 160/1411/11 166/894/37 +f 168/917/71 182/122/71 181/677/72 +f 167/919/80 183/124/80 182/122/71 +f 164/920/67 186/131/67 185/680/81 +f 164/920/67 163/1412/20 187/681/20 +f 162/922/66 188/682/66 187/134/20 +f 162/922/66 161/1413/82 189/137/82 +f 158/924/73 192/146/73 191/143/83 +f 158/924/73 157/1414/72 181/677/72 +f 204/926/11 216/936/11 215/927/37 +f 201/929/7 213/1415/7 212/930/3 +f 198/932/10 210/941/10 209/933/38 +f 205/935/25 217/943/25 216/936/11 +f 202/937/6 214/947/6 213/938/7 +f 199/940/23 211/948/23 210/941/10 +f 206/942/5 218/949/5 217/943/25 +f 196/944/4 208/950/4 207/945/16 +f 203/928/37 215/927/37 214/947/6 +f 200/931/3 212/930/3 211/948/23 +f 195/946/16 207/945/16 218/949/5 +f 197/934/38 209/933/38 208/950/4 +f 234/951/84 231/1416/84 351/952/85 +f 279/954/38 280/957/10 268/257/10 +f 286/955/11 287/958/25 275/242/25 +f 283/956/7 284/960/6 272/247/6 +f 280/957/10 281/961/23 269/255/23 +f 287/958/25 288/962/5 276/240/5 +f 277/959/16 278/963/4 266/260/4 +f 284/960/6 285/964/37 273/245/37 +f 281/961/23 282/965/3 270/253/3 +f 288/962/5 277/959/16 265/263/16 +f 278/963/4 279/954/38 267/258/38 +f 285/964/37 286/955/11 274/244/11 +f 282/965/3 283/973/7 271/251/7 +f 298/966/86 299/977/87 287/958/87 +f 287/958/87 299/977/87 300/967/88 +f 300/967/88 289/968/89 277/959/89 +f 289/968/89 290/978/90 278/963/90 +f 278/963/90 290/978/90 291/969/91 +f 279/954/91 291/969/91 292/970/92 +f 292/970/92 293/971/93 281/961/93 +f 293/971/93 294/972/94 282/965/94 +f 294/972/94 295/979/95 283/973/95 +f 295/974/95 296/975/96 284/960/96 +f 296/975/96 297/976/97 285/964/97 +f 297/976/97 298/966/86 286/955/86 +f 299/977/25 311/220/25 312/219/5 +f 289/968/16 301/222/16 302/223/4 +f 296/975/6 308/234/6 309/237/37 +f 293/971/23 305/229/23 306/231/3 +f 300/967/5 312/219/5 301/222/16 +f 290/978/4 302/223/4 303/225/38 +f 297/976/37 309/237/37 310/239/11 +f 294/972/3 306/231/3 307/232/7 +f 291/969/38 303/225/38 304/227/10 +f 298/966/11 310/239/11 311/220/25 +f 295/974/7 307/235/7 308/234/6 +f 292/970/10 304/227/10 305/229/23 +f 343/986/104 342/987/105 341/985/103 +f 225/982/100 344/981/99 341/985/103 +f 335/241/23 391/999/119 390/989/108 +f 342/987/105 343/986/104 226/165/109 +f 340/983/101 341/985/103 342/987/105 +f 328/256/11 381/1000/120 382/991/111 +f 331/708/16 387/1417/121 386/992/112 +f 334/243/10 390/989/108 389/993/113 +f 327/259/37 382/991/111 383/994/114 +f 325/262/7 384/998/118 392/995/115 +f 222/990/110 343/986/104 344/981/99 +f 330/252/5 386/992/112 385/996/116 +f 333/246/38 389/993/113 388/997/117 +f 326/261/6 383/994/114 384/998/118 +f 336/264/3 392/995/115 391/999/119 +f 329/254/25 385/996/116 381/1000/120 +f 332/248/4 388/997/117 387/1001/121 +f 339/1002/7 345/1005/122 346/1003/122 +f 345/1005/122 347/1007/2 348/1006/2 +f 347/1007/2 349/1009/22 350/1008/22 +f 349/1009/123 352/953/85 351/952/85 +f 362/269/124 361/272/124 357/709/20 +f 368/710/125 364/276/126 372/281/126 +f 366/277/127 365/274/127 361/272/124 +f 364/276/126 360/268/28 370/549/28 +f 359/271/28 363/273/126 371/288/126 +f 371/288/126 363/273/126 367/275/125 +f 375/1010/128 377/1013/126 378/1011/126 +f 377/1013/126 379/1418/125 380/1014/125 +f 407/293/1 411/292/129 412/297/129 +f 316/705/11 396/1024/139 397/1015/130 +f 323/218/23 403/1025/140 404/1016/131 +f 313/221/7 393/1020/135 394/1017/132 +f 320/236/4 400/1026/141 401/1018/133 +f 317/228/25 397/1015/130 398/1019/134 +f 324/704/3 404/1016/131 393/1020/135 +f 314/224/6 394/1017/132 395/1021/136 +f 321/238/38 401/1018/133 402/1022/137 +f 318/230/5 398/1019/134 399/1023/138 +f 315/226/37 395/1021/136 396/1024/139 +f 322/707/10 402/1022/137 403/1025/140 +f 319/233/16 399/1039/138 400/1026/141 +f 387/1027/121 399/1023/138 398/1019/134 +f 386/1028/112 398/1019/134 397/1015/130 +f 385/1029/116 397/1015/130 396/1024/139 +f 381/1030/120 396/1024/139 395/1021/136 +f 382/1031/111 395/1021/136 394/1017/132 +f 384/1033/118 383/1032/114 394/1017/132 +f 384/1033/118 393/1020/135 404/1016/131 +f 391/1035/119 392/1034/115 404/1016/131 +f 391/1035/119 403/1025/140 402/1022/137 +f 390/1036/108 402/1022/137 401/1018/133 +f 389/1037/113 401/1018/133 400/1026/141 +f 388/1038/117 400/1026/141 399/1039/138 +f 428/1041/142 427/1045/142 423/1042/2 +f 411/292/129 415/300/143 416/306/143 +f 415/300/143 419/305/144 420/713/144 +f 432/1044/145 431/1047/145 427/1045/142 +f 436/1046/146 435/314/146 431/1047/145 +f 417/307/147 434/714/147 430/312/148 +f 413/298/148 430/312/148 426/294/149 +f 409/284/149 426/294/149 422/296/2 +f 405/291/2 421/302/2 425/311/149 +f 410/712/149 425/311/149 429/315/148 +f 414/299/148 429/315/148 433/715/147 +f 346/1048/10 348/1419/10 350/1049/150 +f 349/1051/152 347/1420/11 345/1005/11 +f 444/1054/160 448/1060/161 447/1055/161 +f 445/1057/162 446/1066/162 442/1058/72 +f 448/1060/161 450/1067/163 449/1061/163 +f 456/1062/164 455/1069/164 453/1063/165 +f 451/1065/166 452/1079/166 446/1066/162 +f 454/1064/165 453/1063/165 449/1061/163 +f 456/1062/164 458/1070/167 457/1068/167 +f 458/1070/167 460/1072/168 459/1071/168 +f 460/1072/168 462/1074/7 461/1073/7 +f 462/1074/169 464/1076/2 463/1075/2 +f 464/1076/2 466/1421/170 465/1077/170 +f 467/1078/122 468/340/122 452/1079/166 +f 467/1078/122 469/1080/7 470/344/7 +f 469/1080/1 471/1082/171 472/1081/171 +f 471/1082/171 473/1084/172 474/1083/172 +f 473/1084/172 475/1422/173 476/1085/173 +f 478/1086/1 480/1089/174 479/1087/174 +f 480/1089/174 482/1091/11 481/1090/11 +f 482/1091/11 484/1093/175 483/1092/175 +f 484/1093/175 486/1095/2 485/1094/2 +f 486/1095/2 488/1097/176 487/1096/176 +f 488/1097/176 490/1099/10 489/1098/10 +f 490/1099/10 492/1101/177 491/1100/177 +f 492/1101/177 478/1423/1 477/1102/1 +f 514/1103/178 518/1130/202 515/1104/179 +f 510/1106/181 514/1103/178 511/1105/180 +f 507/1108/183 512/1117/192 513/1109/184 +f 516/1111/186 548/1155/218 552/1112/187 +f 529/1114/189 541/1148/211 539/1115/190 +f 512/1117/192 516/1131/186 517/1118/193 +f 514/1119/178 510/1106/181 532/375/194 +f 521/1121/196 549/1159/222 553/1122/197 +f 526/1124/199 530/1151/215 527/1125/198 +f 515/1127/179 547/1156/219 545/1128/201 +f 518/1130/202 526/1124/199 523/1126/200 +f 516/1131/186 524/1135/188 525/1132/191 +f 527/1125/198 530/1151/215 522/1133/203 +f 524/1135/188 528/1424/224 529/1136/189 +f 525/1116/191 539/1115/190 535/1137/204 +f 529/1136/189 528/1424/224 519/1139/205 +f 507/1141/183 544/1154/217 546/1142/207 +f 513/1144/184 533/1152/216 531/734/208 +f 531/734/208 533/1152/216 534/1120/195 +f 536/1146/209 535/1137/204 539/1115/190 +f 534/1120/195 533/1152/216 535/1137/204 +f 540/1147/210 539/1115/190 541/1148/211 +f 538/739/213 542/1149/212 541/1148/211 +f 518/1150/202 536/1146/209 540/1147/210 +f 526/1124/199 540/1147/210 542/1149/212 +f 513/1144/184 517/1138/193 535/1137/204 +f 529/1114/189 520/1140/206 537/378/214 +f 514/1119/178 534/1120/195 536/1146/209 +f 522/1153/203 530/1151/215 542/1149/212 +f 544/1154/217 543/1163/225 545/1128/201 +f 545/1128/201 547/1156/219 548/1155/218 +f 547/1156/219 551/1157/220 552/1112/187 +f 551/1157/220 553/1122/197 554/1158/221 +f 554/1158/221 553/1122/197 549/1159/222 +f 528/1161/224 524/1113/188 552/1112/187 +f 512/1143/192 546/1142/207 548/1155/218 +f 528/1161/224 554/1158/221 550/1160/223 +f 511/1129/180 545/1128/201 543/1163/225 +f 515/1127/179 523/1165/200 551/1157/220 +f 527/1123/198 553/1122/197 551/1157/220 +f 569/1166/226 577/1192/241 578/1167/227 +f 561/1169/77 560/1178/235 568/1170/229 +f 559/1171/2 558/1179/236 566/1172/230 +f 556/1174/232 563/1182/237 565/1175/233 +f 561/1169/77 569/1166/226 570/1168/228 +f 560/1178/235 559/1171/2 567/1173/231 +f 558/1179/236 557/1425/8 565/1180/233 +f 555/1181/1 564/1183/238 563/1182/237 +f 562/1177/234 570/1168/228 564/1183/238 +f 573/1185/240 571/1426/243 577/1186/241 +f 571/1426/243 572/1427/244 577/1186/241 +f 572/1427/244 578/1428/227 577/1186/241 +f 577/1186/241 576/1429/242 575/1430/245 +f 575/1430/245 574/1184/239 577/1186/241 +f 567/1173/231 575/1193/245 576/1187/242 +f 566/1172/230 565/1180/233 573/1188/240 +f 564/1183/238 572/1191/244 571/1190/243 +f 570/1168/228 578/1167/227 572/1191/244 +f 569/1166/226 568/1170/229 576/1187/242 +f 567/1173/231 566/1172/230 574/1189/239 +f 563/1182/237 571/1190/243 573/1194/240 +f 587/1195/246 591/1202/251 592/1196/247 +f 588/1198/175 594/1431/175 593/1199/249 +f 595/1200/250 596/1432/174 590/1201/174 +f 600/1203/176 604/1433/176 603/1204/252 +f 605/1206/254 606/1434/177 602/1207/177 +f 597/1209/256 603/1204/252 605/1206/254 +f 608/408/258 610/402/2 609/397/2 +f 610/402/2 612/406/259 611/748/259 +f 620/1211/6 632/1232/6 633/1212/37 +f 627/1214/38 639/1233/38 640/1215/10 +f 624/1217/5 636/1234/5 637/1218/16 +f 621/1213/37 633/1212/37 634/1220/11 +f 628/1216/10 640/1215/10 641/1222/23 +f 625/1224/16 637/1435/16 638/1225/4 +f 622/1221/11 634/1220/11 635/1227/25 +f 629/1223/23 641/1222/23 642/1229/3 +f 619/1231/7 631/1235/7 632/1232/6 +f 626/1226/4 638/1225/4 639/1233/38 +f 623/1228/25 635/1227/25 636/1234/5 +f 630/1230/3 642/1229/3 631/1235/7 +f 650/448/260 652/451/261 651/772/261 +f 643/478/2 648/1436/262 649/796/262 +f 648/1236/262 653/1437/258 654/447/258 +f 666/1237/10 678/1247/10 677/1238/38 +f 673/1240/25 685/1249/25 684/1241/11 +f 670/1243/6 682/1254/6 681/1244/7 +f 667/1246/23 679/1256/23 678/1247/10 +f 674/1248/5 686/1257/5 685/1249/25 +f 664/1250/4 676/1258/4 675/1251/16 +f 671/1253/37 683/1259/37 682/1254/6 +f 668/1255/3 680/1261/3 679/1256/23 +f 663/1252/16 675/1251/16 686/1257/5 +f 665/1239/38 677/1238/38 676/1258/4 +f 672/1242/11 684/1241/11 683/1259/37 +f 669/1260/7 681/1269/7 680/1261/3 +f 683/1259/263 695/1268/263 694/1262/264 +f 680/1261/265 692/1270/265 691/1263/266 +f 675/1251/267 687/1274/267 698/1264/268 +f 676/1258/269 677/1238/270 689/1265/270 +f 683/1259/263 684/1241/271 696/1267/271 +f 681/1269/18 693/1281/18 692/1270/265 +f 678/1247/272 690/1273/272 689/1265/270 +f 684/1241/271 685/1249/273 697/1271/273 +f 681/1244/18 682/1254/264 694/1262/264 +f 679/1256/266 691/1263/266 690/1273/272 +f 686/1257/268 698/1264/268 697/1271/273 +f 675/1251/267 676/1258/269 688/1266/269 +f 688/1266/4 700/1279/278 699/1275/274 +f 695/1268/37 707/1280/279 706/1276/275 +f 692/1270/3 704/1282/280 703/1277/276 +f 687/1274/16 699/1275/274 710/1278/277 +f 689/1265/38 701/1283/281 700/1279/278 +f 696/1267/11 708/1284/282 707/1280/279 +f 693/1281/7 705/1291/283 704/1282/280 +f 690/1273/10 702/1286/284 701/1283/281 +f 697/1271/25 709/1287/285 708/1284/282 +f 694/1262/6 706/1276/275 705/1285/283 +f 691/1263/23 703/1277/276 702/1286/284 +f 698/1264/5 710/1278/277 709/1287/285 +f 717/1301/10 729/1311/10 728/1302/38 +f 724/1304/25 736/1313/25 735/1305/11 +f 721/1307/6 733/1318/6 732/1308/7 +f 718/1310/23 730/1320/23 729/1311/10 +f 725/1312/5 737/1321/5 736/1313/25 +f 715/1314/4 727/1322/4 726/1315/16 +f 722/1317/37 734/1323/37 733/1318/6 +f 719/1319/3 731/1325/3 730/1320/23 +f 714/1316/16 726/1315/16 737/1321/5 +f 716/1303/38 728/1302/38 727/1322/4 +f 723/1306/11 735/1305/11 734/1323/37 +f 720/1324/7 732/1333/7 731/1325/3 +f 733/1318/264 734/1323/263 746/1326/263 +f 730/1320/266 731/1325/265 743/1328/265 +f 726/1315/267 738/1338/267 749/1330/268 +f 727/1322/269 728/1302/270 740/1331/270 +f 735/1305/271 747/1335/271 746/1326/263 +f 732/1333/18 744/1345/18 743/1328/265 +f 729/1311/272 741/1337/272 740/1331/270 +f 735/1305/271 736/1313/273 748/1334/273 +f 732/1308/18 733/1318/264 745/1327/264 +f 729/1311/272 730/1320/266 742/1329/266 +f 737/1321/268 749/1330/268 748/1334/273 +f 726/1315/267 727/1322/269 739/1332/269 +f 739/1332/4 751/1343/278 750/1339/274 +f 746/1326/37 758/1344/279 757/1340/275 +f 743/1328/3 755/1346/280 754/1341/276 +f 738/1338/16 750/1339/274 761/1342/277 +f 740/1331/38 752/1347/281 751/1343/278 +f 747/1335/11 759/1348/282 758/1344/279 +f 744/1345/7 756/1355/283 755/1346/280 +f 741/1337/10 753/1350/284 752/1347/281 +f 748/1334/25 760/1351/285 759/1348/282 +f 745/1327/6 757/1340/275 756/1349/283 +f 742/1329/23 754/1341/276 753/1350/284 +f 749/1330/5 761/1342/277 760/1351/285 +f 782/489/1 771/1438/1 646/441/1 +f 647/471/260 781/487/1 782/489/1 +f 781/487/1 647/471/260 645/436/1 +f 376/1012/128 834/550/286 833/1366/286 +f 838/1367/1 840/1370/173 839/1368/173 +f 840/1370/173 842/1439/7 841/1371/7 +f 842/1372/7 844/1375/27 843/1373/27 +f 844/1375/27 846/1377/2 845/1376/2 +f 846/1377/2 848/1379/22 847/1378/22 +f 848/1379/22 850/1381/16 849/1380/16 +f 850/1381/16 852/1383/286 851/1382/286 +f 852/1383/286 838/1367/1 837/1369/1 +f 887/1384/37 899/1397/37 898/1385/11 +f 894/1387/4 906/1398/4 905/1388/38 +f 884/1390/5 896/1400/5 895/1391/16 +f 891/1393/23 903/1402/23 902/1394/3 +f 888/1396/6 900/1404/6 899/1397/37 +f 883/1392/16 895/1391/16 906/1398/4 +f 885/1399/25 897/1405/25 896/1400/5 +f 892/1401/10 904/1406/10 903/1402/23 +f 889/1403/7 901/1440/7 900/1404/6 +f 886/1386/11 898/1385/11 897/1405/25 +f 893/1389/38 905/1388/38 904/1406/10 +f 890/1395/3 902/1394/3 901/1407/7 +f 924/854/7 923/1441/7 231/1409/84 diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 3c3ad4a6b..02bb67a4c 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -64,6 +64,7 @@ "block.fel": {"category": "block", "sounds": [{"name": "block/fel", "stream": false}]}, "block.hephaestusRunning": {"category": "block", "sounds": [{"name": "block/hephaestusRunning", "stream": false}]}, "block.squeakyToy": {"category": "block", "sounds": [{"name": "block/squeakyToy", "stream": false}]}, + "block.pyroOperate": {"category": "block", "sounds": [{"name": "block/pyroOperate", "stream": false}]}, "door.TransitionSealOpen": {"category": "block", "sounds": [{"name": "block/door/transition_seal_open", "stream": true}]}, "door.wghStart": {"category": "block", "sounds": [{"name": "block/door/wgh_start", "stream": true}]}, diff --git a/src/main/resources/assets/hbm/sounds/block/pyroOperate.ogg b/src/main/resources/assets/hbm/sounds/block/pyroOperate.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a86ebd29c16f99965829cc4da77e51520db37daf GIT binary patch literal 15084 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/lpw2_term.png b/src/main/resources/assets/hbm/textures/models/machines/lpw2_term.png index a12e214d799c80e8da7fa24df32731be147f49ba..d969c507e330d2be0151869d77b83a0938e0da2e 100644 GIT binary patch literal 101095 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 diff --git a/src/main/resources/assets/hbm/textures/models/machines/pyrooven.png b/src/main/resources/assets/hbm/textures/models/machines/pyrooven.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd9c81c27f5b94dce51decee1e3d66aeb7ab3cd GIT binary patch literal 12305 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 K%Q7jW!2bv7!-8%A literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/novac_scope.png b/src/main/resources/assets/hbm/textures/models/weapons/novac_scope.png deleted file mode 100644 index 47a38039d4280f105375b1a229e6f2c96a5dbca4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3022 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 JTy1&u{Qu~uFEs!F diff --git a/src/main/resources/assets/hbm/textures/models/weapons/stg77.png b/src/main/resources/assets/hbm/textures/models/weapons/stg77.png new file mode 100644 index 0000000000000000000000000000000000000000..18c9773933bbe90f0677124b423fdbe39213e78a GIT binary patch literal 7740 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 Date: Mon, 16 Sep 2024 16:35:37 +0200 Subject: [PATCH 14/18] flixes --- changelog | 27 +++------ gradle.properties | 2 +- .../com/hbm/crafting/ConsumableRecipes.java | 5 ++ .../com/hbm/handler/GunConfiguration.java | 2 +- .../hbm/handler/guncfg/Gun12GaugeFactory.java | 2 +- .../hbm/handler/guncfg/Gun20GaugeFactory.java | 2 +- .../hbm/handler/guncfg/Gun22LRFactory.java | 2 +- .../handler/guncfg/Gun357MagnumFactory.java | 2 +- .../handler/guncfg/Gun44MagnumFactory.java | 3 +- .../hbm/handler/guncfg/Gun45ACPFactory.java | 2 +- .../hbm/handler/guncfg/Gun4GaugeFactory.java | 3 +- .../hbm/handler/guncfg/Gun50AEFactory.java | 2 +- .../hbm/handler/guncfg/Gun50BMGFactory.java | 2 +- .../hbm/handler/guncfg/Gun556mmFactory.java | 3 +- .../com/hbm/handler/guncfg/Gun5mmFactory.java | 2 +- .../hbm/handler/guncfg/Gun75BoltFactory.java | 3 +- .../hbm/handler/guncfg/Gun762mmFactory.java | 2 +- .../com/hbm/handler/guncfg/Gun9mmFactory.java | 2 +- .../hbm/handler/guncfg/GunDartFactory.java | 2 +- .../handler/guncfg/GunDetonatorFactory.java | 2 +- .../hbm/handler/guncfg/GunEnergyFactory.java | 2 +- .../hbm/handler/guncfg/GunFatmanFactory.java | 2 +- .../hbm/handler/guncfg/GunGaussFactory.java | 2 +- .../hbm/handler/guncfg/GunGrenadeFactory.java | 3 +- .../hbm/handler/guncfg/GunOSIPRFactory.java | 3 +- .../hbm/handler/guncfg/GunPoweredFactory.java | 3 +- .../hbm/handler/guncfg/GunRocketFactory.java | 3 +- .../guncfg/GunRocketHomingFactory.java | 3 +- .../com/hbm/interfaces/IHoldableWeapon.java | 2 +- .../inventory/container/ContainerChemfac.java | 3 +- .../inventory/recipes/PyroOvenRecipes.java | 41 +++++++++++++- .../inventory/recipes/ShredderRecipes.java | 2 +- .../hbm/items/tool/ItemLaserDetonator.java | 2 +- .../java/com/hbm/items/weapon/GunFolly.java | 2 +- .../hbm/items/weapon/ItemEnergyGunBase.java | 2 +- .../com/hbm/items/weapon/ItemGunBase.java | 2 +- .../hbm/items/weapon/ItemGunChemthrower.java | 3 +- .../com/hbm/items/weapon/sedna/Crosshair.java | 34 +++++++++++ .../com/hbm/items/weapon/sedna/GunConfig.java | 1 - .../hbm/items/weapon/sedna/ItemGunBaseNT.java | 3 + .../weapon/sedna/factory/GunFactory.java | 2 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../hbm/render/util/RenderScreenOverlay.java | 34 +---------- .../machine/TileEntityMachineTurbineGas.java | 8 +-- .../oil/TileEntityMachinePyroOven.java | 53 ++++++++++++++++-- .../textures/gui/processing/gui_pyrooven.png | Bin 3324 -> 2879 bytes .../hbm/textures/items/armor_battery.png | Bin 403 -> 388 bytes .../hbm/textures/items/armor_battery_mk2.png | Bin 370 -> 368 bytes .../hbm/textures/items/armor_battery_mk3.png | Bin 403 -> 405 bytes .../hbm/textures/items/color_pallete.png | Bin 279 -> 0 bytes .../assets/hbm/textures/items/rotor_steel.png | Bin 187 -> 0 bytes .../hbm/textures/items/upgrade_bedrock.png | Bin 304 -> 0 bytes .../hbm/textures/items/upgrade_mod_u.png | Bin 362 -> 0 bytes 53 files changed, 179 insertions(+), 110 deletions(-) create mode 100644 src/main/java/com/hbm/items/weapon/sedna/Crosshair.java delete mode 100644 src/main/resources/assets/hbm/textures/items/color_pallete.png delete mode 100644 src/main/resources/assets/hbm/textures/items/rotor_steel.png delete mode 100644 src/main/resources/assets/hbm/textures/items/upgrade_bedrock.png delete mode 100644 src/main/resources/assets/hbm/textures/items/upgrade_mod_u.png diff --git a/changelog b/changelog index c1ff8fd80..12e59695f 100644 --- a/changelog +++ b/changelog @@ -1,22 +1,11 @@ -## Added -* Settings tool - * Allows settings of blocks and machines to be copied - * Uses settings such as conveyor item filters, fluid types and liquid metal types -* Pyrolysis oven - * An oil 3 machine with multiple applications - * Can solidify most oils like a solidifier, but is way more efficient - * Can create syngas with high efficiency from coal, coke and biomass - * Large amounts of tar can be processed into fine soot, the base ingredient for fullerene - * Upgrades are not implemented yet - * Has a very short "chimney", exhaust pipes have to be connected there to work - * If no exhaust pipes are connected, the chimney will spawn particles - ## Changed -* Most loot piles now have configurable loot pools -* The ntmsatellites command now has the "list" parameter which shows all active satellites in orbit -* Burning in the nether in 528 mode now has a config option, and it no longer affects NPCs -* Jet fuel can now be solidified +* Pyrolysis recipes have been added + * Bedrock ores can be roasted at much higher speeds + * Pyrolysis ovens can now turn 4,000mB of coker gas into 500mB refgas + * Hydrogen + coal can be turned into heavy oil, heavy oil + coal turns into coalgas directly +* The CCGT startup and shutdown sounds are now affected by mufflers +* Armor battery packs now have recipes ## Fixed -* Fixed some things not using variable max charge for armor mods, like static pads and DNT nanosuit tooltips -* Fixed arc furnace recipe config parser breaking when reading fluid recipes \ No newline at end of file +* Crash caused by new system gun init on servers +* Fixed chemfac output slots not being marked as outputs, not granting achievements and allowing items to be inserted \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index f5cc55373..768124b1e 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=5089 +mod_build_number=5090 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index 6f0d2e9d8..f2669bd58 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -183,6 +183,11 @@ public class ConsumableRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.pads_slime, 1), new Object[] { "SPS", "DSD", "SPS", 'S', KEY_SLIME, 'P', ModItems.pads_rubber, 'D', ModItems.ducttape }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.pads_static, 1), new Object[] { "CDC", "ISI", "CDC", 'C', CU.ingot(), 'D', ModItems.ducttape, 'I', ANY_RUBBER.ingot(), 'S', ModItems.pads_slime }); + //Batteries + CraftingManager.addRecipeAuto(new ItemStack(ModItems.armor_battery, 1), new Object[] { "PCP", "PCP", "PCP", 'P', STEEL.plate(), 'C', ModBlocks.capacitor_gold }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.armor_battery_mk2, 1), new Object[] { "PCP", "PCP", "PCP", 'P', ANY_PLASTIC.ingot(), 'C', ModBlocks.capacitor_niobium }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.armor_battery_mk3, 1), new Object[] { "PCP", "PCP", "PCP", 'P', GOLD.plate(), 'C', ModBlocks.block_tantalium }); + //Special Mods CraftingManager.addRecipeAuto(new ItemStack(ModItems.horseshoe_magnet, 1), new Object[] { "L L", "I I", "ILI", 'L', ModItems.lodestone, 'I', IRON.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.industrial_magnet, 1), new Object[] { "SMS", " B ", "SMS", 'S', STEEL.ingot(), 'M', ModItems.horseshoe_magnet, 'B', ModBlocks.fusion_conductor }); diff --git a/src/main/java/com/hbm/handler/GunConfiguration.java b/src/main/java/com/hbm/handler/GunConfiguration.java index 3fe99df52..974322d00 100644 --- a/src/main/java/com/hbm/handler/GunConfiguration.java +++ b/src/main/java/com/hbm/handler/GunConfiguration.java @@ -5,10 +5,10 @@ import java.util.HashMap; import java.util.List; import java.util.function.Consumer; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.util.ResourceLocation; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java index a6d351802..1502b98ab 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun12GaugeFactory.java @@ -8,6 +8,7 @@ import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ItemAmmoEnums.Ammo12Gauge; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.main.ResourceManager; @@ -19,7 +20,6 @@ import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java index 2bf40a528..60daa8afb 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java @@ -7,6 +7,7 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo20Gauge; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; @@ -15,7 +16,6 @@ import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun22LRFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun22LRFactory.java index aa9070ed8..629989b09 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun22LRFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun22LRFactory.java @@ -5,12 +5,12 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo22LR; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; public class Gun22LRFactory { diff --git a/src/main/java/com/hbm/handler/guncfg/Gun357MagnumFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun357MagnumFactory.java index 29340e37e..0614dca1d 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun357MagnumFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun357MagnumFactory.java @@ -8,6 +8,7 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo357Magnum; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.main.ResourceManager; @@ -16,7 +17,6 @@ import com.hbm.particle.SpentCasing.CasingType; import com.hbm.lib.ModDamageSource; import com.hbm.potion.HbmPotion; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.potion.PotionEffect; import net.minecraft.util.Vec3; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun44MagnumFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun44MagnumFactory.java index 98ac02468..4a65f6f02 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun44MagnumFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun44MagnumFactory.java @@ -12,6 +12,7 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo44Magnum; import com.hbm.lib.HbmCollection; import com.hbm.lib.RefStrings; @@ -23,8 +24,6 @@ import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.potion.HbmPotion; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun45ACPFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun45ACPFactory.java index d21ebf9c9..d9ae7f897 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun45ACPFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun45ACPFactory.java @@ -6,6 +6,7 @@ import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo45ACP; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; @@ -14,7 +15,6 @@ import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; public class Gun45ACPFactory { diff --git a/src/main/java/com/hbm/handler/guncfg/Gun4GaugeFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun4GaugeFactory.java index 80dd4fc6d..9ebcb6f44 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun4GaugeFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun4GaugeFactory.java @@ -14,6 +14,7 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo4Gauge; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; @@ -27,8 +28,6 @@ import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.EntityCreature; import net.minecraft.entity.EntityLivingBase; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun50AEFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun50AEFactory.java index d03724f89..b4fa21a95 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun50AEFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun50AEFactory.java @@ -5,12 +5,12 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo50AE; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; public class Gun50AEFactory { diff --git a/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java index ac04b5aa4..9494ba9a9 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java @@ -9,6 +9,7 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo50BMG; import com.hbm.items.ItemAmmoEnums.AmmoLunaticSniper; import com.hbm.lib.HbmCollection; @@ -22,7 +23,6 @@ import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import com.hbm.util.ContaminationUtil; import com.hbm.util.ContaminationUtil.ContaminationType; import com.hbm.util.ContaminationUtil.HazardType; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java index 34c25392a..df66f7f16 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java @@ -10,6 +10,7 @@ import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ItemAmmoEnums.Ammo556mm; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.packet.PacketDispatcher; @@ -20,8 +21,6 @@ import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.PotionEffect; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun5mmFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun5mmFactory.java index 88c83cda1..d552e5cca 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun5mmFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun5mmFactory.java @@ -6,11 +6,11 @@ import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ItemAmmoEnums.Ammo5mm; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; public class Gun5mmFactory { diff --git a/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java index 8362c2605..09384bcc7 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java @@ -7,6 +7,7 @@ import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ItemAmmoEnums.Ammo75Bolt; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.lib.ModDamageSource; @@ -16,8 +17,6 @@ import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java index 3419a631b..6f08a02eb 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java @@ -7,6 +7,7 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo762NATO; import com.hbm.lib.HbmCollection; import com.hbm.lib.RefStrings; @@ -17,7 +18,6 @@ import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.potion.PotionEffect; import net.minecraft.util.ResourceLocation; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun9mmFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun9mmFactory.java index 2e7c68cc4..8d0e80112 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun9mmFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun9mmFactory.java @@ -8,11 +8,11 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.Ammo9mm; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; public class Gun9mmFactory { diff --git a/src/main/java/com/hbm/handler/guncfg/GunDartFactory.java b/src/main/java/com/hbm/handler/guncfg/GunDartFactory.java index 07bcc2878..287022576 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunDartFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunDartFactory.java @@ -10,9 +10,9 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ItemAmmoEnums.AmmoDart; import com.hbm.items.ModItems; import com.hbm.items.weapon.ItemGunDart; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.main.MainRegistry; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java b/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java index f5b88310c..e24e26f67 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunDetonatorFactory.java @@ -9,10 +9,10 @@ import com.hbm.interfaces.IBomb; import com.hbm.interfaces.IBomb.BombReturnCode; import com.hbm.main.MainRegistry; import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.PlayerInformPacket; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import com.hbm.util.ChatBuilder; import net.minecraft.block.Block; diff --git a/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java b/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java index ed16b5fa1..adaf77aee 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunEnergyFactory.java @@ -16,6 +16,7 @@ import com.hbm.items.ItemAmmoEnums.AmmoCoilgun; import com.hbm.items.ItemAmmoEnums.AmmoFireExt; import com.hbm.items.ItemAmmoEnums.AmmoFlamethrower; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; @@ -23,7 +24,6 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.packet.toclient.ExplosionKnockbackPacket; import com.hbm.potion.HbmPotion; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import com.hbm.tileentity.IRepairable; import com.hbm.tileentity.IRepairable.EnumExtinguishType; import com.hbm.util.CompatExternal; diff --git a/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java b/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java index 123d99d7e..5f139750e 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunFatmanFactory.java @@ -15,11 +15,11 @@ import com.hbm.handler.GunConfiguration; import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.AmmoFatman; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.init.Blocks; diff --git a/src/main/java/com/hbm/handler/guncfg/GunGaussFactory.java b/src/main/java/com/hbm/handler/guncfg/GunGaussFactory.java index 905f80321..572bf3674 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunGaussFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunGaussFactory.java @@ -7,11 +7,11 @@ import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; public class GunGaussFactory { diff --git a/src/main/java/com/hbm/handler/guncfg/GunGrenadeFactory.java b/src/main/java/com/hbm/handler/guncfg/GunGrenadeFactory.java index 2aa52a588..3cac91814 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunGrenadeFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunGrenadeFactory.java @@ -8,6 +8,7 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.AmmoGrenade; import com.hbm.lib.HbmCollection; import com.hbm.lib.HbmCollection.EnumGunManufacturer; @@ -17,8 +18,6 @@ import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MathHelper; diff --git a/src/main/java/com/hbm/handler/guncfg/GunOSIPRFactory.java b/src/main/java/com/hbm/handler/guncfg/GunOSIPRFactory.java index deb53436a..c3f2d9d75 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunOSIPRFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunOSIPRFactory.java @@ -8,11 +8,10 @@ import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.lib.ModDamageSource; import com.hbm.potion.HbmPotion; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import net.minecraft.block.Block; import net.minecraft.entity.EntityLivingBase; import net.minecraft.potion.PotionEffect; diff --git a/src/main/java/com/hbm/handler/guncfg/GunPoweredFactory.java b/src/main/java/com/hbm/handler/guncfg/GunPoweredFactory.java index c80cb8f1d..3703750aa 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunPoweredFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunPoweredFactory.java @@ -5,9 +5,8 @@ import java.util.ArrayList; import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import net.minecraft.util.EnumChatFormatting; public class GunPoweredFactory { diff --git a/src/main/java/com/hbm/handler/guncfg/GunRocketFactory.java b/src/main/java/com/hbm/handler/guncfg/GunRocketFactory.java index 1c933ce55..02a1e5a37 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunRocketFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunRocketFactory.java @@ -10,13 +10,12 @@ import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.ItemAmmoEnums.AmmoRocket; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import net.minecraft.block.material.Material; import net.minecraft.world.World; diff --git a/src/main/java/com/hbm/handler/guncfg/GunRocketHomingFactory.java b/src/main/java/com/hbm/handler/guncfg/GunRocketHomingFactory.java index 3e2808d40..27603435a 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunRocketHomingFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunRocketHomingFactory.java @@ -9,9 +9,8 @@ import com.hbm.handler.GunConfiguration; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ItemAmmoEnums.AmmoStinger; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection.EnumGunManufacturer; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import net.minecraft.entity.player.EntityPlayer; public class GunRocketHomingFactory { diff --git a/src/main/java/com/hbm/interfaces/IHoldableWeapon.java b/src/main/java/com/hbm/interfaces/IHoldableWeapon.java index 22647eb3b..b1a228d05 100644 --- a/src/main/java/com/hbm/interfaces/IHoldableWeapon.java +++ b/src/main/java/com/hbm/interfaces/IHoldableWeapon.java @@ -1,6 +1,6 @@ package com.hbm.interfaces; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; +import com.hbm.items.weapon.sedna.Crosshair; public interface IHoldableWeapon { diff --git a/src/main/java/com/hbm/inventory/container/ContainerChemfac.java b/src/main/java/com/hbm/inventory/container/ContainerChemfac.java index 45604135d..c04792035 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerChemfac.java +++ b/src/main/java/com/hbm/inventory/container/ContainerChemfac.java @@ -1,5 +1,6 @@ package com.hbm.inventory.container; +import com.hbm.inventory.SlotCraftingOutput; import com.hbm.inventory.SlotUpgrade; import com.hbm.tileentity.machine.TileEntityMachineChemfac; @@ -35,7 +36,7 @@ public class ContainerChemfac extends Container { for(int k = 0; k < 2; k++) { for(int l = 0; l < 2; l++) { - this.addSlotToContainer(new Slot(tile, this.inventorySlots.size(), 69 + j * 110 + l * 16, 14 + i * 38 + k * 16)); + this.addSlotToContainer(new SlotCraftingOutput(playerInv.player, tile, this.inventorySlots.size(), 69 + j * 110 + l * 16, 14 + i * 38 + k * 16)); } } diff --git a/src/main/java/com/hbm/inventory/recipes/PyroOvenRecipes.java b/src/main/java/com/hbm/inventory/recipes/PyroOvenRecipes.java index 04b3e4d74..456c8af93 100644 --- a/src/main/java/com/hbm/inventory/recipes/PyroOvenRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PyroOvenRecipes.java @@ -22,6 +22,9 @@ import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ItemEnums.EnumAshType; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemFluidIcon; +import com.hbm.items.special.ItemBedrockOreNew; +import com.hbm.items.special.ItemBedrockOreNew.BedrockOreGrade; +import com.hbm.items.special.ItemBedrockOreNew.BedrockOreType; import net.minecraft.init.Items; import net.minecraft.item.Item; @@ -63,7 +66,17 @@ public class PyroOvenRecipes extends SerializableRecipe { registerSFAuto(XYLENE); registerSFAuto(BALEFIRE, 24_000_000L, ModItems.solid_fuel_bf); - //other + //bedrock ores + + for(BedrockOreType type : BedrockOreType.values()) { + recipes.add(new PyroOvenRecipe(10).in(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.BASE, type))).out(new FluidStack(Fluids.VITRIOL, 50)).out(ItemBedrockOreNew.make(BedrockOreGrade.BASE_ROASTED, type))); + recipes.add(new PyroOvenRecipe(10).in(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.PRIMARY, type))).out(new FluidStack(Fluids.VITRIOL, 50)).out(ItemBedrockOreNew.make(BedrockOreGrade.PRIMARY_ROASTED, type))); + recipes.add(new PyroOvenRecipe(10).in(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_BYPRODUCT, type))).out(new FluidStack(Fluids.VITRIOL, 50)).out(ItemBedrockOreNew.make(BedrockOreGrade.SULFURIC_ROASTED, type))); + recipes.add(new PyroOvenRecipe(10).in(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_BYPRODUCT, type))).out(new FluidStack(Fluids.VITRIOL, 50)).out(ItemBedrockOreNew.make(BedrockOreGrade.SOLVENT_ROASTED, type))); + recipes.add(new PyroOvenRecipe(10).in(new ComparableStack(ItemBedrockOreNew.make(BedrockOreGrade.RAD_BYPRODUCT, type))).out(new FluidStack(Fluids.VITRIOL, 50)).out(ItemBedrockOreNew.make(BedrockOreGrade.RAD_ROASTED, type))); + } + + //syngas from coal recipes.add(new PyroOvenRecipe(100) .in(new FluidStack(Fluids.STEAM, 500)).in(new OreDictStack(COAL.gem())) .out(new FluidStack(Fluids.SYNGAS, 1_000))); @@ -73,12 +86,38 @@ public class PyroOvenRecipes extends SerializableRecipe { recipes.add(new PyroOvenRecipe(100) .in(new FluidStack(Fluids.STEAM, 250)).in(new OreDictStack(ANY_COKE.gem())) .out(new FluidStack(Fluids.SYNGAS, 1_000))); + //syngas from biomass recipes.add(new PyroOvenRecipe(100) .in(new ComparableStack(ModItems.biomass, 4)) .out(new FluidStack(Fluids.SYNGAS, 1_000)).out(new ItemStack(Items.coal, 1, 1))); + //soot from tar recipes.add(new PyroOvenRecipe(40) .out(new FluidStack(Fluids.HYDROGEN, 250)).in(new OreDictStack(ANY_TAR.any(), 8)) .out(new FluidStack(Fluids.CARBONDIOXIDE, 1_000)).out(DictFrame.fromOne(ModItems.powder_ash, EnumAshType.SOOT))); + //heavyoil from coal + recipes.add(new PyroOvenRecipe(100) + .in(new FluidStack(Fluids.HYDROGEN, 500)).in(new OreDictStack(COAL.gem())) + .out(new FluidStack(Fluids.HEAVYOIL, 1_000))); + recipes.add(new PyroOvenRecipe(100) + .in(new FluidStack(Fluids.HYDROGEN, 500)).in(new OreDictStack(COAL.dust())) + .out(new FluidStack(Fluids.HEAVYOIL, 1_000))); + recipes.add(new PyroOvenRecipe(100) + .in(new FluidStack(Fluids.HYDROGEN, 250)).in(new OreDictStack(ANY_COKE.gem())) + .out(new FluidStack(Fluids.HEAVYOIL, 1_000))); + //coalgas from coal + recipes.add(new PyroOvenRecipe(50) + .in(new FluidStack(Fluids.HEAVYOIL, 500)).in(new OreDictStack(COAL.gem())) + .out(new FluidStack(Fluids.COALGAS, 1_000))); + recipes.add(new PyroOvenRecipe(50) + .in(new FluidStack(Fluids.HEAVYOIL, 500)).in(new OreDictStack(COAL.dust())) + .out(new FluidStack(Fluids.COALGAS, 1_000))); + recipes.add(new PyroOvenRecipe(50) + .in(new FluidStack(Fluids.HEAVYOIL, 500)).in(new OreDictStack(ANY_COKE.gem())) + .out(new FluidStack(Fluids.COALGAS, 1_000))); + //refgas from coker gas + recipes.add(new PyroOvenRecipe(60) + .in(new FluidStack(GAS_COKER, 4_000)) + .out(new FluidStack(Fluids.REFORMGAS, 100))); } private static void registerSFAuto(FluidType fluid) { diff --git a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java index a23c3e2c9..2aaa8413c 100644 --- a/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ShredderRecipes.java @@ -196,7 +196,7 @@ public class ShredderRecipes extends SerializableRecipe { ShredderRecipes.setRecipe(ModBlocks.boxcar, new ItemStack(ModItems.powder_steel, 32)); ShredderRecipes.setRecipe(ModItems.ingot_schrabidate, new ItemStack(ModItems.powder_schrabidate, 1)); ShredderRecipes.setRecipe(ModBlocks.block_schrabidate, new ItemStack(ModItems.powder_schrabidate, 9)); - ShredderRecipes.setRecipe(ModItems.coal_infernal, new ItemStack(ModItems.powder_coal, 3)); + ShredderRecipes.setRecipe(ModItems.coal_infernal, new ItemStack(ModItems.powder_coal, 2)); ShredderRecipes.setRecipe(Items.fermented_spider_eye, new ItemStack(ModItems.powder_poison, 3)); ShredderRecipes.setRecipe(Items.poisonous_potato, new ItemStack(ModItems.powder_poison, 1)); ShredderRecipes.setRecipe(ModBlocks.ore_tektite_osmiridium, new ItemStack(ModItems.powder_tektite, 1)); diff --git a/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java b/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java index eddb41ace..4e0d022bc 100644 --- a/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java +++ b/src/main/java/com/hbm/items/tool/ItemLaserDetonator.java @@ -8,11 +8,11 @@ import com.hbm.config.GeneralConfig; import com.hbm.interfaces.IBomb; import com.hbm.interfaces.IBomb.BombReturnCode; import com.hbm.interfaces.IHoldableWeapon; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.PlayerInformPacket; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import com.hbm.util.ChatBuilder; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/items/weapon/GunFolly.java b/src/main/java/com/hbm/items/weapon/GunFolly.java index c4bb2506f..4fe1a0f49 100644 --- a/src/main/java/com/hbm/items/weapon/GunFolly.java +++ b/src/main/java/com/hbm/items/weapon/GunFolly.java @@ -4,7 +4,7 @@ import com.hbm.entity.projectile.EntityBulletBaseNT; import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.interfaces.IHoldableWeapon; import com.hbm.items.ModItems; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; +import com.hbm.items.weapon.sedna.Crosshair; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/hbm/items/weapon/ItemEnergyGunBase.java b/src/main/java/com/hbm/items/weapon/ItemEnergyGunBase.java index ffbc0388d..12340864e 100644 --- a/src/main/java/com/hbm/items/weapon/ItemEnergyGunBase.java +++ b/src/main/java/com/hbm/items/weapon/ItemEnergyGunBase.java @@ -9,12 +9,12 @@ import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.interfaces.IHoldableWeapon; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.GunAnimationPacket; import com.hbm.packet.toserver.GunButtonPacket; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import com.hbm.util.BobMathUtil; import com.hbm.util.ChatBuilder; diff --git a/src/main/java/com/hbm/items/weapon/ItemGunBase.java b/src/main/java/com/hbm/items/weapon/ItemGunBase.java index cfefa2357..b599776f0 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunBase.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunBase.java @@ -18,6 +18,7 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.IEquipReceiver; import com.hbm.items.ModItems; import com.hbm.items.armor.ArmorFSB; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.HbmCollection; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; @@ -26,7 +27,6 @@ import com.hbm.packet.toserver.GunButtonPacket; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import com.hbm.util.I18nUtil; import com.hbm.util.InventoryUtil; diff --git a/src/main/java/com/hbm/items/weapon/ItemGunChemthrower.java b/src/main/java/com/hbm/items/weapon/ItemGunChemthrower.java index 3a9ec6fba..b37da9f1d 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunChemthrower.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunChemthrower.java @@ -10,12 +10,11 @@ import com.hbm.interfaces.IHoldableWeapon; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.items.machine.ItemFluidIcon; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.GunAnimationPacket; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; - import api.hbm.fluid.IFillableItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; diff --git a/src/main/java/com/hbm/items/weapon/sedna/Crosshair.java b/src/main/java/com/hbm/items/weapon/sedna/Crosshair.java new file mode 100644 index 000000000..fe308bbf9 --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/Crosshair.java @@ -0,0 +1,34 @@ +package com.hbm.items.weapon.sedna; + +public enum Crosshair { + + NONE(0, 0, 0), + CROSS(1, 55, 16), + CIRCLE(19, 55, 16), + SEMI(37, 55, 16), + KRUCK(55, 55, 16), + DUAL(1, 73, 16), + SPLIT(19, 73, 16), + CLASSIC(37, 73, 16), + BOX(55, 73, 16), + + L_CROSS(0, 90, 32), + L_KRUCK(32, 90, 32), + L_CLASSIC(64, 90, 32), + L_CIRCLE(96, 90, 32), + L_SPLIT(0, 122, 32), + L_ARROWS(32, 122, 32), + L_BOX(64, 122, 32), + L_CIRCUMFLEX(96, 122, 32), + L_RAD(0, 154, 32); + + public int x; + public int y; + public int size; + + private Crosshair(int x, int y, int size) { + this.x = x; + this.y = y; + this.size = size; + } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java b/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java index 896d09832..0eed0f236 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java +++ b/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java @@ -6,7 +6,6 @@ import java.util.function.BiFunction; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.HbmAnimations.AnimType; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java index b7376acc8..8d55aec88 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -11,6 +11,8 @@ import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay; import com.hbm.util.EnumUtil; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -169,6 +171,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei } @Override + @SideOnly(Side.CLIENT) public void renderHUD(Pre event, ElementType type, EntityPlayer player, ItemStack stack) { if(type == ElementType.CROSSHAIRS) { event.setCanceled(true); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java index 424da2c29..1fcba5bd0 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java @@ -2,13 +2,13 @@ package com.hbm.items.weapon.sedna.factory; import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.BulletConfig; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.mags.MagazineRevolverDrum; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; -import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.item.Item; diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 5f925e5a8..8b3ee99cb 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 (5089)"; + public static final String VERSION = "1.0.27 BETA (5090)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/render/util/RenderScreenOverlay.java b/src/main/java/com/hbm/render/util/RenderScreenOverlay.java index 512eb41af..23c8a87b5 100644 --- a/src/main/java/com/hbm/render/util/RenderScreenOverlay.java +++ b/src/main/java/com/hbm/render/util/RenderScreenOverlay.java @@ -6,6 +6,7 @@ import org.lwjgl.opengl.GL12; import com.hbm.extprop.HbmPlayerProps; import com.hbm.interfaces.Spaghetti; import com.hbm.interfaces.Untested; +import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.lib.RefStrings; import net.minecraft.client.Minecraft; @@ -352,37 +353,4 @@ public class RenderScreenOverlay { GL11.glEnable(GL11.GL_ALPHA_TEST); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); } - - public enum Crosshair { - - NONE(0, 0, 0), - CROSS(1, 55, 16), - CIRCLE(19, 55, 16), - SEMI(37, 55, 16), - KRUCK(55, 55, 16), - DUAL(1, 73, 16), - SPLIT(19, 73, 16), - CLASSIC(37, 73, 16), - BOX(55, 73, 16), - L_CROSS(0, 90, 32), - L_KRUCK(32, 90, 32), - L_CLASSIC(64, 90, 32), - L_CIRCLE(96, 90, 32), - L_SPLIT(0, 122, 32), - L_ARROWS(32, 122, 32), - L_BOX(64, 122, 32), - L_CIRCUMFLEX(96, 122, 32), - L_RAD(0, 154, 32); - - public int x; - public int y; - public int size; - - private Crosshair(int x, int y, int size) { - this.x = x; - this.y = y; - this.size = size; - } - } - } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java index 8b9e716e5..31bf5641b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java @@ -180,12 +180,12 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement if(audio == null) { //if there is no sound playing, start it - audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, 1.0F, 20F, 2.0F); + audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, getVolume(1.0F), 20F, 2.0F); audio.startSound(); } else if(!audio.isPlaying()) { audio.stopSound(); - audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, 1.0F, 20F, 2.0F); + audio = MainRegistry.proxy.getLoopedSound("hbm:block.turbinegasRunning", xCoord, yCoord, zCoord, getVolume(1.0F), 20F, 2.0F); audio.startSound(); } @@ -235,7 +235,7 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement } if(counter == 50) { - worldObj.playSoundEffect(xCoord, yCoord + 2, zCoord, "hbm:block.turbinegasStartup", 1F, 1.0F); + worldObj.playSoundEffect(xCoord, yCoord + 2, zCoord, "hbm:block.turbinegasStartup", getVolume(1.0F), 1.0F); } if(counter == 580) { @@ -259,7 +259,7 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement if(counter == 225) { - worldObj.playSoundEffect(xCoord, yCoord + 2, zCoord, "hbm:block.turbinegasShutdown", 1F, 1.0F); + worldObj.playSoundEffect(xCoord, yCoord + 2, zCoord, "hbm:block.turbinegasShutdown", getVolume(1.0F), 1.0F); rpmLast = rpm; tempLast = temp; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java index 34a8d918e..eb1fb4e98 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java @@ -1,19 +1,26 @@ package com.hbm.tileentity.machine.oil; +import java.util.List; + +import com.hbm.blocks.ModBlocks; import com.hbm.handler.pollution.PollutionHandler; import com.hbm.handler.pollution.PollutionHandler.PollutionType; +import com.hbm.inventory.UpgradeManager; import com.hbm.inventory.container.ContainerPyroOven; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIPyroOven; import com.hbm.inventory.recipes.PyroOvenRecipes; import com.hbm.inventory.recipes.PyroOvenRecipes.PyroOvenRecipe; +import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachinePolluting; +import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IEnergyReceiverMK2; @@ -27,17 +34,18 @@ import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachinePyroOven extends TileEntityMachinePolluting implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IFluidCopiable { +public class TileEntityMachinePyroOven extends TileEntityMachinePolluting implements IEnergyReceiverMK2, IFluidStandardTransceiver, IGUIProvider, IUpgradeInfoProvider, IFluidCopiable { public long power; public static final long maxPower = 1_000_000; public boolean isVenting; public boolean isProgressing; public float progress; - public int consumption = 10_000; + public static int consumption = 10_000; public int prevAnim; public int anim = 0; @@ -76,16 +84,18 @@ public class TileEntityMachinePyroOven extends TileEntityMachinePolluting implem ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); if(smoke.getFill() > 0) this.sendFluid(smoke, worldObj, xCoord - rot.offsetX, yCoord + 3, zCoord - rot.offsetZ, Library.POS_Y); - //UpgradeManager.eval(slots, 4, 5); + UpgradeManager.eval(slots, 4, 5); + int speed = Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3); + int powerSaving = Math.min(UpgradeManager.getLevel(UpgradeType.POWER), 3); this.isProgressing = false; this.isVenting = false; if(this.canProcess()) { PyroOvenRecipe recipe = getMatchingRecipe(); - this.progress += 1F / recipe.duration; + this.progress += 1F / (recipe.duration - speed * (recipe.duration / 4)); this.isProgressing = true; - this.power -= this.consumption; + this.power -= this.getConsumption(speed, powerSaving); if(progress >= 1F) { this.progress = 0F; @@ -153,6 +163,10 @@ public class TileEntityMachinePyroOven extends TileEntityMachinePolluting implem } } + public static int getConsumption(int speed, int powerSaving) { + return (int) (consumption * Math.pow(speed + 1, 2)) / (powerSaving + 1); + } + protected PyroOvenRecipe lastValidRecipe; public PyroOvenRecipe getMatchingRecipe() { @@ -185,7 +199,10 @@ public class TileEntityMachinePyroOven extends TileEntityMachinePolluting implem } public boolean canProcess() { - if(power < consumption) return false; // not enough power + int speed = Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3); + int powerSaving = Math.min(UpgradeManager.getLevel(UpgradeType.POWER), 3); + if(power < this.getConsumption(speed, powerSaving)) return false; // not enough power + PyroOvenRecipe recipe = this.getMatchingRecipe(); if(recipe == null) return false; // no matching recipe if(recipe.inputFluid != null && tanks[0].getFill() < recipe.inputFluid.fill) return false; // not enough input fluid @@ -325,4 +342,28 @@ public class TileEntityMachinePyroOven extends TileEntityMachinePolluting implem @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerPyroOven(player.inventory, this); } @Override public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPyroOven(player.inventory, this); } + + @Override + public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { + return type == UpgradeType.SPEED || type == UpgradeType.POWER; + } + + @Override + public void provideInfo(UpgradeType type, int level, List info, boolean extendedInfo) { + info.add(IUpgradeInfoProvider.getStandardLabel(ModBlocks.machine_pyrooven)); + if(type == UpgradeType.SPEED) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_DELAY, "-" + (level * 25) + "%")); + info.add(EnumChatFormatting.RED + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "+" + (Math.pow(level + 1, 2) * 100 - 100) + "%")); + } + if(type == UpgradeType.POWER) { + info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (100 - 100 / (level + 1)) + "%")); + } + } + + @Override + public int getMaxLevel(UpgradeType type) { + if(type == UpgradeType.SPEED) return 3; + if(type == UpgradeType.POWER) return 3; + return 0; + } } diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_pyrooven.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_pyrooven.png index 33d9f4466a90019a9a7c643d9808679414529d4b..bcefb15fb96eda0d6dee4edd297bc99e085258ad 100644 GIT binary patch literal 2879 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 diff --git a/src/main/resources/assets/hbm/textures/items/armor_battery.png b/src/main/resources/assets/hbm/textures/items/armor_battery.png index 86a0cb9a15a2cf609a9ddea0cc58b4a8ae88c072..7ed6e9b1d084295f7d10e16603ed9d409c609bcb 100644 GIT binary patch delta 345 zcmV-f0jBk!+ zEers_(c&uSnPK7!7(wAZ;E&muh!#+MNL4(3?r4y!Ai;fcj7)vn2z8 z(vpDojN@i$$x=~^Mkdvm446kDfG@A2A5p8UwCEE7&QnQ*t?XQ1*Z=_3?h8U+h$l^; ro)G>n*)UC$4wROpa&e(Z5jN1VrK00000NkvXXu0mjf4Dp}a delta 360 zcmV-u0hj)S1Cs-gG=EA-L_t(IjbmV-CiwGi>HkMp`~Q=ohY7~$-?;1l<6FxZ-ap;Q z(7$mP(S|U>H0#%wF(}TEX882!E5qBe4-6L@yHFGs`nxgydAIccv*)iE zMg@-^Lr2CXI9qVhHWUN;H}3lX^l#ktztG=}5r6Ii_uzv69&uhM8kTo2 zL3Jx%Jj1H`K8BAUzcQpwsAY&u|I1M5@5Tss!Ks}m;A({=gc%}BW6%s-$Pm_41mS#I z$iTo5gX#rj@b1N1hEp%zVlnV9R3wJs9aJ8x0SpWb4DVjPgJ>2P!fK$9xDW#a15z}i zYZek0f?x?@Tw!+LHh>hs!oa}5@E&R-+=)mwze935P6JLIS;QzPUO-Y3Mlpbafq`M? z+6j!v67IpM1|qwVfdLW7D4OsAWCMl7g&3Akt0P)3UH|}3^?7?}lPsYC0000aL_t(Ijjd9#N&`UPj<}ow5m~Ku!u!!WGmL=VEkqr6&$(BD!qCZ`}3!jYMWvi+|a`iuu6S&XIEd4QK34 zCb&JUZJJJf0{iwnL{XGrX3NZ~Qb0sDNfN)H@s8p#u1?QT6eSKWP7p`;U}jY*$g-?T zCZZMra}WD!3;=kz=^>7|-T@I=t##+3hzMaAHhdz2G)-#-K12inptXiErlrs|{FOjN zssti}F{V>p&_Eek5dnZ!2dy=TXlZw#9zlu7T3^^FfH6jSu?C@kCAZ|xD=Z_-^W2aB Z4L@f6dZq`m$)^AS002ovPDHLkV1oTkl&1gy diff --git a/src/main/resources/assets/hbm/textures/items/armor_battery_mk3.png b/src/main/resources/assets/hbm/textures/items/armor_battery_mk3.png index 96cc82109263eb7af14002382e8e4cc14498beac..91c23c26524352692382b23cb375aeafd95aec95 100644 GIT binary patch delta 362 zcmV-w0hRuf1C;}iG=EG%8l zXlk%6#8#ol)>exR7oykJQaRNU+@Yx2}dCbS~$+hV%h=xrBGMa0dHF6pJN3H-B8bT*82eP*PO$Y47d* zgVCvVVE_Oo)&e}PzWR3VCS!DJo^U#HEdT^S)((52xmly&<@~}pM^94NiEXql5!>D5 z?jVB*C51mh!EyX#ODcw!mkhu$aiUwPn!OSSYH@#ppptDL%94tK@iD_!c3t`>_kJd5 zR@v161eK(sU1JK4YXIvFTLQ|i_7g0rsA#uU8qlx@e^mgWqP5`+Dv2f4uifGM3L~+5 zk+o${D_oao7s%RS1K9XWmQ(-?&K!!ifKI@mk_<&oyRPl1FB>dxdm2%K761SM07*qo IM6N<$f>N=oN&o-= delta 360 zcmV-u0hj)j1Cs-gG=EA-L_t(IjjfVBPXa*@hMy(g*=TlSLm_?@#=;*!XF?+tB*tH0 zVPaxsL4Cp2!q{2bKtW<6`U42m#)QH~DnC%p0&WW%AXy8%gHu2-zSWzZnP+Bq2mVvt zX3jj_pPFfEBEB)MW1b)KwCY8S>r4!p@rz5zB5UW10F;tHA%7y872RgeyuQ7&ym=%- z0D$$w2(^QH;N5a1)XBJxd93Bp`UB%SMntnB0J!A}v2==9x?k{eeG>x2_qHfFw}JN| z!33>pHAuFkB9=~t0GDLgJwECAoea>63xGx;VQeKwK9nUDbE_+%v$p3kyK&Z^;JezM z2EbO5j`nC(yY7NkvC{!_t6(J@~6403EGEhqjVfQvKQ;zOJyee7v$LbRzJ#@XWnD@p20000tB5g%kh+*4HND8TGehc z%s6`^=73Wd_XfsAJUhyjIL?J_ifC7IpCXw>9pF2fnt6MBt|i}o~}O`8$F7VWoY4H^_>_n{CBBK=9!S5A%tWzwa}9R9S3ukeYX8rUVdh zsn;G}#d+62jn&0#i&sUL0mCyc34wB}Lm!If^EU6eEGSYqgF9he0uV4Te7slpdKcTR R6F{Fac)I$ztaD0e0stfrZsY&} diff --git a/src/main/resources/assets/hbm/textures/items/rotor_steel.png b/src/main/resources/assets/hbm/textures/items/rotor_steel.png deleted file mode 100644 index 17350ef8d876b33f19f9c6170bf98704960846eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfobfKx^3Hx33()nKoi*JtG~l~67^ h_sreX^at9`;OXk;vd$@?2>_smL9ze< diff --git a/src/main/resources/assets/hbm/textures/items/upgrade_bedrock.png b/src/main/resources/assets/hbm/textures/items/upgrade_bedrock.png deleted file mode 100644 index fc6600e86fc498d263f4dc66043871767660d1e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304 zcmV-00nh%4P)a$FTq? zbBC_$2qA3F-(PQV>UsTm0ocyZ@68rd=9NPT%=1iDRTtva(|=|ae$LK0L}XD_iq&w= zng6zsQnGsxV|+M)*#m%K814qvb&dD_iZf+Af`2C{t?Bv;xe6s*ChVvR>s0Pkn5OC1 zVDJ5X6;eu@gZ1o`l6iLp5m}n1F}Km;cPbp&M1V7ulz-3%F4k-S0000*W9L7HrgP`?5E= Date: Tue, 17 Sep 2024 15:47:50 +0200 Subject: [PATCH 15/18] *pipe falling sound effect* --- changelog | 21 +- gradle.properties | 2 +- src/main/java/com/hbm/blocks/ModBlocks.java | 2 +- .../com/hbm/blocks/generic/BlockBobble.java | 3 +- .../hbm/blocks/generic/BlockSnowglobe.java | 3 +- .../com/hbm/blocks/generic/DecoBlock.java | 191 ++++--- .../hbm/blocks/machine/BlockArmorTable.java | 3 +- .../java/com/hbm/blocks/machine/NTMAnvil.java | 3 +- .../java/com/hbm/blocks/machine/RadioRec.java | 3 +- .../hbm/blocks/network/RadioTorchCounter.java | 3 +- .../hbm/blocks/network/RadioTorchLogic.java | 3 +- .../hbm/blocks/network/RadioTorchRWBase.java | 3 +- .../hbm/entity/cart/EntityMinecartCrate.java | 3 +- .../entity/cart/EntityMinecartDestroyer.java | 3 +- .../com/hbm/entity/train/TrainCargoTram.java | 3 +- .../entity/train/TrainCargoTramTrailer.java | 3 +- .../hbm/handler/nei/NEIUniversalHandler.java | 2 +- .../hbm/inventory/gui/GuiInfoContainer.java | 9 +- .../hbm/items/machine/ItemFluidIDMulti.java | 3 +- .../hbm/items/machine/ItemTemplateFolder.java | 3 +- .../java/com/hbm/items/special/ItemBook.java | 3 +- .../com/hbm/items/special/ItemBookLore.java | 3 +- .../hbm/items/special/ItemHolotapeImage.java | 3 +- .../com/hbm/items/tool/ItemBookLemegeton.java | 3 +- .../java/com/hbm/items/tool/ItemCatalog.java | 3 +- .../hbm/items/tool/ItemDesingatorManual.java | 3 +- .../com/hbm/items/tool/ItemGuideBook.java | 3 +- .../java/com/hbm/items/tool/ItemLeadBox.java | 3 +- .../com/hbm/items/tool/ItemPlasticBag.java | 3 +- .../com/hbm/items/tool/ItemSatInterface.java | 3 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- src/main/java/com/hbm/main/ClientProxy.java | 4 +- .../java/com/hbm/main/CraftingManager.java | 1 - .../com/hbm/main/ModEventHandlerClient.java | 12 +- .../com/hbm/render/block/RenderBoxDuct.java | 3 + .../hbm/render/block/RenderSteelCorner.java | 94 ++++ .../com/hbm/render/block/RenderSteelWall.java | 61 ++ .../item/block/ItemRenderDecoBlock.java | 44 -- .../item/block/ItemRenderSteelPoles.java | 71 --- .../item/block/ItemRenderTapeRecorder.java | 73 --- .../com/hbm/render/model/ModelSteelBeam.java | 62 --- .../hbm/render/model/ModelSteelCorner.java | 89 --- .../hbm/render/model/ModelSteelScaffold.java | 161 ------ .../com/hbm/render/model/ModelSteelWall.java | 71 --- .../render/tileentity/RenderDecoBlock.java | 519 +++++++----------- .../com/hbm/render/util/RenderBlocksNT.java | 239 ++++++++ .../hbm/render/util/RenderBlocksWrapper.java | 150 +++++ .../tileentity/IControlReceiverFilter.java | 5 +- .../java/com/hbm/tileentity/IGUIProvider.java | 6 +- .../tileentity/bomb/TileEntityBombMulti.java | 3 +- .../bomb/TileEntityCompactLauncher.java | 3 +- .../bomb/TileEntityLaunchPadBase.java | 3 +- .../bomb/TileEntityLaunchPadRusted.java | 3 +- .../bomb/TileEntityLaunchTable.java | 3 +- .../bomb/TileEntityNukeBalefire.java | 3 +- .../tileentity/bomb/TileEntityNukeBoy.java | 3 +- .../tileentity/bomb/TileEntityNukeCustom.java | 3 +- .../tileentity/bomb/TileEntityNukeFleija.java | 3 +- .../tileentity/bomb/TileEntityNukeGadget.java | 3 +- .../tileentity/bomb/TileEntityNukeMan.java | 3 +- .../tileentity/bomb/TileEntityNukeMike.java | 3 +- .../hbm/tileentity/bomb/TileEntityNukeN2.java | 3 +- .../bomb/TileEntityNukePrototype.java | 3 +- .../bomb/TileEntityNukeSolinium.java | 3 +- .../tileentity/bomb/TileEntityNukeTsar.java | 3 +- .../tileentity/machine/TileEntityAshpit.java | 3 +- .../tileentity/machine/TileEntityCore.java | 3 +- .../machine/TileEntityCoreEmitter.java | 3 +- .../machine/TileEntityCoreInjector.java | 3 +- .../machine/TileEntityCoreReceiver.java | 3 +- .../machine/TileEntityCoreStabilizer.java | 3 +- .../machine/TileEntityCrucible.java | 3 +- .../machine/TileEntityCustomMachine.java | 3 +- .../machine/TileEntityDiFurnace.java | 3 +- .../machine/TileEntityDiFurnaceRTG.java | 3 +- .../machine/TileEntityElectrolyser.java | 3 +- .../hbm/tileentity/machine/TileEntityFEL.java | 3 +- .../machine/TileEntityForceField.java | 3 +- .../machine/TileEntityFurnaceBrick.java | 3 +- .../machine/TileEntityFurnaceCombination.java | 3 +- .../machine/TileEntityFurnaceIron.java | 3 +- .../machine/TileEntityFurnaceSteel.java | 3 +- .../tileentity/machine/TileEntityHadron.java | 3 +- .../machine/TileEntityHeaterFirebox.java | 3 +- .../machine/TileEntityHeaterHeatex.java | 3 +- .../machine/TileEntityHeaterOilburner.java | 3 +- .../machine/TileEntityHeaterOven.java | 3 +- .../hbm/tileentity/machine/TileEntityICF.java | 3 +- .../machine/TileEntityICFPress.java | 3 +- .../tileentity/machine/TileEntityITER.java | 3 +- .../machine/TileEntityLockableBase.java | 81 ++- .../machine/TileEntityMachineAmgen.java | 8 +- .../machine/TileEntityMachineArcFurnace.java | 3 +- .../TileEntityMachineArcFurnaceLarge.java | 3 +- .../machine/TileEntityMachineArcWelder.java | 3 +- .../machine/TileEntityMachineAssembler.java | 3 +- .../machine/TileEntityMachineAssemfac.java | 3 +- .../machine/TileEntityMachineAutocrafter.java | 9 +- .../machine/TileEntityMachineCentrifuge.java | 3 +- .../machine/TileEntityMachineChemfac.java | 3 +- .../machine/TileEntityMachineChemplant.java | 3 +- .../TileEntityMachineCombustionEngine.java | 3 +- .../machine/TileEntityMachineCompressor.java | 3 +- .../TileEntityMachineCrystallizer.java | 3 +- .../machine/TileEntityMachineCyclotron.java | 3 +- .../machine/TileEntityMachineDiesel.java | 3 +- .../machine/TileEntityMachineEPress.java | 3 +- .../TileEntityMachineElectricFurnace.java | 3 +- .../machine/TileEntityMachineExcavator.java | 3 +- .../TileEntityMachineExposureChamber.java | 3 +- .../machine/TileEntityMachineFunnel.java | 3 +- .../machine/TileEntityMachineGasCent.java | 3 +- .../machine/TileEntityMachineIGenerator.java | 3 +- .../machine/TileEntityMachineKeyForge.java | 3 +- .../TileEntityMachineLargeTurbine.java | 3 +- .../machine/TileEntityMachineMiningLaser.java | 3 +- .../TileEntityMachineMissileAssembly.java | 3 +- .../machine/TileEntityMachineMixer.java | 3 +- .../machine/TileEntityMachineOreSlopper.java | 3 +- .../TileEntityMachinePlasmaHeater.java | 3 +- .../machine/TileEntityMachinePress.java | 3 +- .../machine/TileEntityMachineRTG.java | 3 +- .../machine/TileEntityMachineRadGen.java | 3 +- .../machine/TileEntityMachineRadarNT.java | 3 +- .../machine/TileEntityMachineRadiolysis.java | 3 +- .../TileEntityMachineReactorBreeding.java | 3 +- .../machine/TileEntityMachineSatDock.java | 3 +- .../machine/TileEntityMachineSatLinker.java | 3 +- ...eEntityMachineSchrabidiumTransmutator.java | 3 +- .../machine/TileEntityMachineShredder.java | 3 +- .../machine/TileEntityMachineSiren.java | 3 +- .../TileEntityMachineSolderingStation.java | 3 +- .../TileEntityMachineStrandCaster.java | 3 +- .../machine/TileEntityMachineTurbine.java | 3 +- .../machine/TileEntityMachineTurbineGas.java | 3 +- .../machine/TileEntityMachineTurbofan.java | 3 +- .../machine/TileEntityMachineWoodBurner.java | 3 +- .../machine/TileEntityMicrowave.java | 3 +- .../machine/TileEntityNukeFurnace.java | 3 +- .../machine/TileEntityPWRController.java | 3 +- .../machine/TileEntityRadiobox.java | 3 +- .../machine/TileEntityReactorControl.java | 3 +- .../machine/TileEntityReactorResearch.java | 3 +- .../machine/TileEntityReactorZirnox.java | 3 +- .../machine/TileEntityRtgFurnace.java | 3 +- .../tileentity/machine/TileEntitySILEX.java | 3 +- .../machine/TileEntitySoyuzLauncher.java | 3 +- .../machine/TileEntityStorageDrum.java | 3 +- .../machine/TileEntityWasteDrum.java | 3 +- .../tileentity/machine/TileEntityWatz.java | 3 +- .../TileEntityMachineCatalyticReformer.java | 3 +- .../machine/oil/TileEntityMachineCoker.java | 3 +- .../oil/TileEntityMachineFrackingTower.java | 3 +- .../oil/TileEntityMachineGasFlare.java | 3 +- .../oil/TileEntityMachineHydrotreater.java | 3 +- .../oil/TileEntityMachineLiquefactor.java | 3 +- .../machine/oil/TileEntityMachineOilWell.java | 3 +- .../oil/TileEntityMachinePumpjack.java | 3 +- .../oil/TileEntityMachinePyroOven.java | 13 +- .../oil/TileEntityMachineRefinery.java | 3 +- .../oil/TileEntityMachineSolidifier.java | 3 +- .../oil/TileEntityMachineVacuumDistill.java | 3 +- .../machine/rbmk/TileEntityRBMKBoiler.java | 3 +- .../machine/rbmk/TileEntityRBMKConsole.java | 3 +- .../rbmk/TileEntityRBMKControlAuto.java | 3 +- .../rbmk/TileEntityRBMKControlManual.java | 3 +- .../machine/rbmk/TileEntityRBMKHeater.java | 3 +- .../machine/rbmk/TileEntityRBMKOutgasser.java | 3 +- .../machine/rbmk/TileEntityRBMKRod.java | 3 +- .../machine/rbmk/TileEntityRBMKStorage.java | 3 +- .../machine/storage/TileEntityBarrel.java | 3 +- .../machine/storage/TileEntityCrateDesh.java | 3 +- .../machine/storage/TileEntityCrateIron.java | 3 +- .../machine/storage/TileEntityCrateSteel.java | 3 +- .../storage/TileEntityCrateTemplate.java | 3 +- .../storage/TileEntityCrateTungsten.java | 3 +- .../storage/TileEntityFileCabinet.java | 3 +- .../storage/TileEntityMachineBattery.java | 3 +- .../storage/TileEntityMachineFluidTank.java | 3 +- .../storage/TileEntityMassStorage.java | 3 +- .../machine/storage/TileEntitySafe.java | 3 +- .../storage/TileEntitySoyuzCapsule.java | 3 +- .../network/TileEntityCraneBoxer.java | 3 +- .../network/TileEntityCraneExtractor.java | 3 +- .../network/TileEntityCraneGrabber.java | 3 +- .../network/TileEntityCraneInserter.java | 3 +- .../network/TileEntityCraneRouter.java | 3 +- .../network/TileEntityCraneUnboxer.java | 3 +- .../network/TileEntityDroneCrate.java | 3 +- .../network/TileEntityDroneDock.java | 3 +- .../network/TileEntityDroneProvider.java | 3 +- .../network/TileEntityDroneRequester.java | 3 +- .../network/TileEntityRadioTelex.java | 3 +- .../turret/TileEntityTurretArty.java | 3 +- .../turret/TileEntityTurretBrandon.java | 3 +- .../turret/TileEntityTurretChekhov.java | 3 +- .../turret/TileEntityTurretFriendly.java | 3 +- .../turret/TileEntityTurretFritz.java | 3 +- .../turret/TileEntityTurretHIMARS.java | 3 +- .../turret/TileEntityTurretHoward.java | 3 +- .../turret/TileEntityTurretHowardDamaged.java | 3 +- .../turret/TileEntityTurretJeremy.java | 3 +- .../turret/TileEntityTurretMaxwell.java | 3 +- .../turret/TileEntityTurretRichard.java | 3 +- .../turret/TileEntityTurretSentry.java | 3 +- .../turret/TileEntityTurretTauon.java | 3 +- .../blocks/playground/basalt_test.png | Bin 0 -> 467 bytes .../blocks/playground/basalt_test_2.png | Bin 0 -> 255 bytes .../blocks/playground/basalt_test_3.png | Bin 0 -> 311 bytes .../blocks/playground/basalt_test_4.png | Bin 0 -> 336 bytes .../blocks/playground/basalt_test_5.png | Bin 0 -> 295 bytes .../blocks/playground/basalt_test_6.png | Bin 0 -> 286 bytes .../hbm/textures/blocks/steel_corner.png | Bin 304 -> 0 bytes .../assets/hbm/textures/blocks/steel_wall.png | Bin 282 -> 530 bytes .../hbm/textures/blocks/steel_wall_alt.png | Bin 0 -> 515 bytes 215 files changed, 1089 insertions(+), 1447 deletions(-) create mode 100644 src/main/java/com/hbm/render/block/RenderSteelCorner.java create mode 100644 src/main/java/com/hbm/render/block/RenderSteelWall.java delete mode 100644 src/main/java/com/hbm/render/item/block/ItemRenderSteelPoles.java delete mode 100644 src/main/java/com/hbm/render/item/block/ItemRenderTapeRecorder.java delete mode 100644 src/main/java/com/hbm/render/model/ModelSteelBeam.java delete mode 100644 src/main/java/com/hbm/render/model/ModelSteelCorner.java delete mode 100644 src/main/java/com/hbm/render/model/ModelSteelScaffold.java delete mode 100644 src/main/java/com/hbm/render/model/ModelSteelWall.java create mode 100644 src/main/java/com/hbm/render/util/RenderBlocksNT.java create mode 100644 src/main/java/com/hbm/render/util/RenderBlocksWrapper.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/playground/basalt_test.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_2.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_3.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_4.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_5.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_6.png delete mode 100644 src/main/resources/assets/hbm/textures/blocks/steel_corner.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/steel_wall_alt.png diff --git a/changelog b/changelog index 12e59695f..954da9f28 100644 --- a/changelog +++ b/changelog @@ -1,11 +1,16 @@ ## Changed -* Pyrolysis recipes have been added - * Bedrock ores can be roasted at much higher speeds - * Pyrolysis ovens can now turn 4,000mB of coker gas into 500mB refgas - * Hydrogen + coal can be turned into heavy oil, heavy oil + coal turns into coalgas directly -* The CCGT startup and shutdown sounds are now affected by mufflers -* Armor battery packs now have recipes +* The ambient radiation generator's functionality and recipe have been disabled as it is being deprecated +* The pyrolysis oven is now compatible with overdrive upgrades +* Steel walls and corners no longer use TESRs for rendering, making them more performant at large scale and fixing any oddities regarding their rendering +* Steel walls and corners can now be rotated using the screwdriver (right click for clockwise, shift click for counter-clockwise) +* Steel walls and corners now use new textures as well as slightly cleaner models +* Steel corner bounding boxes now closely match their model ## Fixed -* Crash caused by new system gun init on servers -* Fixed chemfac output slots not being marked as outputs, not granting achievements and allowing items to be inserted \ No newline at end of file +* Fixed crash caused by the pyrolysis oven on servers + * Due this type of issue happening constantly, the GUI provider system no longer uses any client-only code +* Fixed small black bar rendering under the arrow box of NEI universal handlers when using the NH NEI fork +* Fixed desh screwdrivers not being usable for picking locks +* Possibly fixed an issue caused by MouseTweaks (in combination with other mods) duplicating click input (I can't replicate the issue so I can at best guess) +* Fixed pyrolysis ovens not being able to operate due to the output buffer being full, despite the buffer being a different type +* Fixed a vanilla bug in the standard block renderer causing boxduct bends to have incorrect UV on the -Z and +X sides \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 768124b1e..4509b36fe 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=5090 +mod_build_number=5091 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 70e4f16e6..e3a4b390e 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1574,7 +1574,7 @@ public class ModBlocks { pole_top = new DecoPoleTop(Material.iron).setBlockName("pole_top").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":deco_pole_top"); pole_satellite_receiver = new DecoPoleSatelliteReceiver(Material.iron).setBlockName("pole_satellite_receiver").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":deco_satellite_receiver"); steel_wall = new DecoBlock(Material.iron).setBlockName("steel_wall").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":steel_wall"); - steel_corner = new DecoBlock(Material.iron).setBlockName("steel_corner").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":steel_corner"); + steel_corner = new DecoBlock(Material.iron).setBlockName("steel_corner").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":steel_wall"); steel_roof = new DecoBlock(Material.iron).setBlockName("steel_roof").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":steel_roof"); steel_beam = new DecoBlock(Material.iron).setBlockName("steel_beam").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":steel_beam"); steel_scaffold = new BlockScaffold().setBlockName("steel_scaffold").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":deco_steel_orig"); diff --git a/src/main/java/com/hbm/blocks/generic/BlockBobble.java b/src/main/java/com/hbm/blocks/generic/BlockBobble.java index 1eae64640..d88c4ff23 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockBobble.java +++ b/src/main/java/com/hbm/blocks/generic/BlockBobble.java @@ -9,7 +9,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; @@ -227,7 +226,7 @@ public class BlockBobble extends BlockContainer implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenBobble((TileEntityBobble) world.getTileEntity(x, y, z)); } } diff --git a/src/main/java/com/hbm/blocks/generic/BlockSnowglobe.java b/src/main/java/com/hbm/blocks/generic/BlockSnowglobe.java index 68047bb3d..c6a4994f3 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockSnowglobe.java +++ b/src/main/java/com/hbm/blocks/generic/BlockSnowglobe.java @@ -12,7 +12,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; @@ -193,7 +192,7 @@ public class BlockSnowglobe extends BlockContainer implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenSnowglobe((TileEntitySnowglobe) world.getTileEntity(x, y, z)); } } diff --git a/src/main/java/com/hbm/blocks/generic/DecoBlock.java b/src/main/java/com/hbm/blocks/generic/DecoBlock.java index 6d946cc3f..c8c393c4e 100644 --- a/src/main/java/com/hbm/blocks/generic/DecoBlock.java +++ b/src/main/java/com/hbm/blocks/generic/DecoBlock.java @@ -1,14 +1,19 @@ package com.hbm.blocks.generic; +import java.util.ArrayList; +import java.util.List; import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.tileentity.deco.TileEntityDecoBlock; +import api.hbm.block.IToolable; import cpw.mods.fml.client.registry.RenderingRegistry; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -17,7 +22,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -public class DecoBlock extends BlockContainer { +public class DecoBlock extends BlockContainer implements IToolable { Random rand = new Random(); @@ -25,20 +30,44 @@ public class DecoBlock extends BlockContainer { super(p_i45386_1_); } + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + if(tool != ToolType.SCREWDRIVER) return false; + if(this != ModBlocks.steel_wall && this != ModBlocks.steel_corner) return false; + + int meta = world.getBlockMetadata(x, y, z); + + if(!player.isSneaking()) { + if(meta == 3) world.setBlockMetadataWithNotify(x, y, z, 4, 3); + else if(meta == 4) world.setBlockMetadataWithNotify(x, y, z, 2, 3); + else if(meta == 2) world.setBlockMetadataWithNotify(x, y, z, 5, 3); + else if(meta == 5) world.setBlockMetadataWithNotify(x, y, z, 3, 3); + } else { + if(meta == 3) world.setBlockMetadataWithNotify(x, y, z, 5, 3); + else if(meta == 4) world.setBlockMetadataWithNotify(x, y, z, 3, 3); + else if(meta == 2) world.setBlockMetadataWithNotify(x, y, z, 4, 3); + else if(meta == 5) world.setBlockMetadataWithNotify(x, y, z, 2, 3); + } + + return true; + } + @Override public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { - if(this == ModBlocks.steel_scaffold || this == ModBlocks.steel_beam) return null; + if(this == ModBlocks.steel_scaffold || this == ModBlocks.steel_beam || this == ModBlocks.steel_wall || this == ModBlocks.steel_corner) return null; return new TileEntityDecoBlock(); } public static int renderIDBeam = RenderingRegistry.getNextAvailableRenderId(); + public static int renderIDWall = RenderingRegistry.getNextAvailableRenderId(); + public static int renderIDCorner = RenderingRegistry.getNextAvailableRenderId(); @Override public int getRenderType(){ - if(this == ModBlocks.steel_beam) - return renderIDBeam; - else - return -1; + if(this == ModBlocks.steel_wall) return renderIDWall; + if(this == ModBlocks.steel_corner) return renderIDCorner; + if(this == ModBlocks.steel_beam) return renderIDBeam; + return -1; } @Override @@ -60,95 +89,23 @@ public class DecoBlock 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, 3, 2); - } - if(i == 1) { - world.setBlockMetadataWithNotify(x, y, z, 4, 2); - } - if(i == 2) { - world.setBlockMetadataWithNotify(x, y, z, 2, 2); - } - if(i == 3) { - world.setBlockMetadataWithNotify(x, y, z, 5, 2); - } + if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 3, 2); + if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 4, 2); + if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 2, 2); + if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 5, 2); } @Override - 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; - - if(this == ModBlocks.steel_wall) { - switch(te) { - case 4: - this.setBlockBounds(14 * f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - break; - case 2: - this.setBlockBounds(0.0F, 0.0F, 14 * f, 1.0F, 1.0F, 1.0F); - break; - case 5: - this.setBlockBounds(0.0F, 0.0F, 0.0F, 2 * f, 1.0F, 1.0F); - break; - case 3: - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 2 * f); - break; - } - } - - if(this == ModBlocks.steel_corner) { - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - } - - if(this == ModBlocks.steel_roof) { - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1 * f, 1.0F); - } - - if(this == ModBlocks.steel_beam) { - this.setBlockBounds(7 * f, 0.0F, 7 * f, 9 * f, 1.0F, 9 * f); - } - - if(this == ModBlocks.steel_scaffold) { - this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); - switch(te) { - case 4: - this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); - break; - case 2: - this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); - break; - case 5: - this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); - break; - case 3: - this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); - break; - } - } - - // this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - } - - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { - + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { int te = world.getBlockMetadata(x, y, z); float f = 0.0625F; if(this == ModBlocks.steel_wall) { switch(te) { - case 4: - this.setBlockBounds(14 * f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - break; - case 2: - this.setBlockBounds(0.0F, 0.0F, 14 * f, 1.0F, 1.0F, 1.0F); - break; - case 5: - this.setBlockBounds(0.0F, 0.0F, 0.0F, 2 * f, 1.0F, 1.0F); - break; - case 3: - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 2 * f); - break; + case 4: this.setBlockBounds(14 * f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); break; + case 2: this.setBlockBounds(0.0F, 0.0F, 14 * f, 1.0F, 1.0F, 1.0F); break; + case 5: this.setBlockBounds(0.0F, 0.0F, 0.0F, 2 * f, 1.0F, 1.0F); break; + case 3: this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 2 * f); break; } } @@ -167,21 +124,57 @@ public class DecoBlock extends BlockContainer { if(this == ModBlocks.steel_scaffold) { this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); switch(te) { - case 4: - this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); - break; - case 2: - this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); - break; - case 5: - this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); - break; - case 3: - this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); - break; + case 4: this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); break; + case 2: this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); break; + case 5: this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); break; + case 3: this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); break; } } + } + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { + this.setBlockBoundsBasedOnState(world, x, y, z); return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ); } + + @Override + public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB aabb, List list, Entity collider) { + + if(this == ModBlocks.steel_corner) { + int meta = world.getBlockMetadata(x, y, z); + List bbs = new ArrayList(); + + switch(meta) { + case 2: + bbs.add(AxisAlignedBB.getBoundingBox(x + 0.25D, y + 0D, z + 0.875D, x + 1D, y + 1D, z + 1D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0D, y + 0D, z + 0.75D, x + 0.25D, y + 1D, z + 1D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0D, y + 0D, z + 0D, x + 0.125D, y + 1D, z + 0.75D)); + break; + case 3: + bbs.add(AxisAlignedBB.getBoundingBox(x + 0D, y + 0D, z + 0D, x + 0.75D, y + 1D, z + 0.125D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0.75D, y + 0D, z + 0D, x + 1D, y + 1D, z + 0.25D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0.875D, y + 0D, z + 0.25D, x + 1D, y + 1D, z + 1D)); + break; + case 4: + bbs.add(AxisAlignedBB.getBoundingBox(x + 0.875D, y + 0D, z + 0D, x + 1D, y + 1D, z + 0.75D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0.75D, y + 0D, z + 0.75D, x + 1D, y + 1D, z + 1D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0D, y + 0D, z + 0.875D, x + 0.75D, y + 1D, z + 1D)); + break; + case 5: + bbs.add(AxisAlignedBB.getBoundingBox(x + 0D, y + 0D, z + 0.25D, x + 0.125D, y + 1D, z + 1D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0D, y + 0D, z + 0D, x + 0.25D, y + 1D, z + 0.25D)); + bbs.add(AxisAlignedBB.getBoundingBox(x + 0.25D, y + 0D, z + 0D, x + 1D, y + 1D, z + 0.125D)); + break; + } + + for(AxisAlignedBB bb : bbs) { + if(aabb.intersectsWith(bb)) { + list.add(bb); + } + } + } else { + super.addCollisionBoxesToList(world, x, y, z, aabb, list, collider); + } + } } diff --git a/src/main/java/com/hbm/blocks/machine/BlockArmorTable.java b/src/main/java/com/hbm/blocks/machine/BlockArmorTable.java index ef92cb244..62146fc24 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockArmorTable.java +++ b/src/main/java/com/hbm/blocks/machine/BlockArmorTable.java @@ -11,7 +11,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -65,7 +64,7 @@ public class BlockArmorTable extends Block implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIArmorTable(player.inventory); } diff --git a/src/main/java/com/hbm/blocks/machine/NTMAnvil.java b/src/main/java/com/hbm/blocks/machine/NTMAnvil.java index 16623e7b1..466c0a02f 100644 --- a/src/main/java/com/hbm/blocks/machine/NTMAnvil.java +++ b/src/main/java/com/hbm/blocks/machine/NTMAnvil.java @@ -22,7 +22,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.IIconRegister; @@ -192,7 +191,7 @@ public class NTMAnvil extends BlockFallingNT implements ITooltipProvider, IGUIPr @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIAnvil(player.inventory, ((NTMAnvil)world.getBlock(x, y, z)).tier); } diff --git a/src/main/java/com/hbm/blocks/machine/RadioRec.java b/src/main/java/com/hbm/blocks/machine/RadioRec.java index 53792b48b..d387358b6 100644 --- a/src/main/java/com/hbm/blocks/machine/RadioRec.java +++ b/src/main/java/com/hbm/blocks/machine/RadioRec.java @@ -10,7 +10,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -102,7 +101,7 @@ public class RadioRec extends BlockContainer implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntityRadioRec) diff --git a/src/main/java/com/hbm/blocks/network/RadioTorchCounter.java b/src/main/java/com/hbm/blocks/network/RadioTorchCounter.java index 086031285..76365ca81 100644 --- a/src/main/java/com/hbm/blocks/network/RadioTorchCounter.java +++ b/src/main/java/com/hbm/blocks/network/RadioTorchCounter.java @@ -15,7 +15,6 @@ import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -56,7 +55,7 @@ public class RadioTorchCounter extends RadioTorchBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICounterTorch(player.inventory, (TileEntityRadioTorchCounter) world.getTileEntity(x, y, z)); } diff --git a/src/main/java/com/hbm/blocks/network/RadioTorchLogic.java b/src/main/java/com/hbm/blocks/network/RadioTorchLogic.java index 13cc2d107..4d4e679a3 100644 --- a/src/main/java/com/hbm/blocks/network/RadioTorchLogic.java +++ b/src/main/java/com/hbm/blocks/network/RadioTorchLogic.java @@ -11,7 +11,6 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; @@ -74,7 +73,7 @@ public class RadioTorchLogic extends RadioTorchRWBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntityRadioTorchLogic) diff --git a/src/main/java/com/hbm/blocks/network/RadioTorchRWBase.java b/src/main/java/com/hbm/blocks/network/RadioTorchRWBase.java index 8199991a5..07e00c29b 100644 --- a/src/main/java/com/hbm/blocks/network/RadioTorchRWBase.java +++ b/src/main/java/com/hbm/blocks/network/RadioTorchRWBase.java @@ -10,7 +10,6 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.tileentity.TileEntity; @@ -51,7 +50,7 @@ public abstract class RadioTorchRWBase extends RadioTorchBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntityRadioTorchBase) diff --git a/src/main/java/com/hbm/entity/cart/EntityMinecartCrate.java b/src/main/java/com/hbm/entity/cart/EntityMinecartCrate.java index 3ce773740..241847f64 100644 --- a/src/main/java/com/hbm/entity/cart/EntityMinecartCrate.java +++ b/src/main/java/com/hbm/entity/cart/EntityMinecartCrate.java @@ -15,7 +15,6 @@ import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -111,7 +110,7 @@ public class EntityMinecartCrate extends EntityMinecartContainerBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrateSteel(player.inventory, (EntityMinecartCrate) player.worldObj.getEntityByID(x)); } } diff --git a/src/main/java/com/hbm/entity/cart/EntityMinecartDestroyer.java b/src/main/java/com/hbm/entity/cart/EntityMinecartDestroyer.java index 7d11fc8e4..d7a34e2ed 100644 --- a/src/main/java/com/hbm/entity/cart/EntityMinecartDestroyer.java +++ b/src/main/java/com/hbm/entity/cart/EntityMinecartDestroyer.java @@ -17,7 +17,6 @@ import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -147,7 +146,7 @@ public class EntityMinecartDestroyer extends EntityMinecartContainerBase impleme @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICartDestroyer(player.inventory, (EntityMinecartDestroyer) player.worldObj.getEntityByID(x)); } } diff --git a/src/main/java/com/hbm/entity/train/TrainCargoTram.java b/src/main/java/com/hbm/entity/train/TrainCargoTram.java index 99f2c5c05..572e3fb4d 100644 --- a/src/main/java/com/hbm/entity/train/TrainCargoTram.java +++ b/src/main/java/com/hbm/entity/train/TrainCargoTram.java @@ -11,7 +11,6 @@ import api.hbm.energymk2.IBatteryItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; @@ -97,7 +96,7 @@ public class TrainCargoTram extends EntityRailCarElectric implements IGUIProvide @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITrainCargoTram(player.inventory, this); } diff --git a/src/main/java/com/hbm/entity/train/TrainCargoTramTrailer.java b/src/main/java/com/hbm/entity/train/TrainCargoTramTrailer.java index afefb1d9a..85d9a805c 100644 --- a/src/main/java/com/hbm/entity/train/TrainCargoTramTrailer.java +++ b/src/main/java/com/hbm/entity/train/TrainCargoTramTrailer.java @@ -12,7 +12,6 @@ import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; @@ -88,7 +87,7 @@ public class TrainCargoTramTrailer extends EntityRailCarCargo implements IGUIPro @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITrainCargoTramTrailer(player.inventory, this); } diff --git a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java index 996e1dc27..de16bbea4 100644 --- a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java +++ b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java @@ -139,7 +139,7 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler implemen drawTexturedModalRect(pos[0] - 1, pos[1] - 1, 5, 87, 18, 18); } - drawTexturedModalRect(74, 14, 59, 87, 18, 38); + drawTexturedModalRect(74, 14, 59, 87, 18, 36); } public static int[][] getInputCoords(int count) { diff --git a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java index d58fa3c3c..c77fcd6b9 100644 --- a/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java +++ b/src/main/java/com/hbm/inventory/gui/GuiInfoContainer.java @@ -11,7 +11,6 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toserver.NBTControlPacket; import cpw.mods.fml.common.Optional; -import net.minecraft.item.Item; import net.minecraft.nbt.NBTTagCompound; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; @@ -302,10 +301,10 @@ public abstract class GuiInfoContainer extends GuiContainer implements INEIGuiHa if(inventorySlots instanceof ContainerBase) { NBTTagCompound tag = new NBTTagCompound(); tag.setInteger("slot", slot.slotNumber); - //Item IDs are usually dangerous, but this is only getting called from clientside, while ingame anyway - //if someone somehow gets an ID shift with this i will eat my shoe - 70k - tag.setInteger("id", Item.getIdFromItem(stack.getItem())); - tag.setInteger("meta", stack.getItemDamage()); + + NBTTagCompound item = new NBTTagCompound(); + stack.writeToNBT(item); + tag.setTag("stack", item); TileEntity te = (TileEntity) ((ContainerBase) inventorySlots).tile; PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(tag, te.xCoord, te.yCoord, te.zCoord)); diff --git a/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java b/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java index 0592359de..85af4ab67 100644 --- a/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java +++ b/src/main/java/com/hbm/items/machine/ItemFluidIDMulti.java @@ -15,7 +15,6 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -150,7 +149,7 @@ public class ItemFluidIDMulti extends Item implements IItemFluidIdentifier, IIte @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenFluid(player); } } diff --git a/src/main/java/com/hbm/items/machine/ItemTemplateFolder.java b/src/main/java/com/hbm/items/machine/ItemTemplateFolder.java index f25fd20df..a459e3fee 100644 --- a/src/main/java/com/hbm/items/machine/ItemTemplateFolder.java +++ b/src/main/java/com/hbm/items/machine/ItemTemplateFolder.java @@ -10,7 +10,6 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -44,7 +43,7 @@ public class ItemTemplateFolder extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenTemplateFolder(player); } } diff --git a/src/main/java/com/hbm/items/special/ItemBook.java b/src/main/java/com/hbm/items/special/ItemBook.java index 56995b012..1a409b52f 100644 --- a/src/main/java/com/hbm/items/special/ItemBook.java +++ b/src/main/java/com/hbm/items/special/ItemBook.java @@ -9,7 +9,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -40,7 +39,7 @@ public class ItemBook extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBook(player.inventory); } } diff --git a/src/main/java/com/hbm/items/special/ItemBookLore.java b/src/main/java/com/hbm/items/special/ItemBookLore.java index 866bd0866..7c4b63446 100644 --- a/src/main/java/com/hbm/items/special/ItemBookLore.java +++ b/src/main/java/com/hbm/items/special/ItemBookLore.java @@ -10,7 +10,6 @@ import com.hbm.tileentity.IGUIProvider; import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -115,7 +114,7 @@ public class ItemBookLore extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBookLore(player); } diff --git a/src/main/java/com/hbm/items/special/ItemHolotapeImage.java b/src/main/java/com/hbm/items/special/ItemHolotapeImage.java index 5c4cb8a27..a319a176e 100644 --- a/src/main/java/com/hbm/items/special/ItemHolotapeImage.java +++ b/src/main/java/com/hbm/items/special/ItemHolotapeImage.java @@ -9,7 +9,6 @@ import com.hbm.util.EnumUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -81,7 +80,7 @@ public class ItemHolotapeImage extends ItemHoloTape implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenHolotape(); } } diff --git a/src/main/java/com/hbm/items/tool/ItemBookLemegeton.java b/src/main/java/com/hbm/items/tool/ItemBookLemegeton.java index 90bcdd20c..b8bc68810 100644 --- a/src/main/java/com/hbm/items/tool/ItemBookLemegeton.java +++ b/src/main/java/com/hbm/items/tool/ItemBookLemegeton.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -29,7 +28,7 @@ public class ItemBookLemegeton extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUILemegeton(player.inventory); } } diff --git a/src/main/java/com/hbm/items/tool/ItemCatalog.java b/src/main/java/com/hbm/items/tool/ItemCatalog.java index db2eeb413..1f679a88a 100644 --- a/src/main/java/com/hbm/items/tool/ItemCatalog.java +++ b/src/main/java/com/hbm/items/tool/ItemCatalog.java @@ -10,7 +10,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -44,7 +43,7 @@ public class ItemCatalog extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { if(BobmazonOfferFactory.getOffers(player.getHeldItem()) != null) return new GUIScreenBobmazon(player, BobmazonOfferFactory.getOffers(player.getHeldItem())); diff --git a/src/main/java/com/hbm/items/tool/ItemDesingatorManual.java b/src/main/java/com/hbm/items/tool/ItemDesingatorManual.java index bfffd9b3b..3cb8b732d 100644 --- a/src/main/java/com/hbm/items/tool/ItemDesingatorManual.java +++ b/src/main/java/com/hbm/items/tool/ItemDesingatorManual.java @@ -9,7 +9,6 @@ import com.hbm.tileentity.IGUIProvider; import api.hbm.item.IDesignatorItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -56,7 +55,7 @@ public class ItemDesingatorManual extends Item implements IDesignatorItem, IGUIP @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenDesignator(player); } } diff --git a/src/main/java/com/hbm/items/tool/ItemGuideBook.java b/src/main/java/com/hbm/items/tool/ItemGuideBook.java index f9579af33..948638f0f 100644 --- a/src/main/java/com/hbm/items/tool/ItemGuideBook.java +++ b/src/main/java/com/hbm/items/tool/ItemGuideBook.java @@ -11,7 +11,6 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -324,7 +323,7 @@ public class ItemGuideBook extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIScreenGuide(player); } } diff --git a/src/main/java/com/hbm/items/tool/ItemLeadBox.java b/src/main/java/com/hbm/items/tool/ItemLeadBox.java index 0e4384955..bfa427cc7 100644 --- a/src/main/java/com/hbm/items/tool/ItemLeadBox.java +++ b/src/main/java/com/hbm/items/tool/ItemLeadBox.java @@ -8,7 +8,6 @@ import com.hbm.util.ItemStackUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -42,7 +41,7 @@ public class ItemLeadBox extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUILeadBox(player.inventory, new InventoryLeadBox(player, player.getHeldItem())); } diff --git a/src/main/java/com/hbm/items/tool/ItemPlasticBag.java b/src/main/java/com/hbm/items/tool/ItemPlasticBag.java index 1d575e314..6393832a5 100644 --- a/src/main/java/com/hbm/items/tool/ItemPlasticBag.java +++ b/src/main/java/com/hbm/items/tool/ItemPlasticBag.java @@ -8,7 +8,6 @@ import com.hbm.util.ItemStackUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -42,7 +41,7 @@ public class ItemPlasticBag extends Item implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPlasticBag(player.inventory, new InventoryPlasticBag(player, player.getHeldItem())); } diff --git a/src/main/java/com/hbm/items/tool/ItemSatInterface.java b/src/main/java/com/hbm/items/tool/ItemSatInterface.java index 512bfcc72..480993e35 100644 --- a/src/main/java/com/hbm/items/tool/ItemSatInterface.java +++ b/src/main/java/com/hbm/items/tool/ItemSatInterface.java @@ -13,7 +13,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -59,7 +58,7 @@ public class ItemSatInterface extends ItemSatChip implements IGUIProvider { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { if(this == ModItems.sat_interface) return new GUIScreenSatInterface(player); else if(this == ModItems.sat_coord) diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 8b3ee99cb..ea4d669b6 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 (5090)"; + public static final String VERSION = "1.0.27 BETA (5091)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 84dec322d..90ccd677a 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -616,8 +616,6 @@ public class ClientProxy extends ServerProxy { MinecraftForgeClient.registerItemRenderer(ModItems.multitool_joule, new ItemRenderMultitool()); MinecraftForgeClient.registerItemRenderer(ModItems.multitool_decon, new ItemRenderMultitool()); //blocks - MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.steel_wall), new ItemRenderDecoBlock()); - MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.steel_corner), new ItemRenderDecoBlock()); MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.steel_roof), new ItemRenderDecoBlock()); } @@ -836,6 +834,8 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerBlockHandler(new RenderScaffoldBlock()); RenderingRegistry.registerBlockHandler(new RenderTapeBlock()); RenderingRegistry.registerBlockHandler(new RenderSteelBeam()); + RenderingRegistry.registerBlockHandler(new RenderSteelWall()); + RenderingRegistry.registerBlockHandler(new RenderSteelCorner()); RenderingRegistry.registerBlockHandler(new RenderBarrel()); RenderingRegistry.registerBlockHandler(new RenderFence()); RenderingRegistry.registerBlockHandler(new RenderBarbedWire()); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index b279cb7a2..b4dc3b87f 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -678,7 +678,6 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.absorber_green, 1), new Object[] { "ICI", "CPC", "ICI", 'I', ANY_PLASTIC.ingot(), 'C', ModItems.powder_desh_mix, 'P', ModBlocks.absorber_red }); addRecipeAuto(new ItemStack(ModBlocks.absorber_pink, 1), new Object[] { "ICI", "CPC", "ICI", 'I', BIGMT.ingot(), 'C', ModItems.powder_nitan_mix, 'P', ModBlocks.absorber_green }); addRecipeAuto(new ItemStack(ModBlocks.decon, 1), new Object[] { "BGB", "SAS", "BSB", 'B', BE.ingot(), 'G', Blocks.iron_bars, 'S', STEEL.ingot(), 'A', ModBlocks.absorber }); - addRecipeAuto(new ItemStack(ModBlocks.machine_amgen, 1), new Object[] { "ITI", "TAT", "ITI", 'I', ALLOY.ingot(), 'T', ModItems.thermo_element, 'A', ModBlocks.absorber }); addRecipeAuto(new ItemStack(ModBlocks.machine_geo, 1), new Object[] { "ITI", "PCP", "ITI", 'I', DURA.ingot(), 'T', ModItems.thermo_element, 'P', CU.plateCast(), 'C', ModBlocks.red_wire_coated }); addRecipeAuto(new ItemStack(ModBlocks.machine_minirtg, 1), new Object[] { "LLL", "PPP", "TRT", 'L', PB.plate(), 'P', PU238.billet(), 'T', ModItems.thermo_element, 'R', ModItems.rtg_unit }); addRecipeAuto(new ItemStack(ModBlocks.machine_powerrtg, 1), new Object[] { "SRS", "PTP", "SRS", 'S', STAR.ingot(), 'R', ModItems.rtg_unit, 'P', PO210.billet(), 'T', TS.dust() }); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index bb0ca2cc9..e6c66ceb8 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -1058,7 +1058,7 @@ public class ModEventHandlerClient { } @SideOnly(Side.CLIENT) - @SubscribeEvent + @SubscribeEvent(priority = EventPriority.LOW) public void onMouseClicked(InputEvent.MouseInputEvent event) { Minecraft mc = Minecraft.getMinecraft(); @@ -1073,8 +1073,8 @@ public class ModEventHandlerClient { if(key.getKeyCode() == keyCode && KeyBinding.hash.lookup(key.getKeyCode()) != key) { key.pressed = state; - if(state) { - key.pressTime++; + if(state && key.pressTime == 0) { + key.pressTime = 1; } } } @@ -1101,7 +1101,7 @@ public class ModEventHandlerClient { } @SideOnly(Side.CLIENT) - @SubscribeEvent + @SubscribeEvent(priority = EventPriority.LOW) public void onKeyTyped(InputEvent.KeyInputEvent event) { Minecraft mc = Minecraft.getMinecraft(); @@ -1116,8 +1116,8 @@ public class ModEventHandlerClient { if(keyCode != 0 && key.getKeyCode() == keyCode && KeyBinding.hash.lookup(key.getKeyCode()) != key) { key.pressed = state; - if(state) { - key.pressTime++; + if(state && key.pressTime == 0) { + key.pressTime = 1; } } } diff --git a/src/main/java/com/hbm/render/block/RenderBoxDuct.java b/src/main/java/com/hbm/render/block/RenderBoxDuct.java index c8c8f8915..ccb2ab6dc 100644 --- a/src/main/java/com/hbm/render/block/RenderBoxDuct.java +++ b/src/main/java/com/hbm/render/block/RenderBoxDuct.java @@ -6,6 +6,7 @@ import com.hbm.blocks.network.FluidDuctBox; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.Library; +import com.hbm.render.util.RenderBlocksNT; import com.hbm.tileentity.network.TileEntityPipeBaseNT; import com.hbm.util.ColorUtil; @@ -60,6 +61,8 @@ public class RenderBoxDuct implements ISimpleBlockRenderingHandler { public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { FluidType type = Fluids.NONE; + renderer = RenderBlocksNT.INSTANCE.setWorld(world); + TileEntity te = world.getTileEntity(x, y, z); Tessellator tessellator = Tessellator.instance; tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); diff --git a/src/main/java/com/hbm/render/block/RenderSteelCorner.java b/src/main/java/com/hbm/render/block/RenderSteelCorner.java new file mode 100644 index 000000000..9867847cb --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderSteelCorner.java @@ -0,0 +1,94 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.generic.DecoBlock; +import com.hbm.render.util.RenderBlocksNT; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.world.IBlockAccess; + +public class RenderSteelCorner implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + + tessellator.startDrawingQuads(); + + + renderer.setRenderBounds(0D, 0D, 0.875D, 0.75D, 1D, 1D); + tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, 1F); renderer.renderFaceZPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); + + + renderer.setRenderBounds(0.75D, 0D, 0.75D, 1D, 1D, 1D); + tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(1F, 0F, 0F); renderer.renderFaceXPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, 1F); renderer.renderFaceZPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); + + renderer.setRenderBounds(0.875D, 0D, 0D, 1D, 1D, 0.75D); + tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(1F, 0F, 0F); renderer.renderFaceXPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); + + tessellator.draw(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + Tessellator tessellator = Tessellator.instance; + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + int meta = world.getBlockMetadata(x, y, z); + + renderer = RenderBlocksNT.INSTANCE.setWorld(world); + + switch(meta) { + case 2: + renderer.setRenderBounds(0.25D, 0D, 0.875D, 1D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0D, 0D, 0.75D, 0.25D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0D, 0D, 0D, 0.125D, 1D, 0.75D); renderer.renderStandardBlock(block, x, y, z); + break; + case 3: + renderer.setRenderBounds(0D, 0D, 0D, 0.75D, 1D, 0.125D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.75D, 0D, 0D, 1D, 1D, 0.25D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.875D, 0D, 0.25D, 1D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); + break; + case 4: + renderer.setRenderBounds(0.875D, 0D, 0D, 1D, 1D, 0.75D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.75D, 0D, 0.75D, 1D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0D, 0D, 0.875D, 0.75D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); + break; + case 5: + renderer.setRenderBounds(0D, 0D, 0.25D, 0.125D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0D, 0D, 0D, 0.25D, 1D, 0.25D); renderer.renderStandardBlock(block, x, y, z); + renderer.setRenderBounds(0.25D, 0D, 0D, 1D, 1D, 0.125D); renderer.renderStandardBlock(block, x, y, z); + break; + } + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return DecoBlock.renderIDCorner; + } +} diff --git a/src/main/java/com/hbm/render/block/RenderSteelWall.java b/src/main/java/com/hbm/render/block/RenderSteelWall.java new file mode 100644 index 000000000..a9744ab5b --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderSteelWall.java @@ -0,0 +1,61 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.generic.DecoBlock; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.world.IBlockAccess; + +public class RenderSteelWall implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + GL11.glTranslatef(-0.5F, -0.5F, -0.9375F); + + renderer.setRenderBounds(0D, 0D, 0.875D, 1D, 1D, 1D); + + tessellator.startDrawingQuads(); + tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(1F, 0F, 0F); renderer.renderFaceXPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, 1F); renderer.renderFaceZPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.draw(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + Tessellator tessellator = Tessellator.instance; + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + int meta = world.getBlockMetadata(x, y, z); + + switch(meta) { + case 2: renderer.setRenderBounds(0D, 0D, 0.875D, 1D, 1D, 1D); break; + case 3: renderer.setRenderBounds(0D, 0D, 0D, 1D, 1D, 0.125D); break; + case 4: renderer.setRenderBounds(0.875D, 0D, 0D, 1D, 1D, 1D); break; + case 5: renderer.setRenderBounds(0D, 0D, 0D, 0.125D, 1D, 1D); break; + } + + renderer.renderStandardBlock(block, x, y, z); + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return DecoBlock.renderIDWall; + } + +} diff --git a/src/main/java/com/hbm/render/item/block/ItemRenderDecoBlock.java b/src/main/java/com/hbm/render/item/block/ItemRenderDecoBlock.java index 1e48e83ae..b8d09b204 100644 --- a/src/main/java/com/hbm/render/item/block/ItemRenderDecoBlock.java +++ b/src/main/java/com/hbm/render/item/block/ItemRenderDecoBlock.java @@ -4,11 +4,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.blocks.ModBlocks; import com.hbm.lib.RefStrings; -import com.hbm.render.model.ModelSteelBeam; -import com.hbm.render.model.ModelSteelCorner; import com.hbm.render.model.ModelSteelRoof; -import com.hbm.render.model.ModelSteelScaffold; -import com.hbm.render.model.ModelSteelWall; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; @@ -19,18 +15,10 @@ import net.minecraftforge.client.IItemRenderer; public class ItemRenderDecoBlock implements IItemRenderer { - protected ModelSteelWall wall; - protected ModelSteelCorner corner; protected ModelSteelRoof roof; - protected ModelSteelBeam beam; - protected ModelSteelScaffold scaffold; public ItemRenderDecoBlock() { - wall = new ModelSteelWall(); - corner = new ModelSteelCorner(); roof = new ModelSteelRoof(); - beam = new ModelSteelBeam(); - scaffold = new ModelSteelScaffold(); } @Override @@ -51,16 +39,8 @@ public class ItemRenderDecoBlock implements IItemRenderer { @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_wall)) - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/SteelWall.png")); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_corner)) - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/SteelCorner.png")); if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_roof)) Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/SteelRoof.png")); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_beam)) - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/SteelBeam.png")); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_scaffold)) - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/SteelScaffold.png")); switch(type) { case ENTITY: @@ -68,32 +48,16 @@ public class ItemRenderDecoBlock implements IItemRenderer { GL11.glScalef(0.5F, 0.5F, 0.5F); GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); GL11.glTranslatef(0.0F, -1.0F, 0.0F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_wall)) - wall.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_corner)) - corner.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_roof)) roof.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_beam)) - beam.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_scaffold)) - scaffold.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); GL11.glPopMatrix(); break; case EQUIPPED: GL11.glPushMatrix(); GL11.glScalef(0.5F, 0.5F, 0.5F); GL11.glTranslatef(0.8F, -0.3F, 0.2F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_wall)) - wall.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_corner)) - corner.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_roof)) roof.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_beam)) - beam.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_scaffold)) - scaffold.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); GL11.glPopMatrix(); break; case EQUIPPED_FIRST_PERSON: @@ -101,16 +65,8 @@ public class ItemRenderDecoBlock implements IItemRenderer { GL11.glRotatef(-135.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(-0.6F, -0.6F, -0.1F); GL11.glScalef(0.5F, 0.5F, 0.5F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_wall)) - wall.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_corner)) - corner.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_roof)) roof.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_beam)) - beam.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - if(item.getItem() == Item.getItemFromBlock(ModBlocks.steel_scaffold)) - scaffold.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); GL11.glPopMatrix(); break; default: break; diff --git a/src/main/java/com/hbm/render/item/block/ItemRenderSteelPoles.java b/src/main/java/com/hbm/render/item/block/ItemRenderSteelPoles.java deleted file mode 100644 index 5af78716a..000000000 --- a/src/main/java/com/hbm/render/item/block/ItemRenderSteelPoles.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.hbm.render.item.block; - -import org.lwjgl.opengl.GL11; - -import com.hbm.lib.RefStrings; -import com.hbm.render.model.ModelPoles; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; - -public class ItemRenderSteelPoles implements IItemRenderer { - - protected ModelPoles swordModel; - - public ItemRenderSteelPoles() { - swordModel = new ModelPoles(); - } - - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) { - switch(type) { - case EQUIPPED: - case EQUIPPED_FIRST_PERSON: - case ENTITY: - return true; - default: return false; - } - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - return false; - } - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) { - switch(type) { - case ENTITY: - GL11.glPushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/Poles.png")); - GL11.glScalef(0.5F, 0.5F, 0.5F); - GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); - GL11.glTranslatef(0.0F, -1.0F, 0.0F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - break; - case EQUIPPED: - GL11.glPushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/Poles.png")); - GL11.glScalef(0.5F, 0.5F, 0.5F); - GL11.glTranslatef(0.8F, -0.3F, 0.2F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - break; - case EQUIPPED_FIRST_PERSON: - GL11.glPushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/Poles.png")); - GL11.glRotatef(-135.0F, 0.0F, 0.0F, 1.0F); - GL11.glTranslatef(-0.6F, -0.6F, -0.1F); - GL11.glScalef(0.5F, 0.5F, 0.5F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - break; - default: break; - } - } - -} diff --git a/src/main/java/com/hbm/render/item/block/ItemRenderTapeRecorder.java b/src/main/java/com/hbm/render/item/block/ItemRenderTapeRecorder.java deleted file mode 100644 index fc49686f3..000000000 --- a/src/main/java/com/hbm/render/item/block/ItemRenderTapeRecorder.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.hbm.render.item.block; - -import org.lwjgl.opengl.GL11; - -import com.hbm.lib.RefStrings; -import com.hbm.render.model.ModelTapeRecorder; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.Entity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; - -public class ItemRenderTapeRecorder implements IItemRenderer { - - protected ModelTapeRecorder swordModel; - - public ItemRenderTapeRecorder() { - swordModel = new ModelTapeRecorder(); - } - - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) { - switch(type) { - case EQUIPPED: - case EQUIPPED_FIRST_PERSON: - case ENTITY: - return true; - default: return false; - } - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - return false; - } - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) { - switch(type) { - case ENTITY: - GL11.glPushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelTapeRecorder.png")); - GL11.glScalef(0.5F, 0.5F, 0.5F); - GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); - GL11.glTranslatef(0.0F, -1.0F, 0.0F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - break; - case EQUIPPED: - GL11.glPushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelTapeRecorder.png")); - GL11.glScalef(0.5F, 0.5F, 0.5F); - GL11.glTranslatef(0.8F, 1.7F, 0.2F); - GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); - GL11.glRotatef(90.0F, 0.0F, -1.0F, 0.0F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - break; - case EQUIPPED_FIRST_PERSON: - GL11.glPushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelTapeRecorder.png")); - GL11.glRotatef(-135.0F, 0.0F, 0.0F, 1.0F); - GL11.glTranslatef(-0.6F, -0.6F, -0.1F); - GL11.glScalef(0.5F, 0.5F, 0.5F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - break; - default: break; - } - } - -} diff --git a/src/main/java/com/hbm/render/model/ModelSteelBeam.java b/src/main/java/com/hbm/render/model/ModelSteelBeam.java deleted file mode 100644 index 2626ccb3f..000000000 --- a/src/main/java/com/hbm/render/model/ModelSteelBeam.java +++ /dev/null @@ -1,62 +0,0 @@ -// Date: 10.12.2015 21:02:25 -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package com.hbm.render.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelSteelBeam extends ModelBase -{ - //fields - ModelRenderer Shape1; - - public ModelSteelBeam() - { - textureWidth = 64; - textureHeight = 32; - - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(0F, 0F, 0F, 2, 16, 2); - Shape1.setRotationPoint(-1F, 8F, -1F); - Shape1.setTextureSize(64, 32); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - } - - @Override -public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - Shape1.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void renderModel(float f) - { - Shape1.render(f); - } - - @Override -public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - -} diff --git a/src/main/java/com/hbm/render/model/ModelSteelCorner.java b/src/main/java/com/hbm/render/model/ModelSteelCorner.java deleted file mode 100644 index 46be6fa19..000000000 --- a/src/main/java/com/hbm/render/model/ModelSteelCorner.java +++ /dev/null @@ -1,89 +0,0 @@ -// Date: 10.12.2015 20:58:33 -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package com.hbm.render.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelSteelCorner extends ModelBase -{ - //fields - ModelRenderer Shape1; - ModelRenderer Shape2; - ModelRenderer Shape3; - ModelRenderer Shape4; - - public ModelSteelCorner() - { - textureWidth = 64; - textureHeight = 32; - - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(0F, 0F, 0F, 16, 16, 1); - Shape1.setRotationPoint(-8F, 8F, -8F); - Shape1.setTextureSize(64, 32); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - Shape2 = new ModelRenderer(this, 34, 0); - Shape2.addBox(0F, 0F, 0F, 2, 16, 2); - Shape2.setRotationPoint(2F, 8F, -7F); - Shape2.setTextureSize(64, 32); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - Shape3 = new ModelRenderer(this, 0, 0); - Shape3.addBox(0F, 0F, 0F, 1, 16, 15); - Shape3.setRotationPoint(-8F, 8F, -7F); - Shape3.setTextureSize(64, 32); - Shape3.mirror = true; - setRotation(Shape3, 0F, 0F, 0F); - Shape4 = new ModelRenderer(this, 34, 0); - Shape4.addBox(0F, 0F, 0F, 2, 16, 2); - Shape4.setRotationPoint(-7F, 8F, -2F); - Shape4.setTextureSize(64, 32); - Shape4.mirror = true; - setRotation(Shape4, 0F, 0F, 0F); - } - - @Override -public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - Shape1.render(f5); - Shape2.render(f5); - Shape3.render(f5); - Shape4.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void renderModel(float f) - { - Shape1.render(f); - Shape2.render(f); - Shape3.render(f); - Shape4.render(f); - } - - @Override -public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - -} diff --git a/src/main/java/com/hbm/render/model/ModelSteelScaffold.java b/src/main/java/com/hbm/render/model/ModelSteelScaffold.java deleted file mode 100644 index 6e736a19d..000000000 --- a/src/main/java/com/hbm/render/model/ModelSteelScaffold.java +++ /dev/null @@ -1,161 +0,0 @@ -// Date: 10.12.2015 21:15:17 -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package com.hbm.render.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelSteelScaffold extends ModelBase -{ - //fields - ModelRenderer Shape1; - ModelRenderer Shape2; - ModelRenderer Shape3; - ModelRenderer Shape4; - ModelRenderer Shape5; - ModelRenderer Shape6; - ModelRenderer Shape7; - ModelRenderer Shape8; - ModelRenderer Shape9; - ModelRenderer Shape10; - ModelRenderer Shape11; - ModelRenderer Shape12; - - public ModelSteelScaffold() - { - textureWidth = 64; - textureHeight = 32; - - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(0F, 0F, 0F, 2, 16, 2); - Shape1.setRotationPoint(6F, 8F, -6F); - Shape1.setTextureSize(64, 32); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - Shape2 = new ModelRenderer(this, 0, 0); - Shape2.addBox(0F, 0F, 0F, 2, 16, 2); - Shape2.setRotationPoint(-8F, 8F, -6F); - Shape2.setTextureSize(64, 32); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - Shape3 = new ModelRenderer(this, 0, 0); - Shape3.addBox(0F, 0F, 0F, 2, 16, 2); - Shape3.setRotationPoint(-8F, 8F, 4F); - Shape3.setTextureSize(64, 32); - Shape3.mirror = true; - setRotation(Shape3, 0F, 0F, 0F); - Shape4 = new ModelRenderer(this, 0, 0); - Shape4.addBox(0F, 0F, 0F, 2, 16, 2); - Shape4.setRotationPoint(6F, 8F, 4F); - Shape4.setTextureSize(64, 32); - Shape4.mirror = true; - setRotation(Shape4, 0F, 0F, 0F); - Shape5 = new ModelRenderer(this, 8, 0); - Shape5.addBox(-8F, -0.5F, 0F, 16, 1, 1); - Shape5.setRotationPoint(0F, 15.5F, 4.5F); - Shape5.setTextureSize(64, 32); - Shape5.mirror = true; - setRotation(Shape5, 0F, 0F, -0.6108652F); - Shape6 = new ModelRenderer(this, 8, 0); - Shape6.addBox(-8F, -0.5F, 0F, 16, 1, 1); - Shape6.setRotationPoint(0F, 15.5F, 4.5F); - Shape6.setTextureSize(64, 32); - Shape6.mirror = true; - setRotation(Shape6, 0F, 0F, 0.6108652F); - Shape7 = new ModelRenderer(this, 8, 0); - Shape7.addBox(-8F, -0.5F, 0F, 16, 1, 1); - Shape7.setRotationPoint(0F, 15.5F, -5.5F); - Shape7.setTextureSize(64, 32); - Shape7.mirror = true; - setRotation(Shape7, 0F, 0F, 0.6108652F); - Shape8 = new ModelRenderer(this, 8, 0); - Shape8.addBox(-8F, 0F, 0F, 16, 1, 1); - Shape8.setRotationPoint(0F, 15.5F, -5.5F); - Shape8.setTextureSize(64, 32); - Shape8.mirror = true; - setRotation(Shape8, 0F, 0F, -0.6108652F); - Shape9 = new ModelRenderer(this, 0, 19); - Shape9.addBox(-0.5F, -0.5F, -6F, 1, 1, 12); - Shape9.setRotationPoint(-7F, 15.5F, 0F); - Shape9.setTextureSize(64, 32); - Shape9.mirror = true; - setRotation(Shape9, 0.6108652F, 0F, 0F); - Shape10 = new ModelRenderer(this, 0, 19); - Shape10.addBox(-0.5F, -0.5F, -6F, 1, 1, 12); - Shape10.setRotationPoint(-7F, 15.5F, 0F); - Shape10.setTextureSize(64, 32); - Shape10.mirror = true; - setRotation(Shape10, -0.6108652F, 0F, 0F); - Shape11 = new ModelRenderer(this, 0, 19); - Shape11.addBox(-0.5F, -0.5F, -6F, 1, 1, 12); - Shape11.setRotationPoint(7F, 15.5F, 0F); - Shape11.setTextureSize(64, 32); - Shape11.mirror = true; - setRotation(Shape11, 0.6108652F, 0F, 0F); - Shape12 = new ModelRenderer(this, 0, 19); - Shape12.addBox(-0.5F, -0.5F, -6F, 1, 1, 12); - Shape12.setRotationPoint(7F, 15.5F, 0F); - Shape12.setTextureSize(64, 32); - Shape12.mirror = true; - setRotation(Shape12, -0.6108652F, 0F, 0F); - } - - @Override -public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - Shape1.render(f5); - Shape2.render(f5); - Shape3.render(f5); - Shape4.render(f5); - Shape5.render(f5); - Shape6.render(f5); - Shape7.render(f5); - Shape8.render(f5); - Shape9.render(f5); - Shape10.render(f5); - Shape11.render(f5); - Shape12.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void renderModel(float f) - { - Shape1.render(f); - Shape2.render(f); - Shape3.render(f); - Shape4.render(f); - Shape5.render(f); - Shape6.render(f); - Shape7.render(f); - Shape8.render(f); - Shape9.render(f); - Shape10.render(f); - Shape11.render(f); - Shape12.render(f); - } - - @Override -public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - -} diff --git a/src/main/java/com/hbm/render/model/ModelSteelWall.java b/src/main/java/com/hbm/render/model/ModelSteelWall.java deleted file mode 100644 index 6810eac5a..000000000 --- a/src/main/java/com/hbm/render/model/ModelSteelWall.java +++ /dev/null @@ -1,71 +0,0 @@ -// Date: 10.12.2015 20:54:28 -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package com.hbm.render.model; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelSteelWall extends ModelBase -{ - //fields - ModelRenderer Shape1; - ModelRenderer Shape2; - - public ModelSteelWall() - { - textureWidth = 64; - textureHeight = 32; - - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(0F, 0F, 0F, 16, 16, 1); - Shape1.setRotationPoint(-8F, 8F, -8F); - Shape1.setTextureSize(64, 32); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - Shape2 = new ModelRenderer(this, 34, 0); - Shape2.addBox(0F, 0F, 0F, 2, 16, 2); - Shape2.setRotationPoint(-4F, 8F, -7F); - Shape2.setTextureSize(64, 32); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - } - - @Override -public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - Shape1.render(f5); - Shape2.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void renderModel(float f) - { - Shape1.render(f); - Shape2.render(f); - } - - @Override -public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - -} diff --git a/src/main/java/com/hbm/render/tileentity/RenderDecoBlock.java b/src/main/java/com/hbm/render/tileentity/RenderDecoBlock.java index 00cdc05fa..724423e3c 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderDecoBlock.java +++ b/src/main/java/com/hbm/render/tileentity/RenderDecoBlock.java @@ -8,43 +8,28 @@ import com.hbm.main.ResourceManager; import com.hbm.render.model.ModelBroadcaster; import com.hbm.render.model.ModelGeiger; import com.hbm.render.model.ModelRadio; -import com.hbm.render.model.ModelSteelBeam; -import com.hbm.render.model.ModelSteelCorner; import com.hbm.render.model.ModelSteelRoof; -import com.hbm.render.model.ModelSteelScaffold; -import com.hbm.render.model.ModelSteelWall; +import net.minecraft.block.Block; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; public class RenderDecoBlock extends TileEntitySpecialRenderer { - private static final ResourceLocation texture1 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/SteelWall.png"); - private static final ResourceLocation texture2 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/SteelCorner.png"); private static final ResourceLocation texture3 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/SteelRoof.png"); - private static final ResourceLocation texture4 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/SteelBeam.png"); - private static final ResourceLocation texture5 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/SteelScaffold.png"); private static final ResourceLocation texture6 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/ModelBroadcaster.png"); private static final ResourceLocation texture7 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/ModelRadio.png"); private static final ResourceLocation texture8 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/ModelRadioReceiver.png"); private static final ResourceLocation texture9 = new ResourceLocation(RefStrings.MODID + ":" + "textures/models/ModelGeiger.png"); - private ModelSteelWall model1; - private ModelSteelCorner model2; private ModelSteelRoof model3; - private ModelSteelBeam model4; - private ModelSteelScaffold model5; private ModelBroadcaster model6; private ModelRadio model7; private ModelGeiger model8; public RenderDecoBlock() { - this.model1 = new ModelSteelWall(); - this.model2 = new ModelSteelCorner(); this.model3 = new ModelSteelRoof(); - this.model4 = new ModelSteelBeam(); - this.model5 = new ModelSteelScaffold(); this.model6 = new ModelBroadcaster(); this.model7 = new ModelRadio(); this.model8 = new ModelGeiger(); @@ -53,339 +38,221 @@ public class RenderDecoBlock extends TileEntitySpecialRenderer { @Override public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) { GL11.glPushMatrix(); - GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F); + GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F); + GL11.glRotatef(180, 0F, 0F, 1F); + + GL11.glEnable(GL11.GL_LIGHTING); + + Block b = tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord); + + if(b == ModBlocks.steel_roof) { + this.bindTexture(texture3); + } + if(b == ModBlocks.broadcaster_pc) { + this.bindTexture(texture6); + switch(tileentity.getBlockMetadata()) + { + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + } + if(b == ModBlocks.geiger) { + this.bindTexture(texture9); + switch(tileentity.getBlockMetadata()) + { + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + } + if(b == ModBlocks.radiorec) { + this.bindTexture(texture8); + switch(tileentity.getBlockMetadata()) + { + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + } + if(b == ModBlocks.radiobox) { + this.bindTexture(texture7); + switch(tileentity.getBlockMetadata()) + { + case 4: + case 8: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: + case 6: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 5: + case 9: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: + case 7: GL11.glRotatef(180, 0F, 1F, 0F); break; + } + GL11.glTranslatef(0, 0, 1); + } + + GL11.glPushMatrix(); + if(b == ModBlocks.steel_roof) this.model3.renderModel(0.0625F); + if(b == ModBlocks.broadcaster_pc) this.model6.renderModel(0.0625F); + if(b== ModBlocks.geiger) this.model8.renderModel(0.0625F); + if(b == ModBlocks.radiobox) this.model7.renderModel(0.0625F, tileentity.getBlockMetadata() > 5 ? 160 : 20); + if(b == ModBlocks.radiorec) this.model6.renderModel(0.0625F); + GL11.glPopMatrix(); + + if(b == ModBlocks.boxcar) { + GL11.glRotatef(180, 0F, 0F, 1F); - - GL11.glEnable(GL11.GL_LIGHTING); - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_wall) - { - this.bindTexture(texture1); - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_corner) - { - this.bindTexture(texture2); - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_roof) - { - this.bindTexture(texture3); - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_beam) - { - this.bindTexture(texture4); - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_scaffold) - { - this.bindTexture(texture5); - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(0, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.broadcaster_pc) - { - this.bindTexture(texture6); - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.geiger) - { - this.bindTexture(texture9); - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.radiorec) - { - this.bindTexture(texture8); - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } - } - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.radiobox) - { - this.bindTexture(texture7); - switch(tileentity.getBlockMetadata()) - { - case 4: - case 8: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 2: - case 6: - GL11.glRotatef(0, 0F, 1F, 0F); break; - case 5: - case 9: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - case 7: - GL11.glRotatef(180, 0F, 1F, 0F); break; - } - GL11.glTranslatef(0, 0, 1); - } - - GL11.glPushMatrix(); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_wall) - this.model1.renderModel(0.0625F); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_corner) - this.model2.renderModel(0.0625F); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_roof) - this.model3.renderModel(0.0625F); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_beam) - this.model4.renderModel(0.0625F); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.steel_scaffold) - this.model5.renderModel(0.0625F); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.broadcaster_pc) - this.model6.renderModel(0.0625F); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.geiger) - this.model8.renderModel(0.0625F); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.radiobox) - this.model7.renderModel(0.0625F, tileentity.getBlockMetadata() > 5 ? 160 : 20); - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.radiorec) - this.model6.renderModel(0.0625F); - GL11.glPopMatrix(); - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.boxcar) { + GL11.glTranslatef(0, -1.5F, 0); + switch(tileentity.getBlockMetadata()) { + case 4: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(90, 0F, 1F, 0F); break; + default: GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - - switch(tileentity.getBlockMetadata()) { - case 4: GL11.glRotatef(0, 0F, 1F, 0F); break; - case 2: GL11.glRotatef(270, 0F, 1F, 0F); break; - case 5: GL11.glRotatef(180, 0F, 1F, 0F); break; - case 3: GL11.glRotatef(90, 0F, 1F, 0F); break; - default: - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glRotated(90, 1, 0, 0); - GL11.glTranslatef(0, -1.5F, 0); - break; - } - - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.boxcar_tex); - ResourceManager.boxcar.renderAll(); + GL11.glRotated(90, 1, 0, 0); + GL11.glTranslatef(0, -1.5F, 0); break; } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.boat) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, 0, -1.5F); - GL11.glTranslatef(0, 0.5F, 0); - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.duchessgambit_tex); - ResourceManager.duchessgambit.renderAll(); + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.boxcar_tex); + ResourceManager.boxcar.renderAll(); + } + + if(b == ModBlocks.boat) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, 0, -1.5F); + GL11.glTranslatef(0, 0.5F, 0); + + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.duchessgambit_tex); + ResourceManager.duchessgambit.renderAll(); + } + + if(b == ModBlocks.sat_radar) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, -1.5F, 0); + GL11.glRotated(90, 0, 1, 0); + + switch(tileentity.getBlockMetadata()) { + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.sat_radar) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - GL11.glRotated(90, 0, 1, 0); - - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.sat_base_tex); + ResourceManager.sat_base.renderAll(); + bindTexture(ResourceManager.sat_radar_tex); + ResourceManager.sat_radar.renderAll(); + } - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.sat_base_tex); - ResourceManager.sat_base.renderAll(); - bindTexture(ResourceManager.sat_radar_tex); - ResourceManager.sat_radar.renderAll(); + if(b == ModBlocks.sat_resonator) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, -1.5F, 0); + GL11.glRotated(90, 0, 1, 0); + + switch(tileentity.getBlockMetadata()) { + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.sat_resonator) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - GL11.glRotated(90, 0, 1, 0); - - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.sat_base_tex); + ResourceManager.sat_base.renderAll(); + bindTexture(ResourceManager.sat_resonator_tex); + ResourceManager.sat_resonator.renderAll(); + } - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.sat_base_tex); - ResourceManager.sat_base.renderAll(); - bindTexture(ResourceManager.sat_resonator_tex); - ResourceManager.sat_resonator.renderAll(); + if(b == ModBlocks.sat_scanner) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, -1.5F, 0); + GL11.glRotated(90, 0, 1, 0); + + switch(tileentity.getBlockMetadata()) { + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.sat_scanner) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - GL11.glRotated(90, 0, 1, 0); - - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.sat_base_tex); + ResourceManager.sat_base.renderAll(); + bindTexture(ResourceManager.sat_scanner_tex); + ResourceManager.sat_scanner.renderAll(); + } - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.sat_base_tex); - ResourceManager.sat_base.renderAll(); - bindTexture(ResourceManager.sat_scanner_tex); - ResourceManager.sat_scanner.renderAll(); + if(b == ModBlocks.sat_mapper) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, -1.5F, 0); + GL11.glRotated(90, 0, 1, 0); + + switch(tileentity.getBlockMetadata()) { + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.sat_mapper) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - GL11.glRotated(90, 0, 1, 0); - - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.sat_base_tex); + ResourceManager.sat_base.renderAll(); + bindTexture(ResourceManager.sat_mapper_tex); + ResourceManager.sat_mapper.renderAll(); + } - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.sat_base_tex); - ResourceManager.sat_base.renderAll(); - bindTexture(ResourceManager.sat_mapper_tex); - ResourceManager.sat_mapper.renderAll(); + if(b == ModBlocks.sat_laser) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, -1.5F, 0); + GL11.glRotated(90, 0, 1, 0); + + switch(tileentity.getBlockMetadata()) { + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.sat_laser) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - GL11.glRotated(90, 0, 1, 0); - - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.sat_base_tex); + ResourceManager.sat_base.renderAll(); + bindTexture(ResourceManager.sat_laser_tex); + ResourceManager.sat_laser.renderAll(); + } - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.sat_base_tex); - ResourceManager.sat_base.renderAll(); - bindTexture(ResourceManager.sat_laser_tex); - ResourceManager.sat_laser.renderAll(); + if(b == ModBlocks.sat_foeq) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, -1.5F, 0); + GL11.glRotated(90, 0, 1, 0); + + switch(tileentity.getBlockMetadata()) { + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.sat_foeq) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - GL11.glRotated(90, 0, 1, 0); - - switch(tileentity.getBlockMetadata()) - { - case 4: - GL11.glRotatef(270, 0F, 1F, 0F); break; - case 2: - GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: - GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: - GL11.glRotatef(0, 0F, 1F, 0F); break; - } + GL11.glEnable(GL11.GL_CULL_FACE); + bindTexture(ResourceManager.sat_foeq_tex); + ResourceManager.sat_foeq.renderAll(); + } + + if(b == ModBlocks.sat_dock) { + GL11.glRotatef(180, 0F, 0F, 1F); + GL11.glTranslatef(0, -1.5F, 0); + + bindTexture(ResourceManager.satdock_tex); + ResourceManager.satDock.renderAll(); + } - GL11.glEnable(GL11.GL_CULL_FACE); - bindTexture(ResourceManager.sat_foeq_tex); - ResourceManager.sat_foeq.renderAll(); - } - - if(tileentity.getWorldObj().getBlock(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord) == ModBlocks.sat_dock) { - GL11.glRotatef(180, 0F, 0F, 1F); - GL11.glTranslatef(0, -1.5F, 0); - - bindTexture(ResourceManager.satdock_tex); - ResourceManager.satDock.renderAll(); - } - GL11.glPopMatrix(); } diff --git a/src/main/java/com/hbm/render/util/RenderBlocksNT.java b/src/main/java/com/hbm/render/util/RenderBlocksNT.java new file mode 100644 index 000000000..db0990f07 --- /dev/null +++ b/src/main/java/com/hbm/render/util/RenderBlocksNT.java @@ -0,0 +1,239 @@ +package com.hbm.render.util; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +public class RenderBlocksNT extends RenderBlocks { + + public static final RenderBlocksNT INSTANCE = new RenderBlocksNT(); + + public RenderBlocksNT(IBlockAccess world) { + super(world); + } + + public RenderBlocksNT() { + super(); + } + + public RenderBlocksNT setWorld(IBlockAccess world) { + this.blockAccess = world; + this.field_152631_f = false; + this.flipTexture = false; + return this; + } + + @Override + public void renderFaceZNeg(Block block, double x, double y, double z, IIcon icon) { + Tessellator tessellator = Tessellator.instance; + + if(this.hasOverrideBlockTexture()) { + icon = this.overrideBlockTexture; + } + + double minU = (double) icon.getInterpolatedU(16.0D - this.renderMinX * 16.0D); // **FIX** + double maxU = (double) icon.getInterpolatedU(16.0D - this.renderMaxX * 16.0D); // **FIX** + + if(this.field_152631_f) { + minU = (double) icon.getInterpolatedU(this.renderMinX * 16.0D); // **FIX** + maxU = (double) icon.getInterpolatedU(this.renderMaxX * 16.0D); // **FIX** + } + + double maxV = (double) icon.getInterpolatedV(16.0D - this.renderMaxY * 16.0D); + double minV = (double) icon.getInterpolatedV(16.0D - this.renderMinY * 16.0D); + double minU2; + + if(this.flipTexture) { + minU2 = maxU; + maxU = minU; + minU = minU2; + } + + if(this.renderMinX < 0.0D || this.renderMaxX > 1.0D) { + maxU = (double) icon.getMinU(); + minU = (double) icon.getMaxU(); + } + + if(this.renderMinY < 0.0D || this.renderMaxY > 1.0D) { + maxV = (double) icon.getMinV(); + minV = (double) icon.getMaxV(); + } + + minU2 = minU; + double maxU2 = maxU; + double maxV2 = maxV; + double minV2 = minV; + + if(this.uvRotateEast == 2) { + maxU = (double) icon.getInterpolatedU(this.renderMinY * 16.0D); + minU = (double) icon.getInterpolatedU(this.renderMaxY * 16.0D); + maxV = (double) icon.getInterpolatedV(16.0D - this.renderMinX * 16.0D); + minV = (double) icon.getInterpolatedV(16.0D - this.renderMaxX * 16.0D); + maxV2 = maxV; + minV2 = minV; + minU2 = maxU; + maxU2 = minU; + maxV = minV; + minV = maxV2; + } else if(this.uvRotateEast == 1) { + maxU = (double) icon.getInterpolatedU(16.0D - this.renderMaxY * 16.0D); + minU = (double) icon.getInterpolatedU(16.0D - this.renderMinY * 16.0D); + maxV = (double) icon.getInterpolatedV(this.renderMaxX * 16.0D); + minV = (double) icon.getInterpolatedV(this.renderMinX * 16.0D); + minU2 = minU; + maxU2 = maxU; + maxU = minU; + minU = maxU2; + maxV2 = minV; + minV2 = maxV; + } else if(this.uvRotateEast == 3) { + maxU = (double) icon.getInterpolatedU(16.0D - this.renderMinX * 16.0D); + minU = (double) icon.getInterpolatedU(16.0D - this.renderMaxX * 16.0D); + maxV = (double) icon.getInterpolatedV(this.renderMaxY * 16.0D); + minV = (double) icon.getInterpolatedV(this.renderMinY * 16.0D); + minU2 = minU; + maxU2 = maxU; + maxV2 = maxV; + minV2 = minV; + } + + double minX = x + this.renderMinX; + double maxX = x + this.renderMaxX; + double minY = y + this.renderMinY; + double maxY = y + this.renderMaxY; + double minZ = z + this.renderMinZ; + + if(this.renderFromInside) { + minX = x + this.renderMaxX; + maxX = x + this.renderMinX; + } + + if(this.enableAO) { + tessellator.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft); + tessellator.setBrightness(this.brightnessTopLeft); + tessellator.addVertexWithUV(minX, maxY, minZ, minU2, maxV2); + tessellator.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft); + tessellator.setBrightness(this.brightnessBottomLeft); + tessellator.addVertexWithUV(maxX, maxY, minZ, maxU, maxV); + tessellator.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight); + tessellator.setBrightness(this.brightnessBottomRight); + tessellator.addVertexWithUV(maxX, minY, minZ, maxU2, minV2); + tessellator.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight); + tessellator.setBrightness(this.brightnessTopRight); + tessellator.addVertexWithUV(minX, minY, minZ, minU, minV); + } else { + tessellator.addVertexWithUV(minX, maxY, minZ, minU2, maxV2); + tessellator.addVertexWithUV(maxX, maxY, minZ, maxU, maxV); + tessellator.addVertexWithUV(maxX, minY, minZ, maxU2, minV2); + tessellator.addVertexWithUV(minX, minY, minZ, minU, minV); + } + } + + @Override + public void renderFaceXPos(Block block, double x, double y, double z, IIcon icon) { + Tessellator tessellator = Tessellator.instance; + + if(this.hasOverrideBlockTexture()) { + icon = this.overrideBlockTexture; + } + + double minU = (double) icon.getInterpolatedU(16D - this.renderMinZ * 16.0D); // **FIX** + double maxU = (double) icon.getInterpolatedU(16D - this.renderMaxZ * 16.0D); // **FIX** + + if(this.field_152631_f) { + minU = (double) icon.getInterpolatedU(this.renderMinZ * 16.0D); // **FIX** + maxU = (double) icon.getInterpolatedU(this.renderMaxZ * 16.0D); // **FIX** + } + + double maxV = (double) icon.getInterpolatedV(16.0D - this.renderMaxY * 16.0D); + double minV = (double) icon.getInterpolatedV(16.0D - this.renderMinY * 16.0D); + double minU2; + + if(this.flipTexture) { + minU2 = maxU; + maxU = minU; + minU = minU2; + } + + if(this.renderMinZ < 0.0D || this.renderMaxZ > 1.0D) { + maxU = (double) icon.getMinU(); + minU = (double) icon.getMaxU(); + } + + if(this.renderMinY < 0.0D || this.renderMaxY > 1.0D) { + maxV = (double) icon.getMinV(); + minV = (double) icon.getMaxV(); + } + + minU2 = minU; + double maxU2 = maxU; + double maxV2 = maxV; + double minV2 = minV; + + if(this.uvRotateSouth == 2) { + maxU = (double) icon.getInterpolatedU(this.renderMinY * 16.0D); + maxV = (double) icon.getInterpolatedV(16.0D - this.renderMinZ * 16.0D); + minU = (double) icon.getInterpolatedU(this.renderMaxY * 16.0D); + minV = (double) icon.getInterpolatedV(16.0D - this.renderMaxZ * 16.0D); + maxV2 = maxV; + minV2 = minV; + minU2 = maxU; + maxU2 = minU; + maxV = minV; + minV = maxV2; + } else if(this.uvRotateSouth == 1) { + maxU = (double) icon.getInterpolatedU(16.0D - this.renderMaxY * 16.0D); + maxV = (double) icon.getInterpolatedV(this.renderMaxZ * 16.0D); + minU = (double) icon.getInterpolatedU(16.0D - this.renderMinY * 16.0D); + minV = (double) icon.getInterpolatedV(this.renderMinZ * 16.0D); + minU2 = minU; + maxU2 = maxU; + maxU = minU; + minU = maxU2; + maxV2 = minV; + minV2 = maxV; + } else if(this.uvRotateSouth == 3) { + maxU = (double) icon.getInterpolatedU(16.0D - this.renderMinZ * 16.0D); + minU = (double) icon.getInterpolatedU(16.0D - this.renderMaxZ * 16.0D); + maxV = (double) icon.getInterpolatedV(this.renderMaxY * 16.0D); + minV = (double) icon.getInterpolatedV(this.renderMinY * 16.0D); + minU2 = minU; + maxU2 = maxU; + maxV2 = maxV; + minV2 = minV; + } + + double maxX = x + this.renderMaxX; + double minY = y + this.renderMinY; + double maxY = y + this.renderMaxY; + double minZ = z + this.renderMinZ; + double maxZ = z + this.renderMaxZ; + + if(this.renderFromInside) { + minZ = z + this.renderMaxZ; + maxZ = z + this.renderMinZ; + } + + if(this.enableAO) { + tessellator.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft); + tessellator.setBrightness(this.brightnessTopLeft); + tessellator.addVertexWithUV(maxX, minY, maxZ, maxU2, minV2); + tessellator.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft); + tessellator.setBrightness(this.brightnessBottomLeft); + tessellator.addVertexWithUV(maxX, minY, minZ, minU, minV); + tessellator.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight); + tessellator.setBrightness(this.brightnessBottomRight); + tessellator.addVertexWithUV(maxX, maxY, minZ, minU2, maxV2); + tessellator.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight); + tessellator.setBrightness(this.brightnessTopRight); + tessellator.addVertexWithUV(maxX, maxY, maxZ, maxU, maxV); + } else { + tessellator.addVertexWithUV(maxX, minY, maxZ, maxU2, minV2); + tessellator.addVertexWithUV(maxX, minY, minZ, minU, minV); + tessellator.addVertexWithUV(maxX, maxY, minZ, minU2, maxV2); + tessellator.addVertexWithUV(maxX, maxY, maxZ, maxU, maxV); + } + } +} diff --git a/src/main/java/com/hbm/render/util/RenderBlocksWrapper.java b/src/main/java/com/hbm/render/util/RenderBlocksWrapper.java new file mode 100644 index 000000000..3da1e2b22 --- /dev/null +++ b/src/main/java/com/hbm/render/util/RenderBlocksWrapper.java @@ -0,0 +1,150 @@ +package com.hbm.render.util; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAnvil; +import net.minecraft.block.BlockBeacon; +import net.minecraft.block.BlockBrewingStand; +import net.minecraft.block.BlockCauldron; +import net.minecraft.block.BlockCocoa; +import net.minecraft.block.BlockDoublePlant; +import net.minecraft.block.BlockDragonEgg; +import net.minecraft.block.BlockEndPortalFrame; +import net.minecraft.block.BlockFence; +import net.minecraft.block.BlockFenceGate; +import net.minecraft.block.BlockFire; +import net.minecraft.block.BlockFlowerPot; +import net.minecraft.block.BlockHopper; +import net.minecraft.block.BlockPane; +import net.minecraft.block.BlockRailBase; +import net.minecraft.block.BlockRedstoneComparator; +import net.minecraft.block.BlockRedstoneDiode; +import net.minecraft.block.BlockRedstoneRepeater; +import net.minecraft.block.BlockStairs; +import net.minecraft.block.BlockStem; +import net.minecraft.block.BlockWall; +import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.EntityRenderer; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class RenderBlocksWrapper extends RenderBlocks { + + public static final RenderBlocksWrapper INSTANCE = new RenderBlocksWrapper(); + public RenderBlocks rb; + + public void setup(RenderBlocks rb) { this.rb = rb; } + + @Override + public boolean renderStandardBlock(Block block, int x, int y, int z) { + int color = block.colorMultiplier(this.blockAccess, x, y, z); + float r = (float) (color >> 16 & 255) / 255.0F; + float g = (float) (color >> 8 & 255) / 255.0F; + float b = (float) (color & 255) / 255.0F; + + if(EntityRenderer.anaglyphEnable) { + float ar = (r * 30.0F + g * 59.0F + b * 11.0F) / 100.0F; + float ag = (r * 30.0F + g * 70.0F) / 100.0F; + float ab = (r * 30.0F + b * 70.0F) / 100.0F; + r = ar; + g = ag; + b = ab; + } + + return Minecraft.isAmbientOcclusionEnabled() && block.getLightValue() == 0 + ? (this.partialRenderBounds ? this.renderStandardBlockWithAmbientOcclusionPartial(block, x, y, z, r, g, b) + : this.renderStandardBlockWithAmbientOcclusion(block, x, y, z, r, g, b)) + : this.renderStandardBlockWithColorMultiplier(block, x, y, z, r, g, b); + } + + // the unholy mass + @Override public void setOverrideBlockTexture(IIcon p_147757_1_) { rb.setOverrideBlockTexture(p_147757_1_); } + @Override public void clearOverrideBlockTexture() { rb.clearOverrideBlockTexture(); } + @Override public boolean hasOverrideBlockTexture() { return rb.hasOverrideBlockTexture(); } + @Override public void setRenderFromInside(boolean p_147786_1_) { rb.setRenderFromInside(p_147786_1_); } + @Override public void setRenderAllFaces(boolean p_147753_1_) { rb.setRenderAllFaces(p_147753_1_); } + @Override public void setRenderBounds(double p_147782_1_, double p_147782_3_, double p_147782_5_, double p_147782_7_, double p_147782_9_, double p_147782_11_) { rb.setRenderBounds(p_147782_1_, p_147782_3_, p_147782_5_, p_147782_7_, p_147782_9_, p_147782_11_); } + @Override public void setRenderBoundsFromBlock(Block p_147775_1_) { rb.setRenderBoundsFromBlock(p_147775_1_); } + @Override public void overrideBlockBounds(double p_147770_1_, double p_147770_3_, double p_147770_5_, double p_147770_7_, double p_147770_9_, double p_147770_11_) { rb.overrideBlockBounds(p_147770_1_, p_147770_3_, p_147770_5_, p_147770_7_, p_147770_9_, p_147770_11_); } + @Override public void unlockBlockBounds() { rb.unlockBlockBounds(); } + @Override public void renderBlockUsingTexture(Block p_147792_1_, int p_147792_2_, int p_147792_3_, int p_147792_4_, IIcon p_147792_5_) { rb.renderBlockUsingTexture(p_147792_1_, p_147792_2_, p_147792_3_, p_147792_4_, p_147792_5_); } + @Override public void renderBlockAllFaces(Block p_147769_1_, int p_147769_2_, int p_147769_3_, int p_147769_4_) { rb.renderBlockAllFaces(p_147769_1_, p_147769_2_, p_147769_3_, p_147769_4_); } + @Override public boolean renderBlockByRenderType(Block p_147805_1_, int p_147805_2_, int p_147805_3_, int p_147805_4_) { return rb.renderBlockByRenderType(p_147805_1_, p_147805_2_, p_147805_3_, p_147805_4_); } + @Override public boolean renderBlockEndPortalFrame(BlockEndPortalFrame p_147743_1_, int p_147743_2_, int p_147743_3_, int p_147743_4_) { return rb.renderBlockEndPortalFrame(p_147743_1_, p_147743_2_, p_147743_3_, p_147743_4_); } + @Override public boolean renderBlockBed(Block p_147773_1_, int p_147773_2_, int p_147773_3_, int p_147773_4_) { return rb.renderBlockBed(p_147773_1_, p_147773_2_, p_147773_3_, p_147773_4_); } + @Override public boolean renderBlockBrewingStand(BlockBrewingStand p_147741_1_, int p_147741_2_, int p_147741_3_, int p_147741_4_) { return rb.renderBlockBrewingStand(p_147741_1_, p_147741_2_, p_147741_3_, p_147741_4_); } + @Override public boolean renderBlockCauldron(BlockCauldron p_147785_1_, int p_147785_2_, int p_147785_3_, int p_147785_4_) { return rb.renderBlockCauldron(p_147785_1_, p_147785_2_, p_147785_3_, p_147785_4_); } + @Override public boolean renderBlockFlowerpot(BlockFlowerPot p_147752_1_, int p_147752_2_, int p_147752_3_, int p_147752_4_) { return rb.renderBlockFlowerpot(p_147752_1_, p_147752_2_, p_147752_3_, p_147752_4_); } + @Override public boolean renderBlockAnvil(BlockAnvil p_147725_1_, int p_147725_2_, int p_147725_3_, int p_147725_4_) { return rb.renderBlockAnvil(p_147725_1_, p_147725_2_, p_147725_3_, p_147725_4_); } + @Override public boolean renderBlockAnvilMetadata(BlockAnvil p_147780_1_, int p_147780_2_, int p_147780_3_, int p_147780_4_, int p_147780_5_) { return rb.renderBlockAnvilMetadata(p_147780_1_, p_147780_2_, p_147780_3_, p_147780_4_, p_147780_5_); } + @Override public boolean renderBlockAnvilOrient(BlockAnvil p_147728_1_, int p_147728_2_, int p_147728_3_, int p_147728_4_, int p_147728_5_, boolean p_147728_6_) { return rb.renderBlockAnvilOrient(p_147728_1_, p_147728_2_, p_147728_3_, p_147728_4_, p_147728_5_, p_147728_6_); } + @Override public float renderBlockAnvilRotate(BlockAnvil p_147737_1_, int p_147737_2_, int p_147737_3_, int p_147737_4_, int p_147737_5_, float p_147737_6_, float p_147737_7_, float p_147737_8_, float p_147737_9_, boolean p_147737_10_, boolean p_147737_11_, int p_147737_12_) { return rb.renderBlockAnvilRotate(p_147737_1_, p_147737_2_, p_147737_3_, p_147737_4_, p_147737_5_, p_147737_6_, p_147737_7_, p_147737_8_, p_147737_9_, p_147737_10_, p_147737_11_, p_147737_12_); } + @Override public boolean renderBlockTorch(Block p_147791_1_, int p_147791_2_, int p_147791_3_, int p_147791_4_) { return rb.renderBlockTorch(p_147791_1_, p_147791_2_, p_147791_3_, p_147791_4_); } + @Override public boolean renderBlockRepeater(BlockRedstoneRepeater p_147759_1_, int p_147759_2_, int p_147759_3_, int p_147759_4_) { return rb.renderBlockRepeater(p_147759_1_, p_147759_2_, p_147759_3_, p_147759_4_); } + @Override public boolean renderBlockRedstoneComparator(BlockRedstoneComparator p_147781_1_, int p_147781_2_, int p_147781_3_, int p_147781_4_) { return rb.renderBlockRedstoneComparator(p_147781_1_, p_147781_2_, p_147781_3_, p_147781_4_); } + @Override public boolean renderBlockRedstoneDiode(BlockRedstoneDiode p_147748_1_, int p_147748_2_, int p_147748_3_, int p_147748_4_) { return rb.renderBlockRedstoneDiode(p_147748_1_, p_147748_2_, p_147748_3_, p_147748_4_); } + @Override public void renderBlockRedstoneDiodeMetadata(BlockRedstoneDiode p_147732_1_, int p_147732_2_, int p_147732_3_, int p_147732_4_, int p_147732_5_) { rb.renderBlockRedstoneDiodeMetadata(p_147732_1_, p_147732_2_, p_147732_3_, p_147732_4_, p_147732_5_); } + @Override public void renderPistonBaseAllFaces(Block p_147804_1_, int p_147804_2_, int p_147804_3_, int p_147804_4_) { rb.renderPistonBaseAllFaces(p_147804_1_, p_147804_2_, p_147804_3_, p_147804_4_); } + @Override public boolean renderPistonBase(Block p_147731_1_, int p_147731_2_, int p_147731_3_, int p_147731_4_, boolean p_147731_5_) { return rb.renderPistonBase(p_147731_1_, p_147731_2_, p_147731_3_, p_147731_4_, p_147731_5_); } + @Override public void renderPistonRodUD(double p_147763_1_, double p_147763_3_, double p_147763_5_, double p_147763_7_, double p_147763_9_, double p_147763_11_, float p_147763_13_, double p_147763_14_) { rb.renderPistonRodUD(p_147763_1_, p_147763_3_, p_147763_5_, p_147763_7_, p_147763_9_, p_147763_11_, p_147763_13_, p_147763_14_); } + @Override public void renderPistonRodSN(double p_147789_1_, double p_147789_3_, double p_147789_5_, double p_147789_7_, double p_147789_9_, double p_147789_11_, float p_147789_13_, double p_147789_14_) { rb.renderPistonRodSN(p_147789_1_, p_147789_3_, p_147789_5_, p_147789_7_, p_147789_9_, p_147789_11_, p_147789_13_, p_147789_14_); } + @Override public void renderPistonRodEW(double p_147738_1_, double p_147738_3_, double p_147738_5_, double p_147738_7_, double p_147738_9_, double p_147738_11_, float p_147738_13_, double p_147738_14_) { rb.renderPistonRodEW(p_147738_1_, p_147738_3_, p_147738_5_, p_147738_7_, p_147738_9_, p_147738_11_, p_147738_13_, p_147738_14_); } + @Override public void renderPistonExtensionAllFaces(Block p_147750_1_, int p_147750_2_, int p_147750_3_, int p_147750_4_, boolean p_147750_5_) { rb.renderPistonExtensionAllFaces(p_147750_1_, p_147750_2_, p_147750_3_, p_147750_4_, p_147750_5_); } + @Override public boolean renderPistonExtension(Block p_147809_1_, int p_147809_2_, int p_147809_3_, int p_147809_4_, boolean p_147809_5_) { return rb.renderPistonExtension(p_147809_1_, p_147809_2_, p_147809_3_, p_147809_4_, p_147809_5_); } + @Override public boolean renderBlockLever(Block p_147790_1_, int p_147790_2_, int p_147790_3_, int p_147790_4_) { return rb.renderBlockLever(p_147790_1_, p_147790_2_, p_147790_3_, p_147790_4_); } + @Override public boolean renderBlockTripWireSource(Block p_147723_1_, int p_147723_2_, int p_147723_3_, int p_147723_4_) { return rb.renderBlockTripWireSource(p_147723_1_, p_147723_2_, p_147723_3_, p_147723_4_); } + @Override public boolean renderBlockTripWire(Block p_147756_1_, int p_147756_2_, int p_147756_3_, int p_147756_4_) { return rb.renderBlockTripWire(p_147756_1_, p_147756_2_, p_147756_3_, p_147756_4_); } + @Override public boolean renderBlockFire(BlockFire p_147801_1_, int p_147801_2_, int p_147801_3_, int p_147801_4_) { return rb.renderBlockFire(p_147801_1_, p_147801_2_, p_147801_3_, p_147801_4_); } + @Override public boolean renderBlockRedstoneWire(Block p_147788_1_, int p_147788_2_, int p_147788_3_, int p_147788_4_) { return rb.renderBlockRedstoneWire(p_147788_1_, p_147788_2_, p_147788_3_, p_147788_4_); } + @Override public boolean renderBlockMinecartTrack(BlockRailBase p_147766_1_, int p_147766_2_, int p_147766_3_, int p_147766_4_) { return rb.renderBlockMinecartTrack(p_147766_1_, p_147766_2_, p_147766_3_, p_147766_4_); } + @Override public boolean renderBlockLadder(Block p_147794_1_, int p_147794_2_, int p_147794_3_, int p_147794_4_) { return rb.renderBlockLadder(p_147794_1_, p_147794_2_, p_147794_3_, p_147794_4_); } + @Override public boolean renderBlockVine(Block p_147726_1_, int p_147726_2_, int p_147726_3_, int p_147726_4_) { return rb.renderBlockVine(p_147726_1_, p_147726_2_, p_147726_3_, p_147726_4_); } + @Override public boolean renderBlockStainedGlassPane(Block p_147733_1_, int p_147733_2_, int p_147733_3_, int p_147733_4_) { return rb.renderBlockStainedGlassPane(p_147733_1_, p_147733_2_, p_147733_3_, p_147733_4_); } + @Override public boolean renderBlockPane(BlockPane p_147767_1_, int p_147767_2_, int p_147767_3_, int p_147767_4_) { return rb.renderBlockPane(p_147767_1_, p_147767_2_, p_147767_3_, p_147767_4_); } + @Override public boolean renderCrossedSquares(Block p_147746_1_, int p_147746_2_, int p_147746_3_, int p_147746_4_) { return rb.renderCrossedSquares(p_147746_1_, p_147746_2_, p_147746_3_, p_147746_4_); } + @Override public boolean renderBlockDoublePlant(BlockDoublePlant p_147774_1_, int p_147774_2_, int p_147774_3_, int p_147774_4_) { return rb.renderBlockDoublePlant(p_147774_1_, p_147774_2_, p_147774_3_, p_147774_4_); } + @Override public boolean renderBlockStem(Block p_147724_1_, int p_147724_2_, int p_147724_3_, int p_147724_4_) { return rb.renderBlockStem(p_147724_1_, p_147724_2_, p_147724_3_, p_147724_4_); } + @Override public boolean renderBlockCrops(Block p_147796_1_, int p_147796_2_, int p_147796_3_, int p_147796_4_) { return rb.renderBlockCrops(p_147796_1_, p_147796_2_, p_147796_3_, p_147796_4_); } + @Override public void renderTorchAtAngle(Block p_147747_1_, double p_147747_2_, double p_147747_4_, double p_147747_6_, double p_147747_8_, double p_147747_10_, int p_147747_12_) { rb.renderTorchAtAngle(p_147747_1_, p_147747_2_, p_147747_4_, p_147747_6_, p_147747_8_, p_147747_10_, p_147747_12_); } + @Override public void drawCrossedSquares(IIcon p_147765_1_, double p_147765_2_, double p_147765_4_, double p_147765_6_, float p_147765_8_) { rb.drawCrossedSquares(p_147765_1_, p_147765_2_, p_147765_4_, p_147765_6_, p_147765_8_); } + @Override public void renderBlockStemSmall(Block p_147730_1_, int p_147730_2_, double p_147730_3_, double p_147730_5_, double p_147730_7_, double p_147730_9_) { rb.renderBlockStemSmall(p_147730_1_, p_147730_2_, p_147730_3_, p_147730_5_, p_147730_7_, p_147730_9_); } + @Override public boolean renderBlockLilyPad(Block p_147783_1_, int p_147783_2_, int p_147783_3_, int p_147783_4_) { return rb.renderBlockLilyPad(p_147783_1_, p_147783_2_, p_147783_3_, p_147783_4_); } + @Override public void renderBlockStemBig(BlockStem p_147740_1_, int p_147740_2_, int p_147740_3_, double p_147740_4_, double p_147740_6_, double p_147740_8_, double p_147740_10_) { rb.renderBlockStemBig(p_147740_1_, p_147740_2_, p_147740_3_, p_147740_4_, p_147740_6_, p_147740_8_, p_147740_10_); } + @Override public void renderBlockCropsImpl(Block p_147795_1_, int p_147795_2_, double p_147795_3_, double p_147795_5_, double p_147795_7_) { rb.renderBlockCropsImpl(p_147795_1_, p_147795_2_, p_147795_3_, p_147795_5_, p_147795_7_); } + @Override public boolean renderBlockLiquid(Block p_147721_1_, int p_147721_2_, int p_147721_3_, int p_147721_4_) { return rb.renderBlockLiquid(p_147721_1_, p_147721_2_, p_147721_3_, p_147721_4_); } + @Override public float getLiquidHeight(int p_147729_1_, int p_147729_2_, int p_147729_3_, Material p_147729_4_) { return rb.getLiquidHeight(p_147729_1_, p_147729_2_, p_147729_3_, p_147729_4_); } + @Override public void renderBlockSandFalling(Block p_147749_1_, World p_147749_2_, int p_147749_3_, int p_147749_4_, int p_147749_5_, int p_147749_6_) { rb.renderBlockSandFalling(p_147749_1_, p_147749_2_, p_147749_3_, p_147749_4_, p_147749_5_, p_147749_6_); } + @Override public boolean renderBlockLog(Block p_147742_1_, int p_147742_2_, int p_147742_3_, int p_147742_4_) { return rb.renderBlockLog(p_147742_1_, p_147742_2_, p_147742_3_, p_147742_4_); } + @Override public boolean renderBlockQuartz(Block p_147779_1_, int p_147779_2_, int p_147779_3_, int p_147779_4_) { return rb.renderBlockQuartz(p_147779_1_, p_147779_2_, p_147779_3_, p_147779_4_); } + @Override public boolean renderStandardBlockWithAmbientOcclusion(Block p_147751_1_, int p_147751_2_, int p_147751_3_, int p_147751_4_, float p_147751_5_, float p_147751_6_, float p_147751_7_) { return rb.renderStandardBlockWithAmbientOcclusion(p_147751_1_, p_147751_2_, p_147751_3_, p_147751_4_, p_147751_5_, p_147751_6_, p_147751_7_); } + @Override public boolean renderStandardBlockWithAmbientOcclusionPartial(Block p_147808_1_, int p_147808_2_, int p_147808_3_, int p_147808_4_, float p_147808_5_, float p_147808_6_, float p_147808_7_) { return rb.renderStandardBlockWithAmbientOcclusionPartial(p_147808_1_, p_147808_2_, p_147808_3_, p_147808_4_, p_147808_5_, p_147808_6_, p_147808_7_); } + @Override public int getAoBrightness(int p_147778_1_, int p_147778_2_, int p_147778_3_, int p_147778_4_) { return rb.getAoBrightness(p_147778_1_, p_147778_2_, p_147778_3_, p_147778_4_); } + @Override public int mixAoBrightness(int p_147727_1_, int p_147727_2_, int p_147727_3_, int p_147727_4_, double p_147727_5_, double p_147727_7_, double p_147727_9_, double p_147727_11_) { return rb.mixAoBrightness(p_147727_1_, p_147727_2_, p_147727_3_, p_147727_4_, p_147727_5_, p_147727_7_, p_147727_9_, p_147727_11_); } + @Override public boolean renderStandardBlockWithColorMultiplier(Block p_147736_1_, int p_147736_2_, int p_147736_3_, int p_147736_4_, float p_147736_5_, float p_147736_6_, float p_147736_7_) { return rb.renderStandardBlockWithColorMultiplier(p_147736_1_, p_147736_2_, p_147736_3_, p_147736_4_, p_147736_5_, p_147736_6_, p_147736_7_); } + @Override public boolean renderBlockCocoa(BlockCocoa p_147772_1_, int p_147772_2_, int p_147772_3_, int p_147772_4_) { return rb.renderBlockCocoa(p_147772_1_, p_147772_2_, p_147772_3_, p_147772_4_); } + @Override public boolean renderBlockBeacon(BlockBeacon p_147797_1_, int p_147797_2_, int p_147797_3_, int p_147797_4_) { return rb.renderBlockBeacon(p_147797_1_, p_147797_2_, p_147797_3_, p_147797_4_); } + @Override public boolean renderBlockCactus(Block p_147755_1_, int p_147755_2_, int p_147755_3_, int p_147755_4_) { return rb.renderBlockCactus(p_147755_1_, p_147755_2_, p_147755_3_, p_147755_4_); } + @Override public boolean renderBlockCactusImpl(Block p_147754_1_, int p_147754_2_, int p_147754_3_, int p_147754_4_, float p_147754_5_, float p_147754_6_, float p_147754_7_) { return rb.renderBlockCactusImpl(p_147754_1_, p_147754_2_, p_147754_3_, p_147754_4_, p_147754_5_, p_147754_6_, p_147754_7_); } + @Override public boolean renderBlockFence(BlockFence p_147735_1_, int p_147735_2_, int p_147735_3_, int p_147735_4_) { return rb.renderBlockFence(p_147735_1_, p_147735_2_, p_147735_3_, p_147735_4_); } + @Override public boolean renderBlockWall(BlockWall p_147807_1_, int p_147807_2_, int p_147807_3_, int p_147807_4_) { return rb.renderBlockWall(p_147807_1_, p_147807_2_, p_147807_3_, p_147807_4_); } + @Override public boolean renderBlockDragonEgg(BlockDragonEgg p_147802_1_, int p_147802_2_, int p_147802_3_, int p_147802_4_) { return rb.renderBlockDragonEgg(p_147802_1_, p_147802_2_, p_147802_3_, p_147802_4_); } + @Override public boolean renderBlockFenceGate(BlockFenceGate p_147776_1_, int p_147776_2_, int p_147776_3_, int p_147776_4_) { return rb.renderBlockFenceGate(p_147776_1_, p_147776_2_, p_147776_3_, p_147776_4_); } + @Override public boolean renderBlockHopper(BlockHopper p_147803_1_, int p_147803_2_, int p_147803_3_, int p_147803_4_) { return rb.renderBlockHopper(p_147803_1_, p_147803_2_, p_147803_3_, p_147803_4_); } + @Override public boolean renderBlockHopperMetadata(BlockHopper p_147799_1_, int p_147799_2_, int p_147799_3_, int p_147799_4_, int p_147799_5_, boolean p_147799_6_) { return rb.renderBlockHopperMetadata(p_147799_1_, p_147799_2_, p_147799_3_, p_147799_4_, p_147799_5_, p_147799_6_); } + @Override public boolean renderBlockStairs(BlockStairs p_147722_1_, int p_147722_2_, int p_147722_3_, int p_147722_4_) { return rb.renderBlockStairs(p_147722_1_, p_147722_2_, p_147722_3_, p_147722_4_); } + @Override public boolean renderBlockDoor(Block p_147760_1_, int p_147760_2_, int p_147760_3_, int p_147760_4_) { return rb.renderBlockDoor(p_147760_1_, p_147760_2_, p_147760_3_, p_147760_4_); } + @Override public void renderFaceYNeg(Block p_147768_1_, double p_147768_2_, double p_147768_4_, double p_147768_6_, IIcon p_147768_8_) { rb.renderFaceYNeg(p_147768_1_, p_147768_2_, p_147768_4_, p_147768_6_, p_147768_8_); } + @Override public void renderFaceYPos(Block p_147806_1_, double p_147806_2_, double p_147806_4_, double p_147806_6_, IIcon p_147806_8_) { rb.renderFaceYPos(p_147806_1_, p_147806_2_, p_147806_4_, p_147806_6_, p_147806_8_); } + @Override public void renderFaceZNeg(Block p_147761_1_, double p_147761_2_, double p_147761_4_, double p_147761_6_, IIcon p_147761_8_) { rb.renderFaceZNeg(p_147761_1_, p_147761_2_, p_147761_4_, p_147761_6_, p_147761_8_); } + @Override public void renderFaceZPos(Block p_147734_1_, double p_147734_2_, double p_147734_4_, double p_147734_6_, IIcon p_147734_8_) { rb.renderFaceZPos(p_147734_1_, p_147734_2_, p_147734_4_, p_147734_6_, p_147734_8_); } + @Override public void renderFaceXNeg(Block p_147798_1_, double p_147798_2_, double p_147798_4_, double p_147798_6_, IIcon p_147798_8_) { rb.renderFaceXNeg(p_147798_1_, p_147798_2_, p_147798_4_, p_147798_6_, p_147798_8_); } + @Override public void renderFaceXPos(Block p_147764_1_, double p_147764_2_, double p_147764_4_, double p_147764_6_, IIcon p_147764_8_) { rb.renderFaceXPos(p_147764_1_, p_147764_2_, p_147764_4_, p_147764_6_, p_147764_8_); } + @Override public void renderBlockAsItem(Block p_147800_1_, int p_147800_2_, float p_147800_3_) { rb.renderBlockAsItem(p_147800_1_, p_147800_2_, p_147800_3_); } + @Override public IIcon getBlockIcon(Block p_147793_1_, IBlockAccess p_147793_2_, int p_147793_3_, int p_147793_4_, int p_147793_5_, int p_147793_6_) { return rb.getBlockIcon(p_147793_1_, p_147793_2_, p_147793_3_, p_147793_4_, p_147793_5_, p_147793_6_); } + @Override public IIcon getBlockIconFromSideAndMetadata(Block block, int side, int meta) { return rb.getBlockIconFromSideAndMetadata(block, side, meta); } + @Override public IIcon getBlockIconFromSide(Block block, int side) { return rb.getBlockIconFromSide(block, side); } + @Override public IIcon getBlockIcon(Block block) { return rb.getBlockIcon(block); } + @Override public IIcon getIconSafe(IIcon icon) { return rb.getIconSafe(icon); } +} diff --git a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java index c48e053fc..0a418577b 100644 --- a/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java +++ b/src/main/java/com/hbm/tileentity/IControlReceiverFilter.java @@ -5,7 +5,6 @@ import com.hbm.interfaces.IControlReceiver; import com.hbm.interfaces.ICopiable; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -36,7 +35,9 @@ public interface IControlReceiverFilter extends IControlReceiver, ICopiable { TileEntity tile = (TileEntity) this; IInventory inv = (IInventory) this; int slot = nbt.getInteger("slot"); - inv.setInventorySlotContents(slot, new ItemStack(Item.getItemById(nbt.getInteger("id")), 1, nbt.getInteger("meta"))); + NBTTagCompound stack = nbt.getCompoundTag("stack"); + ItemStack item = ItemStack.loadItemStackFromNBT(stack); + inv.setInventorySlotContents(slot, item); nextMode(slot); tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); } diff --git a/src/main/java/com/hbm/tileentity/IGUIProvider.java b/src/main/java/com/hbm/tileentity/IGUIProvider.java index f707f3d61..54fd42935 100644 --- a/src/main/java/com/hbm/tileentity/IGUIProvider.java +++ b/src/main/java/com/hbm/tileentity/IGUIProvider.java @@ -1,8 +1,5 @@ package com.hbm.tileentity; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.world.World; @@ -10,6 +7,5 @@ import net.minecraft.world.World; public interface IGUIProvider { public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z); - @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z); + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z); } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java index 0eeae10f0..2955f12f4 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -290,7 +289,7 @@ public class TileEntityBombMulti extends TileEntity implements ISidedInventory, @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBombMulti(player.inventory, this); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java index 60b75b91f..26c6ceea8 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java @@ -32,7 +32,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -625,7 +624,7 @@ public class TileEntityCompactLauncher extends TileEntityLoadedBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineCompactLauncher(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java index 0020e9045..997cd1f07 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java @@ -44,7 +44,6 @@ import api.hbm.item.IDesignatorItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -283,7 +282,7 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUILaunchPadLarge(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java index cdfa9eca8..8137fa469 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java @@ -21,7 +21,6 @@ import api.hbm.item.IDesignatorItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -204,7 +203,7 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUILaunchPadRusted(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java index e9e8ef8d2..ba3b56d40 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java @@ -36,7 +36,6 @@ 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 net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -724,7 +723,7 @@ public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISide @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineLaunchTable(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java index db18d4bfb..41ce3c37b 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java @@ -11,7 +11,6 @@ import com.hbm.tileentity.TileEntityMachineBase; import api.hbm.energymk2.IBatteryItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -186,7 +185,7 @@ public class TileEntityNukeBalefire extends TileEntityMachineBase implements IGU @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeFstbmb(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java index 39a3f4e54..5fdaa194d 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -213,7 +212,7 @@ public class TileEntityNukeBoy extends TileEntity implements ISidedInventory, IG @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeBoy(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java index e52ad8dc1..e245c8669 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java @@ -12,7 +12,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -446,7 +445,7 @@ public class TileEntityNukeCustom extends TileEntity implements ISidedInventory, @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeCustom(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java index 9209af0e7..b843bdb3e 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -222,7 +221,7 @@ public class TileEntityNukeFleija extends TileEntity implements ISidedInventory, @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeFleija(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java index 31e4b24f8..8eb136372 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -275,7 +274,7 @@ public class TileEntityNukeGadget extends TileEntity implements ISidedInventory, @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeGadget(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java index 0c208e92e..021789895 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -249,7 +248,7 @@ public class TileEntityNukeMan extends TileEntity implements ISidedInventory, IG @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeMan(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java index eef1a2dc2..1d924acd1 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -234,7 +233,7 @@ public class TileEntityNukeMike extends TileEntity implements ISidedInventory, I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeMike(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java index 382858356..099807c3a 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -223,7 +222,7 @@ public class TileEntityNukeN2 extends TileEntity implements ISidedInventory, IGU @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeN2(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java index 3fcc4d460..b3fa2dd11 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java @@ -8,7 +8,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -226,7 +225,7 @@ public class TileEntityNukePrototype extends TileEntity implements ISidedInvento @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukePrototype(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java index 5535654c7..45f5ccbf1 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -220,7 +219,7 @@ public class TileEntityNukeSolinium extends TileEntity implements ISidedInventor @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeSolinium(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java index a604b9271..f01665074 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -232,7 +231,7 @@ public class TileEntityNukeTsar extends TileEntity implements ISidedInventory, I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeTsar(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityAshpit.java b/src/main/java/com/hbm/tileentity/machine/TileEntityAshpit.java index acefaf0f2..99e32fe38 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityAshpit.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityAshpit.java @@ -15,7 +15,6 @@ import com.hbm.tileentity.TileEntityMachineBase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -212,7 +211,7 @@ public class TileEntityAshpit extends TileEntityMachineBase implements IGUIProvi @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIAshpit(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCore.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCore.java index 4fd9621ee..a3c1cd5be 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCore.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCore.java @@ -26,7 +26,6 @@ import com.hbm.util.CompatEnergyControl; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -357,7 +356,7 @@ public class TileEntityCore extends TileEntityMachineBase implements IGUIProvide @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICore(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java index 507035d8d..eae41a14a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java @@ -23,7 +23,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -332,7 +331,7 @@ public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEne @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICoreEmitter(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java index ee599910d..f84cc698f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreInjector.java @@ -16,7 +16,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -185,7 +184,7 @@ public class TileEntityCoreInjector extends TileEntityMachineBase implements IFl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICoreInjector(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java index 16f9fe511..574f40e56 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreReceiver.java @@ -20,7 +20,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; @@ -187,7 +186,7 @@ public class TileEntityCoreReceiver extends TileEntityMachineBase implements IEn @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICoreReceiver(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java index bb7e05bbb..1d8e8044d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreStabilizer.java @@ -18,7 +18,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -225,7 +224,7 @@ public class TileEntityCoreStabilizer extends TileEntityMachineBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICoreStabilizer(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java index 6655aa7e4..a799ab1b6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java @@ -33,7 +33,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -520,7 +519,7 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrucible(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java index afc3b4d8e..22aa98873 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCustomMachine.java @@ -32,7 +32,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -558,7 +557,7 @@ public class TileEntityCustomMachine extends TileEntityMachinePolluting implemen @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { if(this.config == null) return null; return new GUIMachineCustom(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnace.java index c1d3bb893..68d3cbc0d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnace.java @@ -18,7 +18,6 @@ import api.hbm.fluid.IFluidStandardSender; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -259,7 +258,7 @@ public class TileEntityDiFurnace extends TileEntityMachinePolluting implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIDiFurnace(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java index db4d16a27..b9d0bc3b4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java @@ -13,7 +13,6 @@ import com.hbm.util.RTGUtil; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -217,7 +216,7 @@ public class TileEntityDiFurnaceRTG extends TileEntityMachineBase implements IGU @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineDiFurnaceRTG(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java index ee353cee0..d176a753e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java @@ -37,7 +37,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -497,7 +496,7 @@ public class TileEntityElectrolyser extends TileEntityMachineBase implements IEn @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { if(ID == 0) return new GUIElectrolyserFluid(player.inventory, this); return new GUIElectrolyserMetal(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFEL.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFEL.java index 5867f36d2..e7f1e3858 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFEL.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFEL.java @@ -26,7 +26,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -313,7 +312,7 @@ public class TileEntityFEL extends TileEntityMachineBase implements IEnergyRecei @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIFEL(player.inventory, this); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java index 91d89b53e..19fcda459 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java @@ -17,7 +17,6 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -489,7 +488,7 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIForceField(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceBrick.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceBrick.java index be440a25c..2a87235c9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceBrick.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceBrick.java @@ -14,7 +14,6 @@ import com.hbm.tileentity.TileEntityMachineBase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; @@ -228,7 +227,7 @@ public class TileEntityFurnaceBrick extends TileEntityMachineBase implements IGU @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIFurnaceBrick(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java index 2020301b4..38dcca45f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceCombination.java @@ -20,7 +20,6 @@ import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -246,7 +245,7 @@ public class TileEntityFurnaceCombination extends TileEntityMachinePolluting imp @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIFurnaceCombo(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java index c85bb845d..cf9168efd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java @@ -17,7 +17,6 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -214,7 +213,7 @@ public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUI @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIFurnaceIron(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java index 4d6d7cbab..3de52135f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java @@ -13,7 +13,6 @@ import com.hbm.util.ItemStackUtil; import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -249,7 +248,7 @@ public class TileEntityFurnaceSteel extends TileEntityMachineBase implements IGU @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIFurnaceSteel(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java index acd6246fb..8ff655068 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHadron.java @@ -27,7 +27,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -896,7 +895,7 @@ public class TileEntityHadron extends TileEntityMachineBase implements IEnergyRe @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIHadron(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterFirebox.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterFirebox.java index c58b395e0..616fc978a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterFirebox.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterFirebox.java @@ -12,7 +12,6 @@ import com.hbm.tileentity.IConfigurableMachine; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.util.ResourceLocation; @@ -76,7 +75,7 @@ public class TileEntityHeaterFirebox extends TileEntityFireboxBase implements IC @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { if(texture == null) texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_firebox.png"); return new GUIFirebox(player.inventory, this, texture); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java index 6c5a3dc56..854f31fd8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java @@ -19,7 +19,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -193,7 +192,7 @@ public class TileEntityHeaterHeatex extends TileEntityMachineBase implements IHe @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIHeaterHeatex(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java index 2b0451477..e236a9090 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOilburner.java @@ -18,7 +18,6 @@ import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -157,7 +156,7 @@ public class TileEntityHeaterOilburner extends TileEntityMachinePolluting implem @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIOilburner(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOven.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOven.java index 2deec61e8..3453c2c19 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOven.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterOven.java @@ -13,7 +13,6 @@ import com.hbm.tileentity.IConfigurableMachine; import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.tileentity.TileEntity; @@ -100,7 +99,7 @@ public class TileEntityHeaterOven extends TileEntityFireboxBase implements IConf @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { if(texture == null) texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_heating_oven.png"); return new GUIFirebox(player.inventory, this, texture); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java b/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java index e48bf26fa..945b758c9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityICF.java @@ -30,7 +30,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -280,7 +279,7 @@ public class TileEntityICF extends TileEntityMachineBase implements IGUIProvider @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIICF(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java index b370c480d..ae353b4aa 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityICFPress.java @@ -20,7 +20,6 @@ import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -183,7 +182,7 @@ public class TileEntityICFPress extends TileEntityMachineBase implements IFluidS @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIICFPress(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java index 17119ce6e..2997ffc7b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java @@ -41,7 +41,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -546,7 +545,7 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyRece @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIITER(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java index 5e65220a5..702589b42 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java @@ -11,7 +11,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; public abstract class TileEntityLockableBase extends TileEntity { - + protected int lock; private boolean isLocked = false; protected double lockMod = 0.1D; @@ -19,107 +19,94 @@ public abstract class TileEntityLockableBase extends TileEntity { public boolean isLocked() { return isLocked; } - + public void lock() { - if(lock == 0) { MainRegistry.logger.error("A block has been set to locked state before setting pins, this should not happen and may cause errors! " + this.toString()); } - isLocked = true; } - - public void setPins(int pins) { - lock = pins; - } - - public int getPins() { - return lock; - } - - public void setMod(double mod) { - lockMod = mod; - } - - public double getMod() { - return lockMod; - } - + + public void setPins(int pins) { lock = pins; } + public int getPins() { return lock; } + public void setMod(double mod) { lockMod = mod; } + public double getMod() { return lockMod; } + @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); - + lock = nbt.getInteger("lock"); isLocked = nbt.getBoolean("isLocked"); lockMod = nbt.getDouble("lockMod"); } - + @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - + nbt.setInteger("lock", lock); nbt.setBoolean("isLocked", isLocked); nbt.setDouble("lockMod", lockMod); } public boolean canAccess(EntityPlayer player) { - + if(!isLocked) { return true; } else { - if(player == null) return false; + if(player == null) + return false; ItemStack stack = player.getHeldItem(); - - if(stack != null && stack.getItem() instanceof ItemKey && - ItemKey.getPins(stack) == this.lock) { - worldObj.playSoundAtEntity(player, "hbm:block.lockOpen", 1.0F, 1.0F); + + if(stack != null && stack.getItem() instanceof ItemKey && ItemKey.getPins(stack) == this.lock) { + worldObj.playSoundAtEntity(player, "hbm:block.lockOpen", 1.0F, 1.0F); return true; } - + if(stack != null && stack.getItem() == ModItems.key_red) { - worldObj.playSoundAtEntity(player, "hbm:block.lockOpen", 1.0F, 1.0F); + worldObj.playSoundAtEntity(player, "hbm:block.lockOpen", 1.0F, 1.0F); return true; } - + return tryPick(player); } } - + private boolean tryPick(EntityPlayer player) { boolean canPick = false; ItemStack stack = player.getHeldItem(); double chanceOfSuccess = this.lockMod * 100; - - if(stack != null && stack.getItem() == ModItems.pin && player.inventory.hasItem(ModItems.screwdriver)) { - + + if(stack != null && stack.getItem() == ModItems.pin && (player.inventory.hasItem(ModItems.screwdriver) || player.inventory.hasItem(ModItems.screwdriver_desh))) { + stack.stackSize--; canPick = true; } - - if(stack != null && stack.getItem() == ModItems.screwdriver && player.inventory.hasItem(ModItems.pin)) { - + + if(stack != null && (stack.getItem() == ModItems.screwdriver || stack.getItem() == ModItems.screwdriver_desh) && player.inventory.hasItem(ModItems.pin)) { + player.inventory.consumeInventoryItem(ModItems.pin); player.inventoryContainer.detectAndSendChanges(); canPick = true; } - + if(canPick) { - + if(ArmorUtil.checkArmorPiece(player, ModItems.jackt, 2) || ArmorUtil.checkArmorPiece(player, ModItems.jackt2, 2)) chanceOfSuccess *= 100D; - + double rand = player.worldObj.rand.nextDouble() * 100; - + if(chanceOfSuccess > rand) { - worldObj.playSoundAtEntity(player, "hbm:item.pinUnlock", 1.0F, 1.0F); + worldObj.playSoundAtEntity(player, "hbm:item.pinUnlock", 1.0F, 1.0F); return true; } - worldObj.playSoundAtEntity(player, "hbm:item.pinBreak", 1.0F, 0.8F + player.worldObj.rand.nextFloat() * 0.2F); + worldObj.playSoundAtEntity(player, "hbm:item.pinBreak", 1.0F, 0.8F + player.worldObj.rand.nextFloat() * 0.2F); } - + return false; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java index a01b3b6f6..7777ac492 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAmgen.java @@ -1,7 +1,6 @@ package com.hbm.tileentity.machine; import com.hbm.blocks.ModBlocks; -import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.CompatEnergyControl; @@ -27,12 +26,7 @@ public class TileEntityMachineAmgen extends TileEntityLoadedBase implements IEne Block block = worldObj.getBlock(xCoord, yCoord, zCoord); - if(block == ModBlocks.machine_amgen) { - float rad = ChunkRadiationManager.proxy.getRadiation(worldObj, xCoord, yCoord, zCoord); - this.output += rad; - ChunkRadiationManager.proxy.decrementRad(worldObj, xCoord, yCoord, zCoord, 5F); - - } else if(block == ModBlocks.machine_geo) { + if(block == ModBlocks.machine_geo) { this.checkGeoInteraction(xCoord, yCoord + 1, zCoord); this.checkGeoInteraction(xCoord, yCoord - 1, zCoord); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java index bff0afcdb..e2090764d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java @@ -18,7 +18,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -392,7 +391,7 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineArcFurnace(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java index c1e92720a..874a815ef 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java @@ -36,7 +36,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -549,7 +548,7 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineArcFurnaceLarge(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java index 42743ff25..82c0d7547 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcWelder.java @@ -27,7 +27,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -336,7 +335,7 @@ public class TileEntityMachineArcWelder extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineArcWelder(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java index c16320387..9755049d3 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssembler.java @@ -21,7 +21,6 @@ import api.hbm.energymk2.IBatteryItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -264,7 +263,7 @@ public class TileEntityMachineAssembler extends TileEntityMachineAssemblerBase i @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineAssembler(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java index 60ad1e512..9a443510a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemfac.java @@ -22,7 +22,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -445,7 +444,7 @@ public class TileEntityMachineAssemfac extends TileEntityMachineAssemblerBase im @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIAssemfac(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java index 0945b4ba8..a9bc5fc86 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutocrafter.java @@ -15,12 +15,10 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.IRecipe; @@ -339,7 +337,7 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIAutocrafter(player.inventory, this); } @@ -354,11 +352,10 @@ public class TileEntityMachineAutocrafter extends TileEntityMachineBase implemen IInventory inv = this; int slot = nbt.getInteger("slot"); if(slot > 8) return; - ItemStack item = new ItemStack(Item.getItemById(nbt.getInteger("id")), 1, nbt.getInteger("meta")); + NBTTagCompound stack = nbt.getCompoundTag("stack"); + ItemStack item = ItemStack.loadItemStackFromNBT(stack); inv.setInventorySlotContents(slot, item); matcher.initPatternSmart(getWorldObj(), item, slot); - updateTemplateGrid(); - nextMode(slot); tile.getWorldObj().markTileEntityChunkModified(tile.xCoord, tile.yCoord, tile.zCoord, tile); updateTemplateGrid(); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java index 430bca4db..ebcb7381b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCentrifuge.java @@ -27,7 +27,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -345,7 +344,7 @@ public class TileEntityMachineCentrifuge extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineCentrifuge(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java index cd3d5cf4a..c1f38d691 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemfac.java @@ -23,7 +23,6 @@ import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -358,7 +357,7 @@ public class TileEntityMachineChemfac extends TileEntityMachineChemplantBase imp @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIChemfac(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java index 5febdcbe3..256b98e1f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java @@ -30,7 +30,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -576,7 +575,7 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineChemplant(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java index d2b1df919..788629924 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java @@ -24,7 +24,6 @@ import api.hbm.energymk2.IEnergyProviderMK2; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -263,7 +262,7 @@ public class TileEntityMachineCombustionEngine extends TileEntityMachinePollutin @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICombustionEngine(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java index e657f4a90..eb4c50eb4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java @@ -28,7 +28,6 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -257,7 +256,7 @@ public class TileEntityMachineCompressor extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICompressor(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java index 9c81c20ad..0fe75035d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java @@ -29,7 +29,6 @@ import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -363,7 +362,7 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrystallizer(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java index 074c8a031..7224feee4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java @@ -28,7 +28,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -351,7 +350,7 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineCyclotron(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java index d197e1a35..d971abae4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java @@ -29,7 +29,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -293,7 +292,7 @@ public class TileEntityMachineDiesel extends TileEntityMachinePolluting implemen @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineDiesel(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java index 081aab10a..69de4e64f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java @@ -20,7 +20,6 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -261,7 +260,7 @@ public class TileEntityMachineEPress extends TileEntityMachineBase implements IE @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineEPress(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java index 26c2630f7..0442a250d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java @@ -21,7 +21,6 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -276,7 +275,7 @@ public class TileEntityMachineElectricFurnace extends TileEntityMachineBase impl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineElectricFurnace(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java index 1090ae1f8..479a91fe7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExcavator.java @@ -44,7 +44,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -803,7 +802,7 @@ public class TileEntityMachineExcavator extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineExcavator(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java index d733720ba..190b9b7d2 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineExposureChamber.java @@ -21,7 +21,6 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -312,7 +311,7 @@ public class TileEntityMachineExposureChamber extends TileEntityMachineBase impl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineExposureChamber(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineFunnel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineFunnel.java index 23ec51164..7243f1802 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineFunnel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineFunnel.java @@ -13,7 +13,6 @@ import com.hbm.tileentity.machine.TileEntityMachineAutocrafter.InventoryCrafting import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.InventoryCrafting; @@ -162,7 +161,7 @@ public class TileEntityMachineFunnel extends TileEntityMachineBase implements IG @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIFunnel(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java index 92fb4d7a7..384e252c7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineGasCent.java @@ -27,7 +27,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -461,7 +460,7 @@ public class TileEntityMachineGasCent extends TileEntityMachineBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineGasCent(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java index 7996973c8..64961ce37 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIGenerator.java @@ -16,7 +16,6 @@ import api.hbm.fluid.IFluidStandardReceiver; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -287,7 +286,7 @@ public class TileEntityMachineIGenerator extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIIGenerator(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java index 67016d814..a67428973 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java @@ -9,7 +9,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -206,7 +205,7 @@ public class TileEntityMachineKeyForge extends TileEntity implements ISidedInven @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineKeyForge(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java index aeac7e480..a77cfaf2e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java @@ -34,7 +34,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -356,7 +355,7 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineLargeTurbine(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java index e5ad38a1b..9ea737988 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java @@ -32,7 +32,6 @@ import api.hbm.fluid.IFluidStandardSender; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -644,7 +643,7 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMiningLaser(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java index 9560bbd23..c7e49bdfc 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java @@ -14,7 +14,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -317,7 +316,7 @@ public class TileEntityMachineMissileAssembly extends TileEntity implements ISid @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineMissileAssembly(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java index 2e8b2751a..c1447512c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java @@ -23,7 +23,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -312,7 +311,7 @@ public class TileEntityMachineMixer extends TileEntityMachineBase implements INB @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMixer(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java index 28c7c8604..b37ae8279 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineOreSlopper.java @@ -34,7 +34,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -377,7 +376,7 @@ public class TileEntityMachineOreSlopper extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIOreSlopper(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java index fb7e2b9c4..38aaf9fb2 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java @@ -20,7 +20,6 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -258,7 +257,7 @@ public class TileEntityMachinePlasmaHeater extends TileEntityMachineBase impleme @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPlasmaHeater(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java index 58a31e5bd..bc8c4c531 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java @@ -10,7 +10,6 @@ import com.hbm.tileentity.TileEntityMachineBase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -260,7 +259,7 @@ public class TileEntityMachinePress extends TileEntityMachineBase implements IGU @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachinePress(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java index 6172e954e..0ce599eea 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java @@ -16,7 +16,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -248,7 +247,7 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineRTG(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadGen.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadGen.java index 825937515..d47e22261 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadGen.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadGen.java @@ -18,7 +18,6 @@ import api.hbm.energymk2.IEnergyProviderMK2; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -293,7 +292,7 @@ public class TileEntityMachineRadGen extends TileEntityMachineBase implements IE @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineRadGen(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java index 57d08843e..7f0b5a801 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadarNT.java @@ -49,7 +49,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -545,7 +544,7 @@ public class TileEntityMachineRadarNT extends TileEntityMachineBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { if(ID == 0) return new GUIMachineRadarNT(this); if(ID == 1) return new GUIMachineRadarNTSlots(player.inventory, this); return null; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java index e9d131651..618e2735b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java @@ -24,7 +24,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemFood; @@ -288,7 +287,7 @@ public class TileEntityMachineRadiolysis extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRadiolysis(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java index ceb1bef2c..53d0f0725 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineReactorBreeding.java @@ -20,7 +20,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -247,7 +246,7 @@ public class TileEntityMachineReactorBreeding extends TileEntityMachineBase impl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineReactorBreeding(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java index f195414d3..bbe713965 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java @@ -12,7 +12,6 @@ import com.hbm.saveddata.satellites.SatelliteMiner; import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -340,7 +339,7 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUISatDock(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java index 8c3583106..7e95c91ad 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java @@ -8,7 +8,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -190,7 +189,7 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineSatLinker(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java index 7f9241d46..4cd964da3 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java @@ -16,7 +16,6 @@ import api.hbm.energymk2.IBatteryItem; import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -255,7 +254,7 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineSchrabidiumTransmutator(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java index 53cf6a7d4..67ad5583c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java @@ -15,7 +15,6 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -430,7 +429,7 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineShredder(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java index 9cd3671b4..7c10537d6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java @@ -14,7 +14,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -233,7 +232,7 @@ public class TileEntityMachineSiren extends TileEntity implements ISidedInventor @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineSiren(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java index 4adc07649..2fb4a1380 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java @@ -28,7 +28,6 @@ import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -313,7 +312,7 @@ public class TileEntityMachineSolderingStation extends TileEntityMachineBase imp @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineSolderingStation(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java index 235cc9c1f..d27f59aac 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java @@ -19,7 +19,6 @@ import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -250,7 +249,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineStrandCaster(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java index 4d4303b7c..9ea860818 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -32,7 +32,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -388,7 +387,7 @@ public class TileEntityMachineTurbine extends TileEntityLoadedBase implements IS @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineTurbine(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java index 31bf5641b..1f83acbff 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbineGas.java @@ -33,7 +33,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -697,7 +696,7 @@ public class TileEntityMachineTurbineGas extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineTurbineGas(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java index a16db611c..c8ad6e894 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java @@ -35,7 +35,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -470,7 +469,7 @@ public class TileEntityMachineTurbofan extends TileEntityMachinePolluting implem @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineTurbofan(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java index 406ac1452..110b9eba7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineWoodBurner.java @@ -26,7 +26,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -235,7 +234,7 @@ public class TileEntityMachineWoodBurner extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineWoodBurner(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java index 9e11bf74c..2aae7e41c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMicrowave.java @@ -16,7 +16,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemFood; @@ -252,7 +251,7 @@ public class TileEntityMicrowave extends TileEntityMachineBase implements IEnerg @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMicrowave(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityNukeFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityNukeFurnace.java index 251ce6270..2db74b2fe 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityNukeFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityNukeFurnace.java @@ -13,7 +13,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -407,7 +406,7 @@ public class TileEntityNukeFurnace extends TileEntity implements ISidedInventory @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUINukeFurnace(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java index 15fe1d786..d6d790a46 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java @@ -34,7 +34,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -603,7 +602,7 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPWR(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityRadiobox.java b/src/main/java/com/hbm/tileentity/machine/TileEntityRadiobox.java index 7b4751c96..4391993ce 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityRadiobox.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityRadiobox.java @@ -12,7 +12,6 @@ import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.monster.IMob; import net.minecraft.entity.player.EntityPlayer; @@ -104,7 +103,7 @@ public class TileEntityRadiobox extends TileEntityLoadedBase implements IEnergyR @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java index 0a5fad22a..ccf44a185 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorControl.java @@ -18,7 +18,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -301,7 +300,7 @@ public class TileEntityReactorControl extends TileEntityMachineBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIReactorControl(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java index e242b5ee2..c04a16f92 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorResearch.java @@ -27,7 +27,6 @@ import li.cil.oc.api.machine.Context; import li.cil.oc.api.network.SimpleComponent; import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; @@ -477,7 +476,7 @@ public class TileEntityReactorResearch extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIReactorResearch(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java index d1a46f430..418fc91a5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityReactorZirnox.java @@ -37,7 +37,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -555,7 +554,7 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIReactorZirnox(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java index 0e9e87eaf..1b2c61d5b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java @@ -8,7 +8,6 @@ import com.hbm.util.RTGUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.inventory.Container; @@ -303,7 +302,7 @@ public class TileEntityRtgFurnace extends TileEntity implements ISidedInventory, @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRtgFurnace(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySILEX.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySILEX.java index ec233595f..923cc5e93 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySILEX.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySILEX.java @@ -24,7 +24,6 @@ import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -361,7 +360,7 @@ public class TileEntitySILEX extends TileEntityMachineBase implements IFluidStan @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUISILEX(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java index a4ac8c16b..5163eaf84 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java @@ -24,7 +24,6 @@ import api.hbm.fluid.IFluidStandardReceiver; import api.hbm.item.IDesignatorItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -450,7 +449,7 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUISoyuzLauncher(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java b/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java index f3504dbb6..0ea865d8d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java @@ -24,7 +24,6 @@ import api.hbm.fluid.IFluidStandardSender; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -276,7 +275,7 @@ public class TileEntityStorageDrum extends TileEntityMachineBase implements IFlu @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIStorageDrum(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java index 14f86bab4..238a68c28 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java @@ -9,7 +9,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; @@ -229,7 +228,7 @@ public class TileEntityWasteDrum extends TileEntity implements ISidedInventory, @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIWasteDrum(player.inventory, this); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java index 8d3f3abe6..6ec9b1fa4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java @@ -33,7 +33,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.inventory.Container; @@ -532,7 +531,7 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIWatz(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java index 25d9db59d..364b50ee0 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java @@ -21,7 +21,6 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -249,7 +248,7 @@ public class TileEntityMachineCatalyticReformer extends TileEntityMachineBase im @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineCatalyticReformer(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java index 11efb7c15..5fbbf66e4 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java @@ -20,7 +20,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import api.hbm.tile.IHeatSource; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -287,7 +286,7 @@ public class TileEntityMachineCoker extends TileEntityMachineBase implements IFl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineCoker(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java index 3ad671ca9..3f1d1b7e8 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFrackingTower.java @@ -22,7 +22,6 @@ import com.hbm.world.feature.OilSpot; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.util.EnumChatFormatting; @@ -209,7 +208,7 @@ public class TileEntityMachineFrackingTower extends TileEntityOilDrillBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineOilWell(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java index 2b2fa4b8d..6d19ae824 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java @@ -31,7 +31,6 @@ import api.hbm.fluid.IFluidStandardReceiver; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -295,7 +294,7 @@ public class TileEntityMachineGasFlare extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineGasFlare(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java index 1c278320d..7b9424546 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineHydrotreater.java @@ -21,7 +21,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -220,7 +219,7 @@ public class TileEntityMachineHydrotreater extends TileEntityMachineBase impleme @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineHydrotreater(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java index 3efa2327f..eb78670d3 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java @@ -25,7 +25,6 @@ import api.hbm.fluid.IFluidStandardSender; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -235,7 +234,7 @@ public class TileEntityMachineLiquefactor extends TileEntityMachineBase implemen @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUILiquefactor(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java index d86a6c40c..942a10788 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineOilWell.java @@ -19,7 +19,6 @@ import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -166,7 +165,7 @@ public class TileEntityMachineOilWell extends TileEntityOilDrillBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineOilWell(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java index 7d836a45f..c61f96f7e 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePumpjack.java @@ -19,7 +19,6 @@ import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -205,7 +204,7 @@ public class TileEntityMachinePumpjack extends TileEntityOilDrillBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineOilWell(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java index eb1fb4e98..fb5757aef 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachinePyroOven.java @@ -20,6 +20,7 @@ import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.IUpgradeInfoProvider; import com.hbm.tileentity.TileEntityMachinePolluting; +import com.hbm.util.BobMathUtil; import com.hbm.util.I18nUtil; import com.hbm.util.fauxpointtwelve.DirPos; @@ -28,7 +29,6 @@ import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -87,13 +87,14 @@ public class TileEntityMachinePyroOven extends TileEntityMachinePolluting implem UpgradeManager.eval(slots, 4, 5); int speed = Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3); int powerSaving = Math.min(UpgradeManager.getLevel(UpgradeType.POWER), 3); + int overdrive = Math.min(UpgradeManager.getLevel(UpgradeType.OVERDRIVE), 3); this.isProgressing = false; this.isVenting = false; if(this.canProcess()) { PyroOvenRecipe recipe = getMatchingRecipe(); - this.progress += 1F / (recipe.duration - speed * (recipe.duration / 4)); + this.progress += 1F / Math.max((recipe.duration - speed * (recipe.duration / 4)) / (overdrive * 2 + 1), 1); this.isProgressing = true; this.power -= this.getConsumption(speed, powerSaving); @@ -207,7 +208,7 @@ public class TileEntityMachinePyroOven extends TileEntityMachinePolluting implem if(recipe == null) return false; // no matching recipe if(recipe.inputFluid != null && tanks[0].getFill() < recipe.inputFluid.fill) return false; // not enough input fluid if(recipe.inputItem != null && slots[1].stackSize < recipe.inputItem.stacksize) return false; // not enough input item - if(recipe.outputFluid != null && recipe.outputFluid.fill + tanks[1].getFill() > tanks[1].getMaxFill()) return false; // too much output fluid + if(recipe.outputFluid != null && recipe.outputFluid.fill + tanks[1].getFill() > tanks[1].getMaxFill() && recipe.outputFluid.type == tanks[1].getTankType()) return false; // too much output fluid if(recipe.outputItem != null && slots[2] != null && recipe.outputItem.stackSize + slots[2].stackSize > slots[2].getMaxStackSize()) return false; // too much output item if(recipe.outputItem != null && slots[2] != null && recipe.outputItem.getItem() != slots[2].getItem()) return false; // output item doesn't match if(recipe.outputItem != null && slots[2] != null && recipe.outputItem.getItemDamage() != slots[2].getItemDamage()) return false; // output meta doesn't match @@ -341,7 +342,7 @@ public class TileEntityMachinePyroOven extends TileEntityMachinePolluting implem @Override public FluidTank[] getReceivingTanks() { return new FluidTank[] { tanks[0] }; } @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerPyroOven(player.inventory, this); } - @Override public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPyroOven(player.inventory, this); } + @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPyroOven(player.inventory, this); } @Override public boolean canProvideInfo(UpgradeType type, int level, boolean extendedInfo) { @@ -358,12 +359,16 @@ public class TileEntityMachinePyroOven extends TileEntityMachinePolluting implem if(type == UpgradeType.POWER) { info.add(EnumChatFormatting.GREEN + I18nUtil.resolveKey(this.KEY_CONSUMPTION, "-" + (100 - 100 / (level + 1)) + "%")); } + if(type == UpgradeType.OVERDRIVE) { + info.add((BobMathUtil.getBlink() ? EnumChatFormatting.RED : EnumChatFormatting.DARK_GRAY) + "YES"); + } } @Override public int getMaxLevel(UpgradeType type) { if(type == UpgradeType.SPEED) return 3; if(type == UpgradeType.POWER) return 3; + if(type == UpgradeType.OVERDRIVE) return 3; return 0; } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java index e675dd2b2..1aa19b43b 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java @@ -33,7 +33,6 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -460,7 +459,7 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineRefinery(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java index c415caad5..2110112c3 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java @@ -25,7 +25,6 @@ import api.hbm.fluid.IFluidStandardReceiver; import api.hbm.tile.IInfoProviderEC; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -251,7 +250,7 @@ public class TileEntityMachineSolidifier extends TileEntityMachineBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUISolidifier(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java index 32fe42ea5..f01cc989c 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java @@ -21,7 +21,6 @@ import api.hbm.energymk2.IEnergyReceiverMK2; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -301,7 +300,7 @@ public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implem @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineVacuumDistill(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java index 7a1a6ec0b..1076989f8 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java @@ -25,7 +25,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -308,7 +307,7 @@ public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKBoiler(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index ffbaea36f..ca269016a 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -21,7 +21,6 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -516,7 +515,7 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKConsole(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java index dc4159964..a0c38f10f 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java @@ -8,7 +8,6 @@ import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlManual.RBMKColor; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -141,7 +140,7 @@ public class TileEntityRBMKControlAuto extends TileEntityRBMKControl implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKControlAuto(player.inventory, this); } } \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java index 92ec4377e..9b25682cc 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java @@ -12,7 +12,6 @@ import cpw.mods.fml.relauncher.SideOnly; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -157,7 +156,7 @@ public class TileEntityRBMKControlManual extends TileEntityRBMKControl implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKControl(player.inventory, this); } } 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 941fb9637..54fb66914 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKHeater.java @@ -21,7 +21,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; @@ -238,7 +237,7 @@ public class TileEntityRBMKHeater extends TileEntityRBMKSlottedBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKHeater(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java index 81c74e75d..573739520 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKOutgasser.java @@ -21,7 +21,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -271,7 +270,7 @@ public class TileEntityRBMKOutgasser extends TileEntityRBMKSlottedBase implement @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKOutgasser(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java index 70750e00a..aebb8808a 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java @@ -23,7 +23,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -503,7 +502,7 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKRod(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java index a670b6c09..4177df02e 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKStorage.java @@ -6,7 +6,6 @@ import com.hbm.items.machine.ItemRBMKRod; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -92,7 +91,7 @@ public class TileEntityRBMKStorage extends TileEntityRBMKSlottedBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIRBMKStorage(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java index afd7bdf96..7b3a05182 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java @@ -28,7 +28,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -338,7 +337,7 @@ public class TileEntityBarrel extends TileEntityMachineBase implements SimpleCom @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIBarrel(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateDesh.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateDesh.java index e0c33c30a..45ede4cbc 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateDesh.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateDesh.java @@ -5,7 +5,6 @@ import com.hbm.inventory.gui.GUICrateDesh; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.world.World; @@ -28,7 +27,7 @@ public class TileEntityCrateDesh extends TileEntityCrateBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrateDesh(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateIron.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateIron.java index 23e079344..88a398ca8 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateIron.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateIron.java @@ -5,7 +5,6 @@ import com.hbm.inventory.gui.GUICrateIron; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.world.World; @@ -28,7 +27,7 @@ public class TileEntityCrateIron extends TileEntityCrateBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrateIron(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateSteel.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateSteel.java index abb9cf0cb..1af683e40 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateSteel.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateSteel.java @@ -5,7 +5,6 @@ import com.hbm.inventory.gui.GUICrateSteel; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.world.World; @@ -28,7 +27,7 @@ public class TileEntityCrateSteel extends TileEntityCrateBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrateSteel(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTemplate.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTemplate.java index c22a6e669..a26b3e0b0 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTemplate.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTemplate.java @@ -5,7 +5,6 @@ import com.hbm.inventory.gui.GUICrateTemplate; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.world.World; @@ -28,7 +27,7 @@ public class TileEntityCrateTemplate extends TileEntityCrateBase { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrateTemplate(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTungsten.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTungsten.java index d6a1536b1..ecb1eca61 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTungsten.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateTungsten.java @@ -7,7 +7,6 @@ import com.hbm.items.ModItems; import api.hbm.block.ILaserable; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -109,7 +108,7 @@ public class TileEntityCrateTungsten extends TileEntityCrateBase implements ILas @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICrateTungsten(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java index 42122c5ed..f9a00332e 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityFileCabinet.java @@ -11,7 +11,6 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -117,7 +116,7 @@ public class TileEntityFileCabinet extends TileEntityCrateBase implements IGUIPr @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIFileCabinet(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java index 51448207a..41681df6e 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java @@ -25,7 +25,6 @@ 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 net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -340,7 +339,7 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineBattery(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java index ec59e2493..7c514664b 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java @@ -33,7 +33,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -394,7 +393,7 @@ public class TileEntityMachineFluidTank extends TileEntityMachineBase implements @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineFluidTank(player.inventory, (TileEntityMachineFluidTank) world.getTileEntity(x, y, z)); } 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 031b2a03d..bc96fd30f 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -8,7 +8,6 @@ import com.hbm.tileentity.INBTPacketReceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -218,7 +217,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements INBTPa @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMassStorage(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySafe.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySafe.java index f9197b479..95f4c63cd 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySafe.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySafe.java @@ -5,7 +5,6 @@ import com.hbm.inventory.gui.GUISafe; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; @@ -29,7 +28,7 @@ public class TileEntitySafe extends TileEntityCrateBase implements ISidedInvento @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUISafe(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySoyuzCapsule.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySoyuzCapsule.java index f4d785a7d..2d024986c 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySoyuzCapsule.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntitySoyuzCapsule.java @@ -7,7 +7,6 @@ import com.hbm.tileentity.TileEntityInventoryBase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.util.AxisAlignedBB; @@ -37,7 +36,7 @@ public class TileEntitySoyuzCapsule extends TileEntityInventoryBase implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUISoyuzCapsule(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java index a634dcc79..32032c87d 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java @@ -9,7 +9,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -187,7 +186,7 @@ public class TileEntityCraneBoxer extends TileEntityCraneBase implements IGUIPro @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICraneBoxer(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index 51858b52a..aab0e354d 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -12,7 +12,6 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -223,7 +222,7 @@ public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGU @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICraneExtractor(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java index 7d8233da6..728ff2e67 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java @@ -14,7 +14,6 @@ import com.hbm.util.InventoryUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -167,7 +166,7 @@ public class TileEntityCraneGrabber extends TileEntityCraneBase implements IGUIP @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICraneGrabber(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java index 151bf3628..afd6012ed 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java @@ -10,7 +10,6 @@ import com.hbm.util.InventoryUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -126,7 +125,7 @@ public class TileEntityCraneInserter extends TileEntityCraneBase implements IGUI @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICraneInserter(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java index 18a7df72e..3307a4b76 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java @@ -9,7 +9,6 @@ import com.hbm.tileentity.TileEntityMachineBase; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; @@ -75,7 +74,7 @@ public class TileEntityCraneRouter extends TileEntityMachineBase implements IGUI @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICraneRouter(player.inventory, this); } @Override diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneUnboxer.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneUnboxer.java index 31dd46c1e..37ea89d81 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneUnboxer.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneUnboxer.java @@ -9,7 +9,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -115,7 +114,7 @@ public class TileEntityCraneUnboxer extends TileEntityCraneBase implements IGUIP @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUICraneUnboxer(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java index 449d44386..bb835d1a7 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java @@ -19,7 +19,6 @@ import com.hbm.util.fauxpointtwelve.BlockPos; import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -248,7 +247,7 @@ public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIP @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIDroneCrate(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java index 0ab0a73b7..32382fc6e 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java @@ -20,7 +20,6 @@ import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -182,7 +181,7 @@ public class TileEntityDroneDock extends TileEntityRequestNetworkContainer imple @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIDroneDock(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneProvider.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneProvider.java index 0b32073e6..d79ae02bc 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneProvider.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneProvider.java @@ -12,7 +12,6 @@ import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -51,7 +50,7 @@ public class TileEntityDroneProvider extends TileEntityRequestNetworkContainer i @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIDroneProvider(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java index 7a572305a..0d4739c96 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java @@ -18,7 +18,6 @@ import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -97,7 +96,7 @@ public class TileEntityDroneRequester extends TileEntityRequestNetworkContainer @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIDroneRequester(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java index 26d6dec14..86a0fc4d4 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRadioTelex.java @@ -18,7 +18,6 @@ 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.client.gui.GuiScreen; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; @@ -229,7 +228,7 @@ public class TileEntityRadioTelex extends TileEntity implements INBTPacketReceiv @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GuiScreenRadioTelex(this); } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java index b598e0a99..65d816b2a 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretArty.java @@ -22,7 +22,6 @@ import cpw.mods.fml.relauncher.SideOnly; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.Item; @@ -465,7 +464,7 @@ public class TileEntityTurretArty extends TileEntityTurretBaseArtillery implemen @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretArty(player.inventory, this); } @Callback diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBrandon.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBrandon.java index dd6c17687..e04fef2f6 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBrandon.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretBrandon.java @@ -4,7 +4,6 @@ import java.util.List; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.world.World; @@ -42,7 +41,7 @@ public class TileEntityTurretBrandon extends TileEntityTurretBaseNT { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretChekhov.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretChekhov.java index 64f329a79..fd3a0f743 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretChekhov.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretChekhov.java @@ -13,7 +13,6 @@ import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; @@ -175,7 +174,7 @@ public class TileEntityTurretChekhov extends TileEntityTurretBaseNT { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretChekhov(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFriendly.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFriendly.java index 3a0d0126d..8c3a96667 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFriendly.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFriendly.java @@ -9,7 +9,6 @@ import com.hbm.inventory.gui.GUITurretFriendly; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; @@ -49,7 +48,7 @@ public class TileEntityTurretFriendly extends TileEntityTurretChekhov { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretFriendly(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java index 9303c7a97..226fd6bd4 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java @@ -23,7 +23,6 @@ import com.hbm.tileentity.IFluidCopiable; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -226,7 +225,7 @@ public class TileEntityTurretFritz extends TileEntityTurretBaseNT implements IFl @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretFritz(player.inventory, this); } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java index 149dc136c..85027c114 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHIMARS.java @@ -20,7 +20,6 @@ import cpw.mods.fml.relauncher.SideOnly; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; import li.cil.oc.api.machine.Context; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -374,7 +373,7 @@ public class TileEntityTurretHIMARS extends TileEntityTurretBaseArtillery implem @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretHIMARS(player.inventory, this); } @Callback diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHoward.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHoward.java index f726cdff3..87e0414bd 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHoward.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHoward.java @@ -18,7 +18,6 @@ import com.hbm.util.EntityDamageUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; @@ -216,7 +215,7 @@ public class TileEntityTurretHoward extends TileEntityTurretBaseNT { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretHoward(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java index c3e9d7655..4ef7fd51e 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretHowardDamaged.java @@ -10,7 +10,6 @@ import com.hbm.util.EntityDamageUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -108,7 +107,7 @@ public class TileEntityTurretHowardDamaged extends TileEntityTurretHoward { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return null; } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretJeremy.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretJeremy.java index e5c323f2b..8c16ce6b4 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretJeremy.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretJeremy.java @@ -13,7 +13,6 @@ import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; @@ -142,7 +141,7 @@ public class TileEntityTurretJeremy extends TileEntityTurretBaseNT { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretJeremy(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java index 43dacb564..e31f72dfb 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java @@ -19,7 +19,6 @@ import com.hbm.util.I18nUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; @@ -279,7 +278,7 @@ public class TileEntityTurretMaxwell extends TileEntityTurretBaseNT implements I @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretMaxwell(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretRichard.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretRichard.java index f6c95d847..9a61f8a88 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretRichard.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretRichard.java @@ -15,7 +15,6 @@ import cpw.mods.fml.relauncher.SideOnly; import com.hbm.items.ModItems; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; @@ -176,7 +175,7 @@ public class TileEntityTurretRichard extends TileEntityTurretBaseNT { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretRichard(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java index 76420c588..8a817c96a 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java @@ -15,7 +15,6 @@ import com.hbm.tileentity.IGUIProvider; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; @@ -256,7 +255,7 @@ public class TileEntityTurretSentry extends TileEntityTurretBaseNT implements IG @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretSentry(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java index 10d95d561..038f189eb 100644 --- a/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java +++ b/src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java @@ -13,7 +13,6 @@ import com.hbm.packet.toclient.AuxParticlePacketNT; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.Vec3; @@ -159,7 +158,7 @@ public class TileEntityTurretTauon extends TileEntityTurretBaseNT { @Override @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUITurretTauon(player.inventory, this); } } diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test.png b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test.png new file mode 100644 index 0000000000000000000000000000000000000000..0536225819854c20770ab516c322a1898c3af991 GIT binary patch literal 467 zcmV;^0WAKBP)g+hErWcaL#d2N=d!f)R_nSR0H4q2#3F=%*7{`d zFbn{^Uau^#GR7R=5vIm+=x>o~t*PGc_fcm2ZKkz0oA({Jh;X^xZqFDa-h1l0J{jb_ zXB`CkbM90Vk<1c6Yt6N6GR6Qf&+{p+@&qOp)>=Xc`~}AVVM)~oD+d4o002ov JPDHLkV1iz!&tm`p literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_2.png b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1a12e728c9efb74d17b31b02e1f7175691cefd0a GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf#B>hv_IxVoR-tk`dIUC-7I69YJQ%cU9FPKyAqbXT649usbgw}q;uN2 z@D(hZ{~xSZ`SIX>q;Z*JbI-|Kh56InsVsiCC~>9p00i_>zopr0C-+v AZ2$lO literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_3.png b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_3.png new file mode 100644 index 0000000000000000000000000000000000000000..dc7698f50df4cc5a9f3e76feab5d61bc16ef0829 GIT binary patch literal 311 zcmV-70m%M|P)44myj1h@bfjSOT|L2cB$;Y^wHAx2HlSKU2oRCR)?*g}V~h1pH57lzG+z24fIY zKl0@M@B2QT02zI*>-zQe@i#i>kWy+`dGAXDopaAs9%XqO=^v^I>HB1>buRz_002ov JPDHLkV1izlf{XwF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_4.png b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_4.png new file mode 100644 index 0000000000000000000000000000000000000000..e3e062e62598b0d6df36cfdb4194ecd3aa2758c4 GIT binary patch literal 336 zcmV-W0k8gvP)?s zOzecux~@L}U}i|&+m<@p z5;I@SOevwYc3UX#J&5S+!0vqSeYPkP-wbvD=187qFH$tACVu=2tu=%Y5M#W_vu1vK i@0Vg>CL(C;ZCZa^dK&>J$8QV(00006H{7Uh+t#KlzDe=n?_v~Ych!qeoVZ>`~p{yYE2 rna_W0&kHjY#EQGH$h~&p{m<~%DBu3xz11&(K4tK9^>bP0l+XkK(Pejr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_6.png b/src/main/resources/assets/hbm/textures/blocks/playground/basalt_test_6.png new file mode 100644 index 0000000000000000000000000000000000000000..962e430aacbbc6b8750c5b90f1370dad7d488bc9 GIT binary patch literal 286 zcmV+(0pb3MP)S>0#LT=By}Z;C1rt33 zJ+nVO$@hV37J9lkhFJKY?cdGIpvdE#Z_Jj!o#k~cW!apbFN;11?)uafo?xw3dFGAq z-tWqX&sfgxU^Y*>*Lv-iK)&mbl%>4NOH-CkNu1O5XhA@j@h6*xLanamMb}=*S2P|m z^(Ljd;`|j(uoVi_-)a!B7hKX%ekV!m$8pXnN0dtLj+HnRxwA8~a=BboRS^+dYlsNmdrB#E+!zCZ zs-mjYTItKR*7*AR!WhFeO|0vRF=qVSzeQy1MFbJydc9&)6@LJ0E$g~6&oiwx{=`*v zu&cF_bH+Khv+J+roB>$ZbzJt|4;-Mi27rjLEDNO++~e`!cRrsv9*?Lh&N)gcyEx8~b7q<*T5E%Lt#uSqRowIW@dZt+r96SM0Qd4**Qlv}4Y>A(FM0S}XHB zvu)eJx-0#>3t4N$lu`&G4DkK^eS~S-wh^Kb0wIL4&pBhQ#oh0B-rn8_A@F*=MwR~P z>-GA}&R*<(zvGU_Bd61ed7gKXe&?e5-jy$<;JqIXm2pz`^JQ6xG4gmk_}B8@lTspt z@S~-9o_80FF?@f2|Mzl?5fLHA_#@uiwoz-v_26{MA%rnFF~-rqa}Hw+UG%PrQ&n!a u8>%`|I876^R$6Nu4hK?7V~qP`_Vo)Ci%Wna4*sM70000GZx^prw85kH?(j9#r85lP9bN@+X1@buyJR*x382Ao@Fyrz3 z6)8YLi4xa{lHmNblJdl&REC1Y%)Ao4ywnl}6Fmbxvp+q__kn7T@;AajOlS}1M(l@{6UPh<1F2XfAc69k!MIuT*tcXG}L;2gd6nPp@g zv^6RK%d#9;2w{rky{EOtx~}Z|KC$7-I3Gf`)^N2}RCR(cFE6v1_I;mXsVb^E_oWoP z_lFB#Utg#yx7%%I8K2&6x4-Nh$-MUjGvodJopoIgk$(5Z@O>y>YbC}w9jdi*xm*qg zDJ8zYzxh|h7|A)Ksy|9v*L8^Qcs`&1eVkH4L`W(9XzzXBX{`}P;|$8GItM4EH0uu` z;GAQKJ~Rnt#^>iJW;VNUSr%Gr^xiq0PUM{D7>~&u@e74IK=)HN#2o+t002ovPDHLk FV1m4U>Fxjk literal 0 HcmV?d00001 From b5faedba3ad286b5b9dab917b35b849e643ba789 Mon Sep 17 00:00:00 2001 From: Doctor17-git <60807716+Doctor17-git@users.noreply.github.com> Date: Tue, 17 Sep 2024 17:21:11 +0300 Subject: [PATCH 16/18] Updated ru_RU.lang updated russian localization --- src/main/resources/assets/hbm/lang/ru_RU.lang | 55 ++++++++++++++++++- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index eb07399b6..93e77b657 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -365,6 +365,7 @@ armorMod.type.insert=Пластина armorMod.type.leggings=Поножи armorMod.type.servo=Сервоприводы armorMod.type.special=Особое +armorMod.type.battery=Аккумулятор armorMod.insertHere=Вставьте броню, чтобы её модифицировать... hazard.prot=Защищает от: @@ -519,6 +520,8 @@ hbm.key.dash=Рывок hbm.key.toggleBack=Включить ранец hbm.key.toggleHUD=Включить HUD hbm.key.reload=Перезарядить +hbm.key.copyToolAlt=Устройство настройки: Переключить вставку +hbm.key.copyToolCtrl=Устройство настройки: Применить к трубам bomb.detonated=Успешно взорвано! bomb.incompatible=Устройство не может быть взорвано! @@ -545,11 +548,12 @@ contents.program.doom=DOOM contents.program.unknown=??? contents.program.windows=Установка Windows 12 -commands.satellite.no_satellite=Спутник с такой частотой не найден! +commands.satellite.no_satellite=Спутник не найден! commands.satellite.not_a_satellite=Предмет в руке не спутник! commands.satellite.satellite_descended=Спутник успешно удалён. commands.satellite.satellite_orbited=Спутник запущен. commands.satellite.should_be_run_as_player=Команда должна быть выполнена игроком! +commands.satellite.no_active_satellites=Нет активных спутников! desc.block.barrel.acid=едкие жидкости desc.block.barrel.acidAlt=едкие жидкости правильно @@ -1397,6 +1401,15 @@ hbmmat.neodymium=Неодима hbmmat.calcium=Кальция hbmmat.silicon=Кремния hbmmat.sodium=Натрия +hbmmat.bscco=BSCCO +hbmmat.strontium=Стронций +hbmmat.chlorocalcite=Хлоркальцит +hbmmat.diamond=Алмаз +hbmmat.lanthanum=Лантан +hbmmat.molysite=Молизит +hbmmat.rareearth=Редкоземельные металлы +hbmmat.sodalite=Содалит +hbmmat.emerald=Изумруд icffuel.beryllium=Бериллий icffuel.boron=Бор @@ -1428,6 +1441,7 @@ crucible.steelWrought=Переплавка кованого железа в ст crucible.tcalloy=Производство технециевой стали crucible.cdalloy=Производство кадмиевой стали crucible.cmb=Производство стали Альянса +crucible.bscco=Производство BSCCO matshape.block=Блок %s matshape.blocks=Блоки %s @@ -1725,6 +1739,7 @@ death.attack.rubble=%1$s превратился в лепёшку death.attack.shrapnel=%1$s был разорван шрапнелью death.attack.teleporter=%1$s телепортировался в никуда death.attack.blackhole=%1$s превратился в спагетти +death.attack.blacklung=%1$s умер от болезни черных легких death.attack.blender=%1$s стал фаршем death.attack.meteorite=%1$s был раздавлен огромным космическим камнем death.attack.boxcar=%1$s был раздавлен падающим грузовым вагоном. Ну что ж... @@ -1741,7 +1756,7 @@ death.attack.taint=%1$s умер от невероятного количест death.attack.electricity=%1$s был убит электрическим током death.attack.exhaust=%1$s был превращен в шашлык стартовой ракетой death.attack.lunar=%1$s забыли зарядить свои жизненно важные органы. -death.attack.monoxide=%1$s забыл сменить батарейки в своем детекторе угарного газа. +death.attack.monoxide=%1$s забыл сменить батарейки в своем детекторе угарного газа death.attack.digamma=%1$s шагнул в пустоту. death.attack.asbestos=%1$s теперь имеет право на финансовую компенсацию. death.attack.mku=%1$s умер по неизвестным причинам. @@ -2245,6 +2260,8 @@ container.machineArcFurnaceLarge=Дуговая печь tile.machine_arc_furnace.name=Электрическая дуговая печь container.machineSolderingStation=Паяльный стол tile.machine_soldering_station.name=Паяльный стол +container.machinePyroOven=Пиролизная печь +tile.machine_pyrooven.name=Пиролизная печь tile.conveyor.name=Конвейер tile.conveyor.desc=Перемещает предметы, упавшие на него$Может вращаться по часовой стрелке с помощью отвертки$Нажмите на отвертку для сгибания @@ -2845,6 +2862,7 @@ item.ingot_schrabidium.name=Шрабидиевый слиток item.nugget_schrabidium.name=Шрабидиевый самородок item.plate_copper.name=Медная пластина item.board_copper.name=Медная панель +item.ingot_bscco.name=Слиток BSCCO item.ingot_advanced_alloy.name=Слиток продвинутого сплава item.plate_advanced_alloy.name=Пластина продвинутого сплава item.wire_advanced_alloy.name=Сверхпроводник @@ -2887,6 +2905,9 @@ item.plate_armor_ajr.name=Кованая железная обшивка бро item.plate_armor_fau.name=Обшивка брони Фау item.plate_armor_dnt.name=Обшивка ДНТ-брони item.armor_polish.name=Полироль для брони ШайнингАрмор™ +item.armor_battery.name=Аккумуляторный блок для силовой брони +item.armor_battery_mk2.name=Аккумуляторный блок для силовой брони Mk2 +item.armor_battery_mk3.name=Аккумуляторный блок для силовой брони Mk3 item.insert_esapi.name=ESAPI пластины item.insert_kevlar.name=Кевларовые пластины item.insert_sapi.name=SAPI пластины @@ -3166,6 +3187,10 @@ item.circuit.chip_bismoid.name=Передовой интегральный ми item.circuit.pcb.name=Печатная плата item.circuit.silicon.name=Печатная кремниевая пластина item.circuit.vacuum_tube.name=Вакуумная трубка +item.circuit.atomic_clock.name=Атомные часы +item.circuit.chip_quantum.name=Твердотельный квантовый процессор +item.circuit.controller_quantum.name=Квантовый компьютер +item.circuit.quantum.name=Устройство квантовой обработки item.mechanism_revolver_1.name=Револьверный механизм item.mechanism_revolver_2.name=Усовершенствованный револьверный механизм item.mechanism_rifle_1.name=Винтовочный механизм @@ -3447,6 +3472,7 @@ item.bedrock_ore.grade.rad_byproduct.name=%s бедроковая руда, Оч item.bedrock_ore.grade.rad_roasted.name=%s бедроковая руда, Обожженная очищенная побочка item.bedrock_ore.grade.rad_arc.name=%s бедроковая руда, Переплавленная очищенная побочка item.bedrock_ore.grade.rad_washed.name=%s бедроковая руда, Промытая очищенная побочка +item.bedrock_ore_fragment.name=Фрагмент от %s руда item.bedrock_ore.type.actinide.name=Актинидная item.bedrock_ore.type.crystal.name=Кристаллическая item.bedrock_ore.type.heavy.name=Тяжелая металлическая @@ -3489,6 +3515,7 @@ item.ammonium_nitrate.name=Нитрат аммония tile.bobblehead.name=Болванчик tile.snowglobe.name=Снежный шар +tile.plushie.name=Плюшевая игрушка %s tile.deco_titanium.name=Титановый декоративный блок tile.deco_red_copper.name=Красномедный декоративный блок tile.deco_tungsten.name=Вольфрамовый декоративный блок @@ -3568,6 +3595,7 @@ tile.lamp_tritium_green_on.name=Зелёная тритиевая лампа tile.spotlight_incandescent.name=Лампа в клетке tile.spotlight_fluoro.name=Флюоресцентная лампа tile.spotlight_halogen.name=Галогенный прожектор +tile.floodlight.name=Электрический прожектор tile.lamp_demon.name=Лампа из заряда-демона tile.reinforced_stone.name=Уплотненный камень tile.concrete_smooth.name=Бетон @@ -5549,6 +5577,7 @@ item.trenchmaster_plate.name=Нагрудник траншейщика tile.mush.name=Светящийся гриб tile.waste_mycelium.name=Светящийся мицелий +tile.sellafield_bedrock.name=Бедроковый селлафит tile.sellafield_slaked.name=Погашенный селлафит tile.sellafield.0.name=Селлафит tile.sellafield.1.name=Горячий селлафит @@ -6025,6 +6054,7 @@ item.part_generic.piston_electric.name=Электрический поршень item.part_generic.piston_hydraulic.name=Гидравлический поршень item.part_generic.piston_pneumatic.name=Пневматический поршень item.part_generic.lde.name=Элемент малой плотности +item.part_generic.hde.name=Элемент повышенной прочности item.particle_aelectron.name=Капсула с Позитроном item.particle_amat.name=Капсула с Антиматерией item.particle_aproton.name=Капсула с Антипротоном @@ -6099,7 +6129,16 @@ item.digamma_diagnostic.name=Диагностика дигаммы tile.geiger.name=Счетчик Гейгера tile.glass_polonium.name=Полониевое стекло item.survey_scanner.name=Сканер + item.ore_density_scanner.name=Сканер плотности бедроковой руды +item.ore_density_scanner.excellent=Избыток +item.ore_density_scanner.high=Высокий +item.ore_density_scanner.low=Низкий +item.ore_density_scanner.moderate=Средний +item.ore_density_scanner.poor=Бедный +item.ore_density_scanner.veryhigh=Очень высокий +item.ore_density_scanner.verypoor=Очень бедный + item.coltan_tool.name=Колтасс item.mirror_tool.name=Инструмент для регулировки зеркал item.mirror_tool.linked=Позиция выравнивания установлена! @@ -6115,6 +6154,18 @@ item.anchor_remote.name=Устройство вызова item.acetylene_torch.name=Ацетиленовая сварочная горелка item.blowtorch.name=Паяльная лампа +item.settings_tool.name=Устройство настройки +copytool.filter=Фильтр +copytool.invertRedstone=Инвертированный редстоун +copytool.invertFilter=Инвертированный фильтр +copytool.orientation=Ориентация +copytool.pattern0=Красная сторона +copytool.pattern1=Оранжевая сторона +copytool.pattern2=Желтая сторона +copytool.pattern3=Зелёная сторона +copytool.pattern4=Синяя сторона +copytool.pattern5=Фиолетовая сторона + item.multitool_dig.name=Силовая перчатка (Добывающий коготь) item.multitool_silk.name=Силовая перчатка (Коготь шёлкового касания) item.multitool_ext.name=Силовая перчатка (Извлекатель руды) From 1384f14fe39c3a01e2d884e0b762567638f07565 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 17 Sep 2024 21:30:34 +0200 Subject: [PATCH 17/18] a ton of gun stuff --- .../java/com/hbm/entity/EntityMappings.java | 1 + .../projectile/EntityBulletBaseMK4.java | 89 ++++++++++++++ .../hbm/items/weapon/sedna/BulletConfig.java | 13 ++- .../com/hbm/items/weapon/sedna/GunConfig.java | 110 +++++++++++------- .../items/weapon/sedna/IWeaponUpgrade.java | 14 +++ .../hbm/items/weapon/sedna/ItemGunBaseNT.java | 14 ++- .../com/hbm/items/weapon/sedna/Receiver.java | 79 ++++++++----- .../weapon/sedna/WeaponUpgradeManager.java | 31 +++++ .../weapon/sedna/factory/GunFactory.java | 6 +- .../weapon/sedna/factory/GunStateDecider.java | 4 +- .../hbm/items/weapon/sedna/factory/Lego.java | 28 ++++- .../items/weapon/sedna/mags/IMagazine.java | 6 + .../sedna/mags/MagazineStandardBase.java | 8 +- .../com/hbm/render/anim/HbmAnimations.java | 3 +- .../item/weapon/sedna/ItemRenderDebug.java | 4 +- .../items/gun_upgrade_debug_conversion.png | Bin 0 -> 310 bytes .../items/gun_upgrade_debug_damage.png | Bin 0 -> 320 bytes .../items/gun_upgrade_debug_multishot.png | Bin 0 -> 358 bytes .../items/gun_upgrade_debug_shotspeed.png | Bin 0 -> 349 bytes 19 files changed, 319 insertions(+), 91 deletions(-) create mode 100644 src/main/java/com/hbm/entity/projectile/EntityBulletBaseMK4.java create mode 100644 src/main/java/com/hbm/items/weapon/sedna/IWeaponUpgrade.java create mode 100644 src/main/java/com/hbm/items/weapon/sedna/WeaponUpgradeManager.java create mode 100644 src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_conversion.png create mode 100644 src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_damage.png create mode 100644 src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_multishot.png create mode 100644 src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_shotspeed.png diff --git a/src/main/java/com/hbm/entity/EntityMappings.java b/src/main/java/com/hbm/entity/EntityMappings.java index b5011714c..70cd60c25 100644 --- a/src/main/java/com/hbm/entity/EntityMappings.java +++ b/src/main/java/com/hbm/entity/EntityMappings.java @@ -151,6 +151,7 @@ public class EntityMappings { addEntity(EntityGrenadeIFNull.class, "entity_grenade_ironshod_null", 250); addEntity(EntityFallingNuke.class, "entity_falling_bomb", 1000); addEntity(EntityBulletBaseNT.class, "entity_bullet_mk3", 250, false); + addEntity(EntityBulletBaseMK4.class, "entity_bullet_mk4", 250, false); addEntity(EntityMinerRocket.class, "entity_miner_lander", 1000); addEntity(EntityFogFX.class, "entity_nuclear_fog", 1000); addEntity(EntityDuchessGambit.class, "entity_duchessgambit", 1000); diff --git a/src/main/java/com/hbm/entity/projectile/EntityBulletBaseMK4.java b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseMK4.java new file mode 100644 index 000000000..92938b64a --- /dev/null +++ b/src/main/java/com/hbm/entity/projectile/EntityBulletBaseMK4.java @@ -0,0 +1,89 @@ +package com.hbm.entity.projectile; + +import com.hbm.items.weapon.sedna.BulletConfig; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public class EntityBulletBaseMK4 extends EntityThrowableInterp { + + public BulletConfig config; + + public EntityBulletBaseMK4(World world) { + super(world); + this.renderDistanceWeight = 10.0D; + this.setSize(0.5F, 0.5F); + } + + public EntityBulletBaseMK4(EntityLivingBase entity, BulletConfig config, float baseDamage, float spreadMod, double sideOffset, double heightOffset, double frontOffset) { + this(entity.worldObj); + + this.thrower = entity; + this.config = config; + + this.setLocationAndAngles(thrower.posX, thrower.posY + thrower.getEyeHeight(), thrower.posZ, thrower.rotationYaw, thrower.rotationPitch); + + Vec3 offset = Vec3.createVectorHelper(sideOffset, heightOffset, frontOffset); + offset.rotateAroundX(-this.rotationPitch / 180F * (float) Math.PI); + offset.rotateAroundY(-this.rotationYaw / 180F * (float) Math.PI); + + this.posX += offset.xCoord; + this.posY += offset.yCoord; + this.posZ += offset.zCoord; + + this.setPosition(this.posX, this.posY, this.posZ); + + this.motionX = -MathHelper.sin(this.rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float) Math.PI); + this.motionZ = MathHelper.cos(this.rotationYaw / 180.0F * (float) Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float) Math.PI); + this.motionY = (-MathHelper.sin(this.rotationPitch / 180.0F * (float) Math.PI)); + + this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, 1.0F, this.config.spread * spreadMod); + } + + @Override + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(3, Integer.valueOf(0)); + } + + public void setBulletConfig(BulletConfig config) { + this.dataWatcher.updateObject(3, config.id); + } + + public BulletConfig getBulletConfig() { + int id = this.dataWatcher.getWatchableObjectInt(3); + if(id < 0 || id > BulletConfig.configs.size()) return null; + return BulletConfig.configs.get(id); + } + + @Override + public void onUpdate() { + + if(config == null) config = this.getBulletConfig(); + + if(config == null){ + this.setDead(); + return; + } + + this.prevPosX = posX; + this.prevPosY = posY; + this.prevPosZ = posZ; + + super.onUpdate(); + } + + @Override + protected void onImpact(MovingObjectPosition mop) { + this.setDead(); + } + + @Override protected double headingForceMult() { return 1D; } + @Override public double getGravityVelocity() { return this.config.gravity; } + @Override protected double motionMult() { return this.config.velocity; } + @Override protected float getAirDrag() { return 1F; } + @Override protected float getWaterDrag() { return 1F; } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java b/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java index 9cc858b8b..9a43ef50b 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java +++ b/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java @@ -31,6 +31,15 @@ public class BulletConfig { this.id = configs.size(); configs.add(this); } - - public BulletConfig setItem(Item ammo) { this.ammo = new ComparableStack(ammo); return this; } + + public BulletConfig setItem(Item ammo) { this.ammo = new ComparableStack(ammo); return this; } + public BulletConfig setReloadCount(int ammoReloadCount) { this.ammoReloadCount = ammoReloadCount; return this; } + public BulletConfig setVel(float velocity) { this.velocity = velocity; return this; } + public BulletConfig setSpread(float spread) { this.spread = spread; return this; } + public BulletConfig setWear(float wear) { this.wear = wear; return this; } + public BulletConfig setProjectiles(int min, int max) { this.projectilesMin = min; this.projectilesMax = max; return this; } + public BulletConfig setDamage(float damageMult) { this.damageMult = damageMult; return this; } + public BulletConfig setHeadshot(float headshotMult) { this.headshotMult = headshotMult; return this; } + public BulletConfig setGrav(double gravity) { this.gravity = gravity; return this; } + public BulletConfig setLife(int expires) { this.expires = expires; return this; } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java b/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java index 0eed0f236..e0388871c 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java +++ b/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java @@ -9,75 +9,97 @@ import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.item.ItemStack; +/** + * Despite how complicated the GunConfig looks, it actually only exists to hold together a bunch of fields. Everything else is infrastructure for getting and setting. + * The gun config determines general gun specific stats like durability, crosshair, animations, receivers, click handling and the decider. + * + * @author hbm + * */ public class GunConfig { + + public static final String O_RECEIVERS = "O_RECEIVERS"; + public static final String F_DURABILITY = "F_DURABILITY"; + public static final String I_DRAWDURATION = "I_DRAWDURATION"; + public static final String O_CROSSHAIR = "O_CROSSHAIR"; + public static final String B_RELOADANIMATIONSEQUENTIAL = "B_RELOADANIMATIONSEQUENTIAL"; + public static final String CON_ONPRESSPRIMARY = "CON_ONPRESSPRIMARY"; + public static final String CON_ONPRESSSECONDARY = "CON_ONPRESSSECONDARY"; + public static final String CON_ONPRESSTERTIARY = "CON_ONPRESSTERTIARY"; + public static final String CON_ONPRESSRELOAD = "CON_ONPRESSRELOAD"; + public static final String CON_ONRELEASEPRIMARY = "CON_ONRELEASEPRIMARY"; + public static final String CON_ONRELEASESECONDARY = "CON_ONRELEASESECONDARY"; + public static final String CON_ONRELEASETERTIARY = "CON_ONRELEASETERTIARY"; + public static final String CON_ONRELEASERELOAD = "CON_ONRELEASERELOAD"; + public static final String CON_DECIDER = "CON_DECIDER"; + public static final String FUN_ANIMNATIONS = "FUN_ANIMNATIONS"; /* FIELDS */ /** List of receivers used by the gun, primary and secondary are usually indices 0 and 1 respectively, if applicable */ - protected Receiver[] receivers; - protected float durability; - protected int drawDuration = 0; - protected Crosshair crosshair; - protected boolean reloadAnimationsSequential; + protected Receiver[] receivers_DNA; + protected float durability_DNA; + protected int drawDuration_DNA = 0; + protected Crosshair crosshair_DNA; + protected boolean reloadAnimationsSequential_DNA; /** Lambda functions for clicking shit */ - protected BiConsumer onPressPrimary; - protected BiConsumer onPressSecondary; - protected BiConsumer onPressTertiary; - protected BiConsumer onPressReload; + protected BiConsumer onPressPrimary_DNA; + protected BiConsumer onPressSecondary_DNA; + protected BiConsumer onPressTertiary_DNA; + protected BiConsumer onPressReload_DNA; /** Lambda functions for releasing the aforementioned shit */ - protected BiConsumer onReleasePrimary; - protected BiConsumer onReleaseSecondary; - protected BiConsumer onReleaseTertiary; - protected BiConsumer onReleaseReload; + protected BiConsumer onReleasePrimary_DNA; + protected BiConsumer onReleaseSecondary_DNA; + protected BiConsumer onReleaseTertiary_DNA; + protected BiConsumer onReleaseReload_DNA; /** The engine for the state machine that determines the gun's overall behavior */ - protected BiConsumer decider; + protected BiConsumer decider_DNA; /** Lambda that returns the relevant animation for the given params */ - protected BiFunction animations; + protected BiFunction animations_DNA; /* GETTERS */ - public Receiver[] getReceivers(ItemStack stack) { return receivers; } - public float getDurability(ItemStack stack) { return durability; } - public int getDrawDuration(ItemStack stack) { return drawDuration; } - public Crosshair getCrosshair(ItemStack stack) { return crosshair; } - public boolean getReloadAnimSequential(ItemStack stack) { return reloadAnimationsSequential; } + public Receiver[] getReceivers(ItemStack stack) { return WeaponUpgradeManager.eval(receivers_DNA, stack, O_RECEIVERS, this); } + public float getDurability(ItemStack stack) { return WeaponUpgradeManager.eval(durability_DNA, stack, F_DURABILITY, this); } + public int getDrawDuration(ItemStack stack) { return WeaponUpgradeManager.eval(drawDuration_DNA, stack, I_DRAWDURATION, this); } + public Crosshair getCrosshair(ItemStack stack) { return WeaponUpgradeManager.eval(crosshair_DNA, stack, O_CROSSHAIR, this); } + public boolean getReloadAnimSequential(ItemStack stack) { return WeaponUpgradeManager.eval(reloadAnimationsSequential_DNA, stack, B_RELOADANIMATIONSEQUENTIAL, this); } - public BiConsumer getPressPrimary(ItemStack stack) { return this.onPressPrimary; } - public BiConsumer getPressSecondary(ItemStack stack) { return this.onPressSecondary; } - public BiConsumer getPressTertiary(ItemStack stack) { return this.onPressTertiary; } - public BiConsumer getPressReload(ItemStack stack) { return this.onPressReload; } + public BiConsumer getPressPrimary(ItemStack stack) { return WeaponUpgradeManager.eval(this.onPressPrimary_DNA, stack, CON_ONPRESSPRIMARY, this); } + public BiConsumer getPressSecondary(ItemStack stack) { return WeaponUpgradeManager.eval(this.onPressSecondary_DNA, stack, CON_ONPRESSSECONDARY, this); } + public BiConsumer getPressTertiary(ItemStack stack) { return WeaponUpgradeManager.eval(this.onPressTertiary_DNA, stack, CON_ONPRESSTERTIARY, this); } + public BiConsumer getPressReload(ItemStack stack) { return WeaponUpgradeManager.eval(this.onPressReload_DNA, stack, CON_ONPRESSRELOAD, this); } - public BiConsumer getReleasePrimary(ItemStack stack) { return this.onReleasePrimary; } - public BiConsumer getReleaseSecondary(ItemStack stack) { return this.onReleaseSecondary; } - public BiConsumer getReleaseTertiary(ItemStack stack) { return this.onReleaseTertiary; } - public BiConsumer getReleaseReload(ItemStack stack) { return this.onReleaseReload; } + public BiConsumer getReleasePrimary(ItemStack stack) { return WeaponUpgradeManager.eval(this.onReleasePrimary_DNA, stack, CON_ONRELEASEPRIMARY, this); } + public BiConsumer getReleaseSecondary(ItemStack stack) { return WeaponUpgradeManager.eval(this.onReleaseSecondary_DNA, stack, CON_ONRELEASESECONDARY, this); } + public BiConsumer getReleaseTertiary(ItemStack stack) { return WeaponUpgradeManager.eval(this.onReleaseTertiary_DNA, stack, CON_ONRELEASETERTIARY, this); } + public BiConsumer getReleaseReload(ItemStack stack) { return WeaponUpgradeManager.eval(this.onReleaseReload_DNA, stack, CON_ONRELEASERELOAD, this); } - public BiConsumer getDecider(ItemStack stack) { return this.decider; } + public BiConsumer getDecider(ItemStack stack) { return WeaponUpgradeManager.eval(this.decider_DNA, stack, CON_DECIDER, this); } - public BiFunction getAnims(ItemStack stack) { return this.animations; } + public BiFunction getAnims(ItemStack stack) { return WeaponUpgradeManager.eval(this.animations_DNA, stack, FUN_ANIMNATIONS, this); } /* SETTERS */ - public GunConfig rec(Receiver... receivers) { this.receivers = receivers; return this; } - public GunConfig dura(float dura) { this.durability = dura; return this; } - public GunConfig draw(int draw) { this.drawDuration = draw; return this; } - public GunConfig crosshair(Crosshair crosshair) { this.crosshair = crosshair; return this; } + public GunConfig rec(Receiver... receivers) { this.receivers_DNA = receivers; return this; } + public GunConfig dura(float dura) { this.durability_DNA = dura; return this; } + public GunConfig draw(int draw) { this.drawDuration_DNA = draw; return this; } + public GunConfig crosshair(Crosshair crosshair) { this.crosshair_DNA = crosshair; return this; } //press - public GunConfig pp(BiConsumer lambda) { this.onPressPrimary = lambda; return this; } - public GunConfig ps(BiConsumer lambda) { this.onPressSecondary = lambda; return this; } - public GunConfig pt(BiConsumer lambda) { this.onPressTertiary = lambda; return this; } - public GunConfig pr(BiConsumer lambda) { this.onPressReload = lambda; return this; } + public GunConfig pp(BiConsumer lambda) { this.onPressPrimary_DNA = lambda; return this; } + public GunConfig ps(BiConsumer lambda) { this.onPressSecondary_DNA = lambda; return this; } + public GunConfig pt(BiConsumer lambda) { this.onPressTertiary_DNA = lambda; return this; } + public GunConfig pr(BiConsumer lambda) { this.onPressReload_DNA = lambda; return this; } //release - public GunConfig rp(BiConsumer lambda) { this.onReleasePrimary = lambda; return this; } - public GunConfig rs(BiConsumer lambda) { this.onReleaseSecondary = lambda; return this; } - public GunConfig rt(BiConsumer lambda) { this.onReleaseTertiary = lambda; return this; } - public GunConfig rr(BiConsumer lambda) { this.onReleaseReload = lambda; return this; } + public GunConfig rp(BiConsumer lambda) { this.onReleasePrimary_DNA = lambda; return this; } + public GunConfig rs(BiConsumer lambda) { this.onReleaseSecondary_DNA = lambda; return this; } + public GunConfig rt(BiConsumer lambda) { this.onReleaseTertiary_DNA = lambda; return this; } + public GunConfig rr(BiConsumer lambda) { this.onReleaseReload_DNA = lambda; return this; } //decider - public GunConfig decider(BiConsumer lambda) { this.decider = lambda; return this; } + public GunConfig decider(BiConsumer lambda) { this.decider_DNA = lambda; return this; } //anims - public GunConfig anim(BiFunction lambda) { this.animations = lambda; return this; } + public GunConfig anim(BiFunction lambda) { this.animations_DNA = lambda; return this; } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/IWeaponUpgrade.java b/src/main/java/com/hbm/items/weapon/sedna/IWeaponUpgrade.java new file mode 100644 index 000000000..502f12aec --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/IWeaponUpgrade.java @@ -0,0 +1,14 @@ +package com.hbm.items.weapon.sedna; + +import net.minecraft.item.ItemStack; + +public interface IWeaponUpgrade { + + /** Lower numbers get installed and therefore evaluated first. Important when multiplicative and additive bonuses are supposed to stack */ + public int getModPriority(ItemStack stack); + /** Which "slots" this upgrade occupies, can be any value, upgrades that have at least one matching slot are incompatible */ + public String[] getSlots(ItemStack stack); + /** The meat and bones of the upgrade eval. Requires the base value, the held gun, the value's + * identifier and the yet unmodified parent (i.e. if the value is part of the receiver, that receiver) */ + public default T eval(T base, ItemStack stack, String key, Object parent) { return base; } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java index 8d55aec88..36a3e9bfa 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -27,6 +27,8 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipReceiver, IItemHUD { + public static final String O_GUNCONFIG = "O_GUNCONFIG"; + public static final String KEY_DRAWN = "drawn"; public static final String KEY_AIMING = "aiming"; public static final String KEY_TIMER = "timer"; @@ -43,7 +45,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei private GunConfig config_DNA; public GunConfig getConfig(ItemStack stack) { - return config_DNA; + return WeaponUpgradeManager.eval(config_DNA, stack, O_GUNCONFIG, this); } public ItemGunBaseNT(GunConfig cfg) { @@ -55,7 +57,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei DRAWING, //initial delay after selecting IDLE, //gun can be fired or reloaded WINDUP, //fire button is down, added delay before fire - JUST_FIRED, //gun has been fired, cooldown + COOLDOWN, //gun has been fired, cooldown RELOADING //gun is currently reloading } @@ -92,7 +94,15 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei EntityPlayer player = (EntityPlayer) entity; if(world.isRemote) { + if(isHeld && player == MainRegistry.proxy.me()) { + + /// DEBUG /// + /*Vec3 offset = Vec3.createVectorHelper(-0.2, -0.1, 0.75); + offset.rotateAroundX(-entity.rotationPitch / 180F * (float) Math.PI); + offset.rotateAroundY(-entity.rotationYaw / 180F * (float) Math.PI); + world.spawnParticle("flame", entity.posX + offset.xCoord, entity.posY + entity.getEyeHeight() + offset.yCoord, entity.posZ + offset.zCoord, 0, 0, 0);*/ + prevAimingProgress = aimingProgress; boolean aiming = this.getIsAiming(stack); float aimSpeed = 0.25F; diff --git a/src/main/java/com/hbm/items/weapon/sedna/Receiver.java b/src/main/java/com/hbm/items/weapon/sedna/Receiver.java index b5320d003..7c9ad2e14 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/Receiver.java +++ b/src/main/java/com/hbm/items/weapon/sedna/Receiver.java @@ -9,39 +9,64 @@ import com.hbm.items.weapon.sedna.mags.IMagazine; import net.minecraft.item.ItemStack; +/** + * Receivers are the gun's "moving parts", i.e. they determine things like base damage, spread, the ejector and the magazine. Think of this class like the + * barrel, receiver and chamber of the gun, an underbarrel grenade launcher for example would be a separate receiver instance compared to the regular gun it is attached to. + * + * @author hbm + */ public class Receiver { - protected float baseDamage; - protected int delayAfterFire; - protected int roundsPerCycle = 1; - protected boolean refireOnHold = false; - protected CasingEjector ejector = null; - protected int reloadDuration; - protected IMagazine magazine; - protected BiFunction canFire; - protected BiConsumer onFire; + public static final String F_BASEDAMAGE = "F_BASEDAMAGE"; + public static final String I_DELAYAFTERFIRE = "I_DELAYAFTERFIRE"; + public static final String I_ROUNDSPERCYCLE = "I_ROUNDSPERCYCLE"; + public static final String F_SPREADMOD = "F_SPREADMOD"; + public static final String B_REFIREONHOLD = "B_REFIREONHOLD"; + public static final String O_EJECTOR = "O_EJECTOR"; + public static final String I_RELOADDURATION = "I_RELOADDURATION"; + public static final String O_MAGAZINE = "O_MAGAZINE"; + public static final String FUN_CANFIRE = "FUN_CANFIRE"; + public static final String CON_ONFIRE = "CON_ONFIRE"; + + public Receiver(int index) { + this.index = index; + } + + protected int index; + protected float baseDamage_DNA; + protected int delayAfterFire_DNA; + protected int roundsPerCycle_DNA = 1; + protected float spreadMod_DNA = 1F; + protected boolean refireOnHold_DNA = false; + protected CasingEjector ejector_DNA = null; + protected int reloadDuration_DNA; + protected IMagazine magazine_DNA; + protected BiFunction canFire_DNA; + protected BiConsumer onFire_DNA; /* GETTERS */ - public float getBaseDamage(ItemStack stack) { return this.baseDamage; } - public int getDelayAfterFire(ItemStack stack) { return this.delayAfterFire; } - public int getRoundsPerCycle(ItemStack stack) { return this.roundsPerCycle; } - public boolean getRefireOnHold(ItemStack stack) { return this.refireOnHold; } - public CasingEjector getEjector(ItemStack stack) { return this.ejector; } - public int getReloadDuration(ItemStack stack) { return this.reloadDuration; } - public IMagazine getMagazine(ItemStack stack) { return this.magazine; } + public float getBaseDamage(ItemStack stack) { return WeaponUpgradeManager.eval(this.baseDamage_DNA, stack, F_BASEDAMAGE, this); } + public int getDelayAfterFire(ItemStack stack) { return WeaponUpgradeManager.eval(this.delayAfterFire_DNA, stack, I_DELAYAFTERFIRE, this); } + public int getRoundsPerCycle(ItemStack stack) { return WeaponUpgradeManager.eval(this.roundsPerCycle_DNA, stack, I_ROUNDSPERCYCLE, this); } + public float getSpreadMod(ItemStack stack) { return WeaponUpgradeManager.eval(this.spreadMod_DNA, stack, F_SPREADMOD, this); } + public boolean getRefireOnHold(ItemStack stack) { return WeaponUpgradeManager.eval(this.refireOnHold_DNA, stack, B_REFIREONHOLD, this); } + public CasingEjector getEjector(ItemStack stack) { return WeaponUpgradeManager.eval(this.ejector_DNA, stack, O_EJECTOR, this); } + public int getReloadDuration(ItemStack stack) { return WeaponUpgradeManager.eval(this.reloadDuration_DNA, stack, I_RELOADDURATION, this); } + public IMagazine getMagazine(ItemStack stack) { return WeaponUpgradeManager.eval(this.magazine_DNA, stack, O_MAGAZINE, this); } - public BiFunction getCanFire(ItemStack stack) { return this.canFire; } - public BiConsumer getOnFire(ItemStack stack) { return this.onFire; } + public BiFunction getCanFire(ItemStack stack) { return WeaponUpgradeManager.eval(this.canFire_DNA, stack, FUN_CANFIRE, this); } + public BiConsumer getOnFire(ItemStack stack) { return WeaponUpgradeManager.eval(this.onFire_DNA, stack, CON_ONFIRE, this); } /* SETTERS */ - public Receiver dmg(float dmg) { this.baseDamage = dmg; return this; } - public Receiver delay(int delay) { this.delayAfterFire = delay; return this; } - public Receiver rounds(int rounds) { this.roundsPerCycle = rounds; return this; } - public Receiver auto(boolean auto) { this.refireOnHold = auto; return this; } - public Receiver burst(CasingEjector ejector) { this.ejector = ejector; return this; } - public Receiver reload(int delay) { this.reloadDuration = delay; return this; } - public Receiver mag(IMagazine magazine) { this.magazine = magazine; return this; } + public Receiver dmg(float dmg) { this.baseDamage_DNA = dmg; return this; } + public Receiver delay(int delay) { this.delayAfterFire_DNA = delay; return this; } + public Receiver rounds(int rounds) { this.roundsPerCycle_DNA = rounds; return this; } + public Receiver spread(int spread) { this.spreadMod_DNA = spread; return this; } + public Receiver auto(boolean auto) { this.refireOnHold_DNA = auto; return this; } + public Receiver burst(CasingEjector ejector) { this.ejector_DNA = ejector; return this; } + public Receiver reload(int delay) { this.reloadDuration_DNA = delay; return this; } + public Receiver mag(IMagazine magazine) { this.magazine_DNA = magazine; return this; } - public Receiver canFire(BiFunction lambda) { this.canFire = lambda; return this; } - public Receiver fire(BiConsumer lambda) { this.onFire = lambda; return this; } + public Receiver canFire(BiFunction lambda) { this.canFire_DNA = lambda; return this; } + public Receiver fire(BiConsumer lambda) { this.onFire_DNA = lambda; return this; } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/WeaponUpgradeManager.java b/src/main/java/com/hbm/items/weapon/sedna/WeaponUpgradeManager.java new file mode 100644 index 000000000..4674ee866 --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/WeaponUpgradeManager.java @@ -0,0 +1,31 @@ +package com.hbm.items.weapon.sedna; + +import net.minecraft.item.ItemStack; + +/** + * The upgrade manager operates by scraping upgrades from a gun, then iterating over them and evaluating the given value, passing the modified value to successive mods. + * The way that mods stack (additive vs multiplicative) depends on the order the mod is installed in + * + * @author hbm + */ +public class WeaponUpgradeManager { + + public static ItemStack[] getUpgrades(ItemStack stack) { + return null; // TBI + } + + /** Scrapes all upgrades, iterates over them and evaluates the given value. The parent (i.e. holder of the base value) + * is passed for context (so upgrades can differentiate primary and secondary receivers for example) */ + public static T eval(T base, ItemStack stack, String key, Object parent) { + + ItemStack[] upgrades = getUpgrades(stack); + if(upgrades != null) for(ItemStack upgradeStack : upgrades) { + if(upgradeStack.getItem() instanceof IWeaponUpgrade) { + IWeaponUpgrade upgrade = (IWeaponUpgrade) upgradeStack.getItem(); + base = upgrade.eval(base, upgradeStack, key, parent); + } + } + + return base; + } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java index 1fcba5bd0..434bf5949 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java @@ -18,12 +18,12 @@ public class GunFactory { ModItems.ammo_debug = new Item().setUnlocalizedName("ammo_debug").setTextureName(RefStrings.MODID + ":ammo_45"); - BulletConfig ammo_debug = new BulletConfig().setItem(ModItems.ammo_debug); + BulletConfig ammo_debug = new BulletConfig().setItem(ModItems.ammo_debug).setSpread(0.01F); ModItems.gun_debug = new ItemGunBaseNT(new GunConfig() .dura(600).draw(15).crosshair(Crosshair.L_CLASSIC) - .rec(new Receiver() - .dmg(10F).delay(10).mag(new MagazineRevolverDrum(0, 6).addConfigs(ammo_debug)) + .rec(new Receiver(0) + .dmg(10F).delay(12).mag(new MagazineRevolverDrum(0, 6).addConfigs(ammo_debug)) .canFire(Lego.LAMBDA_DEBUG_CAN_FIRE).fire(Lego.LAMBDA_DEBUG_FIRE)) .pr(Lego.LAMBDA_STANDARD_RELOAD) .pp(Lego.LAMBDA_STANDARD_FIRE) diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunStateDecider.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunStateDecider.java index d4d3fdc8d..3fc55d712 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunStateDecider.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunStateDecider.java @@ -62,7 +62,7 @@ public class GunStateDecider { /** Triggers a re-fire of the primary if the fire delay has expired, the left mouse button is down and re-firing is enabled, otherwise switches to IDLE */ public static void deciderAutoRefire(ItemStack stack, LambdaContext ctx, GunState lastState, int recIndex, BooleanSupplier refireCondition) { - if(lastState == GunState.JUST_FIRED) { + if(lastState == GunState.COOLDOWN) { GunConfig cfg = ctx.config; Receiver rec = cfg.getReceivers(stack)[recIndex]; @@ -72,7 +72,7 @@ public class GunStateDecider { //if there's a bullet loaded, fire again if(rec.getCanFire(stack).apply(stack, ctx)) { rec.getOnFire(stack).accept(stack, ctx); - ItemGunBaseNT.setState(stack, GunState.JUST_FIRED); + ItemGunBaseNT.setState(stack, GunState.COOLDOWN); ItemGunBaseNT.setTimer(stack, rec.getDelayAfterFire(stack)); //if not, revert to idle } else { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java index 6863d5627..8546cfa39 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java @@ -3,9 +3,12 @@ package com.hbm.items.weapon.sedna.factory; import java.util.function.BiConsumer; import java.util.function.BiFunction; +import com.hbm.entity.projectile.EntityBulletBaseMK4; +import com.hbm.items.weapon.sedna.BulletConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.ItemGunBaseNT.GunState; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; +import com.hbm.items.weapon.sedna.Receiver; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.GunAnimationPacket; import com.hbm.render.anim.BusAnimation; @@ -38,7 +41,7 @@ public class Lego { public static BiConsumer LAMBDA_STANDARD_FIRE = (stack, ctx) -> { if(ItemGunBaseNT.getState(stack) == GunState.IDLE && ctx.config.getReceivers(stack)[0].getCanFire(stack).apply(stack, ctx)) { - ItemGunBaseNT.setState(stack, GunState.JUST_FIRED); + ItemGunBaseNT.setState(stack, GunState.COOLDOWN); ItemGunBaseNT.setTimer(stack, ctx.config.getReceivers(stack)[0].getDelayAfterFire(stack)); ctx.config.getReceivers(stack)[0].getOnFire(stack).accept(stack, ctx); } @@ -55,19 +58,35 @@ public class Lego { /** JUMPER - bypasses mag testing and just allows constant fire */ public static BiFunction LAMBDA_DEBUG_CAN_FIRE = (stack, ctx) -> { return true; }; + /** simply plays a sound to indicate that the keybind has triggered */ public static BiConsumer LAMBDA_DEBUG_FIRE = (stack, ctx) -> { EntityPlayer player = ctx.player; - player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.shotgunShoot", 1F, 1F); if(player instanceof EntityPlayerMP) PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.CYCLE.ordinal()), (EntityPlayerMP) player); + + double sideOffset = ItemGunBaseNT.getIsAiming(stack) ? 0 : -0.2D; + float aim = ItemGunBaseNT.getIsAiming(stack) ? 0.25F : 1F; + Receiver primary = ctx.config.getReceivers(stack)[0]; + + EntityBulletBaseMK4 mk4 = new EntityBulletBaseMK4(player, (BulletConfig) primary.getMagazine(stack).getType(stack), primary.getBaseDamage(stack), primary.getSpreadMod(stack) * aim, sideOffset, -0.1, 0.75); + player.worldObj.spawnEntityInWorld(mk4); + player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, "hbm:weapon.shotgunShoot", 1F, 1F); }; + + /** No reload, simply play inspect animation */ + public static BiConsumer LAMBDA_DEBUG_RELOAD = (stack, ctx) -> { + EntityPlayer player = ctx.player; + if(player instanceof EntityPlayerMP) PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.INSPECT.ordinal()), (EntityPlayerMP) player); + }; + + /** anims for the DEBUG revolver, mostly a copy of the li'lpip but with some fixes regarding the cylinder movement */ public static BiFunction LAMBDA_DEBUG_ANIMS = (stack, type) -> { switch(type) { case CYCLE: return new BusAnimation() .addBus("RECOIL", new BusAnimationSequence().addKeyframePosition(0, 0, 0, 50).addKeyframePosition(0, 0, -3, 50).addKeyframePosition(0, 0, 0, 250)) - .addBus("HAMMER", new BusAnimationSequence().addKeyframePosition(0, 0, 1, 50).addKeyframePosition(0, 0, 1, 300 + 200).addKeyframePosition(0, 0, 0, 200)) - .addBus("DRUM", new BusAnimationSequence().addKeyframePosition(0, 0, 0, 350 + 200).addKeyframePosition(0, 0, 1, 200)); + .addBus("HAMMER", new BusAnimationSequence().addKeyframePosition(0, 0, 1, 50).addKeyframePosition(0, 0, 1, 300 + 100).addKeyframePosition(0, 0, 0, 200)) + .addBus("DRUM", new BusAnimationSequence().addKeyframePosition(0, 0, 0, 350 + 100).addKeyframePosition(0, 0, 1, 200)); case CYCLE_EMPTY: break; case ALT_CYCLE: break; case EQUIP: return new BusAnimation().addBus("ROTATE", new BusAnimationSequence().addKeyframePosition(-360, 0, 0, 350)); @@ -77,6 +96,7 @@ public class Lego { case RELOAD_END: break; case SPINDOWN: break; case SPINUP: break; + case INSPECT: break; } return null; diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java b/src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java index 90d6a2337..55d7d4bb7 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java @@ -3,6 +3,12 @@ package com.hbm.items.weapon.sedna.mags; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +/** + * The magazine simply provides the receiver it's attached to with ammo, the receiver does not care where it comes from. + * Therefore it is the mag's responsibility to handle reloading, any type restrictions as well as belt-like action from "magless" guns. + * + * @author hbm + */ public interface IMagazine { /** What ammo is loaded currently */ diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java index 818833767..874d14195 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java @@ -31,8 +31,8 @@ public abstract class MagazineStandardBase implements IMagazine { @Override public Object getType(ItemStack stack) { int type = getMagType(stack, index); - if(type >= 0 && type < acceptedBullets.size()) { - return acceptedBullets.get(type); + if(type >= 0 && type < BulletConfig.configs.size()) { + return BulletConfig.configs.get(type); } return null; } @@ -40,7 +40,7 @@ public abstract class MagazineStandardBase implements IMagazine { @Override public void setType(ItemStack stack, Object type) { if(!(type instanceof BulletConfig)) return; - int i = acceptedBullets.indexOf(type); + int i = BulletConfig.configs.indexOf(type); if(i >= 0) setMagType(stack, index, i); } @@ -49,7 +49,7 @@ public abstract class MagazineStandardBase implements IMagazine { @Override public void setAmount(ItemStack stack, int amount) { setMagCount(stack, index, amount); } // MAG TYPE // - public static int getMagType(ItemStack stack, int index) { return ItemGunBaseNT.getValueInt(stack, KEY_MAG_TYPE + index); } + public static int getMagType(ItemStack stack, int index) { return ItemGunBaseNT.getValueInt(stack, KEY_MAG_TYPE + index); } //TODO: replace with named tags to avoid ID shifting public static void setMagType(ItemStack stack, int index, int value) { ItemGunBaseNT.setValueInt(stack, KEY_MAG_TYPE + index, value); } // MAG COUNT // diff --git a/src/main/java/com/hbm/render/anim/HbmAnimations.java b/src/main/java/com/hbm/render/anim/HbmAnimations.java index 44fff33dc..699703db6 100644 --- a/src/main/java/com/hbm/render/anim/HbmAnimations.java +++ b/src/main/java/com/hbm/render/anim/HbmAnimations.java @@ -27,7 +27,8 @@ public class HbmAnimations { ALT_CYCLE, //animation for alt fire cycles SPINUP, //animation for actionstart SPINDOWN, //animation for actionend - EQUIP //animation for drawing the weapon + EQUIP, //animation for drawing the weapon + INSPECT //animation for inspecting the weapon } // A NOTE ON SHOTGUN STYLE RELOADS diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java index 840b87052..1294c7443 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDebug.java @@ -35,8 +35,8 @@ public class ItemRenderDebug extends ItemRenderWeaponBase { GL11.glRotated(equipSpin[0], 0, 0, 1); double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL"); - //GL11.glTranslated(-recoil[2], 0, 0); - GL11.glTranslated(0, 0, recoil[2]); + standardAimingTransform(stack, 0, 0, recoil[2], -recoil[2], 0, 0); + GL11.glRotated(recoil[2] * 10, 0, 0, 1); GL11.glShadeModel(GL11.GL_SMOOTH); diff --git a/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_conversion.png b/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_conversion.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d8198f2603b0aab87150177090eb389f3f38ca GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfC-t) zp4mWq19FZVFr;xXGpE%Y4$|0^wuWtiGz;?!sg-OD5$EIn7ug(p4)i#Kr>mdKI;Vst E0G0xFApigX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_damage.png b/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_damage.png new file mode 100644 index 0000000000000000000000000000000000000000..d71b134fdf0936cb4acafc700e3d697137a50bd4 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfSp>65_d323%4uiyffI5xhPQbj*Q|;X0hM= z$&2!}a_ir}{%+SG@7l&EcUx6>|J)r$_qMhl(8=xny-F}pzp%hm&Xa9-_T~5br#3zB z;9C7aC)wgsxoqB+o$omrB9`rQi4g65vTp6dS2A|u^H^evn51rc+-YEJ6JSix3z^qu zuJGm>`zroJ846)@Tg({_to*=m<-Vjzq3+%%Ar%?PvTSjZ7KN@EDc?D}gA(h{PFT9u zj#ciQ`VAG$sYiGv%y&L1O8B=c+kMSC$pT@A`R4zfU2kM8kSbjH;QkjDZT^Dj8&Y9w QfkD9F>FVdQ&MBb@06ph;wEzGB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_multishot.png b/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_multishot.png new file mode 100644 index 0000000000000000000000000000000000000000..38180b907381d65563d2570658111bc156785c3f GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#X#z`!W$>Eak- z(VLvGK)~S9q#t!Qf9#FsUoKJ&+p4p}#4dgl_iBq>jv90Fk01KCKVsMHMj&vEm@a&@ zVf*y`hmZa=o_Fx;LCO35?f>idrHFSOW1n_gQZH`Li3k7JG96Y}y7IlGq=baTj151z z*+9YtA0N4j7@m|c7qJuG^_E{}yK&BwR|z1{@paFs3vz#@-_7cck>%O1Czm#%r!aZP zblo5FtGPGa?DCgU7E7{SZ{+ggPuh>VE{j4Q<_QOvZ|(l*X>4HNu=hab&Pjnr$9Uxq z{a~2APxtU=)!h#^GL$pw6cpU#5>CIo-Br-t)1!Pd%YW~qyAJZYY@Z4A$ithDVtGzo zzL%_~BGKT=UsZE>lG&M;7Q7DT9Bda%gLoMjvJz{f%FdL`2L>F2r>mdKI;Vst0J>L{ A@c;k- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_shotspeed.png b/src/main/resources/assets/hbm/textures/items/gun_upgrade_debug_shotspeed.png new file mode 100644 index 0000000000000000000000000000000000000000..06f5167609cf00df3fe82989a87e946e1565ac94 GIT binary patch literal 349 zcmV-j0iyniP)|q`B106t+#a*LeC9g+VR@9+{$=F~T5GJe7-K4)*7|oq zZ@R)5LvOm;=y`x)yP0G~?j{^76z}kSpILw6w%}$U! Date: Wed, 18 Sep 2024 21:10:11 +0200 Subject: [PATCH 18/18] :PainB: --- src/main/java/com/hbm/blocks/ModBlocks.java | 4 +- .../blocks/generic/BlockScaffoldDynamic.java | 270 ++++++++++++++++++ src/main/java/com/hbm/main/ClientProxy.java | 1 + .../render/block/RenderScaffoldDynamic.java | 111 +++++++ .../java/com/hbm/tileentity/TileMappings.java | 2 + .../hbm/textures/blocks/scaffold_bar_side.png | Bin 0 -> 119 bytes .../hbm/textures/blocks/scaffold_bar_top.png | Bin 0 -> 166 bytes .../textures/blocks/scaffold_grate_side.png | Bin 0 -> 112 bytes .../textures/blocks/scaffold_grate_top.png | Bin 0 -> 132 bytes .../textures/blocks/scaffold_pole_side.png | Bin 0 -> 123 bytes .../hbm/textures/blocks/scaffold_pole_top.png | Bin 0 -> 143 bytes 11 files changed, 387 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/hbm/blocks/generic/BlockScaffoldDynamic.java create mode 100644 src/main/java/com/hbm/render/block/RenderScaffoldDynamic.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/scaffold_bar_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/scaffold_bar_top.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/scaffold_grate_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/scaffold_grate_top.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/scaffold_pole_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/scaffold_pole_top.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index e3a4b390e..de8842189 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -407,6 +407,7 @@ public class ModBlocks { public static Block steel_scaffold; public static Block steel_grate; public static Block steel_grate_wide; + public static Block scaffold_dynamic; public static Block deco_pipe; public static Block deco_pipe_rusted; @@ -1580,6 +1581,7 @@ public class ModBlocks { steel_scaffold = new BlockScaffold().setBlockName("steel_scaffold").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":deco_steel_orig"); steel_grate = new BlockGrate(Material.iron).setBlockName("steel_grate").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F); steel_grate_wide = new BlockGrate(Material.iron).setBlockName("steel_grate_wide").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F); + scaffold_dynamic = new BlockScaffoldDynamic().setBlockName("scaffold_dynamic").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); deco_pipe = new BlockPipe(Material.iron, RefStrings.MODID + ":pipe_side", 0).setBlockName("deco_pipe").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F).setBlockTextureName(RefStrings.MODID + ":pipe_top"); deco_pipe_rusted = new BlockPipe(Material.iron, RefStrings.MODID + ":pipe_side_rusty", 0).setBlockName("deco_pipe_rusted").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F).setBlockTextureName(RefStrings.MODID + ":pipe_top_rusty"); @@ -2081,7 +2083,6 @@ public class ModBlocks { turret_howard_damaged = new TurretHowardDamaged(Material.iron).setBlockName("turret_howard_damaged").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_rust"); turret_maxwell = new TurretMaxwell(Material.iron).setBlockName("turret_maxwell").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); turret_fritz = new TurretFritz(Material.iron).setBlockName("turret_fritz").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); - //turret_brandon = new TurretBrandon(Material.iron).setBlockName("turret_brandon").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); turret_arty = new TurretArty(Material.iron).setBlockName("turret_arty").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); turret_himars = new TurretHIMARS(Material.iron).setBlockName("turret_himars").setHardness(5.0F).setResistance(600.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); turret_sentry = new TurretSentry().setBlockName("turret_sentry").setHardness(5.0F).setResistance(5.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -2735,6 +2736,7 @@ public class ModBlocks { register(steel_scaffold); GameRegistry.registerBlock(steel_grate, steel_grate.getUnlocalizedName()); register(steel_grate_wide); + register(scaffold_dynamic); GameRegistry.registerBlock(deco_pipe, ItemBlockBase.class, deco_pipe.getUnlocalizedName()); GameRegistry.registerBlock(deco_pipe_rusted, ItemBlockBase.class, deco_pipe_rusted.getUnlocalizedName()); GameRegistry.registerBlock(deco_pipe_green, ItemBlockBase.class, deco_pipe_green.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockScaffoldDynamic.java b/src/main/java/com/hbm/blocks/generic/BlockScaffoldDynamic.java new file mode 100644 index 000000000..61e314085 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockScaffoldDynamic.java @@ -0,0 +1,270 @@ +package com.hbm.blocks.generic; + +import com.hbm.lib.Library; +import com.hbm.lib.RefStrings; +import com.hbm.util.I18nUtil; + +import static com.hbm.blocks.generic.BlockScaffoldDynamic.TileEntityScaffoldDynamic.*; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.blocks.ILookOverlay; +import com.hbm.items.ModItems; +import com.hbm.items.tool.ItemBlowtorch; + +import api.hbm.block.IToolable; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; + +public class BlockScaffoldDynamic extends BlockContainer implements IToolable, ILookOverlay { + + @SideOnly(Side.CLIENT) public IIcon iconPoleTop; + @SideOnly(Side.CLIENT) public IIcon iconPoleSide; + @SideOnly(Side.CLIENT) public IIcon iconGrateTop; + @SideOnly(Side.CLIENT) public IIcon iconGrateSide; + @SideOnly(Side.CLIENT) public IIcon iconBarTop; + @SideOnly(Side.CLIENT) public IIcon iconBarSide; + + public static int renderMode; + + public BlockScaffoldDynamic() { + super(Material.iron); + } + + public static int renderIDScaffold = RenderingRegistry.getNextAvailableRenderId(); + @Override public int getRenderType(){ return renderIDScaffold; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityScaffoldDynamic(); + } + + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + if(renderMode == 0) return side == 0 || side == 1 ? iconPoleTop : iconPoleSide; + if(renderMode == 1) return side == 0 || side == 1 ? iconGrateTop : iconGrateSide; + if(renderMode == 2) return side == 0 || side == 1 ? iconBarTop : iconBarSide; + return this.blockIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + this.iconPoleTop = reg.registerIcon(RefStrings.MODID + ":scaffold_pole_top"); + this.iconPoleSide = reg.registerIcon(RefStrings.MODID + ":scaffold_pole_side"); + this.iconGrateTop = reg.registerIcon(RefStrings.MODID + ":scaffold_grate_top"); + this.iconGrateSide = reg.registerIcon(RefStrings.MODID + ":scaffold_grate_side"); + this.iconBarTop = reg.registerIcon(RefStrings.MODID + ":scaffold_bar_top"); + this.iconBarSide = reg.registerIcon(RefStrings.MODID + ":scaffold_bar_side"); + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + TileEntityScaffoldDynamic tile = (TileEntityScaffoldDynamic) world.getTileEntity(x, y, z); + if(tool == ToolType.SCREWDRIVER) { + tile.locked = !tile.locked; + tile.markDirty(); + world.markBlockForUpdate(x, y, z); + return true; + } + + if(tool != ToolType.TORCH) return false; + + + int part = getPartFromCoord(fX, fY, fZ); + + if(part != 0 && tile.canToggle(part)) { + tile.toggle(part); + tile.markDirty(); + world.markBlockForUpdate(x, y, z); + return true; + } + return false; + } + + public static int getPartFromCoord(float fX, float fY, float fZ) { + if(fX < 0.25 && fZ < 0.25) return POLE_NX_NZ; + if(fX > 0.75 && fZ < 0.25) return POLE_PX_NZ; + if(fX > 0.75 && fZ > 0.75) return POLE_PX_PZ; + if(fX < 0.25 && fZ > 0.75) return POLE_NX_PZ; + + if(fY == 0 && fX < 0.25) return BAR_LOWER_NEG_X; + if(fY == 0 && fX > 0.75) return BAR_LOWER_POS_X; + if(fY == 0 && fZ < 0.25) return BAR_LOWER_NEG_Z; + if(fY == 0 && fZ > 0.75) return BAR_LOWER_POS_Z; + if(fY == 1 && fX < 0.25) return BAR_UPPER_NEG_X; + if(fY == 1 && fX > 0.75) return BAR_UPPER_POS_X; + if(fY == 1 && fZ < 0.25) return BAR_UPPER_NEG_Z; + if(fY == 1 && fZ > 0.75) return BAR_UPPER_POS_Z; + + if(fY < 0.125) return GRATE_LOWER; + if(fY > 0.875) return GRATE_UPPER; + + if(fX == 0 && fY < 0.5) return BAR_LOWER_NEG_X; + if(fX == 1 && fY < 0.5) return BAR_LOWER_POS_X; + if(fZ == 0 && fY < 0.5) return BAR_LOWER_NEG_Z; + if(fZ == 1 && fY < 0.5) return BAR_LOWER_POS_Z; + if(fX == 0 && fY > 0.5) return BAR_UPPER_NEG_X; + if(fX == 1 && fY > 0.5) return BAR_UPPER_POS_X; + if(fZ == 0 && fY > 0.5) return BAR_UPPER_NEG_Z; + if(fZ == 1 && fY > 0.5) return BAR_UPPER_POS_Z; + + return 0; + } + + //ttoo lazy to make an itemblock just to provide this in the one method that needs it + public static float lastFX; + public static float lastFY; + public static float lastFZ; + + @Override + public int onBlockPlaced(World world, int x, int y, int z, int side, float fX, float fY, float fZ, int meta) { + lastFX = fX; + lastFY = fY; + lastFZ = fZ; + + if(side == Library.POS_X.ordinal()) lastFX = 0; + if(side == Library.NEG_X.ordinal()) lastFX = 1; + if(side == Library.POS_Z.ordinal()) lastFZ = 0; + if(side == Library.NEG_Z.ordinal()) lastFZ = 1; + + return side; + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + TileEntityScaffoldDynamic tile = (TileEntityScaffoldDynamic) world.getTileEntity(x, y, z); + + // DEFAUL: POLES + if(stack.getItemDamage() == 0) { + if(lastFX < 0.5 && lastFZ < 0.5) tile.toggle(tile.POLE_NX_NZ); + if(lastFX >= 0.5 && lastFZ < 0.5) tile.toggle(tile.POLE_PX_NZ); + if(lastFX < 0.5 && lastFZ >= 0.5) tile.toggle(tile.POLE_NX_PZ); + if(lastFX >= 0.5 && lastFZ >= 0.5) tile.toggle(tile.POLE_PX_PZ); + } + } + + public static class TileEntityScaffoldDynamic extends TileEntity { + + public int composite; + public int prevComposite; + public boolean locked; + public static final int BAR_LOWER_POS_X = (1 << 0); + public static final int BAR_LOWER_NEG_X = (1 << 1); + public static final int BAR_LOWER_POS_Z = (1 << 2); + public static final int BAR_LOWER_NEG_Z = (1 << 3); + public static final int BAR_UPPER_POS_X = (1 << 4); + public static final int BAR_UPPER_NEG_X = (1 << 5); + public static final int BAR_UPPER_POS_Z = (1 << 6); + public static final int BAR_UPPER_NEG_Z = (1 << 7); + public static final int POLE_PX_PZ = (1 << 8); + public static final int POLE_PX_NZ = (1 << 9); + public static final int POLE_NX_PZ = (1 << 10); + public static final int POLE_NX_NZ = (1 << 11); + public static final int GRATE_LOWER = (1 << 12); + public static final int GRATE_UPPER = (1 << 13); + + public boolean canToggle(int part) { return !locked && (composite ^ part) != 0; } + public void toggle(int part) { this.composite ^= part; System.out.println("" + this.composite); } + public boolean has(int part) { return (this.composite & part) != 0; } + + @Override + public void updateEntity() { } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + this.readFromNBT(pkt.func_148857_g()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.composite = nbt.getInteger("c"); + this.prevComposite = nbt.getInteger("p"); + this.locked = nbt.getBoolean("l"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("c", composite); + nbt.setInteger("p", prevComposite); + nbt.setBoolean("l", locked); + } + } + + @Override + public void printHook(Pre event, World world, int x, int y, int z) { + + Minecraft mc = Minecraft.getMinecraft(); + EntityPlayer player = mc.thePlayer; + ItemStack held = player.getHeldItem(); + + boolean holdsBlowtorch = held != null && held.getItem() instanceof ItemBlowtorch; + boolean holdScrewdriver = held != null && (held.getItem() == ModItems.screwdriver || held.getItem() == ModItems.screwdriver_desh); + + MovingObjectPosition mop = mc.objectMouseOver; + + if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK) { + float fX = (float) (mop.hitVec.xCoord - x); + float fY = (float) (mop.hitVec.yCoord - y); + float fZ = (float) (mop.hitVec.zCoord - z); + + TileEntityScaffoldDynamic tile = (TileEntityScaffoldDynamic) world.getTileEntity(x, y, z); + + if(tile != null && tile.locked && (holdsBlowtorch || holdScrewdriver)) { + List text = new ArrayList(); + text.add(EnumChatFormatting.RED + "Locked!"); + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + return; + } + + if(holdsBlowtorch) { + String name = null; + int part = getPartFromCoord(fX, fY, fZ); + if(part <= (1 << 3)) name = "Lower Vertical Bar"; + else if(part <= (1 << 7)) name = "Upper Vertical Bar"; + else if(part <= (1 << 10)) name = "Pole"; + else if(part <= (1 << 13)) name = "Grate"; + + if(name != null) { + List text = new ArrayList(); + text.add("Toggle:"); + text.add(name); + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + } + } + } +} diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 90ccd677a..f7d519d68 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -836,6 +836,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerBlockHandler(new RenderSteelBeam()); RenderingRegistry.registerBlockHandler(new RenderSteelWall()); RenderingRegistry.registerBlockHandler(new RenderSteelCorner()); + RenderingRegistry.registerBlockHandler(new RenderScaffoldDynamic()); RenderingRegistry.registerBlockHandler(new RenderBarrel()); RenderingRegistry.registerBlockHandler(new RenderFence()); RenderingRegistry.registerBlockHandler(new RenderBarbedWire()); diff --git a/src/main/java/com/hbm/render/block/RenderScaffoldDynamic.java b/src/main/java/com/hbm/render/block/RenderScaffoldDynamic.java new file mode 100644 index 000000000..91beb1e71 --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderScaffoldDynamic.java @@ -0,0 +1,111 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.generic.BlockScaffoldDynamic; +import com.hbm.blocks.generic.BlockScaffoldDynamic.TileEntityScaffoldDynamic; +import com.hbm.render.util.RenderBlocksNT; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; + +public class RenderScaffoldDynamic implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + + tessellator.startDrawingQuads(); + + + renderer.setRenderBounds(0D, 0D, 0.875D, 0.75D, 1D, 1D); + tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, 1F); renderer.renderFaceZPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); + + + renderer.setRenderBounds(0.75D, 0D, 0.75D, 1D, 1D, 1D); + tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(1F, 0F, 0F); renderer.renderFaceXPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, 1F); renderer.renderFaceZPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); + + renderer.setRenderBounds(0.875D, 0D, 0D, 1D, 1D, 0.75D); + tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(1F, 0F, 0F); renderer.renderFaceXPos(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); + tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); + + tessellator.draw(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + Tessellator tessellator = Tessellator.instance; + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + + renderer = RenderBlocksNT.INSTANCE.setWorld(world); + + TileEntity tile = world.getTileEntity(x, y, z); + if(!(tile instanceof TileEntityScaffoldDynamic)) return false; + TileEntityScaffoldDynamic scaffold = (TileEntityScaffoldDynamic) tile; + + boolean lpx = scaffold.has(scaffold.BAR_LOWER_POS_X); + boolean lnx = scaffold.has(scaffold.BAR_LOWER_NEG_X); + boolean upx = scaffold.has(scaffold.BAR_UPPER_POS_X); + boolean unx = scaffold.has(scaffold.BAR_UPPER_NEG_X); + boolean lpz = scaffold.has(scaffold.BAR_LOWER_POS_Z); + boolean lnz = scaffold.has(scaffold.BAR_LOWER_NEG_Z); + boolean upz = scaffold.has(scaffold.BAR_UPPER_POS_Z); + boolean unz = scaffold.has(scaffold.BAR_UPPER_NEG_Z); + + boolean p_nx_nz = scaffold.has(scaffold.POLE_NX_NZ); + boolean p_px_nz = scaffold.has(scaffold.POLE_PX_NZ); + boolean p_px_pz = scaffold.has(scaffold.POLE_PX_PZ); + boolean p_nx_pz = scaffold.has(scaffold.POLE_NX_PZ); + + BlockScaffoldDynamic.renderMode = 0; + if(p_nx_nz) { renderer.setRenderBounds(0D, 0D, 0D, 0.25D, 1D, 0.25D); renderer.renderStandardBlock(block, x, y, z); } + if(p_px_nz) { renderer.setRenderBounds(0.75D, 0D, 0D, 1D, 1D, 0.25D); renderer.renderStandardBlock(block, x, y, z); } + if(p_px_pz) { renderer.setRenderBounds(0.75D, 0D, 0.75D, 1D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); } + if(p_nx_pz) { renderer.setRenderBounds(0D, 0D, 0.75D, 0.25D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); } + + BlockScaffoldDynamic.renderMode = 1; + if(scaffold.has(scaffold.GRATE_LOWER)) { renderer.setRenderBounds(0.000, 0.000, 0.000, 1.000, 0.125, 1.000); renderer.renderStandardBlock(block, x, y, z); } + if(scaffold.has(scaffold.GRATE_UPPER)) { renderer.setRenderBounds(0.000, 0.875, 0.000, 1.000, 1.000, 1.000); renderer.renderStandardBlock(block, x, y, z); } + + BlockScaffoldDynamic.renderMode = 2; + + if(lpx) { renderer.setRenderBounds(0.75, 0.00, p_px_nz ? 0.25 : 0.00, 1.00, 0.25, p_px_pz ? 0.75 : 1.00); renderer.renderStandardBlock(block, x, y, z); } + if(upx) { renderer.setRenderBounds(0.75, 0.75, p_px_nz ? 0.25 : 0.00, 1.00, 1.00, p_px_pz ? 0.75 : 1.00); renderer.renderStandardBlock(block, x, y, z); } + if(lnx) { renderer.setRenderBounds(0.00, 0.00, p_nx_nz ? 0.25 : 0.00, 0.25, 0.25, p_nx_pz ? 0.75 : 1.00); renderer.renderStandardBlock(block, x, y, z); } + if(unx) { renderer.setRenderBounds(0.00, 0.75, p_nx_nz ? 0.25 : 0.00, 0.25, 1.00, p_nx_pz ? 0.75 : 1.00); renderer.renderStandardBlock(block, x, y, z); } + if(lpz) { renderer.setRenderBounds(p_nx_pz || lnx ? 0.25 : 0.00, 0.00, 0.75, p_px_pz || lpx ? 0.75 : 1.00, 0.25, 1.00); renderer.renderStandardBlock(block, x, y, z); } + if(upz) { renderer.setRenderBounds(p_nx_pz || unx ? 0.25 : 0.00, 0.75, 0.75, p_px_pz || upx ? 0.75 : 1.00, 1.00, 1.00); renderer.renderStandardBlock(block, x, y, z); } + if(lnz) { renderer.setRenderBounds(p_nx_nz || lnx ? 0.25 : 0.00, 0.00, 0.00, p_px_nz || lpx ? 0.75 : 1.00, 0.25, 0.25); renderer.renderStandardBlock(block, x, y, z); } + if(unz) { renderer.setRenderBounds(p_nx_nz || unx ? 0.25 : 0.00, 0.75, 0.00, p_px_nz || upx ? 0.75 : 1.00, 1.00, 0.25); renderer.renderStandardBlock(block, x, y, z); } + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return false; + } + + @Override + public int getRenderId() { + return BlockScaffoldDynamic.renderIDScaffold; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index e36bb9c52..a33860c56 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -14,6 +14,7 @@ import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.blocks.generic.BlockMotherOfAllOres.TileEntityRandomOre; import com.hbm.blocks.generic.BlockPedestal.TileEntityPedestal; import com.hbm.blocks.generic.BlockPlushie.TileEntityPlushie; +import com.hbm.blocks.generic.BlockScaffoldDynamic.TileEntityScaffoldDynamic; import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.generic.PartEmitter.TileEntityPartEmitter; import com.hbm.blocks.machine.BlockICF.TileEntityBlockICF; @@ -63,6 +64,7 @@ public class TileMappings { put(TileEntityDecoSteelPoles.class, "tileentity_steelpoles"); put(TileEntityDecoPoleTop.class, "tileentity_poletop"); put(TileEntityDecoPoleSatelliteReceiver.class, "tileentity_satellitereceicer"); + put(TileEntityScaffoldDynamic.class, "tileentity_scaffold_dynamic"); put(TileEntityMachineBattery.class, "tileentity_battery"); put(TileEntityCapacitor.class, "tileentity_capacitor"); put(TileEntityMachineWoodBurner.class, "tileentity_wood_burner"); diff --git a/src/main/resources/assets/hbm/textures/blocks/scaffold_bar_side.png b/src/main/resources/assets/hbm/textures/blocks/scaffold_bar_side.png new file mode 100644 index 0000000000000000000000000000000000000000..6c8ad885a6fc3718b79ed72a782ad7383a907180 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfFj|62R^;NuJ3hLf^~62W1)$@0RuysGyl|(?CUH* OoeZ9?elF{r5}E*FNhNdu literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/scaffold_bar_top.png b/src/main/resources/assets/hbm/textures/blocks/scaffold_bar_top.png new file mode 100644 index 0000000000000000000000000000000000000000..3065264806b225e34dcb84eaa48484180079bc2e GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf!@(NS=|MA3w*j>bP0l+XkK0{S2^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/scaffold_pole_top.png b/src/main/resources/assets/hbm/textures/blocks/scaffold_pole_top.png new file mode 100644 index 0000000000000000000000000000000000000000..79c69a803c6793218a407c6e3d4dc1f0197704be GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfcw4cQ8Y)BW=H9or<+ ltTkV`A3VX(v$(R6kztaXTV_>tMKaJt22WQ%mvv4FO#n9ZE|35K literal 0 HcmV?d00001