diff options
Diffstat (limited to 'src')
36 files changed, 9035 insertions, 1 deletions
diff --git a/src/main/java/goodgenerator/blocks/regularBlock/AntimatterRenderBlock.java b/src/main/java/goodgenerator/blocks/regularBlock/AntimatterRenderBlock.java new file mode 100644 index 0000000000..baa06f70dc --- /dev/null +++ b/src/main/java/goodgenerator/blocks/regularBlock/AntimatterRenderBlock.java @@ -0,0 +1,62 @@ +package goodgenerator.blocks.regularBlock; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import goodgenerator.blocks.tileEntity.render.TileAntimatter; + +public class AntimatterRenderBlock extends Block { + + public AntimatterRenderBlock() { + super(Material.iron); + this.setResistance(20f); + this.setHardness(-1.0f); + this.setLightLevel(100.0f); + this.setBlockName("gg.antimatterRender"); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + blockIcon = iconRegister.registerIcon("gregtech:iconsets/TRANSPARENT"); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean canRenderInPass(int a) { + return true; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public boolean hasTileEntity(int metadata) { + return true; + } + + @Override + public TileEntity createTileEntity(World world, int metadata) { + return new TileAntimatter(); + } + + @Override + public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int meta, int fortune) { + return new ArrayList<>(); + } + +} diff --git a/src/main/java/goodgenerator/blocks/structures/AntimatterStructures.java b/src/main/java/goodgenerator/blocks/structures/AntimatterStructures.java new file mode 100644 index 0000000000..e199e680cc --- /dev/null +++ b/src/main/java/goodgenerator/blocks/structures/AntimatterStructures.java @@ -0,0 +1,3834 @@ +package goodgenerator.blocks.structures; + +public class AntimatterStructures { + + public static final String[][] ANTIMATTER_FORGE = new String[][] { + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DD DD ", + " A A ", + " DD DD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DD DD ", + " A A ", + " DD DD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DAD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DDD DDD ", + " AA AA ", + " DDD DDD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DAD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DD D D DD ", + " A DD~DD A ", + " DD D D DD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DCD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DDD DDDDDDD DDD ", + " CA AC ", + " DDD DDDDDDD DDD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DCD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " D D ", + " DCD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DDD DDDCCCCCCCDDD DDD ", + " CA CCCCCCC AC ", + " DDD DDDCCCCCCCDDD DDD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DCD ", + " D D ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " D D ", + " DCD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DDD DDCCDCAAAAACDCCDD DDD ", + " CA CCCBBBBBBBCCC AC ", + " DDD DDCCCAAAAAAACCCDD DDD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DCD ", + " D D ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " D D ", + " DCD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DDD DCCACDCCCCCCCDCACCD DDD ", + " CA CCBBBCCCCCCCBBBCC AC ", + " DDD DCCAAACCCCCCCAAACCD DDD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DCD ", + " D D ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " D D ", + " DDCDD ", + " DAD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D DD DD D ", + " DDDD DCAAACDDDDDDDDDCAAACD DDDD ", + " CAA CBBBCC CCBBBC AAC ", + " DDDD DCAAACCDDDDDDDCCAAACD DDDD ", + " D DD DD D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DAD ", + " DDCDD ", + " D D ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " D D ", + " DDCDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D DD DD D ", + " DDD DCAACCDD E E DDCCAACD DDD ", + " CA CBBCC D D CCBBC AC ", + " DDD DCAACCDD E E DDCCAACD DDD ", + " D DD DD D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDCDD ", + " D D ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " D D ", + " DDCDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D DD DD D ", + " DDD DCAACDD DDCAACD DDD ", + " CA CBBC CBBC AC ", + " DDD DCAACDD DDCAACD DDD ", + " D DD DD D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDCDD ", + " D D ", + " ", + " ", + " " }, + { " ", + " ", + " D D ", + " DDCDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D D D ", + " DDD DCAACD DCAACD DDD ", + " CA CBBC CBBC AC ", + " DDD DCAACD DCAACD DDD ", + " D D D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDCDD ", + " D D ", + " ", + " " }, + { " ", + " ", + " D D ", + " DDCDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D D D ", + " DDD DCACD DCACD DDD ", + " CA CBC CBC AC ", + " DDD DCACD DCACD DDD ", + " D D D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDCDD ", + " D D ", + " ", + " " }, + { " ", + " ", + " D D ", + " DDCDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D D D ", + " DDD DCAACD DCAACD DDD ", + " CA CBBC CBBC AC ", + " DDD DCAACD DCAACD DDD ", + " D D D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDCDD ", + " D D ", + " ", + " " }, + { " ", + " D D ", + " DDCDD ", + " DAD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D D D ", + " DDDD DCCCD DCCCD DDDD ", + " CAA CBC CBC AAC ", + " DDDD DCACD DCACD DDDD ", + " D D D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DAD ", + " DDCDD ", + " D D ", + " " }, + { " ", + " D D ", + " DDCDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D D D ", + " DDD DDDDD DDDDD DDD ", + " CA CBC CBC AC ", + " DDD DCACD DCACD DDD ", + " D D D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDCDD ", + " D D ", + " " }, + { " ", + " D D ", + " DDCDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D D D ", + " DDD DCCCD DCCCD DDD ", + " CA CBC CBC AC ", + " DDD DCACD DCACD DDD ", + " D D D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDCDD ", + " D D ", + " " }, + { " DDDDD ", + " DD DD ", + " DDCDD ", + " DDADD ", + " DDDDD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "DDDDDDDDDDDDDDDD DDDDDDDDDDDDDDDD", + "DDDD DCACDE EDCACD DDDD", + "D CA CBC D D CBC AC D", + "DDDD DCACDE EDCACD DDDD", + "DDDDDDDDDDDDDDDD DDDDDDDDDDDDDDDD", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DDDDD ", + " DDADD ", + " DDCDD ", + " DD DD ", + " DDDDD " }, + { " ", + " D D ", + " AFA ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD DCACD DCACD DAD ", + " HAAAAAAAAACBC CBCAAAAAAAAAH ", + " DAD DCACD DCACD DAD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " AFA ", + " D D ", + " " }, + { " ", + " D D ", + " AFA ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAAAAAAAAAAAACD DCAAAAAAAAAAAAD ", + " HBBBBBBBBBBBC CBBBBBBBBBBBH ", + " DAAAAAAAAAAAACD DCAAAAAAAAAAAAD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " AFA ", + " D D ", + " " }, + { " ", + " D D ", + " AFA ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD DCACD DCACD DAD ", + " HAAAAAAAAACBC CBCAAAAAAAAAH ", + " DAD DCACD DCACD DAD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " AFA ", + " D D ", + " " }, + { " DDDDD ", + " DD DD ", + " DDCDD ", + " DDADD ", + " DDDDD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "DDDDDDDDDDDDDDDD DDDDDDDDDDDDDDDD", + "DDDD DCACDE EDCACD DDDD", + "D CA CBC D D CBC AC D", + "DDDD DCACDE EDCACD DDDD", + "DDDDDDDDDDDDDDDD DDDDDDDDDDDDDDDD", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DDDDD ", + " DDADD ", + " DDCDD ", + " DD DD ", + " DDDDD " }, + { " ", + " D D ", + " DDCDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D D D ", + " DDD DCCCD DCCCD DDD ", + " CA CBC CBC AC ", + " DDD DCACD DCACD DDD ", + " D D D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDCDD ", + " D D ", + " " }, + { " ", + " D D ", + " DDCDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D D D ", + " DDD DDDDD DDDDD DDD ", + " CA CBC CBC AC ", + " DDD DCACD DCACD DDD ", + " D D D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDCDD ", + " D D ", + " " }, + { " ", + " D D ", + " DDCDD ", + " DDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D D D ", + " DDDD DCCCD DCCCD DDDD ", + " C A CBC CBC A C ", + " DDDD DCACD DCACD DDDD ", + " D D D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " D D ", + " DDCDD ", + " D D ", + " " }, + { " ", + " ", + " D D ", + " DDCDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D D D ", + " DDD DCAACD DCAACD DDD ", + " CA CBBC CBBC AC ", + " DDD DCAACD DCAACD DDD ", + " D D D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDCDD ", + " D D ", + " ", + " " }, + { " ", + " ", + " D D ", + " DDCDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D D D ", + " DDD DCACD DCACD DDD ", + " CA CBC CBC AC ", + " DDD DCACD DCACD DDD ", + " D D D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDCDD ", + " D D ", + " ", + " " }, + { " ", + " ", + " D D ", + " DDCDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D D D ", + " DDD DCAACD DCAACD DDD ", + " CA CBBC CBBC AC ", + " DDD DCAACD DCAACD DDD ", + " D D D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDCDD ", + " D D ", + " ", + " " }, + { " ", + " ", + " ", + " D D ", + " DDCDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D DD DD D ", + " DDD DCAACDD DDCAACD DDD ", + " CA CBBC CBBC AC ", + " DDD DCAACDD DDCAACD DDD ", + " D DD DD D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDCDD ", + " D D ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " D D ", + " DDCDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D DD DD D ", + " DDD DCAACCDD E E DDCCAACD DDD ", + " CA CBBCC D D CCBBC AC ", + " DDD DCAACCDD E E DDCCAACD DDD ", + " D DD DD D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDCDD ", + " D D ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " D D ", + " DDCDD ", + " DDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D DD DD D ", + " DDDD DCAAACDDDDDDDDDCAAACD DDDD ", + " C A CBBBCC CCBBBC A C ", + " DDDD DCAAACCDDDDDDDCCAAACD DDDD ", + " D DDDDDDD D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDD ", + " DDCDD ", + " D D ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " D D ", + " DCD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DDD DCCACDCCCCCCCDCACCD DDD ", + " CA CCBBBCCCCCCCBBBCC AC ", + " DDD DCCAAACCCCCCCAAACCD DDD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DCD ", + " D D ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " D D ", + " DCD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DDD DDCCDCAAAAACDCCDD DDD ", + " CA CCCBBBBBBBCCC AC ", + " DDD DDCCCAAAAAAACCCDD DDD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DCD ", + " D D ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " D D ", + " DCD ", + " DDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DDDD DDDCCCACCCDDD DDDD ", + " C A CCCBCCC A C ", + " DDDD DDDCCCACCCDDD DDDD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDD ", + " DCD ", + " D D ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DCD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DDD DDDADDD DDD ", + " CA ABA AC ", + " DDD DDDADDD DDD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DCD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DCD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DDD A DDD ", + " CA ABA AC ", + " DDD A DDD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DCD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DCD ", + " DDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DDDD A DDDD ", + " C A ABA A C ", + " DDDD A DDDD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDD ", + " DCD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DCD ", + " DCD ", + " DAD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DDDDD A DDDDD ", + " CCAA ABA AACC ", + " DDDDD A DDDDD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DAD ", + " DCD ", + " DCD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " D D ", + " DCD ", + " DDD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DDDDD A DDDDD ", + " C A ABA A C ", + " DDDDD A DDDDD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DDD ", + " DCD ", + " D D ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DCD ", + " DCD ", + " DAD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DDDDD A DDDDD ", + " CCAA ABA AACC ", + " DDDDD A DDDDD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DAD ", + " DCD ", + " DCD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " D D ", + " DCD ", + " DCD ", + " DAD ", + " DAD ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DDDDDD A DDDDDD ", + " CCAA ABA AA C ", + " DDDDDD A DDDDDD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " DAD ", + " DAD ", + " DDD ", + " DCD ", + " D D ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " DDCDD ", + " DDCDD ", + " DDCDD ", + " DAD ", + " DAD ", + " DAD ", + " DAD ", + " ", + " ", + " DDD DDDDD DDD ", + " DDDDDDDD A DDDDDDDD ", + " CCCAAAA ABA AAAACCC ", + " DDDDDDDD A DDDDDDDD ", + " DDD DDDDD DDD ", + " ", + " ", + " DAD ", + " DAD ", + " DAD ", + " DAD ", + " DDCDD ", + " DDCDD ", + " DDCDD ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " D D ", + " D D ", + " DDCDD ", + " DDCDD ", + " DDCDD ", + " DDD ", + " DAD ", + " DAD ", + " DDD DDADD DDD ", + " DDDDDDDDDDDADDDDDDDDDDD ", + " CCC AAADBDAAA CCC ", + " DDDDDDDDDDDADDDDDDDDDDD ", + " DDD DDADD DDD ", + " DAD ", + " DAD ", + " DDD ", + " DDCDD ", + " DDCDD ", + " DDCDD ", + " D D ", + " D D ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " D D ", + " D D ", + " DDCDD ", + " DDCDD ", + " DDCDD ", + " DDDDDCDDDDD ", + " DDDDDDDDCDDDDDDDD ", + " CCCCHHHCCCC ", + " DDDDDDDDCDDDDDDDD ", + " DDDDDCDDDDD ", + " DDCDD ", + " DDCDD ", + " DDCDD ", + " D D ", + " D D ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " D D ", + " D D ", + " D D ", + " DDDDD ", + " DDDDDDDDDDD ", + " ", + " DDDDDDDDDDD ", + " DD DD ", + " D D ", + " D D ", + " D D ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " DDDDD ", + " D D ", + " D D ", + " D D ", + " DDDDD ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " } }; + + /* + * public static final String[][] ANTIMATTER_GENERATOR = new String[][] { + * { " ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " F ", " F ", + * " F ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " " }, + * { " ", " ", + * " ", " ", + * " ", " ", + * " ", " D ", + * " D ", " D ", + * " D ", " D ", + * " D ", " D ", + * " FDF ", " FDF ", + * " FDF ", " D ", + * " D ", " D ", + * " D ", " D ", + * " D ", " D ", + * " ", " ", + * " ", " ", + * " ", " ", + * " " }, + * { " ", " ", + * " ", " ", + * " D ", " D ", + * " D ", " D ", + * " ", " ", + * " ", " BBBBBBB ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " BBBBBBB ", + * " ", " ", + * " ", " D ", + * " D ", " D ", + * " D ", " ", + * " ", " ", + * " " }, + * { " ", " ", + * " ", " ", + * " D ", " EEDEE ", + * " D ", " ", + * " ", " ", + * " ", " BBBB BBBB ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " BBBB BBBB ", + * " ", " ", + * " ", " ", + * " D ", " EEDEE ", + * " D ", " ", + * " ", " ", + * " " }, + * { " ", " ", + * " ", " D ", + * " EDE ", " EEEE D EEEE ", + * " ", " ", + * " ", " ", + * " ", " BBB BBB ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " BBB BBB ", + * " ", " ", + * " ", " ", + * " ", " EEEE D EEEE ", + * " EDE ", " D ", + * " ", " ", + * " " }, + * { " ", " ", + * " ", " D ", + * " EEEEEDEEEEE ", " EE D EE ", + * " ", " ", + * " ", " ", + * " ", " BB BB ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " BB BB ", + * " ", " ", + * " ", " ", + * " ", " EE D EE ", + * " EEEEEDEEEEE ", " D ", + * " ", " ", + * " " }, + * { " ", " ", + * " D ", " EEEDEEE ", + * " EEEE D EEEE ", " E E ", + * " ", " ", + * " ", " ", + * " ", " BBB BBB ", + * " ", " ", + * " F F ", " F F ", + * " F F ", " ", + * " ", " BBB BBB ", + * " ", " ", + * " ", " ", + * " ", " E E ", + * " EEEE D EEEE ", " EEEDEEE ", + * " D ", " ", + * " " }, + * { " ", " ", + * " D ", " EEEEEDEEEEE ", + * " D EEE D EEE D ", " DE ED ", + * " D D ", " D D ", + * " D D ", " D D ", + * " D D ", " BD DB ", + * " D D ", " D D ", + * " FD DF ", " FD DF ", + * " FD DF ", " D D ", + * " D D ", " BD DB ", + * " D D ", " D D ", + * " D D ", " D D ", + * " D D ", " DE ED ", + * " D EEE D EEE D ", " EEEEEDEEEEE ", + * " D ", " ", + * " " }, + * { " ", " D ", + * " EEDEE ", " D EEEEE D EEEEE D ", + * " EE EE ", " ED DE ", + * " ", " ", + * " D D ", " D D ", + * " D D ", " BB BB ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " BB BB ", + * " D D ", " D D ", + * " D D ", " ", + * " ", " ED DE ", + * " EE EE ", " D EEEEE D EEEEE D ", + * " EEDEE ", " D ", + * " " }, + * { " ", " D ", + * " D EEEEDEEEE D ", " EEEE D EEEE ", + * " EED DEE ", " E E ", + * " ", " ", + * " ", " ", + * " D D ", " BB D D BB ", + * " D D ", " ", + * " ", " ", + * " ", " ", + * " D D ", " BB D D BB ", + * " D D ", " ", + * " ", " ", + * " ", " E E ", + * " EED DEE ", " EEEE D EEEE ", + * " D EEEEDEEEE D ", " D ", + * " " }, + * { " ", " D ", + * " DEEEEEEDEEEEEED ", " EEE D EEE ", + * " EE D D EE ", " E E ", + * " ", " ", + * " ", " ", + * " ", " B B ", + * " D D ", " D D ", + * " EEEEE ", " ", + * " EEEEE ", " D D ", + * " D D ", " B B ", + * " ", " ", + * " ", " ", + * " ", " E E ", + * " EE D D EE ", " EEE D EEE ", + * " DEEEEEEDEEEEEED ", " D ", + * " " }, + * { " ", " D D D ", + * " EEEEEEEDEEEEEEE ", " EE D D D EE ", + * " EE EE ", " E E ", + * " ", " ", + * " ", " ", + * " ", " BB BB ", + * " ", " D D ", + * " BEEAAAAAEEBD ", " CCCCC ", + * " DBEEAAAAAEEBD ", " D D ", + * " ", " BB BB ", + * " ", " ", + * " ", " ", + * " ", " E E ", + * " EE EE ", " EE D D D EE ", + * " EEEEEEEDEEEEEEE ", " D D D ", + * " " }, + * { " D ", " D EEDEE D ", + * " EEEEE D EEEEE ", " EEE D D EEE ", + * " EE EE ", " E E ", + * " ", " ", + * " ", " ", + * " ", " B B ", + * " ", " ", + * " BEAAEEEEEAAEB ", " CCEECEECC ", + * " BEAAEEEEEAAEB ", " ", + * " ", " B B ", + * " ", " ", + * " ", " ", + * " ", " E E ", + * " EE EE ", " EEE D D EEE ", + * " EEEEE D EEEEE ", " D EEDEE D ", + * " D " }, + * { " D ", " DEEEDEEED ", + * " EEEEE D EEEEE ", " EE D D EE ", + * " EE EE ", " E E ", + * " ", " ", + * " ", " ", + * " ", " B B ", + * " ", " ", + * " EAEE EEAE ", " CEE C EEC ", + * " EAEE EEAE ", " ", + * " ", " B B ", + * " ", " ", + * " ", " ", + * " ", " E E ", + * " EE EE ", " EE D D EE ", + * " EEEEE D EEEEE ", " DEEEDEEED ", + * " D " }, + * { " D D D ", " EEEEDEEEE ", + * " EEEE D D D EEEE ", " EEE EEE ", + * " E E ", " E E ", + * " ", " ", + * " ", " ", + * " ", " BB BB ", + * " ", " ", + * " EAE EAE ", " CE C EC ", + * " EAE EAE ", " ", + * " ", " BB BB ", + * " ", " ", + * " ", " ", + * " ", " E E ", + * " E E ", " EEE EEE ", + * " EEEE D D D EEEE ", " EEEEDEEEE ", + * " D D D " }, + * { " DDDDD ", " EEEEEDEEEEE ", + * " EEEE DDDDD EEEE ", " EE D D EE ", + * " E D D E ", " EE EE ", + * " ", " ", + * " ", " ", + * " ", " B B ", + * " ", " ", + * " EAE EAE ", " CE C EC ", + * " EAE EAE ", " ", + * " ", " B B ", + * " ", " ", + * " ", " ", + * " ", " EE EE ", + * " E D D E ", " EE D D EE ", + * " EEEE DDDDD EEEE ", " EEEEEDEEEEE ", + * " DDDDD " }, + * { " D D ", " EEEEEEEEEEE ", + * " EEEE DEEED EEEE ", " EE EEE EE ", + * " EE EEE EE ", " E DED E ", + * " DED ", " DED ", + * " A ", " A ", + * " A ", " B B ", + * " ", " ", + * " F EAE E EAE F ", " F CE ECE EC F ", + * " F EAE E EAE F ", " ", + * " ", " B B ", + * " A ", " A ", + * " A ", " DED ", + * " DED ", " E DED E ", + * " EE EEE EE ", " EE E~E EE ", + * " EEEE DEEED EEEE ", " EEEEEEEEEEE ", + * " D D " }, + * { " DDDD DDDD ", " DDDDDDDDEGEDDDDDDDD ", + * " DDDDDDDDDDECEDDDDDDDDDD ", " DDDDDDDDD ECE DDDDDDDDD ", + * " DDDDDD ECE DDDDDD ", " DDDD ECE DDDD ", + * " DDD ECE DD ", " D ECE DD ", + * " D ACA D ", " D ACA D ", + * " D ACA D ", " DB C BD ", + * " D C D ", " D C D ", + * "FD EAE ECE EAE DF", "FD CCCCCCCCCCCCC DF", + * "FD EAE ECE EAE DF", " D C D ", + * " D C D ", " DB C BD ", + * " D ACA D ", " D ACA D ", + * " D ACA D ", " DD ECE DD ", + * " DD ECE DD ", " DDDD ECE DDDD ", + * " DDDDDD ECE DDDDDD ", " DDDDDDDDD ECE DDDDDDDDD ", + * " DDDDDDDDDDECEDDDDDDDDDD ", " DDDDDDDDEGEDDDDDDDD ", + * " DDDD DDDD " }, + * { " D D ", " EEEEEEEEEEE ", + * " EEEE DEEED EEEE ", " EE EEE EE ", + * " EE EEE EE ", " E DED E ", + * " DED ", " DED ", + * " A ", " A ", + * " A ", " B B ", + * " ", " ", + * " F EAE E EAE F ", " F CE ECE EC F ", + * " F EAE E EAE F ", " ", + * " ", " B B ", + * " A ", " A ", + * " A ", " DED ", + * " DED ", " E DED E ", + * " EE EEE EE ", " EE EEE EE ", + * " EEEE DEEED EEEE ", " EEEEEEEEEEE ", + * " D D " }, + * { " DDDDD ", " EEEEEDEEEEE ", + * " EEEE DDDDD EEEE ", " EE D D EE ", + * " E D D E ", " EE EE ", + * " ", " ", + * " ", " ", + * " ", " B B ", + * " ", " ", + * " EAE EAE ", " CE C EC ", + * " EAE EAE ", " ", + * " ", " B B ", + * " ", " ", + * " ", " ", + * " ", " EE EE ", + * " E D D E ", " EE D D EE ", + * " EEEE DDDDD EEEE ", " EEEEEDEEEEE ", + * " DDDDD " }, + * { " D D D ", " EEEEDEEEE ", + * " EEEE D D D EEEE ", " EEE EEE ", + * " E E ", " E E ", + * " ", " ", + * " ", " ", + * " ", " BB BB ", + * " ", " ", + * " EAE EAE ", " CE C EC ", + * " EAE EAE ", " ", + * " ", " BB BB ", + * " ", " ", + * " ", " ", + * " ", " E E ", + * " E E ", " EEE EEE ", + * " EEEE D D D EEEE ", " EEEEDEEEE ", + * " D D D " }, + * { " D ", " DEEEDEEED ", + * " EEEEE D EEEEE ", " EE D D EE ", + * " EE EE ", " E E ", + * " ", " ", + * " ", " ", + * " ", " B B ", + * " ", " ", + * " EAEE EEAE ", " CEE C EEC ", + * " EAEE EEAE ", " ", + * " ", " B B ", + * " ", " ", + * " ", " ", + * " ", " E E ", + * " EE EE ", " EE D D EE ", + * " EEEEE D EEEEE ", " DEEEDEEED ", + * " D " }, + * { " D ", " D EEDEE D ", + * " EEEEE D EEEEE ", " EEE D D EEE ", + * " EE EE ", " E E ", + * " ", " ", + * " ", " ", + * " ", " B B ", + * " ", " ", + * " BEAAEEEEEAAEB ", " CCEECEECC ", + * " BEAAEEEEEAAEB ", " ", + * " ", " B B ", + * " ", " ", + * " ", " ", + * " ", " E E ", + * " EE EE ", " EEE D D EEE ", + * " EEEEE D EEEEE ", " D EEDEE D ", + * " D " }, + * { " ", " D D D ", + * " EEEEEEEDEEEEEEE ", " EE D D D EE ", + * " EE EE ", " E E ", + * " ", " ", + * " ", " ", + * " ", " BB BB ", + * " ", " D D ", + * " BEEAAAAAEEBD ", " CCCCC ", + * " DBEEAAAAAEEBD ", " D D ", + * " ", " BB BB ", + * " ", " ", + * " ", " ", + * " ", " E E ", + * " EE EE ", " EE D D D EE ", + * " EEEEEEEDEEEEEEE ", " D D D ", + * " " }, + * { " ", " D ", + * " DEEEEEEDEEEEEED ", " EEE D EEE ", + * " EE D D EE ", " E E ", + * " ", " ", + * " ", " ", + * " ", " B B ", + * " D D ", " D D ", + * " EEEEE ", " ", + * " EEEEE ", " D D ", + * " D D ", " B B ", + * " ", " ", + * " ", " ", + * " ", " E E ", + * " EE D D EE ", " EEE D EEE ", + * " DEEEEEEDEEEEEED ", " D ", + * " " }, + * { " ", " D ", + * " D EEEEDEEEE D ", " EEEE D EEEE ", + * " EED DEE ", " E E ", + * " ", " ", + * " ", " ", + * " D D ", " BB D D BB ", + * " D D ", " ", + * " ", " ", + * " ", " ", + * " D D ", " BB D D BB ", + * " D D ", " ", + * " ", " ", + * " ", " E E ", + * " EED DEE ", " EEEE D EEEE ", + * " D EEEEDEEEE D ", " D ", + * " " }, + * { " ", " D ", + * " EEDEE ", " D EEEEE D EEEEE D ", + * " EE EE ", " ED DE ", + * " ", " ", + * " D D ", " D D ", + * " D D ", " BB BB ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " BB BB ", + * " D D ", " D D ", + * " D D ", " ", + * " ", " ED DE ", + * " EE EE ", " D EEEEE D EEEEE D ", + * " EEDEE ", " D ", + * " " }, + * { " ", " ", + * " D ", " EEEEEDEEEEE ", + * " D EEE D EEE D ", " DE ED ", + * " D D ", " D D ", + * " D D ", " D D ", + * " D D ", " BD DB ", + * " D D ", " D D ", + * " FD DF ", " FD DF ", + * " FD DF ", " D D ", + * " D D ", " BD DB ", + * " D D ", " D D ", + * " D D ", " D D ", + * " D D ", " DE ED ", + * " D EEE D EEE D ", " EEEEEDEEEEE ", + * " D ", " ", + * " " }, + * { " ", " ", + * " D ", " EEEDEEE ", + * " EEEE D EEEE ", " E E ", + * " ", " ", + * " ", " ", + * " ", " BBB BBB ", + * " ", " ", + * " F F ", " F F ", + * " F F ", " ", + * " ", " BBB BBB ", + * " ", " ", + * " ", " ", + * " ", " E E ", + * " EEEE D EEEE ", " EEEDEEE ", + * " D ", " ", + * " " }, + * { " ", " ", + * " ", " D ", + * " EEEEEDEEEEE ", " EE D EE ", + * " ", " ", + * " ", " ", + * " ", " BB BB ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " BB BB ", + * " ", " ", + * " ", " ", + * " ", " EE D EE ", + * " EEEEEDEEEEE ", " D ", + * " ", " ", + * " " }, + * { " ", " ", + * " ", " D ", + * " EDE ", " EEEE D EEEE ", + * " ", " ", + * " ", " ", + * " ", " BBB BBB ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " BBB BBB ", + * " ", " ", + * " ", " ", + * " ", " EEEE D EEEE ", + * " EDE ", " D ", + * " ", " ", + * " " }, + * { " ", " ", + * " ", " D ", + * " D ", " EEDEE ", + * " D ", " ", + * " ", " ", + * " ", " BBBB BBBB ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " BBBB BBBB ", + * " ", " ", + * " ", " ", + * " D ", " EEDEE ", + * " D ", " D ", + * " ", " ", + * " " }, + * { " ", " ", + * " ", " ", + * " D ", " D ", + * " D ", " D ", + * " ", " ", + * " ", " BBBBBBB ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " BBBBBBB ", + * " ", " ", + * " ", " D ", + * " D ", " D ", + * " D ", " ", + * " ", " ", + * " " }, + * { " ", " ", + * " ", " ", + * " ", " ", + * " ", " D ", + * " D ", " D ", + * " D ", " D ", + * " D ", " D ", + * " FDF ", " FDF ", + * " FDF ", " D ", + * " D ", " D ", + * " D ", " D ", + * " D ", " D ", + * " ", " ", + * " ", " ", + * " ", " ", + * " " }, + * { " ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " F ", " F ", + * " F ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " ", " ", + * " " } }; + * } + */ + + public static final String[][] ANTIMATTER_GENERATOR = new String[][] { + { " ", " ", + " ", " ", + " ", " ", + " ", " ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " DDD ", " DDD ", + " DDD ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " D ", " DDD ", + " DDD ", " D~D ", + " DDD " }, + { " ", " ", + " ", " ", + " ", " ", + " ", " F ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " DCCCD ", " DCCCD ", + " DCCCD ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " HCCCH ", " HCCCH ", + " HDDDH " }, + { " ", " ", + " ", " ", + " ", " ", + " F ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " DCCCD ", " CCC ", + " DCCCD ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " DCCCD ", + " HCCCH ", " DCCCD ", + " HDDDH " }, + { " ", " ", + " ", " ", + " ", " ", + " F ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " DCCCD ", " CCC ", + " DCCCD ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " HCCCH ", " HCCCH ", + " HDDDH " }, + { " ", " ", + " ", " ", + " ", " DDD ", + " DDDDD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " CCC ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDDDDDD " }, + { " ", " ", + " ", " ", + " DDD ", " DDDDD ", + " DDDDDDD ", " DDDDDDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDDDDDD ", " DDDDDDD ", + " FFDDDDDDDFF " }, + { " ", " ", + " ", " DDD ", + " DDDDD ", " DDDDD ", + " DDDDDDDDDDD ", " DDDDDDDDDDD ", + " FFDDDDDDDFF ", " DDDCDDD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DDDDDDDDDDD ", " DDDDDDDDD ", + " DDDDDDDDDDD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " CCCCCCC ", " FFCCCCCCCFF ", + " DDDDG GDDDD ", " DDDDG GDDDD ", + " FFDDDDDDDDDDDFF " }, + { " ", " ", + " ", " DDD ", + " DDDDD ", " DDDDD ", + " DDDDDDDDDDDDDDD ", " DDDDGGGGGGGDDDD ", + " FFCCGGGGGGGCCFF ", " CCGGGGGGGCC ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " DDAA F AADD ", " AA FCF AA ", + " DDAA F AADD ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " CC CC ", " FFCCGGGGGGGCCFF ", + " DDDDGGGGGGGDDDD ", " DDDDGGGGGGGDDDD ", + " FDDDDDDDDDDDDDDDF " }, + { " ", " ", + " ", " DDD ", + " DDDDD ", " DDDDD ", + " DDDDDDDDDDDDDDDDD ", " DDDGGDDDDDDDGGDDD ", + " FCCGGDDDCDDDGGCCF ", " CCGG GGCC ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " DAA F AAD ", " AA FCF AA ", + " DAA F AAD ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " CC CC ", " FCCGG GGCCF ", + " DDCGGDDDCDDDGGDDD ", " DDDGGDDDDDDDGGDDD ", + " FDDDDDDDDDDDDDDDDDF " }, + { " ", " ", + " ", " DDD ", + " DDDDD ", " DDDDD ", + " DDDDDDDDDDDDDDDDDDD ", " DDGGDDDDDDDDDDDGGDD ", + " FCGGDDDDDCDDDDDGGCF ", " CGG GGC ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " DA F AD ", " A FCF A ", + " DA F AD ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " C C ", " FCGG GGCF ", + " DDGGDDDDDCDDDDDGGDD ", " DDGGDDDDDDDDDDDGGDD ", + " FDDDDDDDDDDDDDDDDDDDF " }, + { " ", " ", + " ", " DDD ", + " DDDDD ", " DDDDD ", + " DDDDDDDDDDDDDDDDDDDDD ", " DDGDDDDDGGGGGDDDDDGDD ", + " FCGCDDDDGGGGGDDDDCGCF ", " CG GC ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " DA DDD AD ", " A CCC A ", + " DA DDD AD ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " C C ", " FCG GCF ", + " DDGCDDDDGGGGGDDDDCGDD ", " DDGDDDDDGGGGGDDDDDGDD ", + " FDDDDDDDDDDDDDDDDDDDDDF " }, + { " ", " CCC ", + " CCC ", " DDD ", + " DDDDD ", " DDDDD ", + " DDDDDDDDDDDDDDDDDDDDD ", " DDGDDDGGDDCDDGGDDDGDD ", + " FCGDCDGG GGDCDGCF ", " CG GC ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " DA DD DD AD ", " A CCBBBCC A ", + " DA DD DD AD ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " C C ", " FCG GCF ", + " DDGDCDGG GGDCDGDD ", " DDGDDDGGDDCDDGGDDDGDD ", + " FDDDDDDDDDDDDDDDDDDDDDF " }, + { " CCC ", " EEEEE ", + " EEEEE ", " EEEEE ", + " EEEEE ", " EEEEE ", + " DDDDDDDDDDDDDDDDDDDDDDD ", " DDGDDDGDDDDCDDDDGDDDGDD ", + " FCGDDDG GDDDGCF ", " CG GC ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " DA D DDD D AD ", " A CBBDDDBBC A ", + " DA D DDD D AD ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " C C ", " FCG GCF ", + " DDGDDDG GDDDGDD ", " DDGDDDGDDDDCDDDDGDDDGDD ", + " FDDDDDDDDDDDDDDDDDDDDDDDF " }, + { " CCC ", " EEEEEEE ", + " E E ", " E E ", + " E E ", " E E ", + " DDDDDDDDDDDDDDDDDDDDDDD ", " DDGDDGDCDGGGGGDCDGDDGDD ", + " FCGDDG GDDGCF ", " CG GC ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " DA D DD DD D AD ", " DA CBDD DDBC AD ", + " DA D DD DD D AD ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " C C ", " FCG GCF ", + " DDGDDG GDDGDD ", " DDGDDGDCDGGGGGDCDGDDGDD ", + " FDDDDDDDDDDDDDDDDDDDDDDDFF " }, + { " CCC ", " EEEEEEEEE ", + " E E ", " E E ", + " E E ", " E E ", + " DDDDDDDDDDDDCDDDDDDDDDDDD ", " DDGDDDGDDG GDDGDDDGDD ", + " DDGDDDG GDDDGDD ", " DDG GDD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD D D D D DD ", " DD CBD DBC DD ", + " DD D D D D DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DDD DDD ", + " DDC CDD ", " DDCG GCDD ", + " DDDGDDDG GDDDGDDD ", " DDDGDDDGDDG GDDGDDDGDDD ", + " DDDDDDDDDDDDDCDDDDDDDDDDDDD " }, + { " CCC ", " EEEEEEEEEEE ", + " E E ", " E E ", + " DDDDDDE EDDDDDD ", " DDDDDDDE EDDDDDDD ", + " DDDDDDDDDDDCCCCCDDDDDDDDDDD ", " DDDGDDGDDG GDDGDDGDDD ", + " DDDGDDG GDDGDDD ", " DDDG GDDD ", + " DDD DDD ", " DDD DDD ", + " DDD DDD ", " DDD DDD ", + " DDD DDD ", " DDD DDD ", + " DDDDDD D D D D DDDDDD ", " D DD CBD DBC DD D ", + " DDDDDD D D D D DDDDDD ", " DDD DDD ", + " DDD DDD ", " DDD DDD ", + " DDD DDD ", " DDD DDD ", + " DDD DDD ", " DDD DDD ", + " DDD DDD ", " DDD DDD ", + " DDD DDD ", " DDD DDD ", + " DDD DDD ", " DDDD DDDD ", + " DDDD DDDD ", " DDDD DDDD ", + " DDDD DDDD ", " DDDD DDDD ", + " DDDD DDDD ", " DDDD DDDD ", + " DDDC CDDD ", " DDDDCG GCDDDD ", + " HHHDDDGDDG GDDGDDDHHH ", " HDHDDDGDDGDDG GDDGDDGDDDHDH ", + " HHHDDDDDDDDDDDCCCCCDDDDDDDDDDDHHH " }, + { " CCCCCCCCCCC ", " CEEEEEEEEEEEC ", + " CE EC ", " DDDDDDE EDDDDDD ", + " DDDDDDDE EDDDDDDD ", " DDDDDDDDE EDDDDDDDD ", + " DDDDDDDDDDDCGGGCDDDDDDDDDDD ", " CCCDDGDDGDDG GDDGDDGDDCCC ", + " CCCCCDGDDG GDDGDCCCCC ", " CCCCCDG GDCCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + "DCCCCCD D D D D DCCCCCD", "DCCCCCDFFFCBD DBCFFFDCCCCCD", + "DCCCCCD D D D D DCCCCCD", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCCC CCCCCC ", "DCCCCCCG GCCCCCCD", + "DCCCCDGGDDG GDDGGDCCCCD", "DCCCCDGGDDGDDG GDDGDDGGDCCCCD", + "DDDDDDDDDDDDDDDCGGGCDDDDDDDDDDDDDDD" }, + { " CCCCCCCCCCC ", " CEEEEEEEEEEEC ", + " CE EC ", " DDDDDDE EDDDDDD ", + " DDDDDDDE EDDDDDDD ", " DDDDDDDDE EDDDDDDDD ", + " FFDDDDDDDDDDCCGDGCCDDDDDDDDDDFF ", " FCCCDDGDDGCCG GCCGDDGDDCCCF ", + "FCCCCCDGCCG GCCGDCCCCCF", "FCCCCCCG GCCCCCCF", + "FCCCCC CCCCCF", "FCCCCC CCCCCF", + "FCCCCC CCCCCF", "FCCCCC CCCCCF", + "FCCCCC CCCCCF", "FCCCCC CCCCCF", + "DCCCCCDFFFD D D DFFFDCCCCCD", "ICCCCCDCCCCBD DBCCCCDCCCCCI", + "DCCCCCDFFFD D D DFFFDCCCCCD", "FCCCCC CCCCCF", + "FCCCCC CCCCCF", "FCCCCC CCCCCF", + "FCCCCC CCCCCF", "FCCCCC CCCCCF", + "FCCCCC CCCCCF", "FCCCCC CCCCCF", + "FCCCCC CCCCCF", "FCCCCC CCCCCF", + "FCCCCC CCCCCF", "FCCCCC CCCCCF", + "FCCCCC CCCCCF", "FCCCCC CCCCCF", + "FCCCCC CCCCCF", "FCCCCC CCCCCF", + "FCCCCC CCCCCF", "FCCCCC CCCCCF", + "FCCCCC CCCCCF", "FCCCCC CCCCCF", + "DCCCCCC CCCCCCD", "DCCCCCCG GCCCCCCD", + "DCCCCD GCCG GCCG DCCCCD", "DCCCCD GDDGCCG GCCGDDG DCCCCD", + "DDDDDDDDDDDDDDCCGDGCCDDDDDDDDDDDDDD" }, + { " CCCCCCCCCCC ", " CEEEEEEEEEEEC ", + " CE EC ", " DDDDDDE EDDDDDD ", + " DDDDDDDE EDDDDDDD ", " DDDDDDDDE EDDDDDDDD ", + " DDDDDDDDDDDCGGGCDDDDDDDDDDD ", " CCCDDGDDGDDG GDDGDDGDDCCC ", + " CCCCCDGDDG GDDGDCCCCC ", " CCCCCDG GDCCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + "DCCCCCD D D D D DCCCCCD", "DCCCCCDFFFCBD DBCFFFDCCCCCD", + "DCCCCCD D D D D DCCCCCD", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCC CCCCC ", " CCCCC CCCCC ", + " CCCCCC CCCCCC ", "DCCCCCCG GCCCCCCD", + "DCCCCDGGDDG GDDGGDCCCCD", "DCCCCDGGDDGDDG GDDGDDGGDCCCCD", + "DDDDDDDDDDDDDDDCGGGCDDDDDDDDDDDDDDD" }, + { " CCC ", " EEEEEEEEEEE ", + " E E ", " E E ", + " DDDDDDE EDDDDDD ", " DDDDDDDE EDDDDDDD ", + " DDDDDDDDDDDCCCCCDDDDDDDDDDD ", " DDDGDDGDDG GDDGDDGDDD ", + " DDDGDDG GDDGDDD ", " DDDG GDDD ", + " DDD DDD ", " DDD DDD ", + " DDD DDD ", " DDD DDD ", + " DDD DDD ", " DDD DDD ", + " DDDDDD D D D D DDDDDD ", " D DD CBD DBC DD D ", + " DDDDDD D D D D DDDDDD ", " DDD DDD ", + " DDD DDD ", " DDD DDD ", + " DDD DDD ", " DDD DDD ", + " DDD DDD ", " DDD DDD ", + " DDD DDD ", " DDD DDD ", + " DDD DDD ", " DDD DDD ", + " DDD DDD ", " DDDD DDDD ", + " DDDD DDDD ", " DDDD DDDD ", + " DDDD DDDD ", " DDDD DDDD ", + " DDDD DDDD ", " DDDD DDDD ", + " DDDC CDDD ", " DDDDCG GCDDDD ", + " HHHDDDGDDG GDDGDDDHHH ", " HDHDDDGDDGDDG GDDGDDGDDDHDH ", + " HHHDDDDDDDDDDDCCCCCDDDDDDDDDDDHHH " }, + { " CCC ", " EEEEEEEEE ", + " E E ", " E E ", + " E E ", " E E ", + " DDDDDDDDDDDDCDDDDDDDDDDDD ", " DDGDDDGDDG GDDGDDDGDD ", + " DDGDDDG GDDDGDD ", " DDG GDD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD D D D D DD ", " DD CBD DBC DD ", + " DD D D D D DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DDD DDD ", + " DDC CDD ", " DDCG GCDD ", + " DDDGDDDG GDDDGDDD ", " DDDGDDDGDDG GDDGDDDGDDD ", + " DDDDDDDDDDDDDCDDDDDDDDDDDDD " }, + { " CCC ", " EEEEEEE ", + " E E ", " E E ", + " E E ", " E E ", + " DDDDDDDDDDDDDDDDDDDDDDD ", " DDGDDGDCDGGGGGDCDGDDGDD ", + " FCGDDG GDDGCF ", " CG GC ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " DA D DD DD D AD ", " DA CBDD DDBC AD ", + " DA D DD DD D AD ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " C C ", " FCG GCF ", + " DDGDDG GDDGDD ", " DDGDDGDCDGGGGGDCDGDDGDD ", + " FDDDDDDDDDDDDDDDDDDDDDDDF " }, + { " CCC ", " EEEEE ", + " EEEEE ", " EEEEE ", + " EEEEE ", " EEEEE ", + " DDDDDDDDDDDDDDDDDDDDDDD ", " DDGDDDGDDDDCDDDDGDDDGDD ", + " FCGDDDG GDDDGCF ", " CG GC ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " DA D DDD D AD ", " A CBBDDDBBC A ", + " DA D DDD D AD ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " C C ", " FCG GCF ", + " DDGDDDG GDDDG D ", " DDGDDDGDDDDCDDDDGDDDG D ", + " FDDDDDDDDDDDDDDDDDDDDDDDF " }, + { " ", " CCC ", + " CCC ", " DDD ", + " DDDDD ", " DDDDD ", + " DDDDDDDDDDDDDDDDDDDDD ", " DDGDDDGGDDCDDGGDDDGDD ", + " FCGDCDGG GGDCDGCF ", " CG GC ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " DA DD DD AD ", " A CCBBBCC A ", + " DA DD DD AD ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " C C ", " FCG GCF ", + " DDGDCDGG GGDCDGDD ", " DDGDDDGGDDCDDGGDDDGDD ", + " FDDDDDDDDDDDDDDDDDDDDDF " }, + { " ", " ", + " ", " DDD ", + " DDDDD ", " DDDDD ", + " DDDDDDDDDDDDDDDDDDDDD ", " DDGDDDDDGGGGGDDDDDGDD ", + " FCGCDDDDGGGGGDDDDCGCF ", " CG GC ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " DA DDD AD ", " A CCC A ", + " DA DDD AD ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " C C ", " FCG GCF ", + " DDGCDDDDGGGGGDDDDCGDD ", " DDGDDDDDGGGGGDDDDDGDD ", + " FDDDDDDDDDDDDDDDDDDDDDF " }, + { " ", " ", + " ", " DDD ", + " DDDDD ", " DDDDD ", + " DDDDDDDDDDDDDDDDDDD ", " DDGGDDDDDDDDDDDGGDD ", + " FCGGDDDDDCDDDDDGGCF ", " CGG GGC ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " DA F AD ", " A FCF A ", + " DA F AD ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " A A ", " A A ", + " C C ", " FCGG GGCF ", + " DDGGDDDDDCDDDDDGG D ", " DDGGDDDDDDDDDDDGG D ", + " FDDDDDDDDDDDDDDDDDDDF " }, + { " ", " ", + " ", " DDD ", + " DDDDD ", " DDDDD ", + " DDDDDDDDDDDDDDDDD ", " DDDGGDDDDDDDGGDDD ", + " FCCGGDDDCDDDGGCCF ", " CCGG GGCC ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " DAA F AAD ", " AA FCF AA ", + " DAA F AAD ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " CC CC ", " FCCGG GGCCF ", + " DDDGGDDDCDDDGGDDD ", " DDDGGDDDDDDDGGDDD ", + " FDDDDDDDDDDDDDDDDDF " }, + { " ", " ", + " ", " DDD ", + " DDDDD ", " DDDDD ", + " DDDDDDDDDDDDDDD ", " DDDDGGGGGGGDDDD ", + " FFCCGGGGGGGCCFF ", " CCGGGGGGGCC ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " DDAA F AADD ", " AA FCF AA ", + " DDAA F AADD ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " AA AA ", " AA AA ", + " CC CC ", " FFCCGGGGGGGCCFF ", + " DDDDGGGGGGGDDDD ", " DDDDGGGGGGGDDDD ", + " FDDDDDDDDDDDDDDDF " }, + { " ", " ", + " ", " DDD ", + " DDDDD ", " DDDDD ", + " DDDDDDDDDDD ", " DDDDDDDDDDD ", + " FFDDDDDDDFF ", " DDDCDDD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DDDDDDDDDDD ", " DDDDDDDDD ", + " DDDDDDDDDDD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " DD DD ", " DD DD ", + " CCCCCCC ", " FFCCCCCCCFF ", + " DDDDG GDDDD ", " DDDDG GDDDD ", + " FFDDDDDDDDDDDFF " }, + { " ", " ", + " ", " ", + " DDD ", " DDDDD ", + " DDDDDDD ", " DDDDDDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDDDDDD ", " DDDDDDD ", + " FFDDDDDDDFF " }, + { " ", " ", + " ", " ", + " ", " DDD ", + " DDDDD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " CCC ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDCCCDD ", " DDCCCDD ", + " DDDDDDD " }, + { " ", " ", + " ", " ", + " ", " ", + " F ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " DCCCD ", " CCC ", + " DCCCD ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " DCCCD ", " DCCCD ", + " HCCCH ", " HCCCH ", + " HDDDH " }, + { " ", " ", + " ", " ", + " ", " ", + " F ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " DCCCD ", " CCC ", + " DCCCD ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " DCCCD ", + " HCCCH ", " DCCCD ", + " HDDDH " }, + { " ", " ", + " ", " ", + " ", " ", + " ", " F ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " DCCCD ", " DCCCD ", + " DCCCD ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " CCC ", " CCC ", + " HCCCH ", " HCCCH ", + " HDDDH " }, + { " ", " ", + " ", " ", + " ", " ", + " ", " ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " DDD ", " DDD ", + " DDD ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " F ", " F ", + " D ", " DDD ", + " DDD ", " DDD ", + " DDD " } }; +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java new file mode 100644 index 0000000000..4bf48910e8 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java @@ -0,0 +1,978 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.enums.Textures.BlockIcons.*; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Random; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import goodgenerator.blocks.structures.AntimatterStructures; +import goodgenerator.blocks.tileEntity.render.TileAntimatter; +import goodgenerator.items.GGMaterial; +import goodgenerator.loader.Loaders; +import gregtech.api.enums.HatchElement; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.IOverclockDescriptionProvider; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.objects.GTChunkManager; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.overclockdescriber.OverclockDescriber; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.ExoticEnergyInputHelper; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.HatchElementBuilder; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReason; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gregtech.common.tileentities.machines.IDualInputHatch; + +public class AntimatterForge extends MTEExtendedPowerMultiBlockBase<AntimatterForge> + implements ISurvivalConstructable, IOverclockDescriptionProvider { + + private static final FluidStack[] magneticUpgrades = { Materials.TengamAttuned.getMolten(1L), + MaterialsUEVplus.Time.getMolten(1L) }; + private static final FluidStack[] gravityUpgrades = { MaterialsUEVplus.SpaceTime.getMolten(1L), + MaterialsUEVplus.Space.getMolten(1L), MaterialsUEVplus.Eternity.getMolten(1L) }; + private static final FluidStack[] containmentUpgrades = { GGMaterial.shirabon.getMolten(1), + MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter.getMolten(1L) }; + private static final FluidStack[] activationUpgrades = { GGMaterial.naquadahBasedFuelMkVDepleted.getFluidOrGas(1), + GGMaterial.naquadahBasedFuelMkVIDepleted.getFluidOrGas(1) }; + + private static final int MAGNETIC_ID = 0; + private static final int GRAVITY_ID = 1; + private static final int CONTAINMENT_ID = 2; + private static final int ACTIVATION_ID = 3; + + private static final int BASE_CONSUMPTION = 10_000_000; + private static final int passiveBaseMult = 1000; + private static final int activeBaseMult = 10000; + + private static final float passiveBaseExp = 1.5f; + private static final float activeBaseExp = 1.5f; + private static final float coefficientBaseExp = 0.5f; + private static final float baseSkew = 0.2f; + + private float[] modifiers = { 0.0f, 0.0f, 0.0f, 0.0f }; + private FluidStack[] upgradeFluids = { null, null, null, null }; + private int[] fluidConsumptions = { 0, 0, 0, 0 }; + + public static final String MAIN_NAME = "antimatterForge"; + private int speed = 100; + private long rollingCost = 0L; + private boolean isLoadedChunk; + public GTRecipe mLastRecipe; + public int para; + private Random r = new Random(); + // Values for displaying cycle data + private long guiAntimatterAmount = 0; + private long guiAntimatterChange = 0; + private long guiPassiveEnergy = 0; + private long guiActiveEnergy = 0; + + private List<AntimatterOutputHatch> amOutputHatches = new ArrayList<>(16); + private static final ClassValue<IStructureDefinition<AntimatterForge>> STRUCTURE_DEFINITION = new ClassValue<IStructureDefinition<AntimatterForge>>() { + + @Override + protected IStructureDefinition<AntimatterForge> computeValue(Class<?> type) { + return StructureDefinition.<AntimatterForge>builder() + .addShape(MAIN_NAME, AntimatterStructures.ANTIMATTER_FORGE) + .addElement('A', lazy(x -> ofBlock(x.getFrameBlock(), x.getFrameMeta()))) + .addElement('B', lazy(x -> ofBlock(x.getCoilBlock(), x.getCoilMeta()))) + .addElement('C', lazy(x -> ofBlock(x.getCasingBlock(2), x.getCasingMeta(2)))) + .addElement('D', lazy(x -> ofBlock(x.getCasingBlock(1), x.getCasingMeta(1)))) + .addElement( + 'F', + lazy( + x -> HatchElementBuilder.<AntimatterForge>builder() + .anyOf(HatchElement.InputHatch) + .adder(AntimatterForge::addFluidIO) + .casingIndex(x.textureIndex(2)) + .dot(1) + .buildAndChain(x.getCasingBlock(2), x.getCasingMeta(2)))) + .addElement( + 'E', + lazy( + x -> buildHatchAdder(AntimatterForge.class).adder(AntimatterForge::addAntimatterHatch) + .hatchClass(AntimatterOutputHatch.class) + .casingIndex(x.textureIndex(1)) + .dot(3) + .build())) + .addElement( + 'H', + lazy( + x -> HatchElementBuilder.<AntimatterForge>builder() + .anyOf(HatchElement.Energy.or(HatchElement.ExoticEnergy)) + .adder(AntimatterForge::addEnergyInjector) + .casingIndex(x.textureIndex(2)) + .dot(4) + .buildAndChain(x.getCasingBlock(2), x.getCasingMeta(2)))) + .build(); + } + }; + + static { + Textures.BlockIcons.setCasingTextureForId( + 53, + TextureFactory.of( + TextureFactory.builder() + .addIcon(MACHINE_CASING_ANTIMATTER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(MACHINE_CASING_ANTIMATTER_GLOW) + .extFacing() + .glow() + .build())); + } + + public AntimatterForge(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public AntimatterForge(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity arg0) { + return new AntimatterForge(MAIN_NAME); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Antimatter Forge") + .addInfo(EnumChatFormatting.LIGHT_PURPLE + "Dimensions not included!" + EnumChatFormatting.GRAY) + .addInfo("Converts protomatter into antimatter") + .addInfo( + "Consumes 10 000 000 + (" + EnumChatFormatting.DARK_BLUE + + "Antimatter" + + EnumChatFormatting.GRAY + + " * " + + String.valueOf(this.passiveBaseMult) + + ")^" + + EnumChatFormatting.GREEN + + String.valueOf(this.passiveBaseExp) + + EnumChatFormatting.GRAY + + " EU/t passively. The consumption decays by 0.5% every tick when empty") + .addInfo( + "Uses (" + EnumChatFormatting.DARK_BLUE + + "Antimatter" + + EnumChatFormatting.GRAY + + " * " + + String.valueOf(this.activeBaseMult) + + ")^" + + EnumChatFormatting.DARK_PURPLE + + String.valueOf(this.activeBaseExp) + + EnumChatFormatting.GRAY + + " EU per operation to produce antimatter") + .addSeparator() + .addInfo("Every cycle, the lowest amount of antimatter in the 16 antimatter hatches is recorded") + .addInfo("Cycles every 5 seconds") + .addInfo( + "All hatches with more than the lowest amount will " + EnumChatFormatting.RED + + "lose half the difference!" + + EnumChatFormatting.GRAY) + .addInfo( + "If the machine runs out of energy or protomatter during a cycle, " + EnumChatFormatting.RED + + "10% of antimatter will be voided!" + + EnumChatFormatting.GRAY) + .addInfo( + "Produces (" + EnumChatFormatting.DARK_BLUE + + "Antimatter" + + EnumChatFormatting.GRAY + + "^" + + EnumChatFormatting.GOLD + + String.valueOf(this.coefficientBaseExp) + + EnumChatFormatting.GRAY + + ") * N(" + + EnumChatFormatting.AQUA + + String.valueOf(this.baseSkew) + + EnumChatFormatting.GRAY + + ", 1) of antimatter per cycle, consuming equal amounts of Protomatter") + .addInfo("The change can be negative! (N = Skewed Normal Distribution)") + .addSeparator() + .addInfo("Can be supplied with stabilization fluids to improve antimatter generation") + .addInfo( + EnumChatFormatting.GREEN + "Magnetic Stabilization" + + EnumChatFormatting.GRAY + + " (Uses " + + EnumChatFormatting.DARK_BLUE + + "Antimatter" + + EnumChatFormatting.GRAY + + "^0.5 per cycle)") + .addInfo( + "1. Molten Purified Tengam - Passive cost exponent " + EnumChatFormatting.GREEN + + "-0.15" + + EnumChatFormatting.GRAY) + .addInfo( + "2. Tachyon Rich Fluid - Passive cost exponent " + EnumChatFormatting.GREEN + + "-0.3" + + EnumChatFormatting.GRAY) + .addInfo( + EnumChatFormatting.DARK_PURPLE + "Gravity Stabilization" + + EnumChatFormatting.GRAY + + " (Uses " + + EnumChatFormatting.DARK_BLUE + + "Antimatter" + + EnumChatFormatting.GRAY + + "^0.5 per cycle)") + .addInfo( + "1. Molten Spacetime - Active cost exponent " + EnumChatFormatting.DARK_PURPLE + + "-0.05" + + EnumChatFormatting.GRAY) + .addInfo( + "2. Spatially Enlarged Fluid - Active cost exponent " + EnumChatFormatting.DARK_PURPLE + + "-0.10" + + EnumChatFormatting.GRAY) + .addInfo( + "3. Molten Eternity - Active cost exponent " + EnumChatFormatting.DARK_PURPLE + + "-0.15" + + EnumChatFormatting.GRAY) + .addInfo( + EnumChatFormatting.GOLD + "Containment Stabilization" + + EnumChatFormatting.GRAY + + " (Uses " + + EnumChatFormatting.DARK_BLUE + + "Antimatter" + + EnumChatFormatting.GRAY + + "^(2/7) per operation)") + .addInfo( + "1. Molten Shirabon - Production exponent " + EnumChatFormatting.GOLD + + "+0.05" + + EnumChatFormatting.GRAY) + .addInfo( + "2. Molten MHDCSM - Production exponent " + EnumChatFormatting.GOLD + "+0.10" + EnumChatFormatting.GRAY) + .addInfo( + EnumChatFormatting.AQUA + "Activation Stabilization" + + EnumChatFormatting.GRAY + + " (Uses " + + EnumChatFormatting.DARK_BLUE + + "Antimatter" + + EnumChatFormatting.GRAY + + "^(1/3) per operation)") + .addInfo( + "1. Depleted Naquadah Fuel Mk V - Distribution skew " + EnumChatFormatting.AQUA + + "+0.05" + + EnumChatFormatting.GRAY) + .addInfo( + "2. Depleted Naquadah Fuel Mk VI - Distribution skew " + EnumChatFormatting.AQUA + + "+0.10" + + EnumChatFormatting.GRAY) + .addSeparator() + .addEnergyHatch("1-9, Hint block with dot 4", 4) + .addInputHatch("1-6, Hint block with dot 1", 1) + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public IStructureDefinition<AntimatterForge> getStructureDefinition() { + return STRUCTURE_DEFINITION.get(getClass()); + } + + public Block getCasingBlock(int type) { + switch (type) { + case 1: + return Loaders.magneticFluxCasing; + case 2: + return Loaders.gravityStabilizationCasing; + default: + return Loaders.magneticFluxCasing; + } + } + + public int getCasingMeta(int type) { + switch (type) { + case 1: + return 0; + case 2: + return 0; + default: + return 0; + } + } + + public Block getCoilBlock() { + return Loaders.protomatterActivationCoil; + } + + public int getCoilMeta() { + return 0; + } + + public Block getFrameBlock() { + return Loaders.antimatterContainmentCasing; + } + + public int getFrameMeta() { + return 0; + } + + public int textureIndex(int type) { + switch (type) { + case 1: + return (12 << 7) + 9; + case 2: + return (12 << 7) + 10; + default: + return (12 << 7) + 9; + } + } + + private static final ITexture textureOverlay = TextureFactory.of( + TextureFactory.builder() + .addIcon(OVERLAY_FUSION1) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION1_GLOW) + .extFacing() + .glow() + .build()); + + public ITexture getTextureOverlay() { + return textureOverlay; + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aStack) { + return side != getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + return checkPiece(MAIN_NAME, 26, 26, 4); + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + buildPiece(MAIN_NAME, itemStack, b, 26, 26, 4); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); + return survivialBuildPiece(MAIN_NAME, stackSize, 26, 26, 4, realBudget, env, false, true); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_ANTIMATTER) + .extFacing() + .build(), getTextureOverlay() }; + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(53) }; + return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_ANTIMATTER) + .extFacing() + .build() }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public void onMachineBlockUpdate() { + mUpdate = 100; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide()) { + FluidStack[] antimatterStored = new FluidStack[16]; + long totalAntimatterAmount = 0; + for (int i = 0; i < amOutputHatches.size(); i++) { + if (amOutputHatches.get(i) == null || !amOutputHatches.get(i) + .isValid() + || amOutputHatches.get(i) + .getFluid() == null) + continue; + antimatterStored[i] = amOutputHatches.get(i) + .getFluid() + .copy(); + totalAntimatterAmount += antimatterStored[i].amount; + } + drainEnergyInput(calculateEnergyContainmentCost(totalAntimatterAmount)); + + if ((this.mProgresstime >= this.mMaxProgresstime) && (!isAllowedToWork())) { + setProtoRender(false); + } + } + } + + private long calculateContainedAntimatter() { + long antimatterStored = 0; + for (int i = 0; i < amOutputHatches.size(); i++) { + if (amOutputHatches.get(i) == null || !amOutputHatches.get(i) + .isValid() + || amOutputHatches.get(i) + .getFluid() == null) + continue; + antimatterStored += amOutputHatches.get(i) + .getFluid().amount; + } + return antimatterStored; + } + + private void setModifiers(FluidStack inputFluid, float step, FluidStack[] upgradeFluids, int upgradeId) { + for (int tier = 1; tier <= upgradeFluids.length; tier++) { + if (inputFluid.isFluidEqual(upgradeFluids[tier - 1])) { + if (inputFluid.amount >= fluidConsumptions[upgradeId]) { + modifiers[upgradeId] = step * tier; + upgradeFluids[upgradeId] = inputFluid; + } + } + } + } + + @Override + public CheckRecipeResult checkProcessing() { + startRecipeProcessing(); + FluidStack[] antimatterStored = new FluidStack[16]; + long totalAntimatterAmount = 0; + long minAntimatterAmount = Long.MAX_VALUE; + // Calculate the total amount of antimatter in all 16 hatches and the minimum amount found in any individual + // hatch + for (int i = 0; i < amOutputHatches.size(); i++) { + if (amOutputHatches.get(i) == null || !amOutputHatches.get(i) + .isValid() + || amOutputHatches.get(i) + .getFluid() == null) + continue; + antimatterStored[i] = amOutputHatches.get(i) + .getFluid() + .copy(); + totalAntimatterAmount += antimatterStored[i].amount; + minAntimatterAmount = Math.min(minAntimatterAmount, antimatterStored[i].amount); + } + int ratioLosses = 0; + // Reduce the amount of antimatter in each hatch by half of the difference between the lowest amount and current + // hatch contents + for (int i = 0; i < amOutputHatches.size(); i++) { + if (amOutputHatches.get(i) == null || !amOutputHatches.get(i) + .isValid() + || amOutputHatches.get(i) + .getFluid() == null) + continue; + FluidStack fluid = amOutputHatches.get(i) + .getFluid() + .copy(); + ratioLosses -= amOutputHatches.get(i) + .drain((int) ((fluid.amount - minAntimatterAmount) * 0.5), true).amount; + } + + // Check for upgrade fluids + long containedProtomatter = 0; + + fluidConsumptions[MAGNETIC_ID] = (int) Math.ceil(Math.pow(totalAntimatterAmount, 0.5)); + fluidConsumptions[GRAVITY_ID] = (int) Math.ceil(Math.pow(totalAntimatterAmount, 0.5)); + fluidConsumptions[CONTAINMENT_ID] = (int) Math.ceil(Math.pow(totalAntimatterAmount, 2 / 7)); + fluidConsumptions[ACTIVATION_ID] = (int) Math.ceil(Math.pow(totalAntimatterAmount, 1 / 3)); + + for (int i = 0; i < modifiers.length; i++) { + modifiers[i] = 0.0f; + upgradeFluids[i] = null; + } + + List<FluidStack> inputFluids = getStoredFluids(); + for (int i = 0; i < inputFluids.size(); i++) { + FluidStack inputFluid = inputFluids.get(i); + setModifiers(inputFluid, -0.15f, magneticUpgrades, MAGNETIC_ID); + setModifiers(inputFluid, -0.05f, gravityUpgrades, GRAVITY_ID); + setModifiers(inputFluid, 0.05f, containmentUpgrades, CONTAINMENT_ID); + setModifiers(inputFluid, 0.05f, activationUpgrades, ACTIVATION_ID); + } + + long energyCost = calculateEnergyCost(totalAntimatterAmount); + + // If we run out of energy, reduce contained antimatter by 10% + if (!drainEnergyInput(energyCost)) { + decimateAntimatter(); + stopMachine(ShutDownReasonRegistry.POWER_LOSS); + endRecipeProcessing(); + setProtoRender(false); + return CheckRecipeResultRegistry.insufficientPower(energyCost); + } + + // Drain upgrade fluids + for (int i = 0; i < upgradeFluids.length; i++) { + FluidStack upgradeFluid = upgradeFluids[i]; + if (upgradeFluid != null) { + for (FluidStack inputFluid : inputFluids.toArray(new FluidStack[0])) { + if (inputFluid.isFluidEqual(upgradeFluid)) { + inputFluid.amount -= fluidConsumptions[i]; + } + } + } + } + + int antimatterChange = distributeAntimatterToHatch( + amOutputHatches, + totalAntimatterAmount, + containedProtomatter); + + // We didn't have enough protomatter, reduce antimatter by 10% and stop the machine. + if (!this.depleteInput(MaterialsUEVplus.Protomatter.getFluid((long) Math.abs(antimatterChange)))) { + decimateAntimatter(); + stopMachine(ShutDownReasonRegistry.outOfFluid(MaterialsUEVplus.Protomatter.getFluid(1L))); + endRecipeProcessing(); + setProtoRender(false); + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + this.guiAntimatterChange = ratioLosses + antimatterChange; + this.guiAntimatterAmount = calculateContainedAntimatter(); + + updateAntimatterSize(this.guiAntimatterAmount); + setProtoRender(true); + + mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + mEfficiencyIncrease = 10000; + mMaxProgresstime = speed; + + endRecipeProcessing(); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + /* + * How much passive energy is drained every tick + * Base containment cost: 10M EU/t + * The containment cost ramps up by the amount of antimatter each tick, up to 1000 times + * If the current cost is more than 1000 times the amount of antimatter, or + * if no antimatter is in the hatches, the value will decay by 1% every tick + */ + private long calculateEnergyContainmentCost(long antimatterAmount) { + if (antimatterAmount == 0) { + rollingCost *= 0.995; + if (rollingCost < 100) rollingCost = 0; + } else if (rollingCost < antimatterAmount * 1000) { + rollingCost += antimatterAmount; + } else { + rollingCost *= 0.995; + } + long value = BASE_CONSUMPTION + (long) Math.pow(rollingCost, 1.5 + modifiers[MAGNETIC_ID]); + this.guiPassiveEnergy = value; + return value; + } + + // How much energy is consumed when machine does one operation + // Base formula: (Antimatter * 10000) ^ (1.5) + private long calculateEnergyCost(long antimatterAmount) { + long value = (long) Math.pow(antimatterAmount * activeBaseMult, activeBaseExp + modifiers[GRAVITY_ID]); + this.guiActiveEnergy = value; + return value; + } + + private void decimateAntimatter() { + for (int i = 0; i < amOutputHatches.size(); i++) { + if (amOutputHatches.get(i) == null || !amOutputHatches.get(i) + .isValid() + || amOutputHatches.get(i) + .getFluid() == null) + continue; + FluidStack fluid = amOutputHatches.get(i) + .getFluid() + .copy(); + amOutputHatches.get(i) + .drain((int) Math.floor(fluid.amount * 0.1), true); + } + } + + private int distributeAntimatterToHatch(List<AntimatterOutputHatch> hatches, long totalAntimatterAmount, + long protomatterAmount) { + double coeff = Math.pow((totalAntimatterAmount), 0.5 + modifiers[CONTAINMENT_ID]); + int difference = 0; + + for (AntimatterOutputHatch hatch : hatches) { + // Skewed normal distribution multiplied by coefficient from antimatter amount + // We round up so you are guaranteed to be antimatter positive on the first run (reduces startup RNG) + int change = (int) (Math.ceil((r.nextGaussian() + baseSkew + modifiers[ACTIVATION_ID]) * (coeff / 16))); + difference += change; + if (change >= 0) { + hatch.fill(MaterialsUEVplus.Antimatter.getFluid((long) (change)), true); + } else { + hatch.drain(-change, true); + } + } + return difference; + } + + @Override + public void clearHatches() { + super.clearHatches(); + amOutputHatches.clear(); + } + + @Override + public void onRemoval() { + if (this.isLoadedChunk) GTChunkManager.releaseTicket((TileEntity) getBaseMetaTileEntity()); + super.onRemoval(); + } + + public int getChunkX() { + return getBaseMetaTileEntity().getXCoord() >> 4; + } + + public int getChunkZ() { + return getBaseMetaTileEntity().getZCoord() >> 4; + } + + private boolean addEnergyInjector(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatch hatch && ExoticEnergyInputHelper.isExoticEnergyInput(aMetaTileEntity)) { + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + return mExoticEnergyHatches.add(hatch); + } + return false; + } + + private boolean addFluidIO(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatch hatch) { + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + } + if (aMetaTileEntity instanceof MTEHatchInput tInput) { + tInput.mRecipeMap = getRecipeMap(); + return mInputHatches.add(tInput); + } + if (aMetaTileEntity instanceof AntimatterOutputHatch tAntimatter) { + return amOutputHatches.add(tAntimatter); + } + if (aMetaTileEntity instanceof MTEHatchOutput tOutput) { + return mOutputHatches.add(tOutput); + } + if (aMetaTileEntity instanceof IDualInputHatch tInput) { + tInput.updateCraftingIcon(this.getMachineCraftingIcon()); + return mDualInputHatches.add(tInput); + } + return false; + } + + private boolean addAntimatterHatch(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatch hatch) { + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + } + if (aMetaTileEntity instanceof AntimatterOutputHatch tAntimatter) { + return amOutputHatches.add(tAntimatter); + } + + return false; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public OverclockDescriber getOverclockDescriber() { + return null; + } + + @Override + public String[] getInfoData() { + IGregTechTileEntity baseMetaTileEntity = getBaseMetaTileEntity(); + + long storedEnergy = 0; + long maxEnergy = 0; + + for (MTEHatch tHatch : mExoticEnergyHatches) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + + return new String[] { EnumChatFormatting.BLUE + "Antimatter Forge " + EnumChatFormatting.GRAY, + StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime) + + EnumChatFormatting.RESET + + "t / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime) + + EnumChatFormatting.RESET + + "t", + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("gui.AntimatterForge.0") + ": " + + EnumChatFormatting.BLUE + + GTUtility.formatNumbers(this.guiAntimatterAmount) + + EnumChatFormatting.RESET + + " L", + StatCollector.translateToLocal("gui.AntimatterForge.1") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(this.guiPassiveEnergy) + + EnumChatFormatting.RESET + + " EU/t", + StatCollector.translateToLocal("gui.AntimatterForge.2") + ": " + + EnumChatFormatting.LIGHT_PURPLE + + GTUtility.formatNumbers(this.guiActiveEnergy) + + EnumChatFormatting.RESET + + " EU/t", + StatCollector.translateToLocal("gui.AntimatterForge.3") + ": " + + EnumChatFormatting.AQUA + + GTUtility.formatNumbers(this.guiAntimatterChange) + + EnumChatFormatting.RESET + + " EU/t" }; + } + + private long getAntimatterAmount() { + return this.guiAntimatterAmount; + } + + private long getPassiveConsumption() { + return this.guiPassiveEnergy; + } + + private long getActiveConsumption() { + return this.guiActiveEnergy; + } + + private long getAntimatterChange() { + return this.guiAntimatterChange; + } + + protected long antimatterAmountCache; + protected long passiveCostCache; + protected long activeCostCache; + protected long antimatterChangeCache; + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + protected static DecimalFormat standardFormat; + + static { + DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.US); + dfs.setExponentSeparator("e"); + standardFormat = new DecimalFormat("0.00E0", dfs); + } + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + + screenElements + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocal("gui.AntimatterForge.0") + ": " + + EnumChatFormatting.BLUE + + numberFormat.format(antimatterAmountCache) + + EnumChatFormatting.WHITE + + " L") + .setDefaultColor(COLOR_TEXT_WHITE.get())) + .widget(new FakeSyncWidget.LongSyncer(this::getAntimatterAmount, val -> antimatterAmountCache = val)) + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocal("gui.AntimatterForge.1") + ": " + + EnumChatFormatting.RED + + standardFormat.format(passiveCostCache) + + EnumChatFormatting.WHITE + + " EU/t") + .setDefaultColor(COLOR_TEXT_WHITE.get())) + .widget(new FakeSyncWidget.LongSyncer(this::getPassiveConsumption, val -> passiveCostCache = val)) + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocal("gui.AntimatterForge.2") + ": " + + EnumChatFormatting.LIGHT_PURPLE + + standardFormat.format(activeCostCache) + + EnumChatFormatting.WHITE + + " EU") + .setDefaultColor(COLOR_TEXT_WHITE.get())) + .widget(new FakeSyncWidget.LongSyncer(this::getActiveConsumption, val -> activeCostCache = val)) + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocal("gui.AntimatterForge.3") + ": " + + EnumChatFormatting.AQUA + + numberFormat.format(antimatterChangeCache) + + EnumChatFormatting.WHITE + + " L") + .setDefaultColor(COLOR_TEXT_WHITE.get())) + .widget(new FakeSyncWidget.LongSyncer(this::getAntimatterChange, val -> antimatterChangeCache = val)); + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } + + @Override + public void stopMachine(@Nonnull ShutDownReason reason) { + super.stopMachine(reason); + setProtoRender(false); + } + + @Override + public void onBlockDestroyed() { + super.onBlockDestroyed(); + destroyAntimatterRender(); + } + + public void updateAntimatterSize(float antimatterAmount) { + TileAntimatter render = forceGetAntimatterRender(); + + if (antimatterAmount < 0) { + setProtoRender(false); + render.setCoreSize(0); + return; + } + + float size = (float) Math.pow(antimatterAmount, 0.17); + render.setCoreSize(size); + } + + public void setProtoRender(boolean flag) { + TileAntimatter render = forceGetAntimatterRender(); + render.setProtomatterRender(flag); + if (flag) render.setRotationFields(getRotation(), getDirection()); + } + + public TileAntimatter getAntimatterRender() { + IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); + World world = gregTechTileEntity.getWorld(); + + if (world == null) { + return null; + } + + int x = gregTechTileEntity.getXCoord(); + int y = gregTechTileEntity.getYCoord(); + int z = gregTechTileEntity.getZCoord(); + + double xOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetX; + double zOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + double yOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetY; + + int wX = (int) (x + xOffset); + int wY = (int) (y + yOffset); + int wZ = (int) (z + zOffset); + + return (TileAntimatter) world.getTileEntity(wX, wY, wZ); + } + + public void destroyAntimatterRender() { + IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); + World world = gregTechTileEntity.getWorld(); + + if (world == null) { + return; + } + + int x = gregTechTileEntity.getXCoord(); + int y = gregTechTileEntity.getYCoord(); + int z = gregTechTileEntity.getZCoord(); + + int xOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetX; + int yOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetY; + int zOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + + int xTarget = x + xOffset; + int yTarget = y + yOffset; + int zTarget = z + zOffset; + + world.setBlock(xTarget, yTarget, zTarget, Blocks.air); + } + + public void createAntimatterRender() { + IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); + World world = gregTechTileEntity.getWorld(); + + if (world == null) { + return; + } + + int x = gregTechTileEntity.getXCoord(); + int y = gregTechTileEntity.getYCoord(); + int z = gregTechTileEntity.getZCoord(); + + int xOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetX; + int yOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetY; + int zOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + + int wX = x + xOffset; + int wY = y + yOffset; + int wZ = z + zOffset; + + world.setBlock(wX, wY, wZ, Blocks.air); + world.setBlock(wX, wY, wZ, Loaders.antimatterRenderBlock); + } + + public TileAntimatter forceGetAntimatterRender() { + TileAntimatter render = getAntimatterRender(); + if (render != null) return render; + else createAntimatterRender(); + return getAntimatterRender(); + } + +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterGenerator.java b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterGenerator.java new file mode 100644 index 0000000000..89bb56acdd --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterGenerator.java @@ -0,0 +1,572 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static gregtech.api.enums.Textures.BlockIcons.*; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofFrame; +import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; +import static gregtech.common.misc.WirelessNetworkManager.strongCheckOrAddUser; + +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.UUID; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import bartworks.common.loaders.ItemRegistry; +import goodgenerator.blocks.structures.AntimatterStructures; +import goodgenerator.loader.Loaders; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.HatchElement; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.HatchElementBuilder; +import gregtech.api.util.MultiblockTooltipBuilder; +import kekztech.client.gui.KTUITextures; +import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoTunnel; + +public class AntimatterGenerator extends MTEExtendedPowerMultiBlockBase + implements IConstructable, ISurvivalConstructable { + + public static final String MAIN_NAME = "antimatterGenerator"; + protected IStructureDefinition<AntimatterGenerator> multiDefinition = null; + protected int times = 1; + private UUID owner_uuid; + private boolean wirelessEnabled = false; + private boolean canUseWireless = true; + private long euCapacity = 0; + private long euLastCycle = 0; + private float annihilationEfficiency = 0f; + + private static final ClassValue<IStructureDefinition<AntimatterGenerator>> STRUCTURE_DEFINITION = new ClassValue<IStructureDefinition<AntimatterGenerator>>() { + + @Override + protected IStructureDefinition<AntimatterGenerator> computeValue(Class<?> type) { + return StructureDefinition.<AntimatterGenerator>builder() + .addShape(MAIN_NAME, AntimatterStructures.ANTIMATTER_GENERATOR) + .addElement('F', lazy(x -> ofFrame(Materials.Naquadria))) // Naquadria Frame Box + .addElement('D', lazy(x -> ofBlock(x.getCasingBlock(1), x.getCasingMeta(1)))) // Black Casing + .addElement('G', lazy(x -> ofBlock(x.getCoilBlock(1), x.getCoilMeta(1)))) // Annihilation Coil + .addElement('B', lazy(x -> ofBlock(x.getCoilBlock(2), x.getCoilMeta(2)))) // Containment Coil + .addElement('C', lazy(x -> ofBlock(x.getCasingBlock(2), x.getCasingMeta(2)))) // White Casing + .addElement('A', lazy(x -> ofBlock(x.getGlassBlock(), x.getGlassMeta()))) // Glass + .addElement('E', lazy(x -> ofBlock(GregTechAPI.sBlockCasings9, 1))) // Filter Casing + .addElement( + 'H', + lazy( + x -> HatchElementBuilder.<AntimatterGenerator>builder() + .anyOf(HatchElement.ExoticEnergy) + .adder(AntimatterGenerator::addLaserSource) + .casingIndex(x.textureIndex(2)) + .dot(1) + .buildAndChain(x.getCasingBlock(2), x.getCasingMeta(2)))) + .addElement( + 'I', + lazy( + x -> buildHatchAdder(AntimatterGenerator.class).atLeast(HatchElement.InputHatch) + .casingIndex(x.textureIndex(1)) + .dot(2) + .buildAndChain(x.getCasingBlock(1), x.getCasingMeta(1)))) + .build(); + } + }; + + static { + Textures.BlockIcons.setCasingTextureForId( + 53, + TextureFactory.of( + TextureFactory.builder() + .addIcon(MACHINE_CASING_ANTIMATTER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(MACHINE_CASING_ANTIMATTER_GLOW) + .extFacing() + .glow() + .build())); + }; + + private boolean addLaserSource(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchDynamoTunnel tHatch) { + tHatch.updateTexture(aBaseCasingIndex); + return mExoticEnergyHatches.add(tHatch); + } + return false; + } + + public AntimatterGenerator(String name) { + super(name); + } + + public AntimatterGenerator(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public RecipeMap<?> getRecipeMap() { + return null; + } + + @Override + public CheckRecipeResult checkProcessing() { + startRecipeProcessing(); + List<FluidStack> inputFluids = getStoredFluids(); + long containedAntimatter = 0; + FluidStack catalystFluid = null; + int i = 0; + + while (i < inputFluids.size()) { + FluidStack inputFluid = inputFluids.get(i); + if (inputFluid.isFluidEqual(MaterialsUEVplus.Antimatter.getFluid(1))) { + containedAntimatter += inputFluid.amount; + } else { + catalystFluid = inputFluid.copy(); + } + // We annihilate everything, even if it was the wrong fluid + inputFluid.amount = 0; + i++; + } + // If i != 2, we iterated more than 2 times and have too many fluids. + if (i == 2 && containedAntimatter > 0 && catalystFluid != null) { + createEU(containedAntimatter, catalystFluid); + } + + endRecipeProcessing(); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + // (Antimatter^(EXP) * 1e12 )/(Math.min((Antimatter/Matter),(Matter/Antimatter))) + public void createEU(long antimatter, FluidStack catalyst) { + Float modifier = null; + + if (catalyst.isFluidEqual(Materials.Copper.getMolten(1L))) { + modifier = 1.0F; + } else if (catalyst.isFluidEqual(Materials.SuperconductorUIVBase.getMolten(1L))) { + modifier = 1.02F; + } else if (catalyst.isFluidEqual(Materials.SuperconductorUMVBase.getMolten(1L))) { + modifier = 1.03F; + } else if (catalyst.isFluidEqual(MaterialsUEVplus.BlackDwarfMatter.getMolten(1L))) { + modifier = 1.04F; + } + long catalystCount = catalyst.amount; + long generatedEU = 0; + + if (modifier != null) { + float efficiency = Math + .min(((float) antimatter / (float) catalystCount), ((float) catalystCount / (float) antimatter)); + this.annihilationEfficiency = efficiency; + generatedEU = (long) ((Math.pow(antimatter, modifier) * 1e12) * efficiency); + } + + if (wirelessEnabled && modifier >= 1.03F) { + // Clamp the EU to the maximum of the hatches so wireless cannot bypass the limitations + generatedEU = Math.min(generatedEU, euCapacity); + this.euLastCycle = generatedEU; + addEUToGlobalEnergyMap(owner_uuid, generatedEU); + } else { + this.euLastCycle = generatedEU; + float invHatchCount = 1.0F / (float) mExoticEnergyHatches.size(); + for (MTEHatch tHatch : getExoticEnergyHatches()) { + if (tHatch instanceof MTEHatchDynamoTunnel tLaserSource) { + tLaserSource.setEUVar(tLaserSource.getEUVar() + (long) (generatedEU * invHatchCount)); + } + } + } + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.euCapacity = 0; + for (MTEHatch tHatch : getExoticEnergyHatches()) { + if (tHatch instanceof MTEHatchDynamoTunnel tLaserSource) { + this.euCapacity += tLaserSource.maxEUStore(); + } + } + return checkPiece(MAIN_NAME, 17, 41, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(MAIN_NAME, stackSize, 17, 41, 0, elementBudget, env, false, true); + } + + @Override + public void construct(ItemStack itemStack, boolean hintsOnly) { + buildPiece(MAIN_NAME, itemStack, hintsOnly, 17, 41, 0); + } + + @Override + public void saveNBTData(NBTTagCompound nbt) { + nbt.setBoolean("wirelessEnabled", wirelessEnabled); + super.saveNBTData(nbt); + } + + @Override + public void loadNBTData(NBTTagCompound nbt) { + wirelessEnabled = nbt.getBoolean("wirelessEnabled"); + super.loadNBTData(nbt); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack aStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new AntimatterGenerator(this.MAIN_NAME); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + wirelessEnabled = !wirelessEnabled; + GTUtility.sendChatToPlayer(aPlayer, "Wireless network mode " + (wirelessEnabled ? "enabled." : "disabled.")); + if (wirelessEnabled) { + GTUtility.sendChatToPlayer(aPlayer, "Wireless only works with UMV Superconductor Base or better."); + } + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + + if (aBaseMetaTileEntity.isServerSide()) { + + // On first tick find the player name and attempt to add them to the map. + if (aTick == 1) { + + // UUID and username of the owner. + owner_uuid = aBaseMetaTileEntity.getOwnerUuid(); + + strongCheckOrAddUser(owner_uuid); + } + } + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Antimatter Generator") + .addInfo("Annihilating antimatter like it's 2205!") + .addSeparator() + .addInfo("Generates energy by reacting Semi-Stable Antimatter with matter") + .addInfo("Annihilation uses an equal amount of antimatter and matter") + .addInfo( + "Consumes " + EnumChatFormatting.GOLD + + "all inputs" + + EnumChatFormatting.GRAY + + " every processing cycle") + .addInfo( + "Imbalance between antimatter and matter " + EnumChatFormatting.RED + + "will waste energy!" + + EnumChatFormatting.GRAY) + .addInfo( + "Any EU that does not fit in laser hatches will be " + EnumChatFormatting.RED + + "voided" + + EnumChatFormatting.GRAY) + .addSeparator() + .addInfo("Antimatter base energy value: 1,000,000,000 EU/L") + .addInfo("Energy production is exponentially increased depending on the matter used:") + .addInfo("Molten Copper: 1.00") + .addInfo("Molten SC UIV Base: 1.02") + .addInfo("Molten SC UMV Base: 1.03") + .addInfo("Molten Black Dwarf Matter: 1.04") + .addSeparator() + .addInfo("Enable wireless EU mode with screwdriver") + .addInfo("Wireless mode requires SC UMV Base or better") + .addInfo("Wireless mode uses hatch capacity limit") + .addDynamoHatch("1-9, Hint block with dot 4", 4) + .addInputHatch("1-6, Hint block with dot 1", 1) + .toolTipFinisher("Good Generator"); + return tt; + } + + protected boolean canUseWireless() { + return true; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + canUseWireless = canUseWireless(); + } + if (canUseWireless) { + wirelessEnabled = !wirelessEnabled; + } + }) + .setPlayClickSound(true) + .setBackground(() -> { + List<UITexture> ret = new ArrayList<>(); + ret.add(GTUITextures.BUTTON_STANDARD); + if (canUseWireless) { + if (wirelessEnabled) { + ret.add(KTUITextures.OVERLAY_BUTTON_WIRELESS_ON); + } else { + ret.add(KTUITextures.OVERLAY_BUTTON_WIRELESS_OFF); + } + } else { + ret.add(KTUITextures.OVERLAY_BUTTON_WIRELESS_OFF_DISABLED); + } + return ret.toArray(new IDrawable[0]); + }) + .setPos(80, 91) + .setSize(16, 16) + .addTooltip(StatCollector.translateToLocal("gui.kekztech_lapotronicenergyunit.wireless")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> wirelessEnabled, val -> wirelessEnabled = val)) + .widget(new FakeSyncWidget.BooleanSyncer(this::canUseWireless, val -> canUseWireless = val)); + } + + @Override + public String[] getInfoData() { + long storedEnergy = 0; + long maxEnergy = 0; + + for (MTEHatch tHatch : mExoticEnergyHatches) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + + return new String[] { EnumChatFormatting.BLUE + "Antimatter Forge " + EnumChatFormatting.GRAY, + StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime) + + EnumChatFormatting.RESET + + "t / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime) + + EnumChatFormatting.RESET + + "t", + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("gui.AntimatterGenerator.0") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(this.euLastCycle) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("gui.AntimatterGenerator.1") + ": " + + EnumChatFormatting.AQUA + + GTUtility.formatNumbers(Math.ceil(this.annihilationEfficiency * 100)) + + EnumChatFormatting.RESET + + " %" }; + } + + private long getEnergyProduced() { + return this.euLastCycle; + } + + private float getEfficiency() { + return this.annihilationEfficiency; + } + + protected long energyProducedCache; + protected float efficiencyCache; + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + protected static DecimalFormat standardFormat; + + static { + DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.US); + dfs.setExponentSeparator("e"); + standardFormat = new DecimalFormat("0.00E0", dfs); + } + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + + screenElements + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocal("gui.AntimatterGenerator.0") + ": " + + EnumChatFormatting.BLUE + + standardFormat.format(energyProducedCache) + + EnumChatFormatting.WHITE + + " EU") + .setDefaultColor(COLOR_TEXT_WHITE.get())) + .widget(new FakeSyncWidget.LongSyncer(this::getEnergyProduced, val -> energyProducedCache = val)) + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocal("gui.AntimatterGenerator.1") + ": " + + EnumChatFormatting.RED + + numberFormat.format(Math.ceil(efficiencyCache * 100)) + + EnumChatFormatting.WHITE + + " %") + .setDefaultColor(COLOR_TEXT_WHITE.get())) + .widget(new FakeSyncWidget.FloatSyncer(this::getEfficiency, val -> efficiencyCache = val)); + } + + @Override + public IStructureDefinition<AntimatterGenerator> getStructureDefinition() { + return STRUCTURE_DEFINITION.get(getClass()); + } + + private static final ITexture textureOverlay = TextureFactory.of( + TextureFactory.builder() + .addIcon(OVERLAY_FUSION1) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION1_GLOW) + .extFacing() + .glow() + .build()); + + public ITexture getTextureOverlay() { + return textureOverlay; + } + + @Override + @SuppressWarnings("ALL") + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_ANTIMATTER) + .extFacing() + .build(), getTextureOverlay() }; + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(53) }; + return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_ANTIMATTER) + .extFacing() + .build() }; + } + + public Block getCoilBlock(int type) { + switch (type) { + case 1: + return Loaders.antimatterAnnihilationMatrix; + case 2: + return Loaders.protomatterActivationCoil; + default: + return Loaders.antimatterAnnihilationMatrix; + } + } + + public int getCoilMeta(int type) { + return 0; + } + + public Block getCasingBlock(int type) { + switch (type) { + case 1: + return Loaders.magneticFluxCasing; + case 2: + return Loaders.gravityStabilizationCasing; + default: + return Loaders.magneticFluxCasing; + } + } + + public int getCasingMeta(int type) { + return 0; + } + + public Block getFrameBlock() { + return Loaders.antimatterContainmentCasing; + } + + public int getFrameMeta() { + return 0; + } + + public Block getGlassBlock() { + return ItemRegistry.bw_realglas2; + } + + public int getGlassMeta() { + return 0; + } + + public int textureIndex(int type) { + switch (type) { + case 1: + return (12 << 7) + 9; + case 2: + return (12 << 7) + 10; + default: + return (12 << 7) + 9; + } + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } + +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterOutputHatch.java b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterOutputHatch.java new file mode 100644 index 0000000000..f575e2f315 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterOutputHatch.java @@ -0,0 +1,74 @@ +package goodgenerator.blocks.tileEntity; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; + +public class AntimatterOutputHatch extends MTEHatchOutput { + + private static final FluidStack ANTIMATTER = Materials.Antimatter.getFluid(1); + + public AntimatterOutputHatch(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, 11); + this.mDescriptionArray[1] = "Stores Antimatter"; + this.mDescriptionArray[2] = "Antimatter can be inserted from any side"; + this.mDescriptionArray[3] = "Capacity: 16,384,000L"; + } + + public AntimatterOutputHatch(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + setLockedFluidName( + MaterialsUEVplus.Antimatter.getFluid(1) + .getFluid() + .getName()); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new AntimatterOutputHatch(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public int getCapacity() { + return 16_384_000; + } + + @Override + public boolean isFluidLocked() { + return true; + } + + @Override + protected void onEmptyingContainerWhenEmpty() { + // Disable removing the lock + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (!getBaseMetaTileEntity().getCoverInfoAtSide(side) + .isGUIClickable()) return; + if (aPlayer.isSneaking()) { + mMode = (byte) ((mMode + 9) % 10); + } else { + mMode = (byte) ((mMode + 1) % 10); + } + } + + @Override + public boolean isLiquidInput(ForgeDirection side) { + return side != this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public boolean isLiquidOutput(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/render/TileAntimatter.java b/src/main/java/goodgenerator/blocks/tileEntity/render/TileAntimatter.java new file mode 100644 index 0000000000..8e2027b36d --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/render/TileAntimatter.java @@ -0,0 +1,130 @@ + +package goodgenerator.blocks.tileEntity.render; + +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.AxisAlignedBB; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; + +public class TileAntimatter extends TileEntity { + + public boolean shouldRender = true; + + // Antimatter Core settings + public static final float spikeR = 0.82f, spikeG = 0.92f, spikeB = 1f; + public static final float coreR = 0.43f, coreG = 0.40f, coreB = 1f; + public static final float maximalRadius = 9; // Includes core radius + spike length + // Due to being partially managed by a global timer, rotationSpeedMultiplier shouldn't change + // Otherwise it'll cause a snapping effect + public final float rotationSpeedMultiplier = 1; + + public float coreScale = 1f; + public float coreScaleSnapshot = 1f; + public final float coreScaleTransitionTime = 2.5f; + public float timeSnapshot; + public float spikeFactor = 1f; + + // Protomatter Settings + public static float protoSpiralMaxRadius = .5f; + public static final float protoR = 0.2f, protoG = 0.2f, protoB = 0.2f; + public float protomatterScale = .2f; + public boolean protomatterRender = false; + public float rotX = 0, rotY = 0, rotZ = 0; + public float rotationAngle = 0; + + @Override + public void writeToNBT(NBTTagCompound compound) { + super.writeToNBT(compound); + compound.setFloat("coreScale", coreScale); + compound.setFloat("coreScaleSnapshot", coreScaleSnapshot); + compound.setFloat("currentTime", timeSnapshot); + compound.setFloat("spikeFactor", spikeFactor); + compound.setBoolean("protomatterRender", protomatterRender); + + compound.setFloat("rotX", rotX); + compound.setFloat("rotY", rotY); + compound.setFloat("rotZ", rotZ); + compound.setFloat("rotationAngle", rotationAngle); + } + + @Override + public void readFromNBT(NBTTagCompound compound) { + super.readFromNBT(compound); + coreScale = compound.getFloat("coreScale"); + coreScaleSnapshot = compound.getFloat("coreScaleSnapshot"); + timeSnapshot = compound.getFloat("currentTime"); + spikeFactor = compound.getFloat("spikeFactor"); + protomatterRender = compound.getBoolean("protomatterRender"); + + rotX = compound.getFloat("rotX"); + rotY = compound.getFloat("rotY"); + rotZ = compound.getFloat("rotZ"); + rotationAngle = compound.getFloat("rotationAngle"); + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + writeToNBT(nbttagcompound); + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbttagcompound); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + readFromNBT(pkt.func_148857_g()); + worldObj.markBlockRangeForRenderUpdate(xCoord, yCoord, zCoord, xCoord, yCoord, zCoord); + } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return AxisAlignedBB.getBoundingBox( + xCoord - maximalRadius - 1, + yCoord - maximalRadius - 1, + zCoord - maximalRadius - 1, + xCoord + maximalRadius + 1, + yCoord + maximalRadius + 1, + zCoord + maximalRadius + 1); + } + + @Override + public double getMaxRenderDistanceSquared() { + return 65536; + } + + public void setProtomatterRender(boolean flag) { + protomatterRender = flag; + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + public float getSpiralRadius(float normalization) { + return Math.min(coreScale / 2.0f * normalization, protoSpiralMaxRadius); + } + + public void setCoreSize(float diameter) { + coreScaleSnapshot = coreScale; + coreScale = diameter; + timeSnapshot = this.getWorldObj() + .getWorldInfo() + .getWorldTotalTime(); + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + public void setRotationFields(Rotation rotation, ForgeDirection direction) { + switch (rotation) { + case NORMAL -> rotationAngle = 0; + case CLOCKWISE -> rotationAngle = 90; + case COUNTER_CLOCKWISE -> rotationAngle = -90; + case UPSIDE_DOWN -> rotationAngle = 180; + } + rotX = direction.offsetX; + rotY = direction.offsetY; + rotZ = direction.offsetZ; + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + +} diff --git a/src/main/java/goodgenerator/client/ClientProxy.java b/src/main/java/goodgenerator/client/ClientProxy.java index b8a885cab6..6041962ef7 100644 --- a/src/main/java/goodgenerator/client/ClientProxy.java +++ b/src/main/java/goodgenerator/client/ClientProxy.java @@ -3,6 +3,7 @@ package goodgenerator.client; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import goodgenerator.client.render.AntimatterRenderer; import goodgenerator.common.CommonProxy; public class ClientProxy extends CommonProxy { @@ -15,10 +16,13 @@ public class ClientProxy extends CommonProxy { @Override public void init(FMLInitializationEvent event) { super.init(event); + + new AntimatterRenderer(); } @Override public void postInit(FMLPostInitializationEvent event) { super.postInit(event); } + } diff --git a/src/main/java/goodgenerator/client/render/AntimatterRenderer.java b/src/main/java/goodgenerator/client/render/AntimatterRenderer.java new file mode 100644 index 0000000000..3b988b4491 --- /dev/null +++ b/src/main/java/goodgenerator/client/render/AntimatterRenderer.java @@ -0,0 +1,253 @@ +package goodgenerator.client.render; + +import static gregtech.api.enums.Mods.GoodGenerator; + +import java.nio.FloatBuffer; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.IModelCustom; +import net.minecraftforge.client.model.obj.WavefrontObject; + +import org.lwjgl.BufferUtils; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL15; +import org.lwjgl.opengl.GL20; + +import com.gtnewhorizon.gtnhlib.client.renderer.shader.ShaderProgram; + +import cpw.mods.fml.client.registry.ClientRegistry; +import goodgenerator.blocks.tileEntity.render.TileAntimatter; + +public class AntimatterRenderer extends TileEntitySpecialRenderer { + + // Antimatter 'Blob' + private static ShaderProgram antimatterProgram; + private static IModelCustom antimatterModel; + private static IModelCustom containerModel; + private static final float modelNormalize = .5f; + + private int uColorSpike = -1; + private int uColorCore = -1; + private int uSpikeMult = -1; + private int uScale = -1; + private int uScaleSnapshot = -1; + private int uTime = -1; + private int uTimeSnapshot = -1; + private int uOpacity = -1; + + // Protomatter Beam + private static final int particleCount = 32; + private static ShaderProgram protomatterProgram; + private int aBeamVertexID; + private int uProtomatterTime = -1; + private int uProtomatterScale = -1; + private int uProtomatterColor = -1; + private int uProtomatterSpiralRadius = -1; + private static final int beamVertexCount = particleCount * 6 * 6; + + private boolean initialized = false; + + private static final float[] promomatterVerticies = { + // Front Face + -0.5f, 0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, + // Back Face + -0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f, -0.5f, + // Left face + -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f, + // Right face + 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, -0.5f, 0.5f, + // Top face + -0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, -0.5f, + // Bottom face + -0.5f, -0.5f, 0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, }; + + public AntimatterRenderer() { + ClientRegistry.bindTileEntitySpecialRenderer(TileAntimatter.class, this); + } + + public void loadModels() { + ResourceLocation antimatterLocation = new ResourceLocation( + GoodGenerator.resourceDomain, + "models/Antimatter.obj"); + antimatterModel = (IModelCustom) new WavefrontObject(antimatterLocation); + + ResourceLocation location = new ResourceLocation(GoodGenerator.resourceDomain, "models/SmoothSphere.obj"); + containerModel = (IModelCustom) new WavefrontObject(location); + } + + private void init() { + antimatterProgram = new ShaderProgram( + GoodGenerator.resourceDomain, + "shaders/antimatter.vert.glsl", + "shaders/antimatter.frag.glsl"); + + antimatterProgram.use(); + + try { + uScale = antimatterProgram.getUniformLocation("u_Scale"); + uScaleSnapshot = antimatterProgram.getUniformLocation("u_ScaleSnapshot"); + uTime = antimatterProgram.getUniformLocation("u_Time"); + uTimeSnapshot = antimatterProgram.getUniformLocation("u_TimeSnapshot"); + uSpikeMult = antimatterProgram.getUniformLocation("u_SpikeMult"); + uOpacity = antimatterProgram.getUniformLocation("u_Opacity"); + uColorCore = antimatterProgram.getUniformLocation("u_ColorCore"); + uColorSpike = antimatterProgram.getUniformLocation("u_ColorSpike"); + } catch (NullPointerException e) { + System.out.println(e.getMessage()); + ShaderProgram.clear(); + return; + } + + GL20.glUniform3f(uColorCore, TileAntimatter.coreR, TileAntimatter.coreG, TileAntimatter.coreB); + GL20.glUniform3f(uColorSpike, TileAntimatter.spikeR, TileAntimatter.spikeG, TileAntimatter.spikeB); + GL20.glUniform1f(uOpacity, 1); + + ShaderProgram.clear(); + + loadModels(); + + protomatterProgram = new ShaderProgram( + GoodGenerator.resourceDomain, + "shaders/protomatter.vert.glsl", + "shaders/protomatter.frag.glsl"); + + int uCubeCount; + int uProtomatterVertices; + try { + uProtomatterVertices = protomatterProgram.getUniformLocation("u_Vertices"); + uCubeCount = protomatterProgram.getUniformLocation("u_CubeCount"); + uProtomatterTime = protomatterProgram.getUniformLocation("u_Time"); + uProtomatterScale = protomatterProgram.getUniformLocation("u_Scale"); + uProtomatterColor = protomatterProgram.getUniformLocation("u_Color"); + uProtomatterSpiralRadius = protomatterProgram.getUniformLocation("u_SpiralRadius"); + } catch (NullPointerException e) { + ShaderProgram.clear(); + return; + } + + protomatterProgram.use(); + FloatBuffer bufferBeamVertexID = BufferUtils.createFloatBuffer(beamVertexCount * 3); + for (int i = 0; i < beamVertexCount; i++) { + bufferBeamVertexID.put(i * 3, i); + } + + aBeamVertexID = GL15.glGenBuffers(); + GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, aBeamVertexID); + GL15.glBufferData(GL15.GL_ARRAY_BUFFER, bufferBeamVertexID, GL15.GL_STATIC_DRAW); + + FloatBuffer bufferBeamVertex = BufferUtils.createFloatBuffer(promomatterVerticies.length); + bufferBeamVertex.put(promomatterVerticies) + .flip(); + GL20.glUniform3(uProtomatterVertices, bufferBeamVertex); + GL20.glUniform1f(uCubeCount, particleCount); + ShaderProgram.clear(); + + initialized = true; + } + + private void renderAntimatter(TileAntimatter tile, double x, double y, double z, float timer) { + antimatterProgram.use(); + + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_TEXTURE_2D); + + GL11.glPushMatrix(); + GL11.glTranslated(x, y, z); + + float angle = ((timer) % (20 * 60 * 60)) * tile.rotationSpeedMultiplier; + + GL11.glRotated(angle, 0, 1, 0); + GL11.glRotated(angle / 8, 1, 0, 0); + + float snapshotSize = tile.coreScaleSnapshot; + snapshotSize *= modelNormalize; + float coreSizeSnapshot = Math.min(snapshotSize, TileAntimatter.maximalRadius / (1 + tile.spikeFactor)); + float targetSize = tile.coreScale; + targetSize *= modelNormalize; + float coreSize = Math.min(targetSize, TileAntimatter.maximalRadius / (1 + tile.spikeFactor)); + + float realTime = timer / 20; + float snapTime = tile.timeSnapshot / 20; + + GL20.glUniform1f(uTime, realTime); + GL20.glUniform1f(uTimeSnapshot, snapTime); + GL20.glUniform1f(uSpikeMult, tile.spikeFactor); + GL20.glUniform1f(uScale, coreSize); + GL20.glUniform1f(uScaleSnapshot, coreSizeSnapshot); + GL11.glDisable(GL11.GL_CULL_FACE); + + antimatterModel.renderAll(); + + ShaderProgram.clear(); + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glColor3f(0, 0, 0); + GL11.glScalef( + -coreSize * (1 + tile.spikeFactor), + -coreSize * (1 + tile.spikeFactor), + -coreSize * (1 + tile.spikeFactor)); + containerModel.renderAll(); + + GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); + GL11.glPopMatrix(); + GL11.glPopAttrib(); + } + + private void renderProtomatterBeam(TileAntimatter tile, double x, double y, double z, float timer) { + protomatterProgram.use(); + GL11.glPushMatrix(); + GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY); + GL20.glEnableVertexAttribArray(aBeamVertexID); + + GL20.glUniform1f(uProtomatterTime, timer); + GL20.glUniform1f(uProtomatterScale, tile.protomatterScale); + GL20.glUniform3f(uProtomatterColor, TileAntimatter.protoR, TileAntimatter.protoG, TileAntimatter.protoB); + GL20.glUniform1f(uProtomatterSpiralRadius, tile.getSpiralRadius(modelNormalize)); + + GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, aBeamVertexID); + GL20.glVertexAttribPointer(0, 1, GL11.GL_FLOAT, false, 3 * Float.BYTES, 2 * Float.BYTES); + GL11.glVertexPointer(3, GL11.GL_FLOAT, 0, 0); + + GL11.glTranslated(x, y, z); + GL11.glRotatef(tile.rotationAngle, tile.rotX, tile.rotY, tile.rotZ); + + GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, beamVertexCount); + + GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY); + GL20.glDisableVertexAttribArray(aBeamVertexID); + + GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); + ShaderProgram.clear(); + GL11.glPopMatrix(); + + } + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float timeSinceLastTick) { + + if (!(tile instanceof TileAntimatter Antimatter)) return; + + if (!Antimatter.shouldRender) return; + + if (!initialized) { + init(); + if (!initialized) { + return; + } + } + float tx = (float) x + 0.5f; + float ty = (float) y + 0.5f; + float tz = (float) z + 0.5f; + + float timer = tile.getWorldObj() + .getWorldInfo() + .getWorldTotalTime() + timeSinceLastTick; + renderAntimatter(Antimatter, tx, ty, tz, timer); + + if (!Antimatter.protomatterRender) return; + renderProtomatterBeam(Antimatter, tx, ty, tz, timer); + } +} diff --git a/src/main/java/goodgenerator/common/CommonProxy.java b/src/main/java/goodgenerator/common/CommonProxy.java index 05bf053bb7..59e60546fc 100644 --- a/src/main/java/goodgenerator/common/CommonProxy.java +++ b/src/main/java/goodgenerator/common/CommonProxy.java @@ -11,4 +11,5 @@ public class CommonProxy { public void init(FMLInitializationEvent event) {} public void postInit(FMLPostInitializationEvent event) {} + } diff --git a/src/main/java/goodgenerator/loader/IDs_GoodGenerator.java b/src/main/java/goodgenerator/loader/IDs_GoodGenerator.java new file mode 100644 index 0000000000..406a9548b1 --- /dev/null +++ b/src/main/java/goodgenerator/loader/IDs_GoodGenerator.java @@ -0,0 +1,49 @@ +package goodgenerator.loader; + +public enum IDs_GoodGenerator { + + DieselGeneratorEV(1113), + DieselGeneratorIV(1114), + MultiNqGenerator(12732), + FuelRefineFactory(16999), + PipeIncoloy903(30995), + UniversalChemicalFuelEngine(32001), + LargeEssentiaGenerator(32002), + NeutronAcceleratorULV(32003), + NeutronAcceleratorLV(32004), + NeutronAcceleratorMV(32005), + NeutronAcceleratorHV(32006), + NeutronAcceleratorEV(32007), + NeutronAcceleratorIV(32008), + NeutronAcceleratorLuV(32009), + NeutronAcceleratorZPM(32010), + NeutronAcceleratorUV(32011), + NeutronSensor(32012), + NeutronActivator(32013), + YottaFluidTank(32014), + YottaHatch(32015), + SupercriticalFluidTurbine(32016), + ExtremeHeatExchanger(32017), + PreciseAssembler(32018), + LargeFusionComputer1(32019), + LargeFusionComputer2(32020), + LargeFusionComputer3(32021), + LargeFusionComputer4(32022), + LargeFusionComputer5(32023), + LargeEssentiaSmeltery(32024), + CoolantTower(32025), + ComponentAssemblyLine(32026), + AntimatterForge(32027), + AntimatterGenerator(32028), + AntimatterHatch(32029), + WireSignalium(32749), + WireLumiium(32737), + + ; + + public final int ID; + + IDs_GoodGenerator(int ID) { + this.ID = ID; + } +} diff --git a/src/main/java/goodgenerator/loader/Loaders.java b/src/main/java/goodgenerator/loader/Loaders.java index 3603537427..e3648b855d 100644 --- a/src/main/java/goodgenerator/loader/Loaders.java +++ b/src/main/java/goodgenerator/loader/Loaders.java @@ -10,11 +10,15 @@ import net.minecraftforge.oredict.OreDictionary; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.registry.GameRegistry; import goodgenerator.blocks.myFluids.FluidsBuilder; +import goodgenerator.blocks.regularBlock.AntimatterRenderBlock; import goodgenerator.blocks.regularBlock.BlockCasing; import goodgenerator.blocks.regularBlock.BlockComplexTextureCasing; import goodgenerator.blocks.regularBlock.BlockFrame; import goodgenerator.blocks.regularBlock.BlockTEContainer; import goodgenerator.blocks.regularBlock.BlockTurbineCasing; +import goodgenerator.blocks.tileEntity.AntimatterForge; +import goodgenerator.blocks.tileEntity.AntimatterGenerator; +import goodgenerator.blocks.tileEntity.AntimatterOutputHatch; import goodgenerator.blocks.tileEntity.GTMetaTileEntity.MTEDieselGenerator; import goodgenerator.blocks.tileEntity.GTMetaTileEntity.MTENeutronAccelerator; import goodgenerator.blocks.tileEntity.GTMetaTileEntity.MTENeutronSensor; @@ -39,6 +43,7 @@ import goodgenerator.blocks.tileEntity.MTEPreciseAssembler; import goodgenerator.blocks.tileEntity.MTESupercriticalFluidTurbine; import goodgenerator.blocks.tileEntity.MTEUniversalChemicalFuelEngine; import goodgenerator.blocks.tileEntity.MTEYottaFluidTank; +import goodgenerator.blocks.tileEntity.render.TileAntimatter; import goodgenerator.client.render.BlockRenderHandler; import goodgenerator.crossmod.ic2.CropsLoader; import goodgenerator.crossmod.nei.NEIConfig; @@ -222,6 +227,22 @@ public class Loaders { new String[] { GoodGenerator.MOD_ID + ":fuison/1", GoodGenerator.MOD_ID + ":fuison/2", GoodGenerator.MOD_ID + ":fuison/3", GoodGenerator.MOD_ID + ":fuison/4", GoodGenerator.MOD_ID + ":fuison/5" }); + public static final Block antimatterContainmentCasing = new BlockFrame( + "antimatterContainmentCasing", + new String[] { GoodGenerator.MOD_ID + ":antimatterContainmentCasing" }); + public static final Block magneticFluxCasing = new BlockCasing( + "magneticFluxCasing", + new String[] { GoodGenerator.MOD_ID + ":magneticFluxCasing" }); + public static final Block gravityStabilizationCasing = new BlockCasing( + "gravityStabilizationCasing", + new String[] { GoodGenerator.MOD_ID + ":gravityStabilizationCasing" }); + public static final Block protomatterActivationCoil = new BlockCasing( + "protomatterActivationCoil", + new String[] { GoodGenerator.MOD_ID + ":protomatterActivationCoil" }); + public static final Block antimatterAnnihilationMatrix = new BlockCasing( + "antimatterAnnihilationMatrix", + new String[] { GoodGenerator.MOD_ID + ":antimatterAnnihilationMatrix" }); + public static final Block antimatterRenderBlock = new AntimatterRenderBlock(); public static final Block essentiaFilterCasing = new BlockCasing( "essentiaFilterCasing", new String[] { GoodGenerator.MOD_ID + ":essentiaFilterCasing" }); @@ -264,6 +285,9 @@ public class Loaders { public static ItemStack[] Generator_Diesel = new ItemStack[2]; public static ItemStack CompAssline; + public static ItemStack AMForge; + public static ItemStack AMGenerator; + public static ItemStack AMHatch; // public static Item Isotope = new NuclearMetaItemGenerator(); public static void GTMetaTileRegister() { @@ -297,8 +321,12 @@ public class Loaders { .getStackForm(1L); Loaders.YFH = new MTEYOTTAHatch(MetaTileEntityIDs.YottaHatch.ID, "YottaFluidTankHatch", "YOTHatch", 5) .getStackForm(1L); + Loaders.AMHatch = new AntimatterOutputHatch( + IDs_GoodGenerator.AntimatterHatch.ID, + "AntimatterHatch", + "Antimatter Hatch").getStackForm(1L); Loaders.SCTurbine = new MTESupercriticalFluidTurbine( - MetaTileEntityIDs.SupercriticalFluidTurbine.ID, + IDs_GoodGenerator.SupercriticalFluidTurbine.ID, "SupercriticalSteamTurbine", "Large Supercritical Steam Turbine").getStackForm(1L); Loaders.XHE = new MTEExtremeHeatExchanger( @@ -348,6 +376,14 @@ public class Loaders { CrackRecipeAdder.registerPipe(MetaTileEntityIDs.PipeIncoloy903.ID, GGMaterial.incoloy903, 15000, 8000, true); CrackRecipeAdder.registerWire(MetaTileEntityIDs.WireSignalium.ID, GGMaterial.signalium, 12, 131072, 16, true); CrackRecipeAdder.registerWire(MetaTileEntityIDs.WireLumiium.ID, GGMaterial.lumiium, 8, 524288, 64, true); + Loaders.AMForge = new AntimatterForge( + IDs_GoodGenerator.AntimatterForge.ID, + "AntimatterForge", + "Semi-Stable Antimatter Stabilization Sequencer").getStackForm(1L); + Loaders.AMGenerator = new AntimatterGenerator( + IDs_GoodGenerator.AntimatterGenerator.ID, + "AntimatterGenerator", + "Shielded Lagrangian Annihilation Matrix").getStackForm(1L); } public static void Register() { @@ -375,6 +411,12 @@ public class Loaders { GameRegistry.registerBlock(impreciseUnitCasing, GGItemBlocks.class, "impreciseUnitCasing"); GameRegistry.registerBlock(preciseUnitCasing, GGItemBlocks.class, "preciseUnitCasing"); GameRegistry.registerBlock(compactFusionCoil, GGItemBlocks.class, "compactFusionCoil"); + GameRegistry.registerBlock(antimatterContainmentCasing, GGItemBlocks.class, "antimatterContainmentCasing"); + GameRegistry.registerBlock(magneticFluxCasing, GGItemBlocks.class, "magneticFluxCasing"); + GameRegistry.registerBlock(protomatterActivationCoil, GGItemBlocks.class, "protomatterActivationCoil"); + GameRegistry.registerBlock(antimatterAnnihilationMatrix, GGItemBlocks.class, "antimatterAnnihilationMatrix"); + GameRegistry.registerBlock(gravityStabilizationCasing, GGItemBlocks.class, "gravityStabilizationCasing"); + GameRegistry.registerBlock(antimatterRenderBlock, "antimatterRenderBlock"); GameRegistry.registerItem(radiationProtectionPlate, "radiationProtectionPlate", GoodGenerator.MOD_ID); GameRegistry.registerItem(wrappedUraniumIngot, "wrappedUraniumIngot", GoodGenerator.MOD_ID); GameRegistry.registerItem(highDensityUraniumNugget, "highDensityUraniumNugget", GoodGenerator.MOD_ID); @@ -407,6 +449,7 @@ public class Loaders { GameRegistry.registerItem(saltyRoot, "saltyRoot", GoodGenerator.MOD_ID); GameRegistry.registerItem(huiCircuit, "huiCircuit", GoodGenerator.MOD_ID); GameRegistry.registerItem(circuitWrap, "circuitWrap", GoodGenerator.MOD_ID); + GameRegistry.registerTileEntity(TileAntimatter.class, "AntimatterRender"); } public static void compactMod() { @@ -469,6 +512,10 @@ public class Loaders { .of(preciseUnitCasing, 2); Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage][8] = TextureFactory .of(preciseUnitCasing, 3); + Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage][9] = TextureFactory + .of(magneticFluxCasing, 0); + Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage][10] = TextureFactory + .of(gravityStabilizationCasing, 0); } } diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java index 34df98fc55..8bd9027a23 100644 --- a/src/main/java/gregtech/api/enums/ItemList.java +++ b/src/main/java/gregtech/api/enums/ItemList.java @@ -1481,6 +1481,8 @@ public enum ItemList implements IItemContainer { Electromagnet_Samarium, Electromagnet_Tengam, + Hatch_Antimatter, + Machine_Multi_Canner, Machine_Multi_Solidifier, diff --git a/src/main/java/gregtech/api/enums/Materials.java b/src/main/java/gregtech/api/enums/Materials.java index 5aa02b8094..9ad86df256 100644 --- a/src/main/java/gregtech/api/enums/Materials.java +++ b/src/main/java/gregtech/api/enums/Materials.java @@ -420,6 +420,7 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { * Not possible to determine exact Components */ public static Materials Antimatter; + public static Materials Protomatter; public static Materials AdvancedGlue; public static Materials BioFuel; public static Materials Biomass; diff --git a/src/main/java/gregtech/api/enums/MaterialsUEVplus.java b/src/main/java/gregtech/api/enums/MaterialsUEVplus.java index d13fe68a47..1fc32cd413 100644 --- a/src/main/java/gregtech/api/enums/MaterialsUEVplus.java +++ b/src/main/java/gregtech/api/enums/MaterialsUEVplus.java @@ -840,6 +840,54 @@ public class MaterialsUEVplus { .disableAutoGeneratedVacuumFreezerRecipe() .disableAutoGeneratedBlastFurnaceRecipes(); + public static Materials Antimatter = new Materials( + 158, + TextureSet.SET_FLUID, + 1.0F, + 0, + 2, + 16, + 255, + 255, + 255, + 0, + "Antimatter", + "Semi-Stable Antimatter", + -1, + -1, + 0, + 1, + false, + true, + 1, + 1, + 1, + Dyes._NULL); + + public static Materials Protomatter = new Materials( + 159, + TextureSet.SET_FLUID, + 1.0F, + 0, + 2, + 16, + 255, + 255, + 255, + 0, + "Protomatter", + "Protomatter", + -1, + -1, + 0, + 1, + false, + true, + 1, + 1, + 1, + Dyes._NULL); + /** * called by Materials. Can be safely called multiple times. exists to allow Materials ensure this class is * initialized diff --git a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java index 12ecb96155..721cb36457 100644 --- a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java +++ b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java @@ -1914,6 +1914,7 @@ public enum MetaTileEntityIDs { LargeEssentiaSmeltery(32024), CoolantTower(32025), ComponentAssemblyLine(32026), + AntimatterForge(32027), WireLumiium(32737), WireSignalium(32749),; diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java index 4eace204e6..39dc57af41 100644 --- a/src/main/java/gregtech/api/enums/Textures.java +++ b/src/main/java/gregtech/api/enums/Textures.java @@ -278,6 +278,8 @@ public class Textures { MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW, MACHINE_CASING_FUSION_2, + MACHINE_CASING_ANTIMATTER, + MACHINE_CASING_ANTIMATTER_GLOW, MACHINE_CASING_MAGIC, MACHINE_CASING_MAGIC_GLOW, diff --git a/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java b/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java index 42110f68f1..f46256e2c5 100644 --- a/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java +++ b/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java @@ -1297,6 +1297,24 @@ public class LoaderGTBlockFluid implements Runnable { GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.PhononCrystalSolution, 1L), ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("antimatter") + .withLocalizedName(MaterialsUEVplus.Antimatter.mLocalizedName) + .withStateAndTemperature(LIQUID, -1) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.Antimatter) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.Antimatter, 1L), + ItemList.Cell_Empty.get(1L)); + + GTFluidFactory.builder("protomatter") + .withLocalizedName(MaterialsUEVplus.Protomatter.mLocalizedName) + .withStateAndTemperature(LIQUID, 1) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.Protomatter) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.Protomatter, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("fieryblood") .withLocalizedName("Fiery Blood") .withStateAndTemperature(LIQUID, 6400) diff --git a/src/main/resources/assets/goodgenerator/lang/en_US.lang b/src/main/resources/assets/goodgenerator/lang/en_US.lang index 37b246a018..253cc99a7e 100644 --- a/src/main/resources/assets/goodgenerator/lang/en_US.lang +++ b/src/main/resources/assets/goodgenerator/lang/en_US.lang @@ -58,6 +58,11 @@ componentAssemblyLineCasing.10.name=Component Assembly Line Casing (UIV) componentAssemblyLineCasing.11.name=Component Assembly Line Casing (UMV) componentAssemblyLineCasing.12.name=Component Assembly Line Casing (UXV) componentAssemblyLineCasing.13.name=Component Assembly Line Casing (MAX) +magneticFluxCasing.0.name=Magnetic Flux Casing +gravityStabilizationCasing.0.name=Gravity Stabilization Casing +antimatterContainmentCasing.0.name=Antimatter Containment Casing +protomatterActivationCoil.0.name=Protomatter Activation Coil +antimatterAnnihilationMatrix.0.name=Antimatter Annihilation Matrix #Items item.radiationProtectionPlate.name=Radiation Proof Plate @@ -313,6 +318,12 @@ gui.YOTTank.button.void=Void Excess gui.YOTTank.button.locking=Fluid locking gui.LargeFusion.0=Energy Capacity: gui.LargeFusion.1=Stored Energy: +gui.AntimatterForge.0=Contained Antimatter +gui.AntimatterForge.1=Passive Consumption +gui.AntimatterForge.2=Active Consumption +gui.AntimatterForge.3=Antimatter Change +gui.AntimatterGenerator.0=EU Produced +gui.AntimatterGenerator.1=Efficiency gt.blockmachines.LargeFusionComputerPP.cfgi.0=Batch Size gt.blockmachines.YottaFluidTank.cfgi.0=Tick rate (Update I/O every x ticks) diff --git a/src/main/resources/assets/goodgenerator/models/Antimatter.obj b/src/main/resources/assets/goodgenerator/models/Antimatter.obj new file mode 100644 index 0000000000..91c63c8fcf --- /dev/null +++ b/src/main/resources/assets/goodgenerator/models/Antimatter.obj @@ -0,0 +1,270 @@ +# Blender 4.2.0 +# www.blender.org +mtllib Antimatter.mtl +o Icosphere +v 0.000000 -2.000000 0.000000 +v 1.447215 -0.894439 1.051451 +v -0.552776 -0.894440 1.701298 +v -1.788852 -0.894431 0.000000 +v -0.552776 -0.894440 -1.701298 +v 1.447215 -0.894439 -1.051451 +v 0.552776 0.894440 1.701298 +v -1.447215 0.894439 1.051451 +v -1.447215 0.894439 -1.051451 +v 0.552776 0.894440 -1.701298 +v 1.788852 0.894431 0.000000 +v 0.000000 2.000000 0.000000 +v -0.162456 -0.850654 0.499995 +v 0.425323 -0.850654 0.309011 +v 0.262869 -0.525738 0.809012 +v 0.850648 -0.525736 0.000000 +v 0.425323 -0.850654 -0.309011 +v -0.525730 -0.850652 0.000000 +v -0.688189 -0.525736 0.499997 +v -0.162456 -0.850654 -0.499995 +v -0.688189 -0.525736 -0.499997 +v 0.262869 -0.525738 -0.809012 +v 0.951058 0.000000 0.309013 +v 0.951058 0.000000 -0.309013 +v 0.000000 0.000000 1.000000 +v 0.587786 0.000000 0.809017 +v -0.951058 0.000000 0.309013 +v -0.587786 0.000000 0.809017 +v -0.587786 0.000000 -0.809017 +v -0.951058 0.000000 -0.309013 +v 0.587786 0.000000 -0.809017 +v 0.000000 0.000000 -1.000000 +v 0.688189 0.525736 0.499997 +v -0.262869 0.525738 0.809012 +v -0.850648 0.525736 0.000000 +v -0.262869 0.525738 -0.809012 +v 0.688189 0.525736 -0.499997 +v 0.162456 0.850654 0.499995 +v 0.525730 0.850652 0.000000 +v -0.425323 0.850654 0.309011 +v -0.425323 0.850654 -0.309011 +v 0.162456 0.850654 -0.499995 +vn 0.2898 -0.3471 0.8919 +vn 0.3006 -0.8338 -0.4630 +vn -0.7587 -0.3471 0.5513 +vn -0.7587 -0.3471 -0.5513 +vn 0.2898 -0.3471 -0.8919 +vn 0.8803 0.1040 -0.4630 +vn 0.7123 0.1040 0.6941 +vn -0.4400 0.1040 0.8919 +vn -0.9843 0.1040 -0.1429 +vn -0.1683 0.1040 -0.9802 +vn 0.5905 0.6836 0.4290 +vn -0.2255 0.6836 0.6941 +vn -0.7298 0.6836 -0.0000 +vn -0.2255 0.6836 -0.6941 +vn 0.5905 0.6836 -0.4290 +vn 0.5153 0.8338 -0.1978 +vn 0.3474 0.8338 0.4290 +vn -0.3006 0.8338 0.4630 +vn -0.5332 0.8338 -0.1429 +vn -0.0289 0.8338 -0.5512 +vn 0.7587 0.3471 -0.5513 +vn 0.4911 0.7947 -0.3568 +vn 0.5153 0.8338 0.1978 +vn -0.2898 0.3471 -0.8919 +vn -0.1876 0.7947 -0.5773 +vn 0.3474 0.8338 -0.4290 +vn -0.9378 0.3471 -0.0000 +vn -0.6071 0.7947 -0.0000 +vn -0.3006 0.8338 -0.4630 +vn -0.2898 0.3471 0.8919 +vn -0.1876 0.7947 0.5773 +vn -0.5332 0.8338 0.1429 +vn 0.7587 0.3471 0.5513 +vn 0.4911 0.7947 0.3568 +vn -0.0289 0.8338 0.5512 +vn 0.4400 -0.1040 -0.8919 +vn 0.7947 0.1876 -0.5773 +vn 0.9843 -0.1040 -0.1429 +vn -0.7123 -0.1040 -0.6941 +vn -0.3035 0.1876 -0.9342 +vn 0.1683 -0.1040 -0.9802 +vn -0.8803 -0.1040 0.4630 +vn -0.9822 0.1876 -0.0000 +vn -0.8803 -0.1040 -0.4630 +vn 0.1683 -0.1040 0.9802 +vn -0.3035 0.1876 0.9342 +vn -0.7123 -0.1040 0.6941 +vn 0.9843 -0.1040 0.1429 +vn 0.7947 0.1876 0.5773 +vn 0.4400 -0.1040 0.8919 +vn 0.2255 -0.6836 -0.6941 +vn 0.3035 -0.1876 -0.9342 +vn 0.7123 0.1040 -0.6941 +vn -0.5905 -0.6836 -0.4290 +vn -0.7947 -0.1876 -0.5773 +vn -0.4400 0.1040 -0.8919 +vn -0.5905 -0.6836 0.4290 +vn -0.7947 -0.1876 0.5773 +vn -0.9843 0.1040 0.1429 +vn 0.2255 -0.6836 0.6941 +vn 0.3035 -0.1876 0.9342 +vn -0.1683 0.1040 0.9802 +vn 0.7298 -0.6836 -0.0000 +vn 0.9822 -0.1876 -0.0000 +vn 0.8803 0.1040 0.4630 +vn -0.3474 -0.8338 -0.4290 +vn 0.1876 -0.7947 -0.5773 +vn 0.5332 -0.8338 -0.1429 +vn -0.5153 -0.8338 0.1978 +vn -0.4911 -0.7947 -0.3568 +vn 0.0289 -0.8338 -0.5512 +vn 0.0289 -0.8338 0.5512 +vn -0.4911 -0.7947 0.3568 +vn -0.5153 -0.8338 -0.1978 +vn 0.3006 -0.8338 0.4630 +vn 0.6071 -0.7947 -0.0000 +vn 0.9378 -0.3471 -0.0000 +vn 0.5332 -0.8338 0.1429 +vn 0.1876 -0.7947 0.5773 +vn -0.3474 -0.8338 0.4290 +vt 0.181819 0.000000 +vt 0.227273 0.078731 +vt 0.136365 0.078731 +vt 0.272728 0.157461 +vt 0.318182 0.078731 +vt 0.363637 0.157461 +vt 0.909091 0.000000 +vt 0.954545 0.078731 +vt 0.863636 0.078731 +vt 0.727273 0.000000 +vt 0.772727 0.078731 +vt 0.681818 0.078731 +vt 0.545455 0.000000 +vt 0.590909 0.078731 +vt 0.500000 0.078731 +vt 0.318182 0.236191 +vt 0.090910 0.157461 +vt 0.181819 0.157461 +vt 0.136365 0.236191 +vt 0.818182 0.157461 +vt 0.909091 0.157461 +vt 0.863636 0.236191 +vt 0.636364 0.157461 +vt 0.727273 0.157461 +vt 0.681818 0.236191 +vt 0.454546 0.157461 +vt 0.545455 0.157461 +vt 0.500000 0.236191 +vt 0.227273 0.236191 +vt 0.045455 0.236191 +vt 0.772727 0.236191 +vt 0.590909 0.236191 +vt 0.409092 0.236191 +vt 0.181819 0.314921 +vt 0.272728 0.314921 +vt 0.227273 0.393651 +vt 0.000000 0.314921 +vt 0.090910 0.314921 +vt 0.045455 0.393651 +vt 0.727273 0.314921 +vt 0.818182 0.314921 +vt 0.772727 0.393651 +vt 0.545455 0.314921 +vt 0.636364 0.314921 +vt 0.590909 0.393651 +vt 0.363637 0.314921 +vt 0.454546 0.314921 +vt 0.409092 0.393651 +vt 0.500000 0.393651 +vt 0.454546 0.472382 +vt 0.681818 0.393651 +vt 0.636364 0.472382 +vt 0.863636 0.393651 +vt 0.818182 0.472382 +vt 0.909091 0.314921 +vt 0.136365 0.393651 +vt 0.090910 0.472382 +vt 0.318182 0.393651 +vt 0.272728 0.472382 +vt 0.954545 0.236191 +vt 1.000000 0.157461 +vt 0.409092 0.078731 +vt 0.363637 0.000000 +s 0 +f 1/1/1 14/2/1 13/3/1 +f 2/4/2 14/5/2 16/6/2 +f 1/7/3 13/8/3 18/9/3 +f 1/10/4 18/11/4 20/12/4 +f 1/13/5 20/14/5 17/15/5 +f 2/4/6 16/6/6 23/16/6 +f 3/17/7 15/18/7 25/19/7 +f 4/20/8 19/21/8 27/22/8 +f 5/23/9 21/24/9 29/25/9 +f 6/26/10 22/27/10 31/28/10 +f 2/4/11 23/16/11 26/29/11 +f 3/17/12 25/19/12 28/30/12 +f 4/20/13 27/22/13 30/31/13 +f 5/23/14 29/25/14 32/32/14 +f 6/26/15 31/28/15 24/33/15 +f 7/34/16 33/35/16 38/36/16 +f 8/37/17 34/38/17 40/39/17 +f 9/40/18 35/41/18 41/42/18 +f 10/43/19 36/44/19 42/45/19 +f 11/46/20 37/47/20 39/48/20 +f 39/48/21 42/49/21 12/50/21 +f 39/48/22 37/47/22 42/49/22 +f 37/47/23 10/43/23 42/49/23 +f 42/45/24 41/51/24 12/52/24 +f 42/45/25 36/44/25 41/51/25 +f 36/44/26 9/40/26 41/51/26 +f 41/42/27 40/53/27 12/54/27 +f 41/42/28 35/41/28 40/53/28 +f 35/41/29 8/55/29 40/53/29 +f 40/39/30 38/56/30 12/57/30 +f 40/39/31 34/38/31 38/56/31 +f 34/38/32 7/34/32 38/56/32 +f 38/36/33 39/58/33 12/59/33 +f 38/36/34 33/35/34 39/58/34 +f 33/35/35 11/46/35 39/58/35 +f 24/33/36 37/47/36 11/46/36 +f 24/33/37 31/28/37 37/47/37 +f 31/28/38 10/43/38 37/47/38 +f 32/32/39 36/44/39 10/43/39 +f 32/32/40 29/25/40 36/44/40 +f 29/25/41 9/40/41 36/44/41 +f 30/31/42 35/41/42 9/40/42 +f 30/31/43 27/22/43 35/41/43 +f 27/22/44 8/55/44 35/41/44 +f 28/30/45 34/38/45 8/37/45 +f 28/30/46 25/19/46 34/38/46 +f 25/19/47 7/34/47 34/38/47 +f 26/29/48 33/35/48 7/34/48 +f 26/29/49 23/16/49 33/35/49 +f 23/16/50 11/46/50 33/35/50 +f 31/28/51 32/32/51 10/43/51 +f 31/28/52 22/27/52 32/32/52 +f 22/27/53 5/23/53 32/32/53 +f 29/25/54 30/31/54 9/40/54 +f 29/25/55 21/24/55 30/31/55 +f 21/24/56 4/20/56 30/31/56 +f 27/22/57 28/60/57 8/55/57 +f 27/22/58 19/21/58 28/60/58 +f 19/21/59 3/61/59 28/60/59 +f 25/19/60 26/29/60 7/34/60 +f 25/19/61 15/18/61 26/29/61 +f 15/18/62 2/4/62 26/29/62 +f 23/16/63 24/33/63 11/46/63 +f 23/16/64 16/6/64 24/33/64 +f 16/6/65 6/26/65 24/33/65 +f 17/15/66 22/27/66 6/26/66 +f 17/15/67 20/14/67 22/27/67 +f 20/14/68 5/23/68 22/27/68 +f 20/12/69 21/24/69 5/23/69 +f 20/12/70 18/11/70 21/24/70 +f 18/11/71 4/20/71 21/24/71 +f 18/9/72 19/21/72 4/20/72 +f 18/9/73 13/8/73 19/21/73 +f 13/8/74 3/61/74 19/21/74 +f 16/6/75 17/62/75 6/26/75 +f 16/6/76 14/5/76 17/62/76 +f 14/5/77 1/63/77 17/62/77 +f 13/3/78 15/18/78 3/17/78 +f 13/3/79 14/2/79 15/18/79 +f 14/2/80 2/4/80 15/18/80 diff --git a/src/main/resources/assets/goodgenerator/models/SmoothSphere.obj b/src/main/resources/assets/goodgenerator/models/SmoothSphere.obj new file mode 100644 index 0000000000..078c23324f --- /dev/null +++ b/src/main/resources/assets/goodgenerator/models/SmoothSphere.obj @@ -0,0 +1,2487 @@ +# Blender 4.2.0 +# www.blender.org +o Sphere +v 0.000000 0.831470 -0.555570 +v 0.000000 0.555570 -0.831470 +v 0.000000 0.195090 -0.980785 +v 0.000000 0.000000 -1.000000 +v 0.000000 -0.195090 -0.980785 +v 0.000000 -0.555570 -0.831470 +v 0.038060 0.980785 -0.191342 +v 0.074658 0.923880 -0.375330 +v 0.108386 0.831470 -0.544895 +v 0.137950 0.707107 -0.693520 +v 0.162212 0.555570 -0.815493 +v 0.180240 0.382683 -0.906127 +v 0.191342 0.195090 -0.961940 +v 0.195090 0.000000 -0.980785 +v 0.191342 -0.195090 -0.961940 +v 0.180240 -0.382683 -0.906127 +v 0.162212 -0.555570 -0.815493 +v 0.137950 -0.707107 -0.693520 +v 0.108386 -0.831470 -0.544895 +v 0.074658 -0.923880 -0.375330 +v 0.038060 -0.980785 -0.191342 +v 0.074658 0.980785 -0.180240 +v 0.146447 0.923880 -0.353553 +v 0.212608 0.831470 -0.513280 +v 0.270598 0.707107 -0.653281 +v 0.318190 0.555570 -0.768178 +v 0.353553 0.382683 -0.853553 +v 0.375330 0.195090 -0.906127 +v 0.382683 0.000000 -0.923879 +v 0.375330 -0.195090 -0.906127 +v 0.353553 -0.382683 -0.853553 +v 0.318190 -0.555570 -0.768178 +v 0.270598 -0.707107 -0.653281 +v 0.212608 -0.831470 -0.513280 +v 0.146447 -0.923880 -0.353553 +v 0.074658 -0.980785 -0.180240 +v 0.108386 0.980785 -0.162212 +v 0.212608 0.923880 -0.318190 +v 0.308658 0.831470 -0.461940 +v 0.392847 0.707107 -0.587938 +v 0.461940 0.555570 -0.691342 +v 0.513280 0.382683 -0.768178 +v 0.544895 0.195090 -0.815493 +v 0.555570 0.000000 -0.831469 +v 0.544895 -0.195090 -0.815493 +v 0.513280 -0.382683 -0.768178 +v 0.461940 -0.555570 -0.691342 +v 0.392847 -0.707107 -0.587938 +v 0.308658 -0.831470 -0.461940 +v 0.212608 -0.923880 -0.318190 +v 0.108386 -0.980785 -0.162212 +v 0.137950 0.980785 -0.137950 +v 0.270598 0.923880 -0.270598 +v 0.392847 0.831470 -0.392847 +v 0.500000 0.707107 -0.500000 +v 0.587938 0.555570 -0.587938 +v 0.653281 0.382683 -0.653281 +v 0.693520 0.195090 -0.693520 +v 0.707107 0.000000 -0.707107 +v 0.693520 -0.195090 -0.693520 +v 0.653281 -0.382683 -0.653281 +v 0.587938 -0.555570 -0.587938 +v 0.500000 -0.707107 -0.500000 +v 0.392847 -0.831470 -0.392847 +v 0.270598 -0.923880 -0.270598 +v 0.137950 -0.980785 -0.137950 +v 0.162212 0.980785 -0.108386 +v 0.318190 0.923880 -0.212608 +v 0.461940 0.831470 -0.308658 +v 0.587938 0.707107 -0.392847 +v 0.691342 0.555570 -0.461940 +v 0.768178 0.382683 -0.513280 +v 0.815493 0.195090 -0.544895 +v 0.831470 0.000000 -0.555570 +v 0.815493 -0.195090 -0.544895 +v 0.768178 -0.382683 -0.513280 +v 0.691342 -0.555570 -0.461940 +v 0.587938 -0.707107 -0.392847 +v 0.461940 -0.831470 -0.308658 +v 0.318190 -0.923880 -0.212608 +v 0.162212 -0.980785 -0.108386 +v 0.000000 1.000000 0.000000 +v 0.180240 0.980785 -0.074658 +v 0.353553 0.923880 -0.146447 +v 0.513280 0.831470 -0.212607 +v 0.653281 0.707107 -0.270598 +v 0.768178 0.555570 -0.318190 +v 0.853553 0.382683 -0.353553 +v 0.906127 0.195090 -0.375330 +v 0.923879 0.000000 -0.382683 +v 0.906127 -0.195090 -0.375330 +v 0.853553 -0.382683 -0.353553 +v 0.768178 -0.555570 -0.318190 +v 0.653281 -0.707107 -0.270598 +v 0.513280 -0.831470 -0.212607 +v 0.353553 -0.923880 -0.146447 +v 0.180240 -0.980785 -0.074658 +v 0.191342 0.980785 -0.038060 +v 0.375330 0.923880 -0.074658 +v 0.544895 0.831470 -0.108386 +v 0.693520 0.707107 -0.137950 +v 0.815493 0.555570 -0.162212 +v 0.906127 0.382683 -0.180240 +v 0.961940 0.195090 -0.191342 +v 0.980785 0.000000 -0.195090 +v 0.961940 -0.195090 -0.191342 +v 0.906127 -0.382683 -0.180240 +v 0.815493 -0.555570 -0.162212 +v 0.693520 -0.707107 -0.137950 +v 0.544895 -0.831470 -0.108386 +v 0.375330 -0.923880 -0.074658 +v 0.191342 -0.980785 -0.038060 +v 0.195090 0.980785 0.000000 +v 0.382683 0.923880 0.000000 +v 0.555570 0.831470 0.000000 +v 0.707107 0.707107 -0.000000 +v 0.831469 0.555570 0.000000 +v 0.923879 0.382683 -0.000000 +v 0.980785 0.195090 0.000000 +v 1.000000 0.000000 0.000000 +v 0.980785 -0.195090 0.000000 +v 0.923879 -0.382683 -0.000000 +v 0.831469 -0.555570 0.000000 +v 0.707107 -0.707107 -0.000000 +v 0.555570 -0.831470 0.000000 +v 0.382683 -0.923880 0.000000 +v 0.195090 -0.980785 0.000000 +v 0.191342 0.980785 0.038060 +v 0.375330 0.923880 0.074658 +v 0.544895 0.831470 0.108386 +v 0.693520 0.707107 0.137950 +v 0.815493 0.555570 0.162212 +v 0.906127 0.382683 0.180240 +v 0.961940 0.195090 0.191342 +v 0.980785 0.000000 0.195090 +v 0.961940 -0.195090 0.191342 +v 0.906127 -0.382683 0.180240 +v 0.815493 -0.555570 0.162212 +v 0.693520 -0.707107 0.137950 +v 0.544895 -0.831470 0.108386 +v 0.375330 -0.923880 0.074658 +v 0.191342 -0.980785 0.038060 +v 0.180240 0.980785 0.074658 +v 0.353553 0.923880 0.146447 +v 0.513280 0.831470 0.212608 +v 0.653281 0.707107 0.270598 +v 0.768178 0.555570 0.318190 +v 0.853553 0.382683 0.353553 +v 0.906127 0.195090 0.375330 +v 0.923879 0.000000 0.382683 +v 0.906127 -0.195090 0.375330 +v 0.853553 -0.382683 0.353553 +v 0.768178 -0.555570 0.318190 +v 0.653281 -0.707107 0.270598 +v 0.513280 -0.831470 0.212608 +v 0.353553 -0.923880 0.146447 +v 0.180240 -0.980785 0.074658 +v 0.162212 0.980785 0.108386 +v 0.318190 0.923880 0.212608 +v 0.461940 0.831470 0.308658 +v 0.587938 0.707107 0.392847 +v 0.691341 0.555570 0.461940 +v 0.768178 0.382683 0.513280 +v 0.815493 0.195090 0.544895 +v 0.831469 0.000000 0.555570 +v 0.815493 -0.195090 0.544895 +v 0.768178 -0.382683 0.513280 +v 0.691341 -0.555570 0.461940 +v 0.587938 -0.707107 0.392847 +v 0.461940 -0.831470 0.308658 +v 0.318190 -0.923880 0.212608 +v 0.162212 -0.980785 0.108386 +v 0.137950 0.980785 0.137950 +v 0.270598 0.923880 0.270598 +v 0.392847 0.831470 0.392847 +v 0.500000 0.707107 0.500000 +v 0.587938 0.555570 0.587938 +v 0.653281 0.382683 0.653281 +v 0.693520 0.195090 0.693520 +v 0.707106 0.000000 0.707107 +v 0.693520 -0.195090 0.693520 +v 0.653281 -0.382683 0.653281 +v 0.587938 -0.555570 0.587938 +v 0.500000 -0.707107 0.500000 +v 0.392847 -0.831470 0.392847 +v 0.270598 -0.923880 0.270598 +v 0.137950 -0.980785 0.137950 +v 0.108386 0.980785 0.162212 +v 0.212607 0.923880 0.318190 +v 0.308658 0.831470 0.461940 +v 0.392847 0.707107 0.587938 +v 0.461940 0.555570 0.691342 +v 0.513280 0.382683 0.768178 +v 0.544895 0.195090 0.815493 +v 0.555570 0.000000 0.831469 +v 0.544895 -0.195090 0.815493 +v 0.513280 -0.382683 0.768178 +v 0.461940 -0.555570 0.691342 +v 0.392847 -0.707107 0.587938 +v 0.308658 -0.831470 0.461940 +v 0.212607 -0.923880 0.318190 +v 0.108386 -0.980785 0.162212 +v 0.074658 0.980785 0.180240 +v 0.146447 0.923880 0.353553 +v 0.212607 0.831470 0.513280 +v 0.270598 0.707107 0.653281 +v 0.318189 0.555570 0.768178 +v 0.353553 0.382683 0.853553 +v 0.375330 0.195090 0.906127 +v 0.382683 0.000000 0.923879 +v 0.375330 -0.195090 0.906127 +v 0.353553 -0.382683 0.853553 +v 0.318189 -0.555570 0.768178 +v 0.270598 -0.707107 0.653281 +v 0.212607 -0.831470 0.513280 +v 0.146447 -0.923880 0.353553 +v 0.074658 -0.980785 0.180240 +v 0.038060 0.980785 0.191342 +v 0.074658 0.923880 0.375330 +v 0.108386 0.831470 0.544895 +v 0.137950 0.707107 0.693520 +v 0.162212 0.555570 0.815493 +v 0.180240 0.382683 0.906127 +v 0.191342 0.195090 0.961939 +v 0.195090 0.000000 0.980785 +v 0.191342 -0.195090 0.961939 +v 0.180240 -0.382683 0.906127 +v 0.162212 -0.555570 0.815493 +v 0.137950 -0.707107 0.693520 +v 0.108386 -0.831470 0.544895 +v 0.074658 -0.923880 0.375330 +v 0.038060 -0.980785 0.191342 +v -0.000000 0.980785 0.195090 +v -0.000000 0.923880 0.382683 +v -0.000000 0.831470 0.555570 +v -0.000000 0.707107 0.707107 +v -0.000000 0.555570 0.831469 +v 0.000000 0.382683 0.923879 +v -0.000000 0.195090 0.980785 +v -0.000000 0.000000 0.999999 +v -0.000000 -0.195090 0.980785 +v 0.000000 -0.382683 0.923879 +v -0.000000 -0.555570 0.831469 +v -0.000000 -0.707107 0.707107 +v -0.000000 -0.831470 0.555570 +v -0.000000 -0.923880 0.382683 +v -0.000000 -0.980785 0.195090 +v -0.038060 0.980785 0.191342 +v -0.074658 0.923880 0.375330 +v -0.108386 0.831470 0.544895 +v -0.137950 0.707107 0.693520 +v -0.162212 0.555570 0.815493 +v -0.180240 0.382683 0.906127 +v -0.191342 0.195090 0.961939 +v -0.195091 0.000000 0.980785 +v -0.191342 -0.195090 0.961939 +v -0.180240 -0.382683 0.906127 +v -0.162212 -0.555570 0.815493 +v -0.137950 -0.707107 0.693520 +v -0.108386 -0.831470 0.544895 +v -0.074658 -0.923880 0.375330 +v -0.038060 -0.980785 0.191342 +v -0.074658 0.980785 0.180240 +v -0.146447 0.923880 0.353553 +v -0.212608 0.831470 0.513280 +v -0.270598 0.707107 0.653281 +v -0.318190 0.555570 0.768177 +v -0.353553 0.382683 0.853553 +v -0.375330 0.195090 0.906127 +v -0.382683 0.000000 0.923879 +v -0.375330 -0.195090 0.906127 +v -0.353553 -0.382683 0.853553 +v -0.318190 -0.555570 0.768177 +v -0.270598 -0.707107 0.653281 +v -0.212608 -0.831470 0.513280 +v -0.146447 -0.923880 0.353553 +v -0.074658 -0.980785 0.180240 +v -0.108386 0.980785 0.162212 +v -0.212608 0.923880 0.318190 +v -0.308658 0.831470 0.461939 +v -0.392847 0.707107 0.587938 +v -0.461940 0.555570 0.691341 +v -0.513280 0.382683 0.768178 +v -0.544895 0.195090 0.815493 +v -0.555570 0.000000 0.831469 +v -0.544895 -0.195090 0.815493 +v -0.513280 -0.382683 0.768178 +v -0.461940 -0.555570 0.691341 +v -0.392847 -0.707107 0.587938 +v -0.308658 -0.831470 0.461939 +v -0.212608 -0.923880 0.318190 +v -0.108386 -0.980785 0.162212 +v -0.137950 0.980785 0.137950 +v -0.270598 0.923880 0.270598 +v -0.392847 0.831470 0.392847 +v -0.500000 0.707107 0.500000 +v -0.587938 0.555570 0.587937 +v -0.653281 0.382683 0.653281 +v -0.693520 0.195090 0.693520 +v -0.707106 0.000000 0.707106 +v -0.693520 -0.195090 0.693520 +v -0.653281 -0.382683 0.653281 +v -0.587938 -0.555570 0.587937 +v -0.500000 -0.707107 0.500000 +v -0.392847 -0.831470 0.392847 +v -0.270598 -0.923880 0.270598 +v -0.137950 -0.980785 0.137950 +v 0.000000 -1.000000 0.000000 +v -0.162212 0.980785 0.108386 +v -0.318190 0.923880 0.212607 +v -0.461940 0.831470 0.308658 +v -0.587938 0.707107 0.392847 +v -0.691341 0.555570 0.461939 +v -0.768177 0.382683 0.513280 +v -0.815493 0.195090 0.544895 +v -0.831469 0.000000 0.555569 +v -0.815493 -0.195090 0.544895 +v -0.768177 -0.382683 0.513280 +v -0.691341 -0.555570 0.461939 +v -0.587938 -0.707107 0.392847 +v -0.461940 -0.831470 0.308658 +v -0.318190 -0.923880 0.212607 +v -0.162212 -0.980785 0.108386 +v -0.180240 0.980785 0.074658 +v -0.353553 0.923880 0.146447 +v -0.513280 0.831470 0.212607 +v -0.653281 0.707107 0.270598 +v -0.768177 0.555570 0.318189 +v -0.853553 0.382683 0.353553 +v -0.906127 0.195090 0.375330 +v -0.923879 0.000000 0.382683 +v -0.906127 -0.195090 0.375330 +v -0.853553 -0.382683 0.353553 +v -0.768177 -0.555570 0.318189 +v -0.653281 -0.707107 0.270598 +v -0.513280 -0.831470 0.212607 +v -0.353553 -0.923880 0.146447 +v -0.180240 -0.980785 0.074658 +v -0.191342 0.980785 0.038060 +v -0.375330 0.923880 0.074658 +v -0.544895 0.831470 0.108386 +v -0.693520 0.707107 0.137950 +v -0.815493 0.555570 0.162211 +v -0.906127 0.382683 0.180240 +v -0.961939 0.195090 0.191341 +v -0.980784 0.000000 0.195090 +v -0.961939 -0.195090 0.191341 +v -0.906127 -0.382683 0.180240 +v -0.815493 -0.555570 0.162211 +v -0.693520 -0.707107 0.137950 +v -0.544895 -0.831470 0.108386 +v -0.375330 -0.923880 0.074658 +v -0.191342 -0.980785 0.038060 +v -0.195090 0.980785 -0.000000 +v -0.382683 0.923880 -0.000000 +v -0.555570 0.831470 -0.000000 +v -0.707107 0.707107 -0.000000 +v -0.831469 0.555570 -0.000000 +v -0.923879 0.382683 -0.000000 +v -0.980785 0.195090 -0.000000 +v -0.999999 0.000000 -0.000000 +v -0.980785 -0.195090 -0.000000 +v -0.923879 -0.382683 -0.000000 +v -0.831469 -0.555570 -0.000000 +v -0.707107 -0.707107 -0.000000 +v -0.555570 -0.831470 -0.000000 +v -0.382683 -0.923880 -0.000000 +v -0.195090 -0.980785 -0.000000 +v -0.191342 0.980785 -0.038060 +v -0.375330 0.923880 -0.074658 +v -0.544895 0.831470 -0.108386 +v -0.693520 0.707107 -0.137950 +v -0.815493 0.555570 -0.162212 +v -0.906127 0.382683 -0.180240 +v -0.961939 0.195090 -0.191342 +v -0.980784 0.000000 -0.195091 +v -0.961939 -0.195090 -0.191342 +v -0.906127 -0.382683 -0.180240 +v -0.815493 -0.555570 -0.162212 +v -0.693520 -0.707107 -0.137950 +v -0.544895 -0.831470 -0.108386 +v -0.375330 -0.923880 -0.074658 +v -0.191342 -0.980785 -0.038060 +v -0.180240 0.980785 -0.074658 +v -0.353553 0.923880 -0.146447 +v -0.513279 0.831470 -0.212607 +v -0.653281 0.707107 -0.270598 +v -0.768177 0.555570 -0.318190 +v -0.853553 0.382683 -0.353553 +v -0.906127 0.195090 -0.375330 +v -0.923878 0.000000 -0.382683 +v -0.906127 -0.195090 -0.375330 +v -0.853553 -0.382683 -0.353553 +v -0.768177 -0.555570 -0.318190 +v -0.653281 -0.707107 -0.270598 +v -0.513279 -0.831470 -0.212607 +v -0.353553 -0.923880 -0.146447 +v -0.180240 -0.980785 -0.074658 +v -0.162212 0.980785 -0.108386 +v -0.318189 0.923880 -0.212607 +v -0.461939 0.831470 -0.308658 +v -0.587938 0.707107 -0.392847 +v -0.691341 0.555570 -0.461940 +v -0.768177 0.382683 -0.513280 +v -0.815493 0.195090 -0.544895 +v -0.831468 0.000000 -0.555570 +v -0.815493 -0.195090 -0.544895 +v -0.768177 -0.382683 -0.513280 +v -0.691341 -0.555570 -0.461940 +v -0.587938 -0.707107 -0.392847 +v -0.461939 -0.831470 -0.308658 +v -0.318189 -0.923880 -0.212607 +v -0.162212 -0.980785 -0.108386 +v -0.137950 0.980785 -0.137950 +v -0.270598 0.923880 -0.270598 +v -0.392847 0.831470 -0.392847 +v -0.500000 0.707107 -0.500000 +v -0.587937 0.555570 -0.587938 +v -0.653281 0.382683 -0.653281 +v -0.693519 0.195090 -0.693520 +v -0.707106 0.000000 -0.707106 +v -0.693519 -0.195090 -0.693520 +v -0.653281 -0.382683 -0.653281 +v -0.587937 -0.555570 -0.587938 +v -0.500000 -0.707107 -0.500000 +v -0.392847 -0.831470 -0.392847 +v -0.270598 -0.923880 -0.270598 +v -0.137950 -0.980785 -0.137950 +v -0.108386 0.980785 -0.162212 +v -0.212607 0.923880 -0.318190 +v -0.308658 0.831470 -0.461939 +v -0.392847 0.707107 -0.587938 +v -0.461939 0.555570 -0.691341 +v -0.513280 0.382683 -0.768177 +v -0.544895 0.195090 -0.815493 +v -0.555569 0.000000 -0.831469 +v -0.544895 -0.195090 -0.815493 +v -0.513280 -0.382683 -0.768177 +v -0.461939 -0.555570 -0.691341 +v -0.392847 -0.707107 -0.587938 +v -0.308658 -0.831470 -0.461939 +v -0.212607 -0.923880 -0.318190 +v -0.108386 -0.980785 -0.162212 +v -0.074658 0.980785 -0.180240 +v -0.146446 0.923880 -0.353553 +v -0.212607 0.831470 -0.513279 +v -0.270598 0.707107 -0.653281 +v -0.318189 0.555570 -0.768177 +v -0.353553 0.382683 -0.853553 +v -0.375330 0.195090 -0.906127 +v -0.382683 0.000000 -0.923879 +v -0.375330 -0.195090 -0.906127 +v -0.353553 -0.382683 -0.853553 +v -0.318189 -0.555570 -0.768177 +v -0.270598 -0.707107 -0.653281 +v -0.212607 -0.831470 -0.513279 +v -0.146446 -0.923880 -0.353553 +v -0.074658 -0.980785 -0.180240 +v -0.038060 0.980785 -0.191342 +v -0.074658 0.923880 -0.375330 +v -0.108386 0.831470 -0.544895 +v -0.137950 0.707107 -0.693520 +v -0.162211 0.555570 -0.815493 +v -0.180240 0.382683 -0.906127 +v -0.191341 0.195090 -0.961939 +v -0.195090 0.000000 -0.980784 +v -0.191341 -0.195090 -0.961939 +v -0.180240 -0.382683 -0.906127 +v -0.162211 -0.555570 -0.815493 +v -0.137950 -0.707107 -0.693520 +v -0.108386 -0.831470 -0.544895 +v -0.074658 -0.923880 -0.375330 +v -0.038060 -0.980785 -0.191342 +v 0.000000 0.980785 -0.195090 +v 0.000000 0.923880 -0.382683 +v 0.000000 0.707107 -0.707107 +v 0.000000 0.382683 -0.923879 +v 0.000000 -0.382683 -0.923879 +v 0.000000 -0.707107 -0.707107 +v 0.000000 -0.831470 -0.555570 +v 0.000000 -0.923880 -0.382683 +v 0.000000 -0.980785 -0.195090 +vn -0.0000 0.8286 -0.5598 +vn -0.0000 0.5528 -0.8333 +vn -0.0000 0.1939 -0.9810 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 -0.1939 -0.9810 +vn -0.0000 -0.5528 -0.8333 +vn 0.0392 0.9796 -0.1971 +vn 0.0757 0.9217 -0.3804 +vn 0.1092 0.8286 -0.5490 +vn 0.1385 0.7041 -0.6965 +vn 0.1626 0.5528 -0.8173 +vn 0.1804 0.3805 -0.9070 +vn 0.1914 0.1939 -0.9622 +vn 0.1951 -0.0000 -0.9808 +vn 0.1914 -0.1939 -0.9622 +vn 0.1804 -0.3805 -0.9070 +vn 0.1626 -0.5528 -0.8173 +vn 0.1385 -0.7041 -0.6965 +vn 0.1092 -0.8286 -0.5490 +vn 0.0757 -0.9217 -0.3804 +vn 0.0392 -0.9796 -0.1971 +vn 0.0769 0.9796 -0.1857 +vn 0.1484 0.9217 -0.3584 +vn 0.2142 0.8286 -0.5172 +vn 0.2718 0.7041 -0.6561 +vn 0.3189 0.5528 -0.7699 +vn 0.3539 0.3805 -0.8544 +vn 0.3754 0.1939 -0.9063 +vn 0.3827 -0.0000 -0.9239 +vn 0.3754 -0.1939 -0.9063 +vn 0.3539 -0.3805 -0.8544 +vn 0.3189 -0.5528 -0.7699 +vn 0.2718 -0.7041 -0.6561 +vn 0.2142 -0.8286 -0.5172 +vn 0.1484 -0.9217 -0.3584 +vn 0.0769 -0.9796 -0.1857 +vn 0.1117 0.9796 -0.1671 +vn 0.2155 0.9217 -0.3225 +vn 0.3110 0.8286 -0.4654 +vn 0.3945 0.7041 -0.5905 +vn 0.4630 0.5528 -0.6929 +vn 0.5138 0.3805 -0.7689 +vn 0.5450 0.1939 -0.8157 +vn 0.5556 -0.0000 -0.8315 +vn 0.5450 -0.1939 -0.8157 +vn 0.5138 -0.3805 -0.7689 +vn 0.4630 -0.5528 -0.6929 +vn 0.3945 -0.7041 -0.5905 +vn 0.3110 -0.8286 -0.4654 +vn 0.2155 -0.9217 -0.3225 +vn 0.1117 -0.9796 -0.1671 +vn 0.1421 0.9796 -0.1421 +vn 0.2743 0.9217 -0.2743 +vn 0.3958 0.8286 -0.3958 +vn 0.5021 0.7041 -0.5021 +vn 0.5893 0.5528 -0.5893 +vn 0.6539 0.3805 -0.6539 +vn 0.6937 0.1939 -0.6937 +vn 0.7071 -0.0000 -0.7071 +vn 0.6937 -0.1939 -0.6937 +vn 0.6539 -0.3805 -0.6539 +vn 0.5893 -0.5528 -0.5893 +vn 0.5021 -0.7041 -0.5021 +vn 0.3958 -0.8286 -0.3958 +vn 0.2743 -0.9217 -0.2743 +vn 0.1421 -0.9796 -0.1421 +vn 0.1671 0.9796 -0.1117 +vn 0.3225 0.9217 -0.2155 +vn 0.4654 0.8286 -0.3110 +vn 0.5905 0.7041 -0.3945 +vn 0.6929 0.5528 -0.4630 +vn 0.7689 0.3805 -0.5138 +vn 0.8157 0.1939 -0.5450 +vn 0.8315 -0.0000 -0.5556 +vn 0.8157 -0.1939 -0.5450 +vn 0.7689 -0.3805 -0.5138 +vn 0.6929 -0.5528 -0.4630 +vn 0.5905 -0.7041 -0.3945 +vn 0.4654 -0.8286 -0.3110 +vn 0.3225 -0.9217 -0.2155 +vn 0.1671 -0.9796 -0.1117 +vn -0.0000 1.0000 -0.0000 +vn 0.1857 0.9796 -0.0769 +vn 0.3584 0.9217 -0.1484 +vn 0.5172 0.8286 -0.2142 +vn 0.6561 0.7041 -0.2718 +vn 0.7699 0.5528 -0.3189 +vn 0.8544 0.3805 -0.3539 +vn 0.9063 0.1939 -0.3754 +vn 0.9239 -0.0000 -0.3827 +vn 0.9063 -0.1939 -0.3754 +vn 0.8544 -0.3805 -0.3539 +vn 0.7699 -0.5528 -0.3189 +vn 0.6561 -0.7041 -0.2718 +vn 0.5172 -0.8286 -0.2142 +vn 0.3584 -0.9217 -0.1484 +vn 0.1857 -0.9796 -0.0769 +vn 0.1971 0.9796 -0.0392 +vn 0.3804 0.9217 -0.0757 +vn 0.5490 0.8286 -0.1092 +vn 0.6965 0.7041 -0.1385 +vn 0.8173 0.5528 -0.1626 +vn 0.9070 0.3805 -0.1804 +vn 0.9622 0.1939 -0.1914 +vn 0.9808 -0.0000 -0.1951 +vn 0.9622 -0.1939 -0.1914 +vn 0.9070 -0.3805 -0.1804 +vn 0.8173 -0.5528 -0.1626 +vn 0.6965 -0.7041 -0.1385 +vn 0.5490 -0.8286 -0.1092 +vn 0.3804 -0.9217 -0.0757 +vn 0.1971 -0.9796 -0.0392 +vn 0.2010 0.9796 -0.0000 +vn 0.3879 0.9217 -0.0000 +vn 0.5598 0.8286 -0.0000 +vn 0.7101 0.7041 -0.0000 +vn 0.8333 0.5528 -0.0000 +vn 0.9248 0.3805 -0.0000 +vn 0.9810 0.1939 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn 0.9810 -0.1939 -0.0000 +vn 0.9248 -0.3805 -0.0000 +vn 0.8333 -0.5528 -0.0000 +vn 0.7101 -0.7041 -0.0000 +vn 0.5598 -0.8286 -0.0000 +vn 0.3879 -0.9217 -0.0000 +vn 0.2010 -0.9796 -0.0000 +vn 0.1971 0.9796 0.0392 +vn 0.3804 0.9217 0.0757 +vn 0.5490 0.8286 0.1092 +vn 0.6965 0.7041 0.1385 +vn 0.8173 0.5528 0.1626 +vn 0.9070 0.3805 0.1804 +vn 0.9622 0.1939 0.1914 +vn 0.9808 -0.0000 0.1951 +vn 0.9622 -0.1939 0.1914 +vn 0.9070 -0.3805 0.1804 +vn 0.8173 -0.5528 0.1626 +vn 0.6965 -0.7041 0.1385 +vn 0.5490 -0.8286 0.1092 +vn 0.3804 -0.9217 0.0757 +vn 0.1971 -0.9796 0.0392 +vn 0.1857 0.9796 0.0769 +vn 0.3584 0.9217 0.1484 +vn 0.5172 0.8286 0.2142 +vn 0.6561 0.7041 0.2718 +vn 0.7699 0.5528 0.3189 +vn 0.8544 0.3805 0.3539 +vn 0.9063 0.1939 0.3754 +vn 0.9239 -0.0000 0.3827 +vn 0.9063 -0.1939 0.3754 +vn 0.8544 -0.3805 0.3539 +vn 0.7699 -0.5528 0.3189 +vn 0.6561 -0.7041 0.2718 +vn 0.5172 -0.8286 0.2142 +vn 0.3584 -0.9217 0.1484 +vn 0.1857 -0.9796 0.0769 +vn 0.1671 0.9796 0.1117 +vn 0.3225 0.9217 0.2155 +vn 0.4654 0.8286 0.3110 +vn 0.5905 0.7041 0.3945 +vn 0.6929 0.5528 0.4630 +vn 0.7689 0.3805 0.5138 +vn 0.8157 0.1939 0.5450 +vn 0.8315 -0.0000 0.5556 +vn 0.8157 -0.1939 0.5450 +vn 0.7689 -0.3805 0.5138 +vn 0.6929 -0.5528 0.4630 +vn 0.5905 -0.7041 0.3945 +vn 0.4654 -0.8286 0.3110 +vn 0.3225 -0.9217 0.2155 +vn 0.1671 -0.9796 0.1117 +vn 0.1421 0.9796 0.1421 +vn 0.2743 0.9217 0.2743 +vn 0.3958 0.8286 0.3958 +vn 0.5021 0.7041 0.5021 +vn 0.5893 0.5528 0.5893 +vn 0.6539 0.3805 0.6539 +vn 0.6937 0.1939 0.6937 +vn 0.7071 -0.0000 0.7071 +vn 0.6937 -0.1939 0.6937 +vn 0.6539 -0.3805 0.6539 +vn 0.5893 -0.5528 0.5893 +vn 0.5021 -0.7041 0.5021 +vn 0.3958 -0.8286 0.3958 +vn 0.2743 -0.9217 0.2743 +vn 0.1421 -0.9796 0.1421 +vn 0.1117 0.9796 0.1671 +vn 0.2155 0.9217 0.3225 +vn 0.3110 0.8286 0.4654 +vn 0.3945 0.7041 0.5905 +vn 0.4630 0.5528 0.6929 +vn 0.5138 0.3805 0.7689 +vn 0.5450 0.1939 0.8157 +vn 0.5556 -0.0000 0.8315 +vn 0.5450 -0.1939 0.8157 +vn 0.5138 -0.3805 0.7689 +vn 0.4630 -0.5528 0.6929 +vn 0.3945 -0.7041 0.5905 +vn 0.3110 -0.8286 0.4654 +vn 0.2155 -0.9217 0.3225 +vn 0.1117 -0.9796 0.1671 +vn 0.0769 0.9796 0.1857 +vn 0.1484 0.9217 0.3584 +vn 0.2142 0.8286 0.5172 +vn 0.2718 0.7041 0.6561 +vn 0.3189 0.5528 0.7699 +vn 0.3539 0.3805 0.8544 +vn 0.3754 0.1939 0.9063 +vn 0.3827 -0.0000 0.9239 +vn 0.3754 -0.1939 0.9063 +vn 0.3539 -0.3805 0.8544 +vn 0.3189 -0.5528 0.7699 +vn 0.2718 -0.7041 0.6561 +vn 0.2142 -0.8286 0.5172 +vn 0.1484 -0.9217 0.3584 +vn 0.0769 -0.9796 0.1857 +vn 0.0392 0.9796 0.1971 +vn 0.0757 0.9217 0.3804 +vn 0.1092 0.8286 0.5490 +vn 0.1385 0.7041 0.6965 +vn 0.1626 0.5528 0.8173 +vn 0.1804 0.3805 0.9070 +vn 0.1914 0.1939 0.9622 +vn 0.1951 -0.0000 0.9808 +vn 0.1914 -0.1939 0.9622 +vn 0.1804 -0.3805 0.9070 +vn 0.1626 -0.5528 0.8173 +vn 0.1385 -0.7041 0.6965 +vn 0.1092 -0.8286 0.5490 +vn 0.0757 -0.9217 0.3804 +vn 0.0392 -0.9796 0.1971 +vn -0.0000 0.9796 0.2010 +vn -0.0000 0.9217 0.3879 +vn -0.0000 0.8286 0.5598 +vn -0.0000 0.7041 0.7101 +vn -0.0000 0.5528 0.8333 +vn -0.0000 0.3805 0.9248 +vn -0.0000 0.1939 0.9810 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 -0.1939 0.9810 +vn -0.0000 -0.3805 0.9248 +vn -0.0000 -0.5528 0.8333 +vn -0.0000 -0.7041 0.7101 +vn -0.0000 -0.8286 0.5598 +vn -0.0000 -0.9217 0.3879 +vn -0.0000 -0.9796 0.2010 +vn -0.0392 0.9796 0.1971 +vn -0.0757 0.9217 0.3804 +vn -0.1092 0.8286 0.5490 +vn -0.1385 0.7041 0.6965 +vn -0.1626 0.5528 0.8173 +vn -0.1804 0.3805 0.9070 +vn -0.1914 0.1939 0.9622 +vn -0.1951 -0.0000 0.9808 +vn -0.1914 -0.1939 0.9622 +vn -0.1804 -0.3805 0.9070 +vn -0.1626 -0.5528 0.8173 +vn -0.1385 -0.7041 0.6965 +vn -0.1092 -0.8286 0.5490 +vn -0.0757 -0.9217 0.3804 +vn -0.0392 -0.9796 0.1971 +vn -0.0769 0.9796 0.1857 +vn -0.1484 0.9217 0.3584 +vn -0.2142 0.8286 0.5172 +vn -0.2718 0.7041 0.6561 +vn -0.3189 0.5528 0.7699 +vn -0.3539 0.3805 0.8544 +vn -0.3754 0.1939 0.9063 +vn -0.3827 -0.0000 0.9239 +vn -0.3754 -0.1939 0.9063 +vn -0.3539 -0.3805 0.8544 +vn -0.3189 -0.5528 0.7699 +vn -0.2718 -0.7041 0.6561 +vn -0.2142 -0.8286 0.5172 +vn -0.1484 -0.9217 0.3584 +vn -0.0769 -0.9796 0.1857 +vn -0.1117 0.9796 0.1671 +vn -0.2155 0.9217 0.3225 +vn -0.3110 0.8286 0.4654 +vn -0.3945 0.7041 0.5905 +vn -0.4630 0.5528 0.6929 +vn -0.5138 0.3805 0.7689 +vn -0.5450 0.1939 0.8157 +vn -0.5556 -0.0000 0.8315 +vn -0.5450 -0.1939 0.8157 +vn -0.5138 -0.3805 0.7689 +vn -0.4630 -0.5528 0.6929 +vn -0.3945 -0.7041 0.5905 +vn -0.3110 -0.8286 0.4654 +vn -0.2155 -0.9217 0.3225 +vn -0.1117 -0.9796 0.1671 +vn -0.1421 0.9796 0.1421 +vn -0.2743 0.9217 0.2743 +vn -0.3958 0.8286 0.3958 +vn -0.5021 0.7041 0.5021 +vn -0.5893 0.5528 0.5893 +vn -0.6539 0.3805 0.6539 +vn -0.6937 0.1939 0.6937 +vn -0.7071 -0.0000 0.7071 +vn -0.6937 -0.1939 0.6937 +vn -0.6539 -0.3805 0.6539 +vn -0.5893 -0.5528 0.5893 +vn -0.5021 -0.7041 0.5021 +vn -0.3958 -0.8286 0.3958 +vn -0.2743 -0.9217 0.2743 +vn -0.1421 -0.9796 0.1421 +vn -0.0000 -1.0000 -0.0000 +vn -0.1671 0.9796 0.1117 +vn -0.3225 0.9217 0.2155 +vn -0.4654 0.8286 0.3110 +vn -0.5905 0.7041 0.3945 +vn -0.6929 0.5528 0.4630 +vn -0.7689 0.3805 0.5138 +vn -0.8157 0.1939 0.5450 +vn -0.8315 -0.0000 0.5556 +vn -0.8157 -0.1939 0.5450 +vn -0.7689 -0.3805 0.5138 +vn -0.6929 -0.5528 0.4630 +vn -0.5905 -0.7041 0.3945 +vn -0.4654 -0.8286 0.3110 +vn -0.3225 -0.9217 0.2155 +vn -0.1671 -0.9796 0.1117 +vn -0.1857 0.9796 0.0769 +vn -0.3584 0.9217 0.1484 +vn -0.5172 0.8286 0.2142 +vn -0.6561 0.7041 0.2718 +vn -0.7699 0.5528 0.3189 +vn -0.8544 0.3805 0.3539 +vn -0.9063 0.1939 0.3754 +vn -0.9239 -0.0000 0.3827 +vn -0.9063 -0.1939 0.3754 +vn -0.8544 -0.3805 0.3539 +vn -0.7699 -0.5528 0.3189 +vn -0.6561 -0.7041 0.2718 +vn -0.5172 -0.8286 0.2142 +vn -0.3584 -0.9217 0.1484 +vn -0.1857 -0.9796 0.0769 +vn -0.1971 0.9796 0.0392 +vn -0.3804 0.9217 0.0757 +vn -0.5490 0.8286 0.1092 +vn -0.6965 0.7041 0.1385 +vn -0.8173 0.5528 0.1626 +vn -0.9070 0.3805 0.1804 +vn -0.9622 0.1939 0.1914 +vn -0.9808 -0.0000 0.1951 +vn -0.9622 -0.1939 0.1914 +vn -0.9070 -0.3805 0.1804 +vn -0.8173 -0.5528 0.1626 +vn -0.6965 -0.7041 0.1385 +vn -0.5490 -0.8286 0.1092 +vn -0.3804 -0.9217 0.0757 +vn -0.1971 -0.9796 0.0392 +vn -0.2010 0.9796 -0.0000 +vn -0.3879 0.9217 -0.0000 +vn -0.5598 0.8286 -0.0000 +vn -0.7101 0.7041 -0.0000 +vn -0.8333 0.5528 -0.0000 +vn -0.9248 0.3805 -0.0000 +vn -0.9810 0.1939 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vn -0.9810 -0.1939 -0.0000 +vn -0.9248 -0.3805 -0.0000 +vn -0.8333 -0.5528 -0.0000 +vn -0.7101 -0.7041 -0.0000 +vn -0.5598 -0.8286 -0.0000 +vn -0.3879 -0.9217 -0.0000 +vn -0.2010 -0.9796 -0.0000 +vn -0.1971 0.9796 -0.0392 +vn -0.3804 0.9217 -0.0757 +vn -0.5490 0.8286 -0.1092 +vn -0.6965 0.7041 -0.1385 +vn -0.8173 0.5528 -0.1626 +vn -0.9070 0.3805 -0.1804 +vn -0.9622 0.1939 -0.1914 +vn -0.9808 -0.0000 -0.1951 +vn -0.9622 -0.1939 -0.1914 +vn -0.9070 -0.3805 -0.1804 +vn -0.8173 -0.5528 -0.1626 +vn -0.6965 -0.7041 -0.1385 +vn -0.5490 -0.8286 -0.1092 +vn -0.3804 -0.9217 -0.0757 +vn -0.1971 -0.9796 -0.0392 +vn -0.1857 0.9796 -0.0769 +vn -0.3584 0.9217 -0.1484 +vn -0.5172 0.8286 -0.2142 +vn -0.6561 0.7041 -0.2718 +vn -0.7699 0.5528 -0.3189 +vn -0.8544 0.3805 -0.3539 +vn -0.9063 0.1939 -0.3754 +vn -0.9239 -0.0000 -0.3827 +vn -0.9063 -0.1939 -0.3754 +vn -0.8544 -0.3805 -0.3539 +vn -0.7699 -0.5528 -0.3189 +vn -0.6561 -0.7041 -0.2718 +vn -0.5172 -0.8286 -0.2142 +vn -0.3584 -0.9217 -0.1484 +vn -0.1857 -0.9796 -0.0769 +vn -0.1671 0.9796 -0.1117 +vn -0.3225 0.9217 -0.2155 +vn -0.4654 0.8286 -0.3110 +vn -0.5905 0.7041 -0.3945 +vn -0.6929 0.5528 -0.4630 +vn -0.7689 0.3805 -0.5138 +vn -0.8157 0.1939 -0.5450 +vn -0.8315 -0.0000 -0.5556 +vn -0.8157 -0.1939 -0.5450 +vn -0.7689 -0.3805 -0.5138 +vn -0.6929 -0.5528 -0.4630 +vn -0.5905 -0.7041 -0.3945 +vn -0.4654 -0.8286 -0.3110 +vn -0.3225 -0.9217 -0.2155 +vn -0.1671 -0.9796 -0.1117 +vn -0.1421 0.9796 -0.1421 +vn -0.2743 0.9217 -0.2743 +vn -0.3958 0.8286 -0.3958 +vn -0.5021 0.7041 -0.5021 +vn -0.5893 0.5528 -0.5893 +vn -0.6539 0.3805 -0.6539 +vn -0.6937 0.1939 -0.6937 +vn -0.7071 -0.0000 -0.7071 +vn -0.6937 -0.1939 -0.6937 +vn -0.6539 -0.3805 -0.6539 +vn -0.5893 -0.5528 -0.5893 +vn -0.5021 -0.7041 -0.5021 +vn -0.3958 -0.8286 -0.3958 +vn -0.2743 -0.9217 -0.2743 +vn -0.1421 -0.9796 -0.1421 +vn -0.1117 0.9796 -0.1671 +vn -0.2155 0.9217 -0.3225 +vn -0.3110 0.8286 -0.4654 +vn -0.3945 0.7041 -0.5905 +vn -0.4630 0.5528 -0.6929 +vn -0.5138 0.3805 -0.7689 +vn -0.5450 0.1939 -0.8157 +vn -0.5556 -0.0000 -0.8315 +vn -0.5450 -0.1939 -0.8157 +vn -0.5138 -0.3805 -0.7689 +vn -0.4630 -0.5528 -0.6929 +vn -0.3945 -0.7041 -0.5905 +vn -0.3110 -0.8286 -0.4654 +vn -0.2155 -0.9217 -0.3225 +vn -0.1117 -0.9796 -0.1671 +vn -0.0769 0.9796 -0.1857 +vn -0.1484 0.9217 -0.3584 +vn -0.2142 0.8286 -0.5172 +vn -0.2718 0.7041 -0.6561 +vn -0.3189 0.5528 -0.7699 +vn -0.3539 0.3805 -0.8544 +vn -0.3754 0.1939 -0.9063 +vn -0.3827 -0.0000 -0.9239 +vn -0.3754 -0.1939 -0.9063 +vn -0.3539 -0.3805 -0.8544 +vn -0.3189 -0.5528 -0.7699 +vn -0.2718 -0.7041 -0.6561 +vn -0.2142 -0.8286 -0.5172 +vn -0.1484 -0.9217 -0.3584 +vn -0.0769 -0.9796 -0.1857 +vn -0.0392 0.9796 -0.1971 +vn -0.0757 0.9217 -0.3804 +vn -0.1092 0.8286 -0.5490 +vn -0.1385 0.7041 -0.6965 +vn -0.1626 0.5528 -0.8173 +vn -0.1804 0.3805 -0.9070 +vn -0.1914 0.1939 -0.9622 +vn -0.1951 -0.0000 -0.9808 +vn -0.1914 -0.1939 -0.9622 +vn -0.1804 -0.3805 -0.9070 +vn -0.1626 -0.5528 -0.8173 +vn -0.1385 -0.7041 -0.6965 +vn -0.1092 -0.8286 -0.5490 +vn -0.0757 -0.9217 -0.3804 +vn -0.0392 -0.9796 -0.1971 +vn -0.0000 0.9796 -0.2010 +vn -0.0000 0.9217 -0.3879 +vn -0.0000 0.7041 -0.7101 +vn -0.0000 0.3805 -0.9248 +vn -0.0000 -0.3805 -0.9248 +vn -0.0000 -0.7041 -0.7101 +vn -0.0000 -0.8286 -0.5598 +vn -0.0000 -0.9217 -0.3879 +vn -0.0000 -0.9796 -0.2010 +vt 0.750000 0.437500 +vt 0.718750 0.375000 +vt 0.750000 0.375000 +vt 0.750000 0.812500 +vt 0.718750 0.875000 +vt 0.718750 0.812500 +vt 0.718750 0.312500 +vt 0.750000 0.312500 +vt 0.750000 0.750000 +vt 0.718750 0.750000 +vt 0.718750 0.250000 +vt 0.750000 0.250000 +vt 0.750000 0.687500 +vt 0.718750 0.687500 +vt 0.718750 0.187500 +vt 0.750000 0.187500 +vt 0.750000 0.625000 +vt 0.718750 0.625000 +vt 0.718750 0.125000 +vt 0.750000 0.125000 +vt 0.750000 0.562500 +vt 0.718750 0.562500 +vt 0.718750 0.062500 +vt 0.750000 0.062500 +vt 0.718750 0.500000 +vt 0.750000 0.500000 +vt 0.750000 0.937500 +vt 0.734375 1.000000 +vt 0.718750 0.937500 +vt 0.734375 0.000000 +vt 0.718750 0.437500 +vt 0.750000 0.875000 +vt 0.703125 1.000000 +vt 0.687500 0.937500 +vt 0.703125 0.000000 +vt 0.687500 0.062500 +vt 0.687500 0.437500 +vt 0.687500 0.875000 +vt 0.687500 0.375000 +vt 0.687500 0.812500 +vt 0.687500 0.312500 +vt 0.687500 0.750000 +vt 0.687500 0.250000 +vt 0.687500 0.687500 +vt 0.687500 0.187500 +vt 0.687500 0.625000 +vt 0.687500 0.125000 +vt 0.687500 0.562500 +vt 0.687500 0.500000 +vt 0.656250 0.687500 +vt 0.656250 0.250000 +vt 0.656250 0.187500 +vt 0.656250 0.625000 +vt 0.656250 0.125000 +vt 0.656250 0.562500 +vt 0.656250 0.062500 +vt 0.656250 0.500000 +vt 0.671875 1.000000 +vt 0.656250 0.937500 +vt 0.671875 0.000000 +vt 0.656250 0.437500 +vt 0.656250 0.875000 +vt 0.656250 0.375000 +vt 0.656250 0.812500 +vt 0.656250 0.312500 +vt 0.656250 0.750000 +vt 0.625000 0.437500 +vt 0.625000 0.875000 +vt 0.625000 0.375000 +vt 0.625000 0.812500 +vt 0.625000 0.312500 +vt 0.625000 0.750000 +vt 0.625000 0.250000 +vt 0.625000 0.687500 +vt 0.625000 0.187500 +vt 0.625000 0.625000 +vt 0.625000 0.125000 +vt 0.625000 0.562500 +vt 0.625000 0.062500 +vt 0.625000 0.500000 +vt 0.640625 1.000000 +vt 0.625000 0.937500 +vt 0.640625 0.000000 +vt 0.593750 0.187500 +vt 0.593750 0.625000 +vt 0.593750 0.125000 +vt 0.593750 0.562500 +vt 0.593750 0.062500 +vt 0.593750 0.500000 +vt 0.609375 1.000000 +vt 0.593750 0.937500 +vt 0.609375 0.000000 +vt 0.593750 0.437500 +vt 0.593750 0.875000 +vt 0.593750 0.375000 +vt 0.593750 0.812500 +vt 0.593750 0.312500 +vt 0.593750 0.750000 +vt 0.593750 0.250000 +vt 0.593750 0.687500 +vt 0.562500 0.375000 +vt 0.562500 0.812500 +vt 0.562500 0.312500 +vt 0.562500 0.750000 +vt 0.562500 0.250000 +vt 0.562500 0.687500 +vt 0.562500 0.187500 +vt 0.562500 0.625000 +vt 0.562500 0.125000 +vt 0.562500 0.562500 +vt 0.562500 0.062500 +vt 0.562500 0.500000 +vt 0.578125 1.000000 +vt 0.562500 0.937500 +vt 0.578125 0.000000 +vt 0.562500 0.437500 +vt 0.562500 0.875000 +vt 0.531250 0.187500 +vt 0.531250 0.125000 +vt 0.531250 0.625000 +vt 0.531250 0.562500 +vt 0.531250 0.062500 +vt 0.531250 0.500000 +vt 0.546875 1.000000 +vt 0.531250 0.937500 +vt 0.546875 0.000000 +vt 0.531250 0.437500 +vt 0.531250 0.875000 +vt 0.531250 0.375000 +vt 0.531250 0.812500 +vt 0.531250 0.312500 +vt 0.531250 0.750000 +vt 0.531250 0.250000 +vt 0.531250 0.687500 +vt 0.500000 0.812500 +vt 0.500000 0.375000 +vt 0.500000 0.312500 +vt 0.500000 0.750000 +vt 0.500000 0.250000 +vt 0.500000 0.687500 +vt 0.500000 0.187500 +vt 0.500000 0.625000 +vt 0.500000 0.125000 +vt 0.500000 0.562500 +vt 0.500000 0.062500 +vt 0.500000 0.500000 +vt 0.515625 1.000000 +vt 0.500000 0.937500 +vt 0.515625 0.000000 +vt 0.500000 0.437500 +vt 0.500000 0.875000 +vt 0.468750 0.625000 +vt 0.468750 0.562500 +vt 0.468750 0.062500 +vt 0.468750 0.500000 +vt 0.484375 1.000000 +vt 0.468750 0.937500 +vt 0.484375 0.000000 +vt 0.468750 0.437500 +vt 0.468750 0.875000 +vt 0.468750 0.375000 +vt 0.468750 0.812500 +vt 0.468750 0.312500 +vt 0.468750 0.750000 +vt 0.468750 0.250000 +vt 0.468750 0.687500 +vt 0.468750 0.187500 +vt 0.468750 0.125000 +vt 0.437500 0.375000 +vt 0.437500 0.312500 +vt 0.437500 0.750000 +vt 0.437500 0.250000 +vt 0.437500 0.687500 +vt 0.437500 0.187500 +vt 0.437500 0.625000 +vt 0.437500 0.125000 +vt 0.437500 0.562500 +vt 0.437500 0.062500 +vt 0.437500 0.500000 +vt 0.453125 1.000000 +vt 0.437500 0.937500 +vt 0.453125 0.000000 +vt 0.437500 0.437500 +vt 0.437500 0.875000 +vt 0.437500 0.812500 +vt 0.406250 0.062500 +vt 0.406250 0.562500 +vt 0.406250 0.500000 +vt 0.421875 1.000000 +vt 0.406250 0.937500 +vt 0.421875 0.000000 +vt 0.406250 0.437500 +vt 0.406250 0.875000 +vt 0.406250 0.375000 +vt 0.406250 0.812500 +vt 0.406250 0.312500 +vt 0.406250 0.750000 +vt 0.406250 0.250000 +vt 0.406250 0.687500 +vt 0.406250 0.187500 +vt 0.406250 0.625000 +vt 0.406250 0.125000 +vt 0.375000 0.750000 +vt 0.375000 0.250000 +vt 0.375000 0.687500 +vt 0.375000 0.187500 +vt 0.375000 0.625000 +vt 0.375000 0.125000 +vt 0.375000 0.562500 +vt 0.375000 0.062500 +vt 0.375000 0.500000 +vt 0.390625 1.000000 +vt 0.375000 0.937500 +vt 0.390625 0.000000 +vt 0.375000 0.437500 +vt 0.375000 0.875000 +vt 0.375000 0.375000 +vt 0.375000 0.812500 +vt 0.375000 0.312500 +vt 0.343750 0.562500 +vt 0.343750 0.500000 +vt 0.359375 1.000000 +vt 0.343750 0.937500 +vt 0.359375 0.000000 +vt 0.343750 0.062500 +vt 0.343750 0.437500 +vt 0.343750 0.875000 +vt 0.343750 0.375000 +vt 0.343750 0.812500 +vt 0.343750 0.312500 +vt 0.343750 0.750000 +vt 0.343750 0.250000 +vt 0.343750 0.687500 +vt 0.343750 0.187500 +vt 0.343750 0.625000 +vt 0.343750 0.125000 +vt 0.312500 0.250000 +vt 0.312500 0.750000 +vt 0.312500 0.687500 +vt 0.312500 0.187500 +vt 0.312500 0.625000 +vt 0.312500 0.125000 +vt 0.312500 0.562500 +vt 0.312500 0.062500 +vt 0.312500 0.500000 +vt 0.328125 1.000000 +vt 0.312500 0.937500 +vt 0.328125 0.000000 +vt 0.312500 0.437500 +vt 0.312500 0.875000 +vt 0.312500 0.375000 +vt 0.312500 0.812500 +vt 0.312500 0.312500 +vt 0.296875 0.000000 +vt 0.281250 0.062500 +vt 0.281250 0.437500 +vt 0.281250 0.875000 +vt 0.281250 0.375000 +vt 0.281250 0.812500 +vt 0.281250 0.312500 +vt 0.281250 0.750000 +vt 0.281250 0.250000 +vt 0.281250 0.687500 +vt 0.281250 0.187500 +vt 0.281250 0.625000 +vt 0.281250 0.125000 +vt 0.281250 0.562500 +vt 0.281250 0.500000 +vt 0.296875 1.000000 +vt 0.281250 0.937500 +vt 0.250000 0.250000 +vt 0.250000 0.187500 +vt 0.250000 0.625000 +vt 0.250000 0.125000 +vt 0.250000 0.562500 +vt 0.250000 0.062500 +vt 0.250000 0.500000 +vt 0.265625 1.000000 +vt 0.250000 0.937500 +vt 0.265625 0.000000 +vt 0.250000 0.437500 +vt 0.250000 0.875000 +vt 0.250000 0.375000 +vt 0.250000 0.812500 +vt 0.250000 0.312500 +vt 0.250000 0.750000 +vt 0.250000 0.687500 +vt 0.218750 0.875000 +vt 0.218750 0.375000 +vt 0.218750 0.812500 +vt 0.218750 0.312500 +vt 0.218750 0.750000 +vt 0.218750 0.250000 +vt 0.218750 0.687500 +vt 0.218750 0.187500 +vt 0.218750 0.625000 +vt 0.218750 0.125000 +vt 0.218750 0.562500 +vt 0.218750 0.062500 +vt 0.218750 0.500000 +vt 0.234375 1.000000 +vt 0.218750 0.937500 +vt 0.234375 0.000000 +vt 0.218750 0.437500 +vt 0.187500 0.625000 +vt 0.187500 0.125000 +vt 0.187500 0.562500 +vt 0.187500 0.062500 +vt 0.187500 0.500000 +vt 0.203125 1.000000 +vt 0.187500 0.937500 +vt 0.203125 0.000000 +vt 0.187500 0.437500 +vt 0.187500 0.875000 +vt 0.187500 0.375000 +vt 0.187500 0.812500 +vt 0.187500 0.312500 +vt 0.187500 0.750000 +vt 0.187500 0.250000 +vt 0.187500 0.687500 +vt 0.187500 0.187500 +vt 0.156250 0.375000 +vt 0.156250 0.812500 +vt 0.156250 0.312500 +vt 0.156250 0.750000 +vt 0.156250 0.250000 +vt 0.156250 0.687500 +vt 0.156250 0.187500 +vt 0.156250 0.625000 +vt 0.156250 0.125000 +vt 0.156250 0.562500 +vt 0.156250 0.062500 +vt 0.156250 0.500000 +vt 0.171875 1.000000 +vt 0.156250 0.937500 +vt 0.171875 0.000000 +vt 0.156250 0.437500 +vt 0.156250 0.875000 +vt 0.125000 0.125000 +vt 0.125000 0.625000 +vt 0.125000 0.562500 +vt 0.125000 0.062500 +vt 0.125000 0.500000 +vt 0.140625 1.000000 +vt 0.125000 0.937500 +vt 0.140625 0.000000 +vt 0.125000 0.437500 +vt 0.125000 0.875000 +vt 0.125000 0.375000 +vt 0.125000 0.812500 +vt 0.125000 0.312500 +vt 0.125000 0.750000 +vt 0.125000 0.250000 +vt 0.125000 0.687500 +vt 0.125000 0.187500 +vt 0.093750 0.812500 +vt 0.093750 0.375000 +vt 0.093750 0.312500 +vt 0.093750 0.750000 +vt 0.093750 0.250000 +vt 0.093750 0.687500 +vt 0.093750 0.187500 +vt 0.093750 0.625000 +vt 0.093750 0.125000 +vt 0.093750 0.562500 +vt 0.093750 0.062500 +vt 0.093750 0.500000 +vt 0.109375 1.000000 +vt 0.093750 0.937500 +vt 0.109375 0.000000 +vt 0.093750 0.437500 +vt 0.093750 0.875000 +vt 0.062500 0.625000 +vt 0.062500 0.562500 +vt 0.062500 0.062500 +vt 0.062500 0.500000 +vt 0.078125 1.000000 +vt 0.062500 0.937500 +vt 0.078125 0.000000 +vt 0.062500 0.437500 +vt 0.062500 0.875000 +vt 0.062500 0.375000 +vt 0.062500 0.812500 +vt 0.062500 0.312500 +vt 0.062500 0.750000 +vt 0.062500 0.250000 +vt 0.062500 0.687500 +vt 0.062500 0.187500 +vt 0.062500 0.125000 +vt 0.031250 0.375000 +vt 0.031250 0.312500 +vt 0.031250 0.750000 +vt 0.031250 0.250000 +vt 0.031250 0.687500 +vt 0.031250 0.187500 +vt 0.031250 0.625000 +vt 0.031250 0.125000 +vt 0.031250 0.562500 +vt 0.031250 0.062500 +vt 0.031250 0.500000 +vt 0.046875 1.000000 +vt 0.031250 0.937500 +vt 0.046875 0.000000 +vt 0.031250 0.437500 +vt 0.031250 0.875000 +vt 0.031250 0.812500 +vt 0.000000 0.062500 +vt 0.000000 0.562500 +vt 0.000000 0.500000 +vt 0.015625 1.000000 +vt 0.000000 0.937500 +vt 0.015625 0.000000 +vt 0.000000 0.437500 +vt 0.000000 0.875000 +vt 0.000000 0.375000 +vt 0.000000 0.812500 +vt 0.000000 0.312500 +vt 0.000000 0.750000 +vt 0.000000 0.250000 +vt 0.000000 0.687500 +vt 0.000000 0.187500 +vt 0.000000 0.625000 +vt 0.000000 0.125000 +vt 1.000000 0.312500 +vt 0.968750 0.250000 +vt 1.000000 0.250000 +vt 1.000000 0.687500 +vt 0.968750 0.750000 +vt 0.968750 0.687500 +vt 1.000000 0.187500 +vt 0.968750 0.187500 +vt 0.968750 0.625000 +vt 1.000000 0.625000 +vt 0.968750 0.125000 +vt 1.000000 0.125000 +vt 1.000000 0.562500 +vt 0.968750 0.562500 +vt 0.968750 0.062500 +vt 1.000000 0.062500 +vt 1.000000 0.500000 +vt 0.968750 0.500000 +vt 1.000000 0.937500 +vt 0.984375 1.000000 +vt 0.968750 0.937500 +vt 0.984375 0.000000 +vt 0.968750 0.437500 +vt 1.000000 0.437500 +vt 0.968750 0.875000 +vt 1.000000 0.875000 +vt 0.968750 0.375000 +vt 1.000000 0.375000 +vt 1.000000 0.812500 +vt 0.968750 0.812500 +vt 0.968750 0.312500 +vt 1.000000 0.750000 +vt 0.953125 1.000000 +vt 0.937500 0.937500 +vt 0.953125 0.000000 +vt 0.937500 0.062500 +vt 0.937500 0.437500 +vt 0.937500 0.875000 +vt 0.937500 0.375000 +vt 0.937500 0.812500 +vt 0.937500 0.312500 +vt 0.937500 0.750000 +vt 0.937500 0.250000 +vt 0.937500 0.687500 +vt 0.937500 0.187500 +vt 0.937500 0.625000 +vt 0.937500 0.125000 +vt 0.937500 0.562500 +vt 0.937500 0.500000 +vt 0.906250 0.750000 +vt 0.906250 0.687500 +vt 0.906250 0.250000 +vt 0.906250 0.187500 +vt 0.906250 0.625000 +vt 0.906250 0.125000 +vt 0.906250 0.562500 +vt 0.906250 0.062500 +vt 0.906250 0.500000 +vt 0.921875 1.000000 +vt 0.906250 0.937500 +vt 0.921875 0.000000 +vt 0.906250 0.437500 +vt 0.906250 0.875000 +vt 0.906250 0.375000 +vt 0.906250 0.812500 +vt 0.906250 0.312500 +vt 0.875000 0.437500 +vt 0.875000 0.875000 +vt 0.875000 0.375000 +vt 0.875000 0.812500 +vt 0.875000 0.312500 +vt 0.875000 0.750000 +vt 0.875000 0.250000 +vt 0.875000 0.687500 +vt 0.875000 0.187500 +vt 0.875000 0.625000 +vt 0.875000 0.125000 +vt 0.875000 0.562500 +vt 0.875000 0.062500 +vt 0.875000 0.500000 +vt 0.890625 1.000000 +vt 0.875000 0.937500 +vt 0.890625 0.000000 +vt 0.843750 0.250000 +vt 0.843750 0.187500 +vt 0.843750 0.625000 +vt 0.843750 0.125000 +vt 0.843750 0.562500 +vt 0.843750 0.062500 +vt 0.843750 0.500000 +vt 0.859375 1.000000 +vt 0.843750 0.937500 +vt 0.859375 0.000000 +vt 0.843750 0.437500 +vt 0.843750 0.875000 +vt 0.843750 0.375000 +vt 0.843750 0.812500 +vt 0.843750 0.312500 +vt 0.843750 0.750000 +vt 0.843750 0.687500 +vt 0.812500 0.937500 +vt 0.812500 0.875000 +vt 0.812500 0.375000 +vt 0.812500 0.812500 +vt 0.812500 0.312500 +vt 0.812500 0.750000 +vt 0.812500 0.250000 +vt 0.812500 0.687500 +vt 0.812500 0.187500 +vt 0.812500 0.625000 +vt 0.812500 0.125000 +vt 0.812500 0.562500 +vt 0.812500 0.062500 +vt 0.812500 0.500000 +vt 0.828125 1.000000 +vt 0.828125 0.000000 +vt 0.812500 0.437500 +vt 0.781250 0.625000 +vt 0.781250 0.125000 +vt 0.781250 0.562500 +vt 0.781250 0.062500 +vt 0.781250 0.500000 +vt 0.796875 1.000000 +vt 0.781250 0.937500 +vt 0.796875 0.000000 +vt 0.781250 0.437500 +vt 0.781250 0.875000 +vt 0.781250 0.375000 +vt 0.781250 0.812500 +vt 0.781250 0.312500 +vt 0.781250 0.750000 +vt 0.781250 0.250000 +vt 0.781250 0.687500 +vt 0.781250 0.187500 +vt 0.765625 1.000000 +vt 0.765625 0.000000 +s 1 +f 5/1/5 16/2/16 478/3/478 +f 1/4/1 8/5/8 9/6/9 +f 478/3/478 17/7/17 6/8/6 +f 476/9/476 9/6/9 10/10/10 +f 6/8/6 18/11/18 479/12/479 +f 2/13/2 10/10/10 11/14/11 +f 479/12/479 19/15/19 480/16/480 +f 477/17/477 11/14/11 12/18/12 +f 480/16/480 20/19/20 481/20/481 +f 3/21/3 12/18/12 13/22/13 +f 481/20/481 21/23/21 482/24/482 +f 3/21/3 14/25/14 4/26/4 +f 474/27/474 82/28/82 7/29/7 +f 308/30/308 482/24/482 21/23/21 +f 4/26/4 15/31/15 5/1/5 +f 475/32/475 7/29/7 8/5/8 +f 7/29/7 82/33/82 22/34/22 +f 308/35/308 21/23/21 36/36/36 +f 14/25/14 30/37/30 15/31/15 +f 7/29/7 23/38/23 8/5/8 +f 15/31/15 31/39/31 16/2/16 +f 8/5/8 24/40/24 9/6/9 +f 16/2/16 32/41/32 17/7/17 +f 9/6/9 25/42/25 10/10/10 +f 17/7/17 33/43/33 18/11/18 +f 10/10/10 26/44/26 11/14/11 +f 19/15/19 33/43/33 34/45/34 +f 11/14/11 27/46/27 12/18/12 +f 20/19/20 34/45/34 35/47/35 +f 13/22/13 27/46/27 28/48/28 +f 20/19/20 36/36/36 21/23/21 +f 13/22/13 29/49/29 14/25/14 +f 25/42/25 41/50/41 26/44/26 +f 34/45/34 48/51/48 49/52/49 +f 26/44/26 42/53/42 27/46/27 +f 34/45/34 50/54/50 35/47/35 +f 27/46/27 43/55/43 28/48/28 +f 35/47/35 51/56/51 36/36/36 +f 28/48/28 44/57/44 29/49/29 +f 22/34/22 82/58/82 37/59/37 +f 308/60/308 36/36/36 51/56/51 +f 30/37/30 44/57/44 45/61/45 +f 22/34/22 38/62/38 23/38/23 +f 30/37/30 46/63/46 31/39/31 +f 23/38/23 39/64/39 24/40/24 +f 32/41/32 46/63/46 47/65/47 +f 24/40/24 40/66/40 25/42/25 +f 33/43/33 47/65/47 48/51/48 +f 44/57/44 60/67/60 45/61/45 +f 37/59/37 53/68/53 38/62/38 +f 45/61/45 61/69/61 46/63/46 +f 38/62/38 54/70/54 39/64/39 +f 47/65/47 61/69/61 62/71/62 +f 39/64/39 55/72/55 40/66/40 +f 47/65/47 63/73/63 48/51/48 +f 40/66/40 56/74/56 41/50/41 +f 48/51/48 64/75/64 49/52/49 +f 41/50/41 57/76/57 42/53/42 +f 49/52/49 65/77/65 50/54/50 +f 43/55/43 57/76/57 58/78/58 +f 50/54/50 66/79/66 51/56/51 +f 44/57/44 58/78/58 59/80/59 +f 37/59/37 82/81/82 52/82/52 +f 308/83/308 51/56/51 66/79/66 +f 63/73/63 79/84/79 64/75/64 +f 56/74/56 72/85/72 57/76/57 +f 65/77/65 79/84/79 80/86/80 +f 58/78/58 72/85/72 73/87/73 +f 65/77/65 81/88/81 66/79/66 +f 59/80/59 73/87/73 74/89/74 +f 52/82/52 82/90/82 67/91/67 +f 308/92/308 66/79/66 81/88/81 +f 59/80/59 75/93/75 60/67/60 +f 52/82/52 68/94/68 53/68/53 +f 60/67/60 76/95/76 61/69/61 +f 53/68/53 69/96/69 54/70/54 +f 62/71/62 76/95/76 77/97/77 +f 54/70/54 70/98/70 55/72/55 +f 62/71/62 78/99/78 63/73/63 +f 56/74/56 70/98/70 71/100/71 +f 75/93/75 92/101/92 76/95/76 +f 68/94/68 85/102/85 69/96/69 +f 77/97/77 92/101/92 93/103/93 +f 69/96/69 86/104/86 70/98/70 +f 77/97/77 94/105/94 78/99/78 +f 71/100/71 86/104/86 87/106/87 +f 78/99/78 95/107/95 79/84/79 +f 71/100/71 88/108/88 72/85/72 +f 79/84/79 96/109/96 80/86/80 +f 73/87/73 88/108/88 89/110/89 +f 81/88/81 96/109/96 97/111/97 +f 74/89/74 89/110/89 90/112/90 +f 67/91/67 82/113/82 83/114/83 +f 308/115/308 81/88/81 97/111/97 +f 74/89/74 91/116/91 75/93/75 +f 67/91/67 84/117/84 68/94/68 +f 96/109/96 110/118/110 111/119/111 +f 89/110/89 103/120/103 104/121/104 +f 96/109/96 112/122/112 97/111/97 +f 90/112/90 104/121/104 105/123/105 +f 83/114/83 82/124/82 98/125/98 +f 308/126/308 97/111/97 112/122/112 +f 90/112/90 106/127/106 91/116/91 +f 84/117/84 98/125/98 99/128/99 +f 91/116/91 107/129/107 92/101/92 +f 84/117/84 100/130/100 85/102/85 +f 93/103/93 107/129/107 108/131/108 +f 85/102/85 101/132/101 86/104/86 +f 93/103/93 109/133/109 94/105/94 +f 87/106/87 101/132/101 102/134/102 +f 95/107/95 109/133/109 110/118/110 +f 87/106/87 103/120/103 88/108/88 +f 99/128/99 115/135/115 100/130/100 +f 108/131/108 122/136/122 123/137/123 +f 100/130/100 116/138/116 101/132/101 +f 108/131/108 124/139/124 109/133/109 +f 102/134/102 116/138/116 117/140/117 +f 110/118/110 124/139/124 125/141/125 +f 102/134/102 118/142/118 103/120/103 +f 110/118/110 126/143/126 111/119/111 +f 104/121/104 118/142/118 119/144/119 +f 111/119/111 127/145/127 112/122/112 +f 105/123/105 119/144/119 120/146/120 +f 98/125/98 82/147/82 113/148/113 +f 308/149/308 112/122/112 127/145/127 +f 105/123/105 121/150/121 106/127/106 +f 99/128/99 113/148/113 114/151/114 +f 106/127/106 122/136/122 107/129/107 +f 119/144/119 133/152/133 134/153/134 +f 126/143/126 142/154/142 127/145/127 +f 120/146/120 134/153/134 135/155/135 +f 113/148/113 82/156/82 128/157/128 +f 308/158/308 127/145/127 142/154/142 +f 120/146/120 136/159/136 121/150/121 +f 113/148/113 129/160/129 114/151/114 +f 121/150/121 137/161/137 122/136/122 +f 114/151/114 130/162/130 115/135/115 +f 123/137/123 137/161/137 138/163/138 +f 115/135/115 131/164/131 116/138/116 +f 123/137/123 139/165/139 124/139/124 +f 117/140/117 131/164/131 132/166/132 +f 125/141/125 139/165/139 140/167/140 +f 117/140/117 133/152/133 118/142/118 +f 125/141/125 141/168/141 126/143/126 +f 138/163/138 152/169/152 153/170/153 +f 130/162/130 146/171/146 131/164/131 +f 138/163/138 154/172/154 139/165/139 +f 132/166/132 146/171/146 147/173/147 +f 140/167/140 154/172/154 155/174/155 +f 132/166/132 148/175/148 133/152/133 +f 140/167/140 156/176/156 141/168/141 +f 134/153/134 148/175/148 149/177/149 +f 142/154/142 156/176/156 157/178/157 +f 135/155/135 149/177/149 150/179/150 +f 128/157/128 82/180/82 143/181/143 +f 308/182/308 142/154/142 157/178/157 +f 135/155/135 151/183/151 136/159/136 +f 128/157/128 144/184/144 129/160/129 +f 136/159/136 152/169/152 137/161/137 +f 130/162/130 144/184/144 145/185/145 +f 156/176/156 172/186/172 157/178/157 +f 150/179/150 164/187/164 165/188/165 +f 143/181/143 82/189/82 158/190/158 +f 308/191/308 157/178/157 172/186/172 +f 150/179/150 166/192/166 151/183/151 +f 143/181/143 159/193/159 144/184/144 +f 151/183/151 167/194/167 152/169/152 +f 145/185/145 159/193/159 160/195/160 +f 153/170/153 167/194/167 168/196/168 +f 145/185/145 161/197/161 146/171/146 +f 153/170/153 169/198/169 154/172/154 +f 147/173/147 161/197/161 162/199/162 +f 155/174/155 169/198/169 170/200/170 +f 147/173/147 163/201/163 148/175/148 +f 155/174/155 171/202/171 156/176/156 +f 149/177/149 163/201/163 164/187/164 +f 160/195/160 176/203/176 161/197/161 +f 168/196/168 184/204/184 169/198/169 +f 162/199/162 176/203/176 177/205/177 +f 169/198/169 185/206/185 170/200/170 +f 162/199/162 178/207/178 163/201/163 +f 171/202/171 185/206/185 186/208/186 +f 164/187/164 178/207/178 179/209/179 +f 172/186/172 186/208/186 187/210/187 +f 165/188/165 179/209/179 180/211/180 +f 158/190/158 82/212/82 173/213/173 +f 308/214/308 172/186/172 187/210/187 +f 165/188/165 181/215/181 166/192/166 +f 158/190/158 174/216/174 159/193/159 +f 166/192/166 182/217/182 167/194/167 +f 159/193/159 175/218/175 160/195/160 +f 168/196/168 182/217/182 183/219/183 +f 180/211/180 194/220/194 195/221/195 +f 173/213/173 82/222/82 188/223/188 +f 308/224/308 187/210/187 202/225/202 +f 180/211/180 196/226/196 181/215/181 +f 174/216/174 188/223/188 189/227/189 +f 181/215/181 197/228/197 182/217/182 +f 175/218/175 189/227/189 190/229/190 +f 183/219/183 197/228/197 198/230/198 +f 175/218/175 191/231/191 176/203/176 +f 183/219/183 199/232/199 184/204/184 +f 177/205/177 191/231/191 192/233/192 +f 185/206/185 199/232/199 200/234/200 +f 177/205/177 193/235/193 178/207/178 +f 185/206/185 201/236/201 186/208/186 +f 179/209/179 193/235/193 194/220/194 +f 186/208/186 202/225/202 187/210/187 +f 198/230/198 214/237/214 199/232/199 +f 192/233/192 206/238/206 207/239/207 +f 200/234/200 214/237/214 215/240/215 +f 192/233/192 208/241/208 193/235/193 +f 200/234/200 216/242/216 201/236/201 +f 194/220/194 208/241/208 209/243/209 +f 201/236/201 217/244/217 202/225/202 +f 195/221/195 209/243/209 210/245/210 +f 188/223/188 82/246/82 203/247/203 +f 308/248/308 202/225/202 217/244/217 +f 195/221/195 211/249/211 196/226/196 +f 188/223/188 204/250/204 189/227/189 +f 196/226/196 212/251/212 197/228/197 +f 189/227/189 205/252/205 190/229/190 +f 198/230/198 212/251/212 213/253/213 +f 190/229/190 206/238/206 191/231/191 +f 308/254/308 217/244/217 232/255/232 +f 210/245/210 226/256/226 211/249/211 +f 203/247/203 219/257/219 204/250/204 +f 211/249/211 227/258/227 212/251/212 +f 204/250/204 220/259/220 205/252/205 +f 213/253/213 227/258/227 228/260/228 +f 205/252/205 221/261/221 206/238/206 +f 213/253/213 229/262/229 214/237/214 +f 207/239/207 221/261/221 222/263/222 +f 215/240/215 229/262/229 230/264/230 +f 207/239/207 223/265/223 208/241/208 +f 215/240/215 231/266/231 216/242/216 +f 209/243/209 223/265/223 224/267/224 +f 216/242/216 232/255/232 217/244/217 +f 210/245/210 224/267/224 225/268/225 +f 203/247/203 82/269/82 218/270/218 +f 230/264/230 244/271/244 245/272/245 +f 222/263/222 238/273/238 223/265/223 +f 230/264/230 246/274/246 231/266/231 +f 224/267/224 238/273/238 239/275/239 +f 232/255/232 246/274/246 247/276/247 +f 225/268/225 239/275/239 240/277/240 +f 218/270/218 82/278/82 233/279/233 +f 308/280/308 232/255/232 247/276/247 +f 225/268/225 241/281/241 226/256/226 +f 218/270/218 234/282/234 219/257/219 +f 226/256/226 242/283/242 227/258/227 +f 220/259/220 234/282/234 235/284/235 +f 228/260/228 242/283/242 243/285/243 +f 220/259/220 236/286/236 221/261/221 +f 228/260/228 244/271/244 229/262/229 +f 222/263/222 236/286/236 237/287/237 +f 233/279/233 249/288/249 234/282/234 +f 241/281/241 257/289/257 242/283/242 +f 234/282/234 250/290/250 235/284/235 +f 243/285/243 257/289/257 258/291/258 +f 235/284/235 251/292/251 236/286/236 +f 243/285/243 259/293/259 244/271/244 +f 237/287/237 251/292/251 252/294/252 +f 245/272/245 259/293/259 260/295/260 +f 237/287/237 253/296/253 238/273/238 +f 245/272/245 261/297/261 246/274/246 +f 239/275/239 253/296/253 254/298/254 +f 246/274/246 262/299/262 247/276/247 +f 240/277/240 254/298/254 255/300/255 +f 233/279/233 82/301/82 248/302/248 +f 308/303/308 247/276/247 262/299/262 +f 240/277/240 256/304/256 241/281/241 +f 252/294/252 268/305/268 253/296/253 +f 260/295/260 276/306/276 261/297/261 +f 254/298/254 268/305/268 269/307/269 +f 261/297/261 277/308/277 262/299/262 +f 255/300/255 269/307/269 270/309/270 +f 248/302/248 82/310/82 263/311/263 +f 308/312/308 262/299/262 277/308/277 +f 255/300/255 271/313/271 256/304/256 +f 249/288/249 263/311/263 264/314/264 +f 256/304/256 272/315/272 257/289/257 +f 249/288/249 265/316/265 250/290/250 +f 258/291/258 272/315/272 273/317/273 +f 250/290/250 266/318/266 251/292/251 +f 258/291/258 274/319/274 259/293/259 +f 252/294/252 266/318/266 267/320/267 +f 260/295/260 274/319/274 275/321/275 +f 271/313/271 287/322/287 272/315/272 +f 264/314/264 280/323/280 265/316/265 +f 273/317/273 287/322/287 288/324/288 +f 265/316/265 281/325/281 266/318/266 +f 273/317/273 289/326/289 274/319/274 +f 267/320/267 281/325/281 282/327/282 +f 275/321/275 289/326/289 290/328/290 +f 267/320/267 283/329/283 268/305/268 +f 275/321/275 291/330/291 276/306/276 +f 269/307/269 283/329/283 284/331/284 +f 277/308/277 291/330/291 292/332/292 +f 270/309/270 284/331/284 285/333/285 +f 263/311/263 82/334/82 278/335/278 +f 308/336/308 277/308/277 292/332/292 +f 270/309/270 286/337/286 271/313/271 +f 264/314/264 278/335/278 279/338/279 +f 290/328/290 306/339/306 291/330/291 +f 284/331/284 298/340/298 299/341/299 +f 292/332/292 306/339/306 307/342/307 +f 285/333/285 299/341/299 300/343/300 +f 278/335/278 82/344/82 293/345/293 +f 308/346/308 292/332/292 307/342/307 +f 285/333/285 301/347/301 286/337/286 +f 278/335/278 294/348/294 279/338/279 +f 286/337/286 302/349/302 287/322/287 +f 279/338/279 295/350/295 280/323/280 +f 288/324/288 302/349/302 303/351/303 +f 280/323/280 296/352/296 281/325/281 +f 288/324/288 304/353/304 289/326/289 +f 282/327/282 296/352/296 297/354/297 +f 290/328/290 304/353/304 305/355/305 +f 282/327/282 298/340/298 283/329/283 +f 294/348/294 311/356/311 295/350/295 +f 303/351/303 318/357/318 319/358/319 +f 295/350/295 312/359/312 296/352/296 +f 303/351/303 320/360/320 304/353/304 +f 297/354/297 312/359/312 313/361/313 +f 305/355/305 320/360/320 321/362/321 +f 297/354/297 314/363/314 298/340/298 +f 305/355/305 322/364/322 306/339/306 +f 299/341/299 314/363/314 315/365/315 +f 306/339/306 323/366/323 307/342/307 +f 300/343/300 315/365/315 316/367/316 +f 293/345/293 82/368/82 309/369/309 +f 308/370/308 307/342/307 323/366/323 +f 300/343/300 317/371/317 301/347/301 +f 293/345/293 310/372/310 294/348/294 +f 301/347/301 318/357/318 302/349/302 +f 315/365/315 329/373/329 330/374/330 +f 322/364/322 338/375/338 323/366/323 +f 316/367/316 330/374/330 331/376/331 +f 309/369/309 82/377/82 324/378/324 +f 308/379/308 323/366/323 338/375/338 +f 316/367/316 332/380/332 317/371/317 +f 309/369/309 325/381/325 310/372/310 +f 317/371/317 333/382/333 318/357/318 +f 310/372/310 326/383/326 311/356/311 +f 319/358/319 333/382/333 334/384/334 +f 311/356/311 327/385/327 312/359/312 +f 319/358/319 335/386/335 320/360/320 +f 312/359/312 328/387/328 313/361/313 +f 321/362/321 335/386/335 336/388/336 +f 313/361/313 329/373/329 314/363/314 +f 321/362/321 337/389/337 322/364/322 +f 334/384/334 348/390/348 349/391/349 +f 326/383/326 342/392/342 327/385/327 +f 334/384/334 350/393/350 335/386/335 +f 328/387/328 342/392/342 343/394/343 +f 336/388/336 350/393/350 351/395/351 +f 328/387/328 344/396/344 329/373/329 +f 336/388/336 352/397/352 337/389/337 +f 330/374/330 344/396/344 345/398/345 +f 337/389/337 353/399/353 338/375/338 +f 331/376/331 345/398/345 346/400/346 +f 324/378/324 82/401/82 339/402/339 +f 308/403/308 338/375/338 353/399/353 +f 331/376/331 347/404/347 332/380/332 +f 324/378/324 340/405/340 325/381/325 +f 332/380/332 348/390/348 333/382/333 +f 325/381/325 341/406/341 326/383/326 +f 352/397/352 368/407/368 353/399/353 +f 346/400/346 360/408/360 361/409/361 +f 339/402/339 82/410/82 354/411/354 +f 308/412/308 353/399/353 368/407/368 +f 346/400/346 362/413/362 347/404/347 +f 339/402/339 355/414/355 340/405/340 +f 347/404/347 363/415/363 348/390/348 +f 341/406/341 355/414/355 356/416/356 +f 349/391/349 363/415/363 364/417/364 +f 341/406/341 357/418/357 342/392/342 +f 349/391/349 365/419/365 350/393/350 +f 343/394/343 357/418/357 358/420/358 +f 351/395/351 365/419/365 366/421/366 +f 343/394/343 359/422/359 344/396/344 +f 351/395/351 367/423/367 352/397/352 +f 345/398/345 359/422/359 360/408/360 +f 364/424/364 380/425/380 365/426/365 +f 358/427/358 372/428/372 373/429/373 +f 366/430/366 380/425/380 381/431/381 +f 358/427/358 374/432/374 359/433/359 +f 366/430/366 382/434/382 367/435/367 +f 360/436/360 374/432/374 375/437/375 +f 367/435/367 383/438/383 368/439/368 +f 361/440/361 375/437/375 376/441/376 +f 354/442/354 82/443/82 369/444/369 +f 308/445/308 368/439/368 383/438/383 +f 361/440/361 377/446/377 362/447/362 +f 354/442/354 370/448/370 355/449/355 +f 362/447/362 378/450/378 363/451/363 +f 356/452/356 370/448/370 371/453/371 +f 364/424/364 378/450/378 379/454/379 +f 356/452/356 372/428/372 357/455/357 +f 369/444/369 82/456/82 384/457/384 +f 308/458/308 383/438/383 398/459/398 +f 376/441/376 392/460/392 377/446/377 +f 369/444/369 385/461/385 370/448/370 +f 377/446/377 393/462/393 378/450/378 +f 371/453/371 385/461/385 386/463/386 +f 379/454/379 393/462/393 394/464/394 +f 371/453/371 387/465/387 372/428/372 +f 379/454/379 395/466/395 380/425/380 +f 373/429/373 387/465/387 388/467/388 +f 381/431/381 395/466/395 396/468/396 +f 373/429/373 389/469/389 374/432/374 +f 381/431/381 397/470/397 382/434/382 +f 375/437/375 389/469/389 390/471/390 +f 382/434/382 398/459/398 383/438/383 +f 376/441/376 390/471/390 391/472/391 +f 388/467/388 402/473/402 403/474/403 +f 396/468/396 410/475/410 411/476/411 +f 388/467/388 404/477/404 389/469/389 +f 397/470/397 411/476/411 412/478/412 +f 390/471/390 404/477/404 405/479/405 +f 397/470/397 413/480/413 398/459/398 +f 391/472/391 405/479/405 406/481/406 +f 384/457/384 82/482/82 399/483/399 +f 308/484/308 398/459/398 413/480/413 +f 391/472/391 407/485/407 392/460/392 +f 385/461/385 399/483/399 400/486/400 +f 392/460/392 408/487/408 393/462/393 +f 385/461/385 401/488/401 386/463/386 +f 394/464/394 408/487/408 409/489/409 +f 386/463/386 402/473/402 387/465/387 +f 394/464/394 410/475/410 395/466/395 +f 406/481/406 422/490/422 407/485/407 +f 399/483/399 415/491/415 400/486/400 +f 407/485/407 423/492/423 408/487/408 +f 401/488/401 415/491/415 416/493/416 +f 409/489/409 423/492/423 424/494/424 +f 401/488/401 417/495/417 402/473/402 +f 409/489/409 425/496/425 410/475/410 +f 403/474/403 417/495/417 418/497/418 +f 411/476/411 425/496/425 426/498/426 +f 403/474/403 419/499/419 404/477/404 +f 411/476/411 427/500/427 412/478/412 +f 405/479/405 419/499/419 420/501/420 +f 412/478/412 428/502/428 413/480/413 +f 406/481/406 420/501/420 421/503/421 +f 399/483/399 82/504/82 414/505/414 +f 308/506/308 413/480/413 428/502/428 +f 426/498/426 440/507/440 441/508/441 +f 418/497/418 434/509/434 419/499/419 +f 426/498/426 442/510/442 427/500/427 +f 420/501/420 434/509/434 435/511/435 +f 427/500/427 443/512/443 428/502/428 +f 421/503/421 435/511/435 436/513/436 +f 414/505/414 82/514/82 429/515/429 +f 308/516/308 428/502/428 443/512/443 +f 421/503/421 437/517/437 422/490/422 +f 414/505/414 430/518/430 415/491/415 +f 422/490/422 438/519/438 423/492/423 +f 416/493/416 430/518/430 431/520/431 +f 424/494/424 438/519/438 439/521/439 +f 416/493/416 432/522/432 417/495/417 +f 424/494/424 440/507/440 425/496/425 +f 418/497/418 432/522/432 433/523/433 +f 430/518/430 444/524/444 445/525/445 +f 437/517/437 453/526/453 438/519/438 +f 430/518/430 446/527/446 431/520/431 +f 439/521/439 453/526/453 454/528/454 +f 431/520/431 447/529/447 432/522/432 +f 439/521/439 455/530/455 440/507/440 +f 433/523/433 447/529/447 448/531/448 +f 441/508/441 455/530/455 456/532/456 +f 433/523/433 449/533/449 434/509/434 +f 441/508/441 457/534/457 442/510/442 +f 435/511/435 449/533/449 450/535/450 +f 442/510/442 458/536/458 443/512/443 +f 436/513/436 450/535/450 451/537/451 +f 429/515/429 82/538/82 444/524/444 +f 308/539/308 443/512/443 458/536/458 +f 436/513/436 452/540/452 437/517/437 +f 448/531/448 464/541/464 449/533/449 +f 456/532/456 472/542/472 457/534/457 +f 450/535/450 464/541/464 465/543/465 +f 458/536/458 472/542/472 473/544/473 +f 451/537/451 465/543/465 466/545/466 +f 444/524/444 82/546/82 459/547/459 +f 308/548/308 458/536/458 473/544/473 +f 451/537/451 467/549/467 452/540/452 +f 444/524/444 460/550/460 445/525/445 +f 452/540/452 468/551/468 453/526/453 +f 446/527/446 460/550/460 461/552/461 +f 454/528/454 468/551/468 469/553/469 +f 446/527/446 462/554/462 447/529/447 +f 454/528/454 470/555/470 455/530/455 +f 448/531/448 462/554/462 463/556/463 +f 456/532/456 470/555/470 471/557/471 +f 467/549/467 478/3/478 468/551/468 +f 461/552/461 475/32/475 1/4/1 +f 468/551/468 6/8/6 469/553/469 +f 462/554/462 1/4/1 476/9/476 +f 469/553/469 479/12/479 470/555/470 +f 463/556/463 476/9/476 2/13/2 +f 471/557/471 479/12/479 480/16/480 +f 464/541/464 2/13/2 477/17/477 +f 471/557/471 481/20/481 472/542/472 +f 465/543/465 477/17/477 3/21/3 +f 472/542/472 482/24/482 473/544/473 +f 466/545/466 3/21/3 4/26/4 +f 459/547/459 82/558/82 474/27/474 +f 308/559/308 473/544/473 482/24/482 +f 466/545/466 5/1/5 467/549/467 +f 460/550/460 474/27/474 475/32/475 +f 5/1/5 15/31/15 16/2/16 +f 1/4/1 475/32/475 8/5/8 +f 478/3/478 16/2/16 17/7/17 +f 476/9/476 1/4/1 9/6/9 +f 6/8/6 17/7/17 18/11/18 +f 2/13/2 476/9/476 10/10/10 +f 479/12/479 18/11/18 19/15/19 +f 477/17/477 2/13/2 11/14/11 +f 480/16/480 19/15/19 20/19/20 +f 3/21/3 477/17/477 12/18/12 +f 481/20/481 20/19/20 21/23/21 +f 3/21/3 13/22/13 14/25/14 +f 4/26/4 14/25/14 15/31/15 +f 475/32/475 474/27/474 7/29/7 +f 14/25/14 29/49/29 30/37/30 +f 7/29/7 22/34/22 23/38/23 +f 15/31/15 30/37/30 31/39/31 +f 8/5/8 23/38/23 24/40/24 +f 16/2/16 31/39/31 32/41/32 +f 9/6/9 24/40/24 25/42/25 +f 17/7/17 32/41/32 33/43/33 +f 10/10/10 25/42/25 26/44/26 +f 19/15/19 18/11/18 33/43/33 +f 11/14/11 26/44/26 27/46/27 +f 20/19/20 19/15/19 34/45/34 +f 13/22/13 12/18/12 27/46/27 +f 20/19/20 35/47/35 36/36/36 +f 13/22/13 28/48/28 29/49/29 +f 25/42/25 40/66/40 41/50/41 +f 34/45/34 33/43/33 48/51/48 +f 26/44/26 41/50/41 42/53/42 +f 34/45/34 49/52/49 50/54/50 +f 27/46/27 42/53/42 43/55/43 +f 35/47/35 50/54/50 51/56/51 +f 28/48/28 43/55/43 44/57/44 +f 30/37/30 29/49/29 44/57/44 +f 22/34/22 37/59/37 38/62/38 +f 30/37/30 45/61/45 46/63/46 +f 23/38/23 38/62/38 39/64/39 +f 32/41/32 31/39/31 46/63/46 +f 24/40/24 39/64/39 40/66/40 +f 33/43/33 32/41/32 47/65/47 +f 44/57/44 59/80/59 60/67/60 +f 37/59/37 52/82/52 53/68/53 +f 45/61/45 60/67/60 61/69/61 +f 38/62/38 53/68/53 54/70/54 +f 47/65/47 46/63/46 61/69/61 +f 39/64/39 54/70/54 55/72/55 +f 47/65/47 62/71/62 63/73/63 +f 40/66/40 55/72/55 56/74/56 +f 48/51/48 63/73/63 64/75/64 +f 41/50/41 56/74/56 57/76/57 +f 49/52/49 64/75/64 65/77/65 +f 43/55/43 42/53/42 57/76/57 +f 50/54/50 65/77/65 66/79/66 +f 44/57/44 43/55/43 58/78/58 +f 63/73/63 78/99/78 79/84/79 +f 56/74/56 71/100/71 72/85/72 +f 65/77/65 64/75/64 79/84/79 +f 58/78/58 57/76/57 72/85/72 +f 65/77/65 80/86/80 81/88/81 +f 59/80/59 58/78/58 73/87/73 +f 59/80/59 74/89/74 75/93/75 +f 52/82/52 67/91/67 68/94/68 +f 60/67/60 75/93/75 76/95/76 +f 53/68/53 68/94/68 69/96/69 +f 62/71/62 61/69/61 76/95/76 +f 54/70/54 69/96/69 70/98/70 +f 62/71/62 77/97/77 78/99/78 +f 56/74/56 55/72/55 70/98/70 +f 75/93/75 91/116/91 92/101/92 +f 68/94/68 84/117/84 85/102/85 +f 77/97/77 76/95/76 92/101/92 +f 69/96/69 85/102/85 86/104/86 +f 77/97/77 93/103/93 94/105/94 +f 71/100/71 70/98/70 86/104/86 +f 78/99/78 94/105/94 95/107/95 +f 71/100/71 87/106/87 88/108/88 +f 79/84/79 95/107/95 96/109/96 +f 73/87/73 72/85/72 88/108/88 +f 81/88/81 80/86/80 96/109/96 +f 74/89/74 73/87/73 89/110/89 +f 74/89/74 90/112/90 91/116/91 +f 67/91/67 83/114/83 84/117/84 +f 96/109/96 95/107/95 110/118/110 +f 89/110/89 88/108/88 103/120/103 +f 96/109/96 111/119/111 112/122/112 +f 90/112/90 89/110/89 104/121/104 +f 90/112/90 105/123/105 106/127/106 +f 84/117/84 83/114/83 98/125/98 +f 91/116/91 106/127/106 107/129/107 +f 84/117/84 99/128/99 100/130/100 +f 93/103/93 92/101/92 107/129/107 +f 85/102/85 100/130/100 101/132/101 +f 93/103/93 108/131/108 109/133/109 +f 87/106/87 86/104/86 101/132/101 +f 95/107/95 94/105/94 109/133/109 +f 87/106/87 102/134/102 103/120/103 +f 99/128/99 114/151/114 115/135/115 +f 108/131/108 107/129/107 122/136/122 +f 100/130/100 115/135/115 116/138/116 +f 108/131/108 123/137/123 124/139/124 +f 102/134/102 101/132/101 116/138/116 +f 110/118/110 109/133/109 124/139/124 +f 102/134/102 117/140/117 118/142/118 +f 110/118/110 125/141/125 126/143/126 +f 104/121/104 103/120/103 118/142/118 +f 111/119/111 126/143/126 127/145/127 +f 105/123/105 104/121/104 119/144/119 +f 105/123/105 120/146/120 121/150/121 +f 99/128/99 98/125/98 113/148/113 +f 106/127/106 121/150/121 122/136/122 +f 119/144/119 118/142/118 133/152/133 +f 126/143/126 141/168/141 142/154/142 +f 120/146/120 119/144/119 134/153/134 +f 120/146/120 135/155/135 136/159/136 +f 113/148/113 128/157/128 129/160/129 +f 121/150/121 136/159/136 137/161/137 +f 114/151/114 129/160/129 130/162/130 +f 123/137/123 122/136/122 137/161/137 +f 115/135/115 130/162/130 131/164/131 +f 123/137/123 138/163/138 139/165/139 +f 117/140/117 116/138/116 131/164/131 +f 125/141/125 124/139/124 139/165/139 +f 117/140/117 132/166/132 133/152/133 +f 125/141/125 140/167/140 141/168/141 +f 138/163/138 137/161/137 152/169/152 +f 130/162/130 145/185/145 146/171/146 +f 138/163/138 153/170/153 154/172/154 +f 132/166/132 131/164/131 146/171/146 +f 140/167/140 139/165/139 154/172/154 +f 132/166/132 147/173/147 148/175/148 +f 140/167/140 155/174/155 156/176/156 +f 134/153/134 133/152/133 148/175/148 +f 142/154/142 141/168/141 156/176/156 +f 135/155/135 134/153/134 149/177/149 +f 135/155/135 150/179/150 151/183/151 +f 128/157/128 143/181/143 144/184/144 +f 136/159/136 151/183/151 152/169/152 +f 130/162/130 129/160/129 144/184/144 +f 156/176/156 171/202/171 172/186/172 +f 150/179/150 149/177/149 164/187/164 +f 150/179/150 165/188/165 166/192/166 +f 143/181/143 158/190/158 159/193/159 +f 151/183/151 166/192/166 167/194/167 +f 145/185/145 144/184/144 159/193/159 +f 153/170/153 152/169/152 167/194/167 +f 145/185/145 160/195/160 161/197/161 +f 153/170/153 168/196/168 169/198/169 +f 147/173/147 146/171/146 161/197/161 +f 155/174/155 154/172/154 169/198/169 +f 147/173/147 162/199/162 163/201/163 +f 155/174/155 170/200/170 171/202/171 +f 149/177/149 148/175/148 163/201/163 +f 160/195/160 175/218/175 176/203/176 +f 168/196/168 183/219/183 184/204/184 +f 162/199/162 161/197/161 176/203/176 +f 169/198/169 184/204/184 185/206/185 +f 162/199/162 177/205/177 178/207/178 +f 171/202/171 170/200/170 185/206/185 +f 164/187/164 163/201/163 178/207/178 +f 172/186/172 171/202/171 186/208/186 +f 165/188/165 164/187/164 179/209/179 +f 165/188/165 180/211/180 181/215/181 +f 158/190/158 173/213/173 174/216/174 +f 166/192/166 181/215/181 182/217/182 +f 159/193/159 174/216/174 175/218/175 +f 168/196/168 167/194/167 182/217/182 +f 180/211/180 179/209/179 194/220/194 +f 180/211/180 195/221/195 196/226/196 +f 174/216/174 173/213/173 188/223/188 +f 181/215/181 196/226/196 197/228/197 +f 175/218/175 174/216/174 189/227/189 +f 183/219/183 182/217/182 197/228/197 +f 175/218/175 190/229/190 191/231/191 +f 183/219/183 198/230/198 199/232/199 +f 177/205/177 176/203/176 191/231/191 +f 185/206/185 184/204/184 199/232/199 +f 177/205/177 192/233/192 193/235/193 +f 185/206/185 200/234/200 201/236/201 +f 179/209/179 178/207/178 193/235/193 +f 186/208/186 201/236/201 202/225/202 +f 198/230/198 213/253/213 214/237/214 +f 192/233/192 191/231/191 206/238/206 +f 200/234/200 199/232/199 214/237/214 +f 192/233/192 207/239/207 208/241/208 +f 200/234/200 215/240/215 216/242/216 +f 194/220/194 193/235/193 208/241/208 +f 201/236/201 216/242/216 217/244/217 +f 195/221/195 194/220/194 209/243/209 +f 195/221/195 210/245/210 211/249/211 +f 188/223/188 203/247/203 204/250/204 +f 196/226/196 211/249/211 212/251/212 +f 189/227/189 204/250/204 205/252/205 +f 198/230/198 197/228/197 212/251/212 +f 190/229/190 205/252/205 206/238/206 +f 210/245/210 225/268/225 226/256/226 +f 203/247/203 218/270/218 219/257/219 +f 211/249/211 226/256/226 227/258/227 +f 204/250/204 219/257/219 220/259/220 +f 213/253/213 212/251/212 227/258/227 +f 205/252/205 220/259/220 221/261/221 +f 213/253/213 228/260/228 229/262/229 +f 207/239/207 206/238/206 221/261/221 +f 215/240/215 214/237/214 229/262/229 +f 207/239/207 222/263/222 223/265/223 +f 215/240/215 230/264/230 231/266/231 +f 209/243/209 208/241/208 223/265/223 +f 216/242/216 231/266/231 232/255/232 +f 210/245/210 209/243/209 224/267/224 +f 230/264/230 229/262/229 244/271/244 +f 222/263/222 237/287/237 238/273/238 +f 230/264/230 245/272/245 246/274/246 +f 224/267/224 223/265/223 238/273/238 +f 232/255/232 231/266/231 246/274/246 +f 225/268/225 224/267/224 239/275/239 +f 225/268/225 240/277/240 241/281/241 +f 218/270/218 233/279/233 234/282/234 +f 226/256/226 241/281/241 242/283/242 +f 220/259/220 219/257/219 234/282/234 +f 228/260/228 227/258/227 242/283/242 +f 220/259/220 235/284/235 236/286/236 +f 228/260/228 243/285/243 244/271/244 +f 222/263/222 221/261/221 236/286/236 +f 233/279/233 248/302/248 249/288/249 +f 241/281/241 256/304/256 257/289/257 +f 234/282/234 249/288/249 250/290/250 +f 243/285/243 242/283/242 257/289/257 +f 235/284/235 250/290/250 251/292/251 +f 243/285/243 258/291/258 259/293/259 +f 237/287/237 236/286/236 251/292/251 +f 245/272/245 244/271/244 259/293/259 +f 237/287/237 252/294/252 253/296/253 +f 245/272/245 260/295/260 261/297/261 +f 239/275/239 238/273/238 253/296/253 +f 246/274/246 261/297/261 262/299/262 +f 240/277/240 239/275/239 254/298/254 +f 240/277/240 255/300/255 256/304/256 +f 252/294/252 267/320/267 268/305/268 +f 260/295/260 275/321/275 276/306/276 +f 254/298/254 253/296/253 268/305/268 +f 261/297/261 276/306/276 277/308/277 +f 255/300/255 254/298/254 269/307/269 +f 255/300/255 270/309/270 271/313/271 +f 249/288/249 248/302/248 263/311/263 +f 256/304/256 271/313/271 272/315/272 +f 249/288/249 264/314/264 265/316/265 +f 258/291/258 257/289/257 272/315/272 +f 250/290/250 265/316/265 266/318/266 +f 258/291/258 273/317/273 274/319/274 +f 252/294/252 251/292/251 266/318/266 +f 260/295/260 259/293/259 274/319/274 +f 271/313/271 286/337/286 287/322/287 +f 264/314/264 279/338/279 280/323/280 +f 273/317/273 272/315/272 287/322/287 +f 265/316/265 280/323/280 281/325/281 +f 273/317/273 288/324/288 289/326/289 +f 267/320/267 266/318/266 281/325/281 +f 275/321/275 274/319/274 289/326/289 +f 267/320/267 282/327/282 283/329/283 +f 275/321/275 290/328/290 291/330/291 +f 269/307/269 268/305/268 283/329/283 +f 277/308/277 276/306/276 291/330/291 +f 270/309/270 269/307/269 284/331/284 +f 270/309/270 285/333/285 286/337/286 +f 264/314/264 263/311/263 278/335/278 +f 290/328/290 305/355/305 306/339/306 +f 284/331/284 283/329/283 298/340/298 +f 292/332/292 291/330/291 306/339/306 +f 285/333/285 284/331/284 299/341/299 +f 285/333/285 300/343/300 301/347/301 +f 278/335/278 293/345/293 294/348/294 +f 286/337/286 301/347/301 302/349/302 +f 279/338/279 294/348/294 295/350/295 +f 288/324/288 287/322/287 302/349/302 +f 280/323/280 295/350/295 296/352/296 +f 288/324/288 303/351/303 304/353/304 +f 282/327/282 281/325/281 296/352/296 +f 290/328/290 289/326/289 304/353/304 +f 282/327/282 297/354/297 298/340/298 +f 294/348/294 310/372/310 311/356/311 +f 303/351/303 302/349/302 318/357/318 +f 295/350/295 311/356/311 312/359/312 +f 303/351/303 319/358/319 320/360/320 +f 297/354/297 296/352/296 312/359/312 +f 305/355/305 304/353/304 320/360/320 +f 297/354/297 313/361/313 314/363/314 +f 305/355/305 321/362/321 322/364/322 +f 299/341/299 298/340/298 314/363/314 +f 306/339/306 322/364/322 323/366/323 +f 300/343/300 299/341/299 315/365/315 +f 300/343/300 316/367/316 317/371/317 +f 293/345/293 309/369/309 310/372/310 +f 301/347/301 317/371/317 318/357/318 +f 315/365/315 314/363/314 329/373/329 +f 322/364/322 337/389/337 338/375/338 +f 316/367/316 315/365/315 330/374/330 +f 316/367/316 331/376/331 332/380/332 +f 309/369/309 324/378/324 325/381/325 +f 317/371/317 332/380/332 333/382/333 +f 310/372/310 325/381/325 326/383/326 +f 319/358/319 318/357/318 333/382/333 +f 311/356/311 326/383/326 327/385/327 +f 319/358/319 334/384/334 335/386/335 +f 312/359/312 327/385/327 328/387/328 +f 321/362/321 320/360/320 335/386/335 +f 313/361/313 328/387/328 329/373/329 +f 321/362/321 336/388/336 337/389/337 +f 334/384/334 333/382/333 348/390/348 +f 326/383/326 341/406/341 342/392/342 +f 334/384/334 349/391/349 350/393/350 +f 328/387/328 327/385/327 342/392/342 +f 336/388/336 335/386/335 350/393/350 +f 328/387/328 343/394/343 344/396/344 +f 336/388/336 351/395/351 352/397/352 +f 330/374/330 329/373/329 344/396/344 +f 337/389/337 352/397/352 353/399/353 +f 331/376/331 330/374/330 345/398/345 +f 331/376/331 346/400/346 347/404/347 +f 324/378/324 339/402/339 340/405/340 +f 332/380/332 347/404/347 348/390/348 +f 325/381/325 340/405/340 341/406/341 +f 352/397/352 367/423/367 368/407/368 +f 346/400/346 345/398/345 360/408/360 +f 346/400/346 361/409/361 362/413/362 +f 339/402/339 354/411/354 355/414/355 +f 347/404/347 362/413/362 363/415/363 +f 341/406/341 340/405/340 355/414/355 +f 349/391/349 348/390/348 363/415/363 +f 341/406/341 356/416/356 357/418/357 +f 349/391/349 364/417/364 365/419/365 +f 343/394/343 342/392/342 357/418/357 +f 351/395/351 350/393/350 365/419/365 +f 343/394/343 358/420/358 359/422/359 +f 351/395/351 366/421/366 367/423/367 +f 345/398/345 344/396/344 359/422/359 +f 364/424/364 379/454/379 380/425/380 +f 358/427/358 357/455/357 372/428/372 +f 366/430/366 365/426/365 380/425/380 +f 358/427/358 373/429/373 374/432/374 +f 366/430/366 381/431/381 382/434/382 +f 360/436/360 359/433/359 374/432/374 +f 367/435/367 382/434/382 383/438/383 +f 361/440/361 360/436/360 375/437/375 +f 361/440/361 376/441/376 377/446/377 +f 354/442/354 369/444/369 370/448/370 +f 362/447/362 377/446/377 378/450/378 +f 356/452/356 355/449/355 370/448/370 +f 364/424/364 363/451/363 378/450/378 +f 356/452/356 371/453/371 372/428/372 +f 376/441/376 391/472/391 392/460/392 +f 369/444/369 384/457/384 385/461/385 +f 377/446/377 392/460/392 393/462/393 +f 371/453/371 370/448/370 385/461/385 +f 379/454/379 378/450/378 393/462/393 +f 371/453/371 386/463/386 387/465/387 +f 379/454/379 394/464/394 395/466/395 +f 373/429/373 372/428/372 387/465/387 +f 381/431/381 380/425/380 395/466/395 +f 373/429/373 388/467/388 389/469/389 +f 381/431/381 396/468/396 397/470/397 +f 375/437/375 374/432/374 389/469/389 +f 382/434/382 397/470/397 398/459/398 +f 376/441/376 375/437/375 390/471/390 +f 388/467/388 387/465/387 402/473/402 +f 396/468/396 395/466/395 410/475/410 +f 388/467/388 403/474/403 404/477/404 +f 397/470/397 396/468/396 411/476/411 +f 390/471/390 389/469/389 404/477/404 +f 397/470/397 412/478/412 413/480/413 +f 391/472/391 390/471/390 405/479/405 +f 391/472/391 406/481/406 407/485/407 +f 385/461/385 384/457/384 399/483/399 +f 392/460/392 407/485/407 408/487/408 +f 385/461/385 400/486/400 401/488/401 +f 394/464/394 393/462/393 408/487/408 +f 386/463/386 401/488/401 402/473/402 +f 394/464/394 409/489/409 410/475/410 +f 406/481/406 421/503/421 422/490/422 +f 399/483/399 414/505/414 415/491/415 +f 407/485/407 422/490/422 423/492/423 +f 401/488/401 400/486/400 415/491/415 +f 409/489/409 408/487/408 423/492/423 +f 401/488/401 416/493/416 417/495/417 +f 409/489/409 424/494/424 425/496/425 +f 403/474/403 402/473/402 417/495/417 +f 411/476/411 410/475/410 425/496/425 +f 403/474/403 418/497/418 419/499/419 +f 411/476/411 426/498/426 427/500/427 +f 405/479/405 404/477/404 419/499/419 +f 412/478/412 427/500/427 428/502/428 +f 406/481/406 405/479/405 420/501/420 +f 426/498/426 425/496/425 440/507/440 +f 418/497/418 433/523/433 434/509/434 +f 426/498/426 441/508/441 442/510/442 +f 420/501/420 419/499/419 434/509/434 +f 427/500/427 442/510/442 443/512/443 +f 421/503/421 420/501/420 435/511/435 +f 421/503/421 436/513/436 437/517/437 +f 414/505/414 429/515/429 430/518/430 +f 422/490/422 437/517/437 438/519/438 +f 416/493/416 415/491/415 430/518/430 +f 424/494/424 423/492/423 438/519/438 +f 416/493/416 431/520/431 432/522/432 +f 424/494/424 439/521/439 440/507/440 +f 418/497/418 417/495/417 432/522/432 +f 430/518/430 429/515/429 444/524/444 +f 437/517/437 452/540/452 453/526/453 +f 430/518/430 445/525/445 446/527/446 +f 439/521/439 438/519/438 453/526/453 +f 431/520/431 446/527/446 447/529/447 +f 439/521/439 454/528/454 455/530/455 +f 433/523/433 432/522/432 447/529/447 +f 441/508/441 440/507/440 455/530/455 +f 433/523/433 448/531/448 449/533/449 +f 441/508/441 456/532/456 457/534/457 +f 435/511/435 434/509/434 449/533/449 +f 442/510/442 457/534/457 458/536/458 +f 436/513/436 435/511/435 450/535/450 +f 436/513/436 451/537/451 452/540/452 +f 448/531/448 463/556/463 464/541/464 +f 456/532/456 471/557/471 472/542/472 +f 450/535/450 449/533/449 464/541/464 +f 458/536/458 457/534/457 472/542/472 +f 451/537/451 450/535/450 465/543/465 +f 451/537/451 466/545/466 467/549/467 +f 444/524/444 459/547/459 460/550/460 +f 452/540/452 467/549/467 468/551/468 +f 446/527/446 445/525/445 460/550/460 +f 454/528/454 453/526/453 468/551/468 +f 446/527/446 461/552/461 462/554/462 +f 454/528/454 469/553/469 470/555/470 +f 448/531/448 447/529/447 462/554/462 +f 456/532/456 455/530/455 470/555/470 +f 467/549/467 5/1/5 478/3/478 +f 461/552/461 460/550/460 475/32/475 +f 468/551/468 478/3/478 6/8/6 +f 462/554/462 461/552/461 1/4/1 +f 469/553/469 6/8/6 479/12/479 +f 463/556/463 462/554/462 476/9/476 +f 471/557/471 470/555/470 479/12/479 +f 464/541/464 463/556/463 2/13/2 +f 471/557/471 480/16/480 481/20/481 +f 465/543/465 464/541/464 477/17/477 +f 472/542/472 481/20/481 482/24/482 +f 466/545/466 465/543/465 3/21/3 +f 466/545/466 4/26/4 5/1/5 +f 460/550/460 459/547/459 474/27/474 diff --git a/src/main/resources/assets/goodgenerator/shaders/antimatter.frag.glsl b/src/main/resources/assets/goodgenerator/shaders/antimatter.frag.glsl new file mode 100644 index 0000000000..08b80694d6 --- /dev/null +++ b/src/main/resources/assets/goodgenerator/shaders/antimatter.frag.glsl @@ -0,0 +1,9 @@ +#version 120 +uniform float u_Opacity; +varying vec3 v_Color; + + +void main() { + // Color ramp from 0 to 1 + gl_FragColor = vec4(v_Color.rgb,u_Opacity); +} diff --git a/src/main/resources/assets/goodgenerator/shaders/antimatter.vert.glsl b/src/main/resources/assets/goodgenerator/shaders/antimatter.vert.glsl new file mode 100644 index 0000000000..8286a26a4f --- /dev/null +++ b/src/main/resources/assets/goodgenerator/shaders/antimatter.vert.glsl @@ -0,0 +1,80 @@ +#version 120 + + +uniform float u_SpikeMult; +uniform float u_Scale; +uniform float u_ScaleSnapshot; +uniform vec3 u_ColorCore; +uniform vec3 u_ColorSpike; +uniform float u_Time; +uniform float u_TimeSnapshot; +varying vec3 v_Color; + +/* +float wave ( vec3 input){ + return (cos(input.x + u_Time*1.2)*cos(input.y + u_Time*1.3)*cos(input.z + u_Time*1.4)); +} +*/ +const float PI = 3.14159265358979323846; + + +float lazyHash(vec3 input){ + vec3 v = fract(input*1.23456 + 3.1456); + v*=7; + return fract(v.y + v.x*(v.z+1)); +} + + +float wave ( vec3 input){ + float val = lazyHash(input); + float pulse = cos(val*2*PI + u_Time)*cos(u_Time*(1+val)); // Slow save + return pulse; +} + +float trim (float val){ + return clamp(val - .1,0,1)/.9; +} + +float amp(float x){ + float b = smoothstep(0.,1.,x); + float c = pow(b,.3); + return c; +} + +float triangle(float x){ + return 1.0 - abs(2.0 * (x - 0.5)); +} + +void main() { + //grab local position + vec3 pos = gl_Vertex.xyz; + + //Grabs how far the vertex is for center + //Antimatter.model has spikes that are 2 unit away, and the 'core' is 1 unit away + float len = length(pos); + + //Grabs distance that remains as spike + float spike = len-1; + + //Spike + float extension = wave(pos); + extension = abs(extension); + float spikeSize = extension * u_SpikeMult; + + //Scale + float timelerp = clamp(1,0,(u_Time-u_TimeSnapshot)/2.5); + float scale = mix(u_ScaleSnapshot,u_Scale,timelerp)*(1 + 0.5*spike*(spikeSize - 1)); + + vec3 currentCoreColor = mix(u_ColorCore,u_ColorSpike,triangle(mod((u_Time/4.0 + lazyHash(pos)/2),1.0))); + vec3 currentSpikeColor = mix(u_ColorCore,u_ColorSpike,triangle(mod((u_Time/2.0 + lazyHash(pos)),1.0))); + //v_Color = mix(u_ColorCore,u_ColorSpike,extension*spike); + v_Color = mix(currentCoreColor,currentSpikeColor,extension*spike); + mat4 mScale = mat4( + scale,0,0,0, + 0,scale,0,0, + 0,0,scale,0, + 0,0,0,1); + + + gl_Position = gl_ModelViewProjectionMatrix * mScale * gl_Vertex; +} diff --git a/src/main/resources/assets/goodgenerator/shaders/protomatter.frag.glsl b/src/main/resources/assets/goodgenerator/shaders/protomatter.frag.glsl new file mode 100644 index 0000000000..ab6df42637 --- /dev/null +++ b/src/main/resources/assets/goodgenerator/shaders/protomatter.frag.glsl @@ -0,0 +1,8 @@ +#version 120 +uniform vec3 u_Color; +uniform float u_Opacity; + +void main() { + // Color ramp from 0 to 1 + gl_FragColor = vec4(u_Color,1); +} diff --git a/src/main/resources/assets/goodgenerator/shaders/protomatter.vert.glsl b/src/main/resources/assets/goodgenerator/shaders/protomatter.vert.glsl new file mode 100644 index 0000000000..746b31cc46 --- /dev/null +++ b/src/main/resources/assets/goodgenerator/shaders/protomatter.vert.glsl @@ -0,0 +1,87 @@ +#version 120 +attribute float a_VertexID; + +uniform float u_CubeCount; +uniform float u_Time; +uniform float u_Scale; +uniform float u_SpiralRadius; +uniform vec3 u_Vertices[24]; + +const float PI = 3.14159265358979323846; + +int modulo(int a, int b){ + return int(mod(float(a),float(b))); +} + +int idVertexTransform(float id){ + int i = int(id); + int l = modulo(i,6); // Local vertex id for face: 0..5 inclusive + int v = modulo((l-l/3),4); // Transform 0,1,2,3,4,5 to 0,1,2,2,3,0 + int f = (i/6)*4; // Grab face offset for vertex + return f+v; +} + + +//Best fit equation, needs to be manually calculated +//Alternatives should be looked if shader is going to be multi purpose +float positionEquation(float tickTime){ + float x = tickTime/20; + float y1 = 7.6331796059e-12*pow(x,1.7827335640e+01); + float y2 = x/10.0; + float y = max(y1,y2); + return y; +} + +float velocityEquation(float tickTime){ + return (positionEquation(tickTime + 0.001)-positionEquation(tickTime))/.001; +} + +void main() { + float cubeCount = u_CubeCount; + float maxDistance = 22.5; + + //This probably needs a better method for generating cubes + int cube_id = int(a_VertexID)/36; + int local_id = idVertexTransform(mod(a_VertexID, 36)); + vec3 pos = u_Vertices[local_id]; + + + //Beam particles y speed + float loopTime = 100; + float cycleOffset = (cube_id/cubeCount) * loopTime; + float cubeTime = mod(u_Time+cycleOffset,loopTime); + float dist = positionEquation(cubeTime); + + + //beam particles position x&z + float halfCycle = PI * mod(cube_id,2); + float x_offset = sin(cube_id/cubeCount * 3 * PI + halfCycle) * u_SpiralRadius; + float z_offset = cos(cube_id/cubeCount * 3 * PI + halfCycle) * u_SpiralRadius; + float y_offset = maxDistance-dist; + + //scale + float size = min((cubeTime/loopTime)/.8,1)*u_Scale; + float tall = size*max(1,maxDistance-y_offset); + float width = min(size/sqrt(tall),size); + + float y_trim = max(0,tall/2-y_offset); + + tall -= y_trim; + y_offset += y_trim/2; + + mat4 scale = mat4 ( + width,0,0,0, + 0,tall,0,0, + 0,0,width,0, + 0,0,0,1 + ); + + mat4 gravity = mat4( + 1,0,0,0, + 0,1,0,0, + 0,0,1,0, + x_offset,y_offset,z_offset,1 + ); + + gl_Position = gl_ModelViewProjectionMatrix * (gravity * (scale*vec4(pos,1))); +} diff --git a/src/main/resources/assets/goodgenerator/textures/blocks/antimatterAnnihilationMatrix.png b/src/main/resources/assets/goodgenerator/textures/blocks/antimatterAnnihilationMatrix.png Binary files differnew file mode 100644 index 0000000000..9d98f818d8 --- /dev/null +++ b/src/main/resources/assets/goodgenerator/textures/blocks/antimatterAnnihilationMatrix.png diff --git a/src/main/resources/assets/goodgenerator/textures/blocks/antimatterContainmentCasing.png b/src/main/resources/assets/goodgenerator/textures/blocks/antimatterContainmentCasing.png Binary files differnew file mode 100644 index 0000000000..a856f339ce --- /dev/null +++ b/src/main/resources/assets/goodgenerator/textures/blocks/antimatterContainmentCasing.png diff --git a/src/main/resources/assets/goodgenerator/textures/blocks/gravityStabilizationCasing.png b/src/main/resources/assets/goodgenerator/textures/blocks/gravityStabilizationCasing.png Binary files differnew file mode 100644 index 0000000000..3ad3f96b84 --- /dev/null +++ b/src/main/resources/assets/goodgenerator/textures/blocks/gravityStabilizationCasing.png diff --git a/src/main/resources/assets/goodgenerator/textures/blocks/magneticFluxCasing.png b/src/main/resources/assets/goodgenerator/textures/blocks/magneticFluxCasing.png Binary files differnew file mode 100644 index 0000000000..b60b317025 --- /dev/null +++ b/src/main/resources/assets/goodgenerator/textures/blocks/magneticFluxCasing.png diff --git a/src/main/resources/assets/goodgenerator/textures/blocks/protomatterActivationCoil.png b/src/main/resources/assets/goodgenerator/textures/blocks/protomatterActivationCoil.png Binary files differnew file mode 100644 index 0000000000..434b6b420e --- /dev/null +++ b/src/main/resources/assets/goodgenerator/textures/blocks/protomatterActivationCoil.png diff --git a/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.antimatter.png b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.antimatter.png Binary files differnew file mode 100644 index 0000000000..9f634cbbfa --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.antimatter.png diff --git a/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.antimatter.png.mcmeta b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.antimatter.png.mcmeta new file mode 100644 index 0000000000..dd8674956c --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.antimatter.png.mcmeta @@ -0,0 +1 @@ +{"animation": {"frametime": 2}}
\ No newline at end of file diff --git a/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.protomatter.png b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.protomatter.png Binary files differnew file mode 100644 index 0000000000..df6d59f158 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.protomatter.png diff --git a/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.protomatter.png.mcmeta b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.protomatter.png.mcmeta new file mode 100644 index 0000000000..14578b550b --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/fluids/fluid.protomatter.png.mcmeta @@ -0,0 +1 @@ +{"animation": {"frametime": 4}}
\ No newline at end of file diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_ANTIMATTER.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_ANTIMATTER.png Binary files differnew file mode 100644 index 0000000000..a6b0c6d71d --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_ANTIMATTER.png diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_ANTIMATTER_GLOW.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_ANTIMATTER_GLOW.png Binary files differnew file mode 100644 index 0000000000..3cf2d90b80 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/MACHINE_CASING_ANTIMATTER_GLOW.png diff --git a/src/main/resources/assets/tectech/lang/en_US.lang b/src/main/resources/assets/tectech/lang/en_US.lang index 9c3411f8a8..e683876e2d 100644 --- a/src/main/resources/assets/tectech/lang/en_US.lang +++ b/src/main/resources/assets/tectech/lang/en_US.lang @@ -853,6 +853,10 @@ gt.blockcasingsBA0.10.desc.0=Resistant to temporal shearing from time dilation d gt.blockcasingsBA0.10.desc.1=This block can last an eternity without any decay. +# Antimatter +gt.blockmachines.antimatterForge.name=Semi-Stable Antimatter Stabilization Sequencer +gt.blockmachines.antimatterGenerator.name=Shielded Lagrangian Annihilation Matrix + achievement.gt.spacetime_compression_field_generator.0=Crude Spacetime Compression Field Generator achievement.gt.spacetime_compression_field_generator.1=Primitive Spacetime Compression Field Generator achievement.gt.spacetime_compression_field_generator.2=Stable Spacetime Compression Field Generator |