From f2c0a4fc6b65749871b60580a6f65374f589b994 Mon Sep 17 00:00:00 2001 From: Mary <33456283+FourIsTheNumber@users.noreply.github.com> Date: Sat, 7 Sep 2024 09:16:14 -0400 Subject: [PATCH] Finishing touches on black hole compressor (#3060) Co-authored-by: Martin Robertz Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: BucketBrigade <138534411+CookieBrigade@users.noreply.github.com> --- src/main/java/gregtech/api/GregTechAPI.java | 1 + .../java/gregtech/api/enums/Textures.java | 18 +- .../implementations/MTEBasicMachine.java | 3 +- src/main/java/gregtech/common/GTClient.java | 2 + .../common/blocks/BlockBlackholeRenderer.java | 74 + .../common/items/MetaGeneratedItem01.java | 4 +- .../common/render/BlackholeRenderer.java | 222 +++ .../compressor/MTEBlackHoleCompressor.java | 382 +++-- .../multi/compressor/MTEHIPCompressor.java | 15 +- .../multi/compressor/MTEHeatSensor.java | 4 +- .../compressor/MTEIndustrialCompressor.java | 17 +- .../compressor/MTENeutroniumCompressor.java | 16 +- .../render/TileEntityBlackhole.java | 99 ++ .../oreprocessing/ProcessingPlate.java | 2 +- .../loaders/preload/LoaderGTBlockFluid.java | 6 + .../processing/steam/MTESteamCompressor.java | 3 + .../gregtech/shaders/blackhole.frag.glsl | 42 + .../gregtech/shaders/blackhole.vert.glsl | 81 + .../assets/gregtech/shaders/laser.frag.glsl | 25 + .../assets/gregtech/shaders/laser.vert.glsl | 47 + ...HOLE.png => OVERLAY_HATCH_HEAT_SENSOR.png} | Bin ...png => OVERLAY_HATCH_HEAT_SENSOR_GLOW.png} | Bin .../iconsets/OVERLAY_MULTI_BLACKHOLE.png | Bin 0 -> 217 bytes .../OVERLAY_MULTI_BLACKHOLE_ACTIVE.png | Bin 0 -> 394 bytes .../OVERLAY_MULTI_BLACKHOLE_ACTIVE.png.mcmeta | 1 + .../OVERLAY_MULTI_BLACKHOLE_ACTIVE_GLOW.png | Bin 0 -> 316 bytes ...LAY_MULTI_BLACKHOLE_ACTIVE_GLOW.png.mcmeta | 1 + .../iconsets/OVERLAY_MULTI_BLACKHOLE_GLOW.png | Bin 0 -> 131 bytes .../OVERLAY_MULTI_BLACKHOLE_UNSTABLE.png | Bin 0 -> 391 bytes ...VERLAY_MULTI_BLACKHOLE_UNSTABLE.png.mcmeta | 1 + .../OVERLAY_MULTI_BLACKHOLE_UNSTABLE_GLOW.png | Bin 0 -> 315 bytes ...Y_MULTI_BLACKHOLE_UNSTABLE_GLOW.png.mcmeta | 1 + .../iconsets/OVERLAY_MULTI_NEUTRONIUM.png | Bin 0 -> 228 bytes .../OVERLAY_MULTI_NEUTRONIUM_ACTIVE.png | Bin 0 -> 444 bytes ...OVERLAY_MULTI_NEUTRONIUM_ACTIVE.png.mcmeta | 1 + .../OVERLAY_MULTI_NEUTRONIUM_ACTIVE_GLOW.png | Bin 0 -> 375 bytes ...AY_MULTI_NEUTRONIUM_ACTIVE_GLOW.png.mcmeta | 1 + .../OVERLAY_MULTI_NEUTRONIUM_GLOW.png | Bin 0 -> 176 bytes .../textures/items/gt.metaitem.01/418.png | Bin 164 -> 553 bytes .../items/gt.metaitem.01/418.png.mcmeta | 1 + .../textures/items/gt.metaitem.01/419.png | Bin 164 -> 550 bytes .../items/gt.metaitem.01/419.png.mcmeta | 1 + .../gregtech/textures/model/blackhole.obj | 1364 +++++++++++++++++ .../gregtech/textures/model/blackhole.png | Bin 0 -> 81661 bytes .../assets/gregtech/textures/model/laser.png | Bin 0 -> 155 bytes 45 files changed, 2296 insertions(+), 139 deletions(-) create mode 100644 src/main/java/gregtech/common/blocks/BlockBlackholeRenderer.java create mode 100644 src/main/java/gregtech/common/render/BlackholeRenderer.java create mode 100644 src/main/java/gregtech/common/tileentities/render/TileEntityBlackhole.java create mode 100644 src/main/resources/assets/gregtech/shaders/blackhole.frag.glsl create mode 100644 src/main/resources/assets/gregtech/shaders/blackhole.vert.glsl create mode 100644 src/main/resources/assets/gregtech/shaders/laser.frag.glsl create mode 100644 src/main/resources/assets/gregtech/shaders/laser.vert.glsl rename src/main/resources/assets/gregtech/textures/blocks/iconsets/{OVERLAY_HATCH_BLACKHOLE.png => OVERLAY_HATCH_HEAT_SENSOR.png} (100%) rename src/main/resources/assets/gregtech/textures/blocks/iconsets/{OVERLAY_HATCH_BLACKHOLE_GLOW.png => OVERLAY_HATCH_HEAT_SENSOR_GLOW.png} (100%) create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_ACTIVE.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_ACTIVE.png.mcmeta create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_ACTIVE_GLOW.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_ACTIVE_GLOW.png.mcmeta create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_GLOW.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_UNSTABLE.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_UNSTABLE.png.mcmeta create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_UNSTABLE_GLOW.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_UNSTABLE_GLOW.png.mcmeta create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_NEUTRONIUM.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_NEUTRONIUM_ACTIVE.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_NEUTRONIUM_ACTIVE.png.mcmeta create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_NEUTRONIUM_ACTIVE_GLOW.png create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_NEUTRONIUM_ACTIVE_GLOW.png.mcmeta create mode 100644 src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_NEUTRONIUM_GLOW.png create mode 100644 src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/418.png.mcmeta create mode 100644 src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/419.png.mcmeta create mode 100644 src/main/resources/assets/gregtech/textures/model/blackhole.obj create mode 100644 src/main/resources/assets/gregtech/textures/model/blackhole.png create mode 100644 src/main/resources/assets/gregtech/textures/model/laser.png diff --git a/src/main/java/gregtech/api/GregTechAPI.java b/src/main/java/gregtech/api/GregTechAPI.java index e10c7735798..e9cfe16237b 100644 --- a/src/main/java/gregtech/api/GregTechAPI.java +++ b/src/main/java/gregtech/api/GregTechAPI.java @@ -246,6 +246,7 @@ public class GregTechAPI { public static Block sBlockTintedGlass; public static Block sLaserRender; public static Block sWormholeRender; + public static Block sBlackholeRender; /** * Getting assigned by the Config */ diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java index bd90cfe8aba..4eace204e6e 100644 --- a/src/main/java/gregtech/api/enums/Textures.java +++ b/src/main/java/gregtech/api/enums/Textures.java @@ -346,6 +346,21 @@ public enum BlockIcons implements IIconContainer, Runnable { OVERLAY_FRONT_MULTI_COMPRESSOR_COOLING, OVERLAY_FRONT_MULTI_COMPRESSOR_COOLING_GLOW, + OVERLAY_HATCH_HEAT_SENSOR, + OVERLAY_HATCH_HEAT_SENSOR_GLOW, + + OVERLAY_MULTI_NEUTRONIUM, + OVERLAY_MULTI_NEUTRONIUM_GLOW, + OVERLAY_MULTI_NEUTRONIUM_ACTIVE, + OVERLAY_MULTI_NEUTRONIUM_ACTIVE_GLOW, + + OVERLAY_MULTI_BLACKHOLE, + OVERLAY_MULTI_BLACKHOLE_GLOW, + OVERLAY_MULTI_BLACKHOLE_ACTIVE, + OVERLAY_MULTI_BLACKHOLE_ACTIVE_GLOW, + OVERLAY_MULTI_BLACKHOLE_UNSTABLE, + OVERLAY_MULTI_BLACKHOLE_UNSTABLE_GLOW, + OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR, OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR_ACTIVE, OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR_ACTIVE_GLOW, @@ -1343,9 +1358,6 @@ public enum BlockIcons implements IIconContainer, Runnable { OVERLAY_HATCH_PH_SENSOR, OVERLAY_HATCH_PH_SENSOR_GLOW, - OVERLAY_HATCH_BLACKHOLE, - OVERLAY_HATCH_BLACKHOLE_GLOW, - STRUCTURE_MARK, MV_TOP_CYCLOTRON_SOLENOID, diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachine.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachine.java index ee83857953f..0bfff978954 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachine.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachine.java @@ -14,6 +14,7 @@ import static gregtech.api.metatileentity.BaseTileEntity.STALLED_VENT_TOOLTIP; import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; import static gregtech.api.metatileentity.BaseTileEntity.UNUSED_SLOT_TOOLTIP; +import static gregtech.api.util.GTRecipeConstants.COMPRESSION_TIER; import static gregtech.api.util.GTRecipeConstants.EXPLODE; import static gregtech.api.util.GTRecipeConstants.ON_FIRE; import static gregtech.api.util.GTUtility.moveMultipleItemStacks; @@ -1078,7 +1079,7 @@ public int checkRecipe(boolean skipOC) { getBaseMetaTileEntity().setOnFire(); return DID_NOT_FIND_RECIPE; } - + if (tRecipe.getMetadataOrDefault(COMPRESSION_TIER, 0) > 0) return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; if (GTMod.gregtechproxy.mLowGravProcessing && (tRecipe.mSpecialValue == -100 || tRecipe.mSpecialValue == -300) && !isValidForLowGravity(tRecipe, getBaseMetaTileEntity().getWorld().provider.dimensionId)) return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; diff --git a/src/main/java/gregtech/common/GTClient.java b/src/main/java/gregtech/common/GTClient.java index 127c801b406..276bc7a78a9 100644 --- a/src/main/java/gregtech/common/GTClient.java +++ b/src/main/java/gregtech/common/GTClient.java @@ -91,6 +91,7 @@ import gregtech.client.SeekingOggCodec; import gregtech.common.blocks.BlockFrameBox; import gregtech.common.blocks.ItemMachines; +import gregtech.common.render.BlackholeRenderer; import gregtech.common.render.DroneRender; import gregtech.common.render.FlaskRenderer; import gregtech.common.render.FluidDisplayStackRenderer; @@ -631,6 +632,7 @@ public void onLoad() { new DroneRender(); new LaserRenderer(); new WormholeRenderer(); + new BlackholeRenderer(); metaGeneratedItemRenderer = new MetaGeneratedItemRenderer(); for (MetaGeneratedItem item : MetaGeneratedItem.sInstances.values()) { diff --git a/src/main/java/gregtech/common/blocks/BlockBlackholeRenderer.java b/src/main/java/gregtech/common/blocks/BlockBlackholeRenderer.java new file mode 100644 index 00000000000..84d61172c3f --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockBlackholeRenderer.java @@ -0,0 +1,74 @@ +package gregtech.common.blocks; + +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.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.common.tileentities.render.TileEntityBlackhole; + +public class BlockBlackholeRenderer extends Block { + + public BlockBlackholeRenderer() { + super(Material.iron); + this.setResistance(20f); + this.setHardness(-1.0f); + this.setBlockName("BlackHoleRenderer"); + this.setLightLevel(100.0f); + GameRegistry.registerBlock(this, getUnlocalizedName()); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + blockIcon = iconRegister.registerIcon("gregtech:iconsets/TRANSPARENT"); + } + + @Override + public String getUnlocalizedName() { + return "gt.blackholerenderer"; + } + + @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 TileEntityBlackhole(); + } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int meta, int fortune) { + return new ArrayList<>(); + } + + @Override + public boolean isCollidable() { + return true; + } + +} diff --git a/src/main/java/gregtech/common/items/MetaGeneratedItem01.java b/src/main/java/gregtech/common/items/MetaGeneratedItem01.java index ab9917435cc..5fcb02b6579 100644 --- a/src/main/java/gregtech/common/items/MetaGeneratedItem01.java +++ b/src/main/java/gregtech/common/items/MetaGeneratedItem01.java @@ -3203,14 +3203,14 @@ public MetaGeneratedItem01() { ItemList.Black_Hole_Opener.set( addItem( Black_Hole_Opener.ID, - "Black Hole Activation Catalyst", + "Black Hole Seed", "Opens a semi-stable black hole", new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 32), new TCAspects.TC_AspectStack(TCAspects.ORDO, 64))); ItemList.Black_Hole_Closer.set( addItem( Black_Hole_Closer.ID, - "Black Hole Deactivation Catalyst", + "Black Hole Collapser", "Safely closes a semi-stable black hole", new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 32), new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 64))); diff --git a/src/main/java/gregtech/common/render/BlackholeRenderer.java b/src/main/java/gregtech/common/render/BlackholeRenderer.java new file mode 100644 index 00000000000..733bd3aa9ea --- /dev/null +++ b/src/main/java/gregtech/common/render/BlackholeRenderer.java @@ -0,0 +1,222 @@ +package gregtech.common.render; + +import static gregtech.api.enums.Mods.GregTech; + +import java.nio.FloatBuffer; + +import net.minecraft.client.renderer.ActiveRenderInfo; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.AdvancedModelLoader; + +import org.joml.Matrix4fStack; +import org.joml.Vector4f; +import org.lwjgl.BufferUtils; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL20; + +import com.gtnewhorizon.gtnhlib.client.renderer.CapturingTessellator; +import com.gtnewhorizon.gtnhlib.client.renderer.TessellatorManager; +import com.gtnewhorizon.gtnhlib.client.renderer.shader.ShaderProgram; +import com.gtnewhorizon.gtnhlib.client.renderer.vbo.IModelCustomExt; +import com.gtnewhorizon.gtnhlib.client.renderer.vbo.VertexBuffer; +import com.gtnewhorizon.gtnhlib.client.renderer.vertex.DefaultVertexFormat; + +import cpw.mods.fml.client.registry.ClientRegistry; +import gregtech.common.tileentities.render.TileEntityBlackhole; + +public class BlackholeRenderer extends TileEntitySpecialRenderer { + + private boolean initialized = false; + + private ShaderProgram blackholeProgram; + private static int u_CameraPosition = -1, u_Scale = -1, u_Time = -1, u_Stability = -1; + private static final Matrix4fStack modelMatrixStack = new Matrix4fStack(4); + + private static IModelCustomExt blackholeModel; + private static ResourceLocation blackholeTexture; + private static float modelScale = .5f; + + private ShaderProgram laserProgram; + private static int u_LaserCameraPosition = -1, u_LaserColor = -1, u_LaserModelMatrix = -1; + private static VertexBuffer laserVBO; + private static ResourceLocation laserTexture; + + private static final Matrix4fStack modelMatrix = new Matrix4fStack(2); + + private static final float WIDTH = .1f; + private static final float EXCLUSION = 1f; + + public BlackholeRenderer() { + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBlackhole.class, this); + } + + private void init() { + try { + blackholeProgram = new ShaderProgram( + GregTech.resourceDomain, + "shaders/blackhole.vert.glsl", + "shaders/blackhole.frag.glsl"); + + u_CameraPosition = blackholeProgram.getUniformLocation("u_CameraPosition"); + + u_Scale = blackholeProgram.getUniformLocation("u_Scale"); + u_Time = blackholeProgram.getUniformLocation("u_Time"); + u_Stability = blackholeProgram.getUniformLocation("u_Stability"); + + } catch (Exception e) { + System.out.println(e.getMessage()); + return; + } + + blackholeModel = (IModelCustomExt) AdvancedModelLoader + .loadModel(new ResourceLocation(GregTech.resourceDomain, "textures/model/blackhole.obj")); + blackholeTexture = new ResourceLocation(GregTech.resourceDomain, "textures/model/blackhole.png"); + + blackholeProgram.use(); + GL20.glUniform1f(u_Scale, modelScale); + GL20.glUniform1f(u_Stability, .1f); + ShaderProgram.clear(); + + try { + laserProgram = new ShaderProgram( + GregTech.resourceDomain, + "shaders/laser.vert.glsl", + "shaders/laser.frag.glsl"); + u_LaserCameraPosition = laserProgram.getUniformLocation("u_CameraPosition"); + u_LaserColor = laserProgram.getUniformLocation("u_Color"); + u_LaserModelMatrix = laserProgram.getUniformLocation("u_ModelMatrix"); + + } catch (Exception e) { + System.out.println(e.getMessage()); + return; + } + + laserTexture = new ResourceLocation(GregTech.resourceDomain, "textures/model/laser.png"); + + TessellatorManager.startCapturing(); + CapturingTessellator tess = (CapturingTessellator) TessellatorManager.get(); + + tess.startDrawingQuads(); + + tess.addVertexWithUV(.5 + 8, 0, -WIDTH, 0, 0); + tess.addVertexWithUV(.5 + 8, 0, WIDTH, 0, 1); + tess.addVertexWithUV(EXCLUSION, 0, WIDTH / 5, 1, 1); + tess.addVertexWithUV(EXCLUSION, 0, -WIDTH / 5, 1, 0); + + tess.addVertexWithUV(-.5 - 8, 0, -WIDTH, 0, 0); + tess.addVertexWithUV(-.5 - 8, 0, WIDTH, 0, 1); + tess.addVertexWithUV(-EXCLUSION, 0, WIDTH / 5, 1, 1); + tess.addVertexWithUV(-EXCLUSION, 0, -WIDTH / 5, 1, 0); + + tess.draw(); + + laserVBO = TessellatorManager.stopCapturingToVBO(DefaultVertexFormat.POSITION_TEXTURE_NORMAL); + + initialized = true; + } + + private void renderBlackHole(TileEntityBlackhole tile, double x, double y, double z, float timer) { + + blackholeProgram.use(); + bindTexture(blackholeTexture); + GL20.glUniform1f(u_Stability, tile.getStability()); + modelMatrixStack.clear(); + + float xLocal = ((float) x + .5f); + float yLocal = ((float) y + .5f); + float zLocal = ((float) z + .5f); + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + GL11.glPushMatrix(); + GL20.glUniform3f( + u_CameraPosition, + ActiveRenderInfo.objectX - xLocal, + ActiveRenderInfo.objectY - yLocal, + ActiveRenderInfo.objectZ - zLocal); + + GL20.glUniform1f(u_Time, timer); + GL11.glTranslated(x + .5f, y + .5f, z + .5f); + blackholeModel.renderAllVBO(); + + GL11.glPopMatrix(); + GL11.glPopAttrib(); + ShaderProgram.clear(); + } + + private void renderLasers(TileEntityBlackhole tile, double x, double y, double z, float timer) { + laserProgram.use(); + bindTexture(laserTexture); + + float cx = ((float) x + .5f); + float cy = ((float) y + .5f); + float cz = ((float) z + .5f); + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glPushMatrix(); + GL20.glUniform3f(u_LaserColor, tile.getLaserR(), tile.getLaserG(), tile.getLaserB()); + + modelMatrix.clear(); + modelMatrix.translate(cx, cy, cz); + + // First set + FloatBuffer matrixBuffer = BufferUtils.createFloatBuffer(16); + GL20.glUniformMatrix4(u_LaserModelMatrix, false, modelMatrix.get(matrixBuffer)); + modelMatrix.pushMatrix(); + modelMatrix.invert(); + Vector4f cameraPosition = new Vector4f( + ActiveRenderInfo.objectX, + ActiveRenderInfo.objectY, + ActiveRenderInfo.objectZ, + 1); + cameraPosition = modelMatrix.transform(cameraPosition); + GL20.glUniform3f(u_LaserCameraPosition, cameraPosition.x, cameraPosition.y, cameraPosition.z); + laserVBO.render(); + + // Second set + + modelMatrix.popMatrix(); + matrixBuffer.clear(); + modelMatrix.rotate((float) Math.PI / 2, 0, 1, 0); + + GL20.glUniformMatrix4(u_LaserModelMatrix, false, modelMatrix.get(matrixBuffer)); + + modelMatrix.invert(); + cameraPosition.set(ActiveRenderInfo.objectX, ActiveRenderInfo.objectY, ActiveRenderInfo.objectZ, 1); + cameraPosition = modelMatrix.transform(cameraPosition); + GL20.glUniform3f(u_LaserCameraPosition, cameraPosition.x, cameraPosition.y, cameraPosition.z); + laserVBO.render(); + + GL11.glPopMatrix(); + GL11.glPopAttrib(); + ShaderProgram.clear(); + } + + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float timeSinceLastTick) { + if (!(tile instanceof TileEntityBlackhole blackhole)) return; + + if (!initialized) { + init(); + if (!initialized) return; + } + if (((TileEntityBlackhole) tile).getLaserRender()) { + renderLasers( + blackhole, + x, + y, + z, + tile.getWorldObj() + .getWorldTime() + timeSinceLastTick); + } + + renderBlackHole( + blackhole, + x, + y, + z, + tile.getWorldObj() + .getWorldTime() + timeSinceLastTick); + + } + +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEBlackHoleCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEBlackHoleCompressor.java index ba893e045d5..367b529bc3e 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEBlackHoleCompressor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEBlackHoleCompressor.java @@ -1,16 +1,20 @@ package gregtech.common.tileentities.machines.multi.compressor; +import static bartworks.util.BWTooltipReference.TT; import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; import static gregtech.api.enums.GTValues.AuthorFourIsTheNumber; import static gregtech.api.enums.GTValues.Ollie; import static gregtech.api.enums.HatchElement.*; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MULTI_BLACKHOLE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MULTI_BLACKHOLE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MULTI_BLACKHOLE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MULTI_BLACKHOLE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MULTI_BLACKHOLE_UNSTABLE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MULTI_BLACKHOLE_UNSTABLE_GLOW; import static gregtech.api.util.GTStructureUtility.buildHatchAdder; import static gregtech.api.util.GTStructureUtility.ofFrame; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -20,6 +24,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -42,11 +47,13 @@ import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.Textures; import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IIconContainer; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.logic.ProcessingLogic; import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; import gregtech.api.metatileentity.implementations.MTEHatchInput; import gregtech.api.recipe.RecipeMap; import gregtech.api.recipe.RecipeMaps; @@ -57,8 +64,10 @@ import gregtech.api.util.GTRecipe; import gregtech.api.util.GTUtility; import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; import gregtech.common.blocks.BlockCasings10; import gregtech.common.items.MetaGeneratedItem01; +import gregtech.common.tileentities.render.TileEntityBlackhole; import gtPlusPlus.core.util.minecraft.PlayerUtils; import mcp.mobius.waila.api.IWailaConfigHandler; import mcp.mobius.waila.api.IWailaDataAccessor; @@ -111,7 +120,8 @@ public class MTEBlackHoleCompressor extends MTEExtendedPowerMultiBlockBase spacetimeHatches = new ArrayList<>(); + + /** + * 1: Off + * 2: On, stable + * 3: On, unstable + */ + private byte blackHoleStatus = 1; private final FluidStack blackholeCatalyzingCost = (MaterialsUEVplus.SpaceTime).getMolten(1); private int catalyzingCostModifier = 1; @@ -143,6 +159,22 @@ public MTEBlackHoleCompressor(String aName) { super(aName); } + private boolean addSpacetimeInput(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity != null) { + if (aTileEntity.getMetaTileEntity() instanceof MTEHatchInput hatch) { + hatch.updateTexture(aBaseCasingIndex); + spacetimeHatches.add(hatch); + return true; + } + } + return false; + } + + @Override + protected boolean filtersFluid() { + return false; + } + @Override public IStructureDefinition getStructureDefinition() { return STRUCTURE_DEFINITION; @@ -171,15 +203,39 @@ public void setMachineModeIcons() { @Override public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - setMachineMode(nextMachineMode()); - PlayerUtils.messagePlayer( - aPlayer, - String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); + if (aPlayer.isSneaking()) { + shouldRender = !shouldRender; + if (!shouldRender) { + PlayerUtils.messagePlayer(aPlayer, "Rendering off"); + rendererTileEntity = null; + destroyRenderBlock(); + } else { + if (blackHoleStatus != 1) createRenderBlock(); + PlayerUtils.messagePlayer(aPlayer, "Rendering on"); + } + } else { + setMachineMode(nextMachineMode()); + PlayerUtils.messagePlayer( + aPlayer, + String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); + } } @Override public String getMachineModeName() { - return StatCollector.translateToLocal("GT5U.COMPRESSION_TIER.mode." + machineMode); + return StatCollector.translateToLocal("GT5U.BLACKHOLE.mode." + machineMode); + } + + @Override + public void onValueUpdate(byte aValue) { + byte oBlackHoleStatus = blackHoleStatus; + blackHoleStatus = aValue; + if (oBlackHoleStatus != blackHoleStatus) getBaseMetaTileEntity().issueTextureUpdate(); + } + + @Override + public byte getUpdateData() { + return blackHoleStatus; } @Override @@ -187,33 +243,36 @@ public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirect int colorIndex, boolean aActive, boolean redstoneLevel) { ITexture[] rTexture; if (side == aFacing) { - if (aActive) { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 11)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - } else { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 11)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW) - .extFacing() - .glow() - .build() }; + IIconContainer MAIN_OVERLAY; + IIconContainer GLOW_OVERLAY; + switch (blackHoleStatus) { + default -> { + MAIN_OVERLAY = OVERLAY_MULTI_BLACKHOLE; + GLOW_OVERLAY = OVERLAY_MULTI_BLACKHOLE_GLOW; + } + case 2 -> { + MAIN_OVERLAY = OVERLAY_MULTI_BLACKHOLE_ACTIVE; + GLOW_OVERLAY = OVERLAY_MULTI_BLACKHOLE_ACTIVE_GLOW; + } + case 3 -> { + MAIN_OVERLAY = OVERLAY_MULTI_BLACKHOLE_UNSTABLE; + GLOW_OVERLAY = OVERLAY_MULTI_BLACKHOLE_UNSTABLE_GLOW; + } } + + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 11)), + TextureFactory.builder() + .addIcon(MAIN_OVERLAY) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(GLOW_OVERLAY) + .extFacing() + .glow() + .build() }; + } else { rTexture = new ITexture[] { Textures.BlockIcons .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 11)) }; @@ -227,78 +286,78 @@ protected MultiblockTooltipBuilder createTooltip() { tt.addMachineType("Compressor/Advanced Neutronium Compressor") .addInfo("Controller Block for the Semi-Stable Black Hole Containment Field") .addInfo(EnumChatFormatting.LIGHT_PURPLE + "Uses the immense power of the event horizon to compress things") - .addInfo("No longer requires heat management to perform perfect compression") + .addInfo("No longer requires heat management to perform superdense compression") .addInfo("Can create advanced singularities!") .addSeparator() .addInfo( "Insert a " + EnumChatFormatting.WHITE - + "Black Hole Activation Catalyst" + + "Black Hole Seed" + EnumChatFormatting.GRAY + " to open a black hole") .addInfo( "The black hole will begin its life at " + EnumChatFormatting.RED - + "100%" + + "100" + EnumChatFormatting.GRAY + " stability and slowly decay") + .addInfo( + "Stability decays by " + EnumChatFormatting.RED + + "1/s" + + EnumChatFormatting.GRAY + + " until it reaches 0") + .addInfo("At 0 stability, the black hole is " + EnumChatFormatting.DARK_RED + "UNSTABLE") + .addInfo("Once the black hole becomes unstable, it will void all inputs for recipes which require it") .addSeparator() - .addInfo("Natural decay takes " + EnumChatFormatting.RED + "100" + EnumChatFormatting.GRAY + " seconds") - .addInfo("Running recipes in the machine will slow the decay by " + EnumChatFormatting.RED + "25%") + .addInfo("Running recipes in the machine will slow the decay rate by " + EnumChatFormatting.RED + "25%") .addInfo( "The decay can be " + EnumChatFormatting.BOLD + "halted" + EnumChatFormatting.RESET + EnumChatFormatting.GRAY - + " by inserting spacetime") + + " by inserting 1 L/s of spacetime") .addInfo( "Every " + EnumChatFormatting.RED + "30" + EnumChatFormatting.GRAY - + " seconds saved by spacetime insertion will " + + " total seconds saved by spacetime insertion will " + EnumChatFormatting.RED + "double" + EnumChatFormatting.GRAY + " the cost per second!") - .addInfo("Once the black hole becomes unstable, it will void all inputs for recipes which require it") .addInfo( "Insert a " + EnumChatFormatting.WHITE - + "Black Hole Deactivation Catalyst" + + "Black Hole Collapser" + EnumChatFormatting.GRAY + " to close the black hole") + .addInfo("To restore stability and reset spacetime costs, close the black hole and open a new one") .addSeparator() .addInfo( "Recipes not utilizing the black hole have their lengths " + EnumChatFormatting.RED + "doubled" + EnumChatFormatting.GRAY + " if it becomes unstable") - .addInfo("400% faster than singleblock machines of the same voltage when black hole is open") - .addInfo("Only uses 70% of the EU/t normally required") + .addInfo("400% faster than singleblock machines of the same voltage") + .addInfo("Only uses 70% of the EU/t normally required - does not overclock above energy hatch tier") .addInfo("Gains 8 parallels per voltage tier") .addInfo( - "Parallels are " + EnumChatFormatting.RED - + "doubled" + EnumChatFormatting.RED + "2x/4x" + EnumChatFormatting.GRAY - + " when stability is BELOW " + + " parallels when stability is BELOW " + EnumChatFormatting.RED - + "50%") - .addInfo( - "Parallels are " + EnumChatFormatting.RED - + "quadrupled" - + EnumChatFormatting.GRAY - + " when stability is BELOW " - + EnumChatFormatting.RED - + "20%") + + "50/20") + .addInfo("Accepts one " + TT + " energy hatch") .addInfo(AuthorFourIsTheNumber + EnumChatFormatting.RESET + " & " + Ollie) + .addInfo("Rendering by: " + EnumChatFormatting.WHITE + "BucketBrigade") .addSeparator() .beginStructureBlock(35, 33, 35, false) - .addCasingInfoMin("Background Radiation Absorbent Casing", 985, false) + .addCasingInfoMin("Background Radiation Absorbent Casing", 950, false) .addCasingInfoExactly("Extreme Density Space-Bending Casing", 3667, false) .addCasingInfoExactly("Hawking Radiation Realignment Focus", 64, false) .addCasingInfoExactly("Naquadah Alloy Frame Box", 144, false) - .addInputBus("Behind Laser", 1) - .addOutputBus("Behind Laser", 1) - .addInputHatch("Behind Laser", 1) - .addEnergyHatch("Any Radiation Absorbent Casing", 2) - .addMaintenanceHatch("Any Radiation Absorbent Casing", 2) + .addInputHatch("Spacetime Insertion, Behind Laser", 2) + .addInputBus("Any Radiation Absorbent Casing", 1) + .addOutputBus("Any Radiation Absorbent Casing", 1) + .addInputHatch("Any Radiation Absorbent Casing", 1) + .addEnergyHatch("Any Radiation Absorbent Casing", 1) .toolTipFinisher("GregTech"); return tt; } @@ -324,9 +383,20 @@ private void onCasingAdded() { public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { mCasingAmount = 0; mEnergyHatches.clear(); + mExoticEnergyHatches.clear(); + spacetimeHatches.clear(); if (!checkPiece(STRUCTURE_PIECE_MAIN, 17, 27, 10)) return false; - if (mCasingAmount < 0) return false; + if (mCasingAmount < 950) return false; + + if (!mExoticEnergyHatches.isEmpty()) { + if (mExoticEnergyHatches.size() > 1) return false; + energyHatchTier = mExoticEnergyHatches.get(0).mTier; + } else if (!mEnergyHatches.isEmpty()) { + byte tier = mEnergyHatches.get(0).mTier; + for (MTEHatchEnergy hatch : mEnergyHatches) if (hatch.mTier < tier) tier = hatch.mTier; + energyHatchTier = tier; + } return true; } @@ -334,19 +404,21 @@ public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack a @Override public void loadNBTData(NBTTagCompound aNBT) { super.loadNBTData(aNBT); - aNBT.setInteger("catalyzingCostModifier", catalyzingCostModifier); - aNBT.setInteger("catalyzingCounter", catalyzingCounter); - aNBT.setBoolean("blackholeOn", blackholeOn); - aNBT.setFloat("blackholeStability", blackHoleStability); + if (aNBT.hasKey("catalyzingCounter")) catalyzingCounter = aNBT.getInteger("catalyzingCounter"); + if (aNBT.hasKey("catalyzingCostModifier")) catalyzingCostModifier = aNBT.getInteger("catalyzingCostModifier"); + if (aNBT.hasKey("blackHoleStatus")) blackHoleStatus = aNBT.getByte("blackHoleStatus"); + if (aNBT.hasKey("blackHoleStability")) blackHoleStability = aNBT.getFloat("blackHoleStability"); + if (aNBT.hasKey("shouldRender")) shouldRender = aNBT.getBoolean("shouldRender"); } @Override public void saveNBTData(NBTTagCompound aNBT) { super.saveNBTData(aNBT); - if (aNBT.hasKey("catalyzingCounter")) catalyzingCostModifier = aNBT.getInteger("catalyzingCounter"); - if (aNBT.hasKey("catalyzingCostModifier")) catalyzingCostModifier = aNBT.getInteger("catalyzingCostModifier"); - if (aNBT.hasKey("blackholeOn")) blackholeOn = aNBT.getBoolean("blackholeOn"); - if (aNBT.hasKey("blackholeStability")) blackHoleStability = aNBT.getFloat("blackholeStability"); + aNBT.setInteger("catalyzingCounter", catalyzingCounter); + aNBT.setInteger("catalyzingCostModifier", catalyzingCostModifier); + aNBT.setByte("blackHoleStatus", blackHoleStatus); + aNBT.setFloat("blackHoleStability", blackHoleStability); + aNBT.setBoolean("shouldRender", shouldRender); } @Override @@ -359,7 +431,7 @@ protected void setProcessingLogicPower(ProcessingLogic logic) { public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, int z) { super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setBoolean("blackholeOn", blackholeOn); + tag.setByte("blackHoleStatus", blackHoleStatus); tag.setFloat("blackHoleStability", blackHoleStability); } @@ -368,7 +440,7 @@ public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDat IWailaConfigHandler config) { super.getWailaBody(itemStack, currentTip, accessor, config); final NBTTagCompound tag = accessor.getNBTData(); - if (tag.getBoolean("blackholeOn")) { + if (tag.getByte("blackHoleStatus") != 1) { if (tag.getFloat("blackHoleStability") > 0) { currentTip.add(EnumChatFormatting.DARK_PURPLE + "Black Hole Active"); currentTip.add( @@ -382,6 +454,8 @@ public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDat } else currentTip.add(EnumChatFormatting.DARK_PURPLE + "Black Hole Offline"); } + byte energyHatchTier = 0; + @Override protected ProcessingLogic createProcessingLogic() { return new ProcessingLogic() { @@ -394,15 +468,18 @@ protected Stream findRecipeMatches(@Nullable RecipeMap map) { // Deactivation resets stability to 100 and catalyzing cost to 1 for (ItemStack inputItem : inputItems) { if (inputItem.getItem() instanceof MetaGeneratedItem01) { - if (inputItem.getItemDamage() == 32418 && !blackholeOn) { + if (inputItem.getItemDamage() == 32418 && (blackHoleStatus == 1)) { inputItem.stackSize -= 1; - blackholeOn = true; + blackHoleStatus = 2; + createRenderBlock(); break; - } else if (inputItem.getItemDamage() == 32419 && blackholeOn) { + } else if (inputItem.getItemDamage() == 32419 && !(blackHoleStatus == 1)) { inputItem.stackSize -= 1; - blackholeOn = false; + blackHoleStatus = 1; blackHoleStability = 100; catalyzingCostModifier = 1; + rendererTileEntity = null; + destroyRenderBlock(); break; } } @@ -410,21 +487,34 @@ protected Stream findRecipeMatches(@Nullable RecipeMap map) { return super.findRecipeMatches(map); } + @NotNull + @Override + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + int ocs = energyHatchTier - GTUtility.getTier(recipe.mEUt); + if (ocs < 0) ocs = 0; + return new OverclockCalculator().setRecipeEUt(recipe.mEUt) + .setAmperage(availableAmperage) + .setEUt(availableVoltage) + .setDuration(recipe.mDuration) + .setSpeedBoost(speedBoost) + .setEUtDiscount(euModifier) + .setAmperageOC(amperageOC) + .setDurationDecreasePerOC(overClockTimeReduction) + .setEUtIncreasePerOC(overClockPowerIncrease) + .limitOverclockCount(ocs); + } + @NotNull @Override protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { // Default speed bonus - setSpeedBonus(1F); - - // If recipe needs a black hole and one is not open, just wait - // If the recipe doesn't require black hole, incur a 0.5x speed penalty - // If recipe doesn't require black hole but one is open, give 5x speed bonus - if (recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 1) > 0) { - if (!blackholeOn) return CheckRecipeResultRegistry.NO_BLACK_HOLE; - } else { - if (blackHoleStability <= 0) setSpeedBonus(5F); - else if (blackholeOn) setSpeedBonus(0.2F); + setSpeedBonus(0.2F); + if (blackHoleStatus == 1) return CheckRecipeResultRegistry.NO_BLACK_HOLE; + + // If the recipe doesn't require black hole, but it is unstable, incur a 0.5x speed penalty + if (recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 0) == 0 && (blackHoleStatus == 3)) { + setSpeedBonus(5F); } return super.validateRecipe(recipe); } @@ -432,7 +522,7 @@ protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { @Nonnull protected CheckRecipeResult onRecipeStart(@Nonnull GTRecipe recipe) { // If recipe needs a black hole and one is active but unstable, continuously void items - if (blackHoleStability <= 0 && recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 1) > 0) { + if ((blackHoleStatus == 3) && recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 0) > 0) { return CheckRecipeResultRegistry.UNSTABLE_BLACK_HOLE; } return CheckRecipeResultRegistry.SUCCESSFUL; @@ -446,29 +536,40 @@ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { super.onPostTick(aBaseMetaTileEntity, aTick); if (aTick % 20 == 0) { - if (blackholeOn && blackHoleStability >= 0) { - float stabilityDecrease = 1F; - // If the machine is running, reduce stability loss by 25% - if (this.maxProgresstime() != 0) { - stabilityDecrease = 0.75F; - } - // Search all hatches for catalyst fluid - // If found enough, drain it and reduce stability loss to 0 - // Every 30 drains, double the cost - FluidStack totalCost = new FluidStack(blackholeCatalyzingCost, catalyzingCostModifier); - for (MTEHatchInput hatch : mInputHatches) { - if (drain(hatch, totalCost, false)) { - drain(hatch, totalCost, true); - catalyzingCounter += 1; - stabilityDecrease = 0; - if (catalyzingCounter >= 30) { - catalyzingCostModifier *= 2; - catalyzingCounter = 0; + if (blackHoleStatus == 2) { + if (blackHoleStability >= 0) { + if (rendererTileEntity == null) createRenderBlock(); + rendererTileEntity.setStability(blackHoleStability / 100F); + float stabilityDecrease = 1F; + // If the machine is running, reduce stability loss by 25% + if (this.maxProgresstime() != 0) { + stabilityDecrease = 0.75F; + } + + // Search all hatches for catalyst fluid + // If found enough, drain it and reduce stability loss to 0 + // Every 30 drains, double the cost + FluidStack totalCost = new FluidStack(blackholeCatalyzingCost, catalyzingCostModifier); + + boolean didDrain = false; + for (MTEHatchInput hatch : spacetimeHatches) { + if (drain(hatch, totalCost, false)) { + drain(hatch, totalCost, true); + catalyzingCounter += 1; + stabilityDecrease = 0; + if (catalyzingCounter >= 30) { + catalyzingCostModifier *= 2; + catalyzingCounter = 0; + } + didDrain = true; + break; } } - } - if (blackHoleStability >= 0) blackHoleStability -= stabilityDecrease; - else blackHoleStability = 0; + if (rendererTileEntity == null) createRenderBlock(); + rendererTileEntity.toggleLaser(didDrain); + if (blackHoleStability >= 0) blackHoleStability -= stabilityDecrease; + else blackHoleStability = 0; + } else blackHoleStatus = 3; } } } @@ -531,4 +632,53 @@ public boolean supportsInputSeparation() { public boolean supportsSingleRecipeLocking() { return true; } + + @Override + public void onBlockDestroyed() { + destroyRenderBlock(); + super.onBlockDestroyed(); + } + + @Override + public boolean isRotationChangeAllowed() { + return false; + } + + private boolean shouldRender = true; + private TileEntityBlackhole rendererTileEntity = null; + + private void createRenderBlock() { + if (!shouldRender) return; + IGregTechTileEntity base = this.getBaseMetaTileEntity(); + ForgeDirection opposite = getDirection().getOpposite(); + int x = 7 * opposite.offsetX; + int z = 7 * opposite.offsetZ; + int y = 11; + + base.getWorld() + .setBlock(base.getXCoord() + x, base.getYCoord() + y, base.getZCoord() + z, Blocks.air); + base.getWorld() + .setBlock(base.getXCoord() + x, base.getYCoord() + y, base.getZCoord() + z, GregTechAPI.sBlackholeRender); + rendererTileEntity = (TileEntityBlackhole) base.getWorld() + .getTileEntity(base.getXCoord() + x, base.getYCoord() + y, base.getZCoord() + z); + + rendererTileEntity.setStability(blackHoleStability / 100F); + } + + private void destroyRenderBlock() { + IGregTechTileEntity base = this.getBaseMetaTileEntity(); + ForgeDirection opposite = getDirection().getOpposite(); + int x = 7 * opposite.offsetX; + int z = 7 * opposite.offsetZ; + int y = 11; + + this.getBaseMetaTileEntity() + .getWorld() + .setBlock(base.getXCoord() + x, base.getYCoord() + y, base.getZCoord() + z, Blocks.air); + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } } diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHIPCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHIPCompressor.java index 2491dcff388..aeda7d0cd68 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHIPCompressor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHIPCompressor.java @@ -47,6 +47,7 @@ import gregtech.api.recipe.RecipeMap; import gregtech.api.recipe.RecipeMaps; import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.recipe.metadata.CompressionTierKey; import gregtech.api.render.TextureFactory; import gregtech.api.util.GTRecipe; @@ -74,10 +75,10 @@ public class MTEHIPCompressor extends MTEExtendedPowerMultiBlockBase 0) doingHIP = true; + int recipeReq = recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 0); + if (recipeReq == 1) { + doingHIP = true; + } else if (recipeReq == 2) { + return CheckRecipeResultRegistry.NO_RECIPE; + } return super.validateRecipe(recipe); } }.setMaxParallelSupplier(this::getMaxParallelRecipes); diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHeatSensor.java b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHeatSensor.java index 8ea57bc1cf2..82f9d43506b 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHeatSensor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHeatSensor.java @@ -31,8 +31,8 @@ public class MTEHeatSensor extends MTEHatch { protected boolean inverted = false; private boolean isOn = false; - private static final IIconContainer textureFont = Textures.BlockIcons.OVERLAY_HATCH_BLACKHOLE; - private static final IIconContainer textureFont_Glow = Textures.BlockIcons.OVERLAY_HATCH_BLACKHOLE_GLOW; + private static final IIconContainer textureFont = Textures.BlockIcons.OVERLAY_HATCH_HEAT_SENSOR; + private static final IIconContainer textureFont_Glow = Textures.BlockIcons.OVERLAY_HATCH_HEAT_SENSOR_GLOW; public MTEHeatSensor(int aID, String aName, String aNameRegional, int aTier) { super(aID, aName, aNameRegional, aTier, 0, "Reads heat from HIP Unit."); diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEIndustrialCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEIndustrialCompressor.java index e21da1856f0..c887d1cf03f 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEIndustrialCompressor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEIndustrialCompressor.java @@ -14,6 +14,8 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.common.util.ForgeDirection; +import org.jetbrains.annotations.NotNull; + import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; import com.gtnewhorizon.structurelib.structure.IStructureDefinition; import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; @@ -29,7 +31,11 @@ import gregtech.api.multitileentity.multiblock.casing.Glasses; import gregtech.api.recipe.RecipeMap; import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.metadata.CompressionTierKey; import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; import gregtech.api.util.GTUtility; import gregtech.api.util.MultiblockTooltipBuilder; import gregtech.common.blocks.BlockCasings10; @@ -188,7 +194,16 @@ protected void setProcessingLogicPower(ProcessingLogic logic) { @Override protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 2F) + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + if (recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 0) > 0) + return CheckRecipeResultRegistry.NO_RECIPE; + return super.validateRecipe(recipe); + } + }.setSpeedBonus(1F / 2F) .setMaxParallelSupplier(this::getMaxParallelRecipes) .setEuModifier(0.9F); } diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTENeutroniumCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTENeutroniumCompressor.java index 323e09f61b0..f5326e284e2 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTENeutroniumCompressor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTENeutroniumCompressor.java @@ -9,10 +9,10 @@ import static gregtech.api.enums.HatchElement.InputBus; import static gregtech.api.enums.HatchElement.Maintenance; import static gregtech.api.enums.HatchElement.OutputBus; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MULTI_NEUTRONIUM; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MULTI_NEUTRONIUM_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MULTI_NEUTRONIUM_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MULTI_NEUTRONIUM_GLOW; import static gregtech.api.util.GTStructureUtility.buildHatchAdder; import static gregtech.api.util.GTStructureUtility.ofFrame; @@ -115,11 +115,11 @@ public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirect Textures.BlockIcons .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 6)), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE) + .addIcon(OVERLAY_MULTI_NEUTRONIUM_ACTIVE) .extFacing() .build(), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW) + .addIcon(OVERLAY_MULTI_NEUTRONIUM_ACTIVE_GLOW) .extFacing() .glow() .build() }; @@ -128,11 +128,11 @@ public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirect Textures.BlockIcons .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 6)), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR) + .addIcon(OVERLAY_MULTI_NEUTRONIUM) .extFacing() .build(), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW) + .addIcon(OVERLAY_MULTI_NEUTRONIUM_GLOW) .extFacing() .glow() .build() }; diff --git a/src/main/java/gregtech/common/tileentities/render/TileEntityBlackhole.java b/src/main/java/gregtech/common/tileentities/render/TileEntityBlackhole.java new file mode 100644 index 00000000000..5cd59d2cf49 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/render/TileEntityBlackhole.java @@ -0,0 +1,99 @@ +package gregtech.common.tileentities.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; + +public class TileEntityBlackhole extends TileEntity { + + // Should run from 0 to 1, >.5 starts showing changes + private float stability = 1; + private float laserR = 0.318f, laserG = 0.157f, laserB = 0.533f; + private boolean laserRender = false; + + private static final String NBT_TAG = "BLACKHOLE"; + + private static final String STABILITY_NBT_TAG = NBT_TAG + "STABILITY"; + private static final String COLOR_RED_NBT_TAG = NBT_TAG + "COLOR_RED"; + private static final String COLOR_GREEN_NBT_TAG = NBT_TAG + "COLOR_GREEN"; + private static final String COLOR_BLUE_NBT_TAG = NBT_TAG + "COLOR_BLUE"; + private static final String RENDER_NBT_TAG = NBT_TAG + "LASER_RENDER"; + + public void setLaserColor(float r, float g, float b) { + laserR = r; + laserG = g; + laserB = b; + updateToClient(); + } + + public void toggleLaser(boolean toggle) { + laserRender = toggle; + updateToClient(); + } + + public float getLaserR() { + return laserR; + } + + public float getLaserG() { + return laserG; + } + + public float getLaserB() { + return laserB; + } + + public boolean getLaserRender() { + return laserRender; + } + + public void setStability(float stability) { + // Can probably be simplified, maps stability > .5 as 1, and stability <.5 from 0 to 1 + this.stability = ((float) Math.min(stability + .5, 1f) - .5f) * 2f; + updateToClient(); + } + + public float getStability() { + return stability; + } + + public void writeToNBT(NBTTagCompound compound) { + super.writeToNBT(compound); + compound.setFloat(STABILITY_NBT_TAG, stability); + compound.setFloat(COLOR_RED_NBT_TAG, laserR); + compound.setFloat(COLOR_GREEN_NBT_TAG, laserG); + compound.setFloat(COLOR_BLUE_NBT_TAG, laserB); + compound.setBoolean(RENDER_NBT_TAG, laserRender); + } + + @Override + public void readFromNBT(NBTTagCompound compound) { + stability = compound.getFloat(STABILITY_NBT_TAG); + laserR = compound.getFloat(COLOR_RED_NBT_TAG); + laserG = compound.getFloat(COLOR_GREEN_NBT_TAG); + laserB = compound.getFloat(COLOR_BLUE_NBT_TAG); + laserRender = compound.getBoolean(RENDER_NBT_TAG); + super.readFromNBT(compound); + + } + + @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()); + } + + public void updateToClient() { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + +} diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate.java index 9c1c4904dbb..619ff7a7edc 100644 --- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate.java +++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate.java @@ -441,7 +441,7 @@ private void registerPlateSuperdense(final Materials aMaterial, final ItemStack GTModHandler.removeRecipeByOutputDelayed(aStack); if (!aNoSmashing || aMaterial.contains(SubTag.STRETCHY)) { - int compression_tier = (aMaterial.processingMaterialTierEU >= TierEU.RECIPE_UIV + int compression_tier = (aMaterial.processingMaterialTierEU >= TierEU.RECIPE_UEV || aMaterial.contains(SubTag.BLACK_HOLE)) ? 2 : 1; GTValues.RA.stdBuilder() .itemInputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 64)) diff --git a/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java b/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java index 0072a8148cf..c3bf4d50312 100644 --- a/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java +++ b/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java @@ -53,6 +53,7 @@ import gregtech.api.util.GTModHandler; import gregtech.api.util.GTOreDictUnificator; import gregtech.api.util.GTUtility; +import gregtech.common.blocks.BlockBlackholeRenderer; import gregtech.common.blocks.BlockCasings1; import gregtech.common.blocks.BlockCasings10; import gregtech.common.blocks.BlockCasings11; @@ -91,6 +92,7 @@ import gregtech.common.items.MetaGeneratedItem98; import gregtech.common.items.MetaGeneratedItem99; import gregtech.common.items.MetaGeneratedTool01; +import gregtech.common.tileentities.render.TileEntityBlackhole; import gregtech.common.tileentities.render.TileEntityDrone; import gregtech.common.tileentities.render.TileEntityLaser; import gregtech.common.tileentities.render.TileEntityWormhole; @@ -558,6 +560,7 @@ public void run() { GregTechAPI.sBlockTintedGlass = new BlockTintedIndustrialGlass(); GregTechAPI.sLaserRender = new BlockLaser(); GregTechAPI.sWormholeRender = new BlockWormholeRender(); + GregTechAPI.sBlackholeRender = new BlockBlackholeRenderer(); // meta ID order, DO NOT CHANGE ORDER @@ -691,6 +694,9 @@ public void run() { GTLog.out.println("GTMod: Registering the WormholeRender."); GameRegistry.registerTileEntity(TileEntityWormhole.class, "WormholeRender"); + GTLog.out.println("GTMod: Registering the BlackholeRender."); + GameRegistry.registerTileEntity(TileEntityBlackhole.class, "BlackholeRender"); + GTLog.out.println("GTMod: Registering the BaseMetaPipeEntity."); GameRegistry.registerTileEntity(BaseMetaPipeEntity.class, "BaseMetaPipeEntity"); FMLInterModComms.sendMessage(AppliedEnergistics2.ID, "whitelist-spatial", BaseMetaPipeEntity.class.getName()); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCompressor.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCompressor.java index 6db6175896a..a4ecc3f3e83 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCompressor.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCompressor.java @@ -48,6 +48,7 @@ import gregtech.api.recipe.RecipeMaps; import gregtech.api.recipe.check.CheckRecipeResult; import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.metadata.CompressionTierKey; import gregtech.api.util.GTRecipe; import gregtech.api.util.MultiblockTooltipBuilder; import gregtech.api.util.OverclockCalculator; @@ -246,6 +247,8 @@ protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { if (availableVoltage < recipe.mEUt) { return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); } + if (recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 0) > 0) + return CheckRecipeResultRegistry.NO_RECIPE; return CheckRecipeResultRegistry.SUCCESSFUL; } diff --git a/src/main/resources/assets/gregtech/shaders/blackhole.frag.glsl b/src/main/resources/assets/gregtech/shaders/blackhole.frag.glsl new file mode 100644 index 00000000000..4334dde59e7 --- /dev/null +++ b/src/main/resources/assets/gregtech/shaders/blackhole.frag.glsl @@ -0,0 +1,42 @@ +#version 120 + +uniform float u_Time; +uniform float u_Stability; +uniform sampler2D u_Texture; +varying vec2 v_TexCoord; + +const vec3 STABLE_COLOR = vec3(1,0.85,0.043); +const vec3 UNSTABLE_COLOR = vec3(.4,0,0); + +vec3 toYIQ(vec3 rgb){ + return mat3( 0.299, 1.0, 0.40462981, 0.587, -0.46081557, -1.0, 0.114, -0.53918443, 0.59537019 ) * rgb; +} + +vec3 toRGB(vec3 yiq){ + return mat3( 1.0, 1.0, 1.0, 0.5696804, -0.1620848, -0.6590654, 0.3235513, -0.3381869, 0.8901581 ) * yiq; +} + + +void main() { + //Extremely fragile system to deteriminte if isolate parts of the blackhole + //Would break with any uv remaping or atlas stiching + bool isDisk = (abs(v_TexCoord.y-.5f)>.245); + bool isBack = (abs(v_TexCoord.x-.5f)>.245) && isDisk; + bool isTinyRing = (v_TexCoord.y > .66) && !isDisk; + + vec2 texCoord = v_TexCoord; + if (isDisk || isTinyRing){ + texCoord.x = mod(texCoord.x+u_Time/30,1); + } + + vec4 texture = texture2D(u_Texture, texCoord); + if (isDisk || isTinyRing){ + vec3 targetYIQ = toYIQ(STABLE_COLOR); + vec3 originalYIQ = toYIQ(texture.xyz); + vec3 yiqColor = vec3(originalYIQ.x,normalize(targetYIQ.yz)*length(originalYIQ.yz)); + vec3 finalrgb = toRGB(yiqColor); + texture = vec4(mix(UNSTABLE_COLOR,finalrgb,pow(u_Stability,.5)),1); + } + + gl_FragColor = texture; +} diff --git a/src/main/resources/assets/gregtech/shaders/blackhole.vert.glsl b/src/main/resources/assets/gregtech/shaders/blackhole.vert.glsl new file mode 100644 index 00000000000..57cea0b81c3 --- /dev/null +++ b/src/main/resources/assets/gregtech/shaders/blackhole.vert.glsl @@ -0,0 +1,81 @@ +#version 120 + +uniform float u_Time; +uniform float u_Stability; +uniform float u_Scale; +uniform vec3 u_CameraPosition; + +varying vec2 v_TexCoord; + +const float PI = 3.14159265358979323846; + +const float HORIZON_EDGE = 2.6; + +mat4 rotateMatrix(float angle, vec3 axis){ + float x = axis.x; + float y = axis.y; + float z = axis.z; + + float c = cos(angle); + float s = sin(angle); + float t = 1.0 - c; + + return mat4( + c+x*x*t, t*x*y - s*z, t*x*z + s*y, 0.0, + t*x*y + s*z, t*y*y + c, t*y*z - s*x, 0.0, + t*x*z - s*y, t*y*z + s*x, t*z*z + c, 0.0, + 0.0, 0.0, 0.0, 1.0 + ); +} + + + + + +void main() { + + v_TexCoord = gl_MultiTexCoord0.xy; + + //Extremely fragile system to deteriminte if isolate parts of the blackhole + //Would break with any uv remaping or atlas stiching + bool isDisk = (abs(v_TexCoord.y-.5f)>.245); + bool isBack = (abs(v_TexCoord.x-.5f)>.245) && isDisk; + bool isFront = (abs(v_TexCoord.x-.5f)<.255) && isDisk; + bool isBot = (v_TexCoord.y < .5) && isBack; + + float yAngle = atan(u_CameraPosition.z,u_CameraPosition.x) - PI/2; + float c = cos(yAngle); + float s = sin(yAngle); + mat4 yRotate = mat4( + vec4(c, 0.0, s, 0.0), // First column + vec4(0.0, 1.0, 0.0, 0.0), // Second column + vec4(-s, 0.0, c, 0.0), // Third column + vec4(0.0, 0.0, 0.0, 1.0) // Fourth column + ); + + + float base = length(gl_Vertex.xyz); + float stab = (base>HORIZON_EDGE)?u_Stability:1; + + float scale = ((base-HORIZON_EDGE)*stab+HORIZON_EDGE)/base; + scale = max(scale, .1); + scale*=u_Scale; + + + vec4 rotated = yRotate * vec4((gl_Vertex.xyz*scale),1); + + vec3 cameraDirection = normalize(u_CameraPosition); + cameraDirection = !isBot?cameraDirection:-cameraDirection; + vec3 rotateAxis = cross(cameraDirection,vec3(0,1,0)); + float angle = acos(dot(cameraDirection,vec3(0,1,0))); + if (isFront) angle = 0; + + float instabilityRotation =(u_Stability<=0)?u_Time/10:0; + + mat4 rotate = rotateMatrix(angle,normalize(rotateAxis)); + + + mat4 rotateB = rotateMatrix(instabilityRotation,normalize(u_CameraPosition)); + + gl_Position = gl_ModelViewProjectionMatrix * (rotateB* (rotate * (rotated))); +} diff --git a/src/main/resources/assets/gregtech/shaders/laser.frag.glsl b/src/main/resources/assets/gregtech/shaders/laser.frag.glsl new file mode 100644 index 00000000000..45656e8767f --- /dev/null +++ b/src/main/resources/assets/gregtech/shaders/laser.frag.glsl @@ -0,0 +1,25 @@ +#version 120 + +uniform sampler2D u_Texture; +uniform vec3 u_Color; + +varying vec2 v_TexCoord; + +vec3 toYIQ(vec3 rgb){ + return mat3( 0.299, 1.0, 0.40462981, 0.587, -0.46081557, -1.0, 0.114, -0.53918443, 0.59537019 ) * rgb; +} + +vec3 toRGB(vec3 yiq){ + return mat3( 1.0, 1.0, 1.0, 0.5696804, -0.1620848, -0.6590654, 0.3235513, -0.3381869, 0.8901581 ) * yiq; +} + +void main() { + vec4 texture = texture2D(u_Texture, v_TexCoord); + + vec3 targetYIQ = toYIQ(u_Color); + vec3 originalYIQ = toYIQ(texture.xyz); + vec3 yiqColor = vec3(originalYIQ.x,normalize(targetYIQ.yz)*length(originalYIQ.yz)); + vec3 finalrgb = toRGB(yiqColor); + + gl_FragColor = vec4(finalrgb,1); +} diff --git a/src/main/resources/assets/gregtech/shaders/laser.vert.glsl b/src/main/resources/assets/gregtech/shaders/laser.vert.glsl new file mode 100644 index 00000000000..9acecf5da99 --- /dev/null +++ b/src/main/resources/assets/gregtech/shaders/laser.vert.glsl @@ -0,0 +1,47 @@ +#version 120 + +uniform vec3 u_CameraPosition; +uniform mat4 u_ModelMatrix; + +varying vec2 v_TexCoord; + +const float PI = 3.14159265358979323846; + + + +mat4 rotateMatrix(float angle, vec3 axis){ + float x = axis.x; + float y = axis.y; + float z = axis.z; + + float c = cos(angle); + float s = sin(angle); + float t = 1.0 - c; + + return mat4( + c+x*x*t, t*x*y - s*z, t*x*z + s*y, 0.0, + t*x*y + s*z, t*y*y + c, t*y*z - s*x, 0.0, + t*x*z - s*y, t*y*z + s*x, t*z*z + c, 0.0, + 0.0, 0.0, 0.0, 1.0 + ); +} + + +void main() { + + v_TexCoord = gl_MultiTexCoord0.xy; + + float xAngle = atan(u_CameraPosition.y,u_CameraPosition.z) - PI/2; + float c = cos(xAngle); + float s = sin(xAngle); + mat4 xRotate = mat4( + 1.0, 0.0, 0.0, 0.0, + 0.0, c, -s, 0.0, + 0.0, s, c, 0.0, + 0.0, 0.0, 0.0, 1.0 + ); + + + gl_Position = gl_ModelViewProjectionMatrix * (u_ModelMatrix*(xRotate*gl_Vertex)); +} + diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_HATCH_BLACKHOLE.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_HATCH_HEAT_SENSOR.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_HATCH_BLACKHOLE.png rename to src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_HATCH_HEAT_SENSOR.png diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_HATCH_BLACKHOLE_GLOW.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_HATCH_HEAT_SENSOR_GLOW.png similarity index 100% rename from src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_HATCH_BLACKHOLE_GLOW.png rename to src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_HATCH_HEAT_SENSOR_GLOW.png diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE.png new file mode 100644 index 0000000000000000000000000000000000000000..082971beaf2e9d1b2c1470b3a33f5b0cd84c8eca GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|CVRR#hFJ6_ zryO8(VPXAO|N9^Fx&PlDvn!jG>g?dTkg_2?;epEs{{J^Ryk9afule`r(SslTzB17k z2`!A`?8obq{mR#Do11#$r~F+3H9^P5|J$1WMdTh~&td)hzqqjAPr6f|R?xxq_xDTA zIB|`aRYbZ$a8(8K$KQTEGZt7#vCBOu5vsan@uyBXY^w#Y13!DrKXwM@yT)Oh;tx`Q P&SUU&^>bP0l+XkKG~`pX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_ACTIVE.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_ACTIVE.png new file mode 100644 index 0000000000000000000000000000000000000000..a59e5ff4445e9432477264bfee4d80692afd6a32 GIT binary patch literal 394 zcmV;50d@X~P)Px$L`g(JR9J=WmpzKYKorOS2@11mRIm`XSqR?1Yj^+)OHbepw9TGi%M^Qny+*De zY_pKoCJs(9HY&s9&14{o!}5OJe7yO1llOxpa4?;Wb#s#Ub|Ym%%_BPjpvX&oG}`;a z+Bx^NkjKh|&{RK_hgL@>gx0RWEH*yrD-wMaUhjCGNhtsU)Pn<6iDCWKC#lWa|< zf=9%hvrGT9&2ox%3CZXZ_fXM8=qi^;iwod?(bozIxP3D;2A z3D^hhgV11reE_fz;(&d?K8OSMK@9wNA1sD5EQT`xPxQgS7g(v9eGmZqAO<4#!Tegv zW=Wd_`JhrYDpdpM=>s2LA5cfPA(ObhCeii*l|=Rd``{rw#|PgZKjdz!-(|QDZl!FN ow29XTA;j~)&^w9jg9rHF0ysQf!=!>g`v3p{07*qoM6N<$f_#&%qW}N^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_ACTIVE.png.mcmeta b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_ACTIVE.png.mcmeta new file mode 100644 index 00000000000..14578b550bf --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_ACTIVE.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/OVERLAY_MULTI_BLACKHOLE_ACTIVE_GLOW.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_ACTIVE_GLOW.png new file mode 100644 index 0000000000000000000000000000000000000000..0e6ec1e1bbbfeeba8ffc88515bd0292837912ac3 GIT binary patch literal 316 zcmV-C0mJ@@P)Px#_DMuRR9J=WmoW~4KoCX08>wySiHQf`3f7*$qgdH;3r=9|74`r&_O#SnV1vm7 zXBW&s#L2u4*>U+B{!0LaY+^U6qV8I9eSMyzYyTWJS5?#<0JMYOxpQ!IfHEA8ZQ{7a z-0&{4#*J*m4pT<|ATN3k%Ordi-v!hWZDH{6as&T?F9s7=39ja5yTZ`LTqx1d bc;1IWNlw_+TrE=)Xb^*^tDnm{r-UW|YPKlB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_UNSTABLE.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_UNSTABLE.png new file mode 100644 index 0000000000000000000000000000000000000000..78e274f0907f375f354b89d0d9bcf3253a8573b9 GIT binary patch literal 391 zcmV;20eJq2P)Px$K}keGR9J=WmcMSoFc61-wm@=IQGtpCL#1?Nsv@DjLf;{CAER^UybrH{STa@_ z8On?rtOjtGHVXceP?3-f_bpNEJ3D7bpN_%7cr;Y$PUi2al*|^_b1m?8_lW8JF@Fz} z*cI9`*19|)lx^I04#t2dgnFOM007he@nr6G{b4M^$D^T&{J_{zPu7Y2KzTwap6;X( zY)k&kxDoT6W#C4n1wFY)r-CNTqQxW@Kzep2KIs#y15&1Wy5 zpM$G@=N)-B!ZmdQ`G9-?kPm8se9#5R2jqipKtAXK&H3Qv;TG{`i>JvTe?G5P=lh_F zfBQh^dOoOv|N6js8)Z9(NzC?#10x@h4{D(qA1vo{EY@F!6Ry`E*tn=aD5Kf_pa}H` l002ovPDHLkV1gmzwE_SD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_UNSTABLE.png.mcmeta b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_UNSTABLE.png.mcmeta new file mode 100644 index 00000000000..14578b550bf --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_UNSTABLE.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/OVERLAY_MULTI_BLACKHOLE_UNSTABLE_GLOW.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_UNSTABLE_GLOW.png new file mode 100644 index 0000000000000000000000000000000000000000..09212f35b53638dc87f258e9777af21719af818b GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^0zjO=!3HEnE`C}7q!^2X+?^QKos)S9tiJLDhdH>G(M@TKt{eye;0}6^uE=100Sr*OtaZ-q0NY#^Q zua~ih>!19$Y&d!9>q1Sfx#@p@)a@!gcdOO;RaTc5bAu&w!@OoAX`eS~*A=_8md%ov zcfGb^y%*E&n<_t;;MVy4L-BmdK II;Vst0JzeI5&!@I literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_UNSTABLE_GLOW.png.mcmeta b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_UNSTABLE_GLOW.png.mcmeta new file mode 100644 index 00000000000..14578b550bf --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_BLACKHOLE_UNSTABLE_GLOW.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/OVERLAY_MULTI_NEUTRONIUM.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_NEUTRONIUM.png new file mode 100644 index 0000000000000000000000000000000000000000..2a832554857e1a353184efa3abd8d64de818bab7 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|=6Sj}hFJ6_ zCrD%*;7FcR|NW)?rXz>v-~X7!GeIOhB>@N=#d=J#js*Pp`n{TGqwjR}12=tc_{7(( zlRNh;P4viXAs%L{zUhfOSmrAhFelWl+wkVlDuL;W5qllD6izbC(4LUou}kmAuiv)U zGLjPB|yc?^DeD Z4B7Jy@7QGWSOZ|EkRw)1g literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_NEUTRONIUM_ACTIVE.png b/src/main/resources/assets/gregtech/textures/blocks/iconsets/OVERLAY_MULTI_NEUTRONIUM_ACTIVE.png new file mode 100644 index 0000000000000000000000000000000000000000..b3dc6c72fa7535a7bc9e80adf058ddc38e7e7095 GIT binary patch literal 444 zcmV;t0YmPx$c1c7*R9J=Wn7v8^K@^2gL=myk%4nmICY@mAzJ;v_g5Wa*JCiP0`2c}bVk_n$ zHkBea+gMnsESMk!krc6-;qLtI$gB~$rZ8g30~*?p&@{m)4z~Xa?Q1rFG&mkp|+-XUT=J&}L#h zLWqJ4L>DxnxE)NUBV%kpF&V1?HKL-)sDGyQ2-L)u3_wQt=H+b$0Ncwe#zJ+p#VE64 z^B}1=u(NesC{$-6&j(0fpX6ue!Jp#+V8%EQkq4y=R1@Yw#fr;=ljacsAR7-Q7et(S zK0tGA9{|wLuH-YuIiSD@=0W?Rhos&p>;>_ly?g5XMQ;b8`jJ7kJg|u-6Kv2;TUs(+ z1Lnamsu~^$W#b_LNDc^jc|Z$%GV(y}q?7^kz%N@er3_rjlrwN7!#s!}em`Iy1R3!A m!M_&YAMpKw(SYv{=Adr`tr-!*q>&Q<0000Px$F-b&0R9J=Wm^}`HFc^kkOe7{QI^f{M=;-Jryn>hT99+Rm^b(AW9Z8If9b_>v zI^a~&mQpDGl6>z*Ql5OxTb_^tgHND7tm1uXF1S7}wU>^kL-pRsM&)@@Etrny&IxJ& zo+p7hi3?H#*tX$-kd>*t)k(p>J#A<=@(T#rf_+ZcfyqeZ(}<||6D zC46SHbKX$ZDB>`Q@kWeeta#1ezjE1I3=I|><8c&UAl)Qm{Nmn$m#ity1xL>qFf#nn WQ#Q?=w9)`*D}$%2pUXO@geCy4T0A)b literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/418.png b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/418.png index 79b28819314418e6979b5187c87fe755b3f31cee..9fb3c704c9bd7cff440147b897bc1cea7c379ba1 100644 GIT binary patch delta 541 zcmV+&0^Px$<4Ht8R9J=WmOo3w zP!z>a6e(B)w<1LP0TK#+0_jkPe1t-ai*yzQKY@cF6uL~o9)U`dXZ7B#o+dmmTnTj#AE3u zgWJpWPQKb6(#RF10!FS#`a=e;Efk~hr zKL8)Pct3dp@PD*lN5Fsm>qY@*`Z2V`M9}n2?@LT=PY&>AUBk_R!jv5d6(o5t4 zUwY}Ch_(}X5RQ{Nb0!a_GLd+YKP~|q+t9Sh&`AQX*MArv-T_eLLH@V|0FnuqD-XgP zVtGKSodpq6ln1ftXKBF$HO-L+p7X;4&zX@2o+I~41^@s6AM^iV00001b5ch_0Itp)=>Px#UP(kjR5*=eU>Nd% z5tqb58=LPx$;7LS5R9J=WmcL5F zP#DEe6e(B)w<28W10)DOfpn-t9-+|UBAo@nCvXsiLO01Gf(~8W%}^aOi~oksisF<) ztBWMZpi+74b}ril}krYZEf@_5Ed(ECZ{H!=ZNrqWwrb zAAbTEOs2PV`+qmail`9);)?-LOaO54a;A>8S?&L}P!ToO3k}u_4gM@nOW4`tlsQC$ zl%wnh)Y}U(B)Jb{$Xe#8WD8>(XH1jhL94@GwK^P+2dxej9<(~te^T;+ZHs*f`2#YYi}r;m}Fq<_)+%_|U zb$AfXMBzc{G!JVbnFo&{(B2t?2c^>i58@_Z>UkhTit->a{VdISpr`ryAg1~GV48R^ cW9Nf!%@czkXyx$4ZU6uP07*qoM6N<$f{=jy1poj5 delta 149 zcmV;G0BZlH1f&6w7k>~41^@s6AM^iV00001b5ch_0Itp)=>Px#UP(kjR5*=eU>Nd% z5toFQ-Qxc+_Wm=O4Bx+f!KxOkAi8E4z-9=B04~kA3_;-#(u~azCTt4uX+{TF4Il+j z*MMz@VsS<*4B!n!7~tgM`HxMUsA$Ax2(E-Q3;+PnwJN(FU=E~p00000NkvXXu0mjf DU0pdY diff --git a/src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/419.png.mcmeta b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/419.png.mcmeta new file mode 100644 index 00000000000..14578b550bf --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.01/419.png.mcmeta @@ -0,0 +1 @@ +{"animation": {"frametime": 4}} \ No newline at end of file diff --git a/src/main/resources/assets/gregtech/textures/model/blackhole.obj b/src/main/resources/assets/gregtech/textures/model/blackhole.obj new file mode 100644 index 00000000000..2ae4ff064ed --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/model/blackhole.obj @@ -0,0 +1,1364 @@ +# Blender 4.2.0 +# www.blender.org +mtllib blackhole.mtl +o Circle +v 0.000000 0.000000 -3.000000 +v -0.294051 0.000000 -2.985554 +v -0.585271 0.000000 -2.942356 +v -0.870854 0.000000 -2.870821 +v -1.148050 0.000000 -2.771638 +v -1.414190 0.000000 -2.645764 +v -1.666711 0.000000 -2.494409 +v -1.903180 0.000000 -2.319031 +v -2.121320 0.000000 -2.121320 +v -2.319031 0.000000 -1.903180 +v -2.494409 0.000000 -1.666711 +v -2.645764 0.000000 -1.414190 +v -2.771638 0.000000 -1.148050 +v -2.870821 0.000000 -0.870854 +v -2.942356 0.000000 -0.585271 +v -2.985554 0.000000 -0.294051 +v -3.000000 0.000000 -0.000000 +v -2.985554 0.000000 0.294051 +v -2.942356 0.000000 0.585271 +v -2.870821 0.000000 0.870854 +v -2.771638 0.000000 1.148050 +v -2.645764 0.000000 1.414190 +v -2.494409 0.000000 1.666711 +v -2.319031 0.000000 1.903180 +v -2.121320 0.000000 2.121320 +v -1.903180 0.000000 2.319031 +v -1.666711 0.000000 2.494409 +v -1.414190 0.000000 2.645764 +v -1.148050 0.000000 2.771638 +v -0.870854 0.000000 2.870821 +v -0.585271 0.000000 2.942356 +v -0.294051 0.000000 2.985554 +v 0.000000 0.000000 3.000000 +v 0.294051 0.000000 2.985554 +v 0.585271 0.000000 2.942356 +v 0.870854 0.000000 2.870821 +v 1.148050 0.000000 2.771638 +v 1.414190 0.000000 2.645764 +v 1.666711 0.000000 2.494409 +v 1.903180 0.000000 2.319031 +v 2.121320 0.000000 2.121320 +v 2.319031 0.000000 1.903180 +v 2.494409 0.000000 1.666711 +v 2.645764 0.000000 1.414190 +v 2.771638 0.000000 1.148050 +v 2.870821 0.000000 0.870854 +v 2.942356 0.000000 0.585271 +v 2.985554 0.000000 0.294051 +v 3.000000 0.000000 -0.000000 +v 2.985554 0.000000 -0.294051 +v 2.942356 0.000000 -0.585271 +v 2.870821 0.000000 -0.870854 +v 2.771638 0.000000 -1.148050 +v 2.645764 0.000000 -1.414190 +v 2.494409 0.000000 -1.666711 +v 2.319031 0.000000 -1.903180 +v 2.121320 0.000000 -2.121320 +v 1.903180 0.000000 -2.319031 +v 1.666711 0.000000 -2.494409 +v 1.414190 0.000000 -2.645764 +v 1.148050 0.000000 -2.771638 +v 0.870854 0.000000 -2.870821 +v 0.585271 0.000000 -2.942356 +v 0.294051 0.000000 -2.985554 +v -0.000000 0.000000 -4.153742 +v -0.407138 0.000000 -4.133741 +v -0.810355 0.000000 -4.073929 +v -1.205768 0.000000 -3.974884 +v -1.589568 0.000000 -3.837557 +v -1.958061 0.000000 -3.663273 +v -2.307696 0.000000 -3.453710 +v -2.635107 0.000000 -3.210886 +v -2.937139 0.000000 -2.937139 +v -3.210886 0.000000 -2.635107 +v -3.453710 0.000000 -2.307696 +v -3.663273 0.000000 -1.958061 +v -3.837557 0.000000 -1.589568 +v -3.974884 0.000000 -1.205768 +v -4.073929 0.000000 -0.810355 +v -4.133741 0.000000 -0.407138 +v -4.153742 0.000000 -0.000000 +v -4.133741 0.000000 0.407138 +v -4.073929 0.000000 0.810355 +v -3.974884 0.000000 1.205768 +v -3.837557 0.000000 1.589568 +v -3.663273 0.000000 1.958061 +v -3.453710 0.000000 2.307695 +v -3.210886 0.000000 2.635106 +v -2.937139 0.000000 2.937139 +v -2.635107 0.000000 3.210886 +v -2.307696 0.000000 3.453710 +v -1.958061 0.000000 3.663273 +v -1.589568 0.000000 3.837557 +v -1.205768 0.000000 3.974884 +v -0.810355 0.000000 4.073929 +v -0.407138 0.000000 4.133741 +v -0.000000 0.000000 4.153742 +v 0.407138 0.000000 4.133741 +v 0.810355 0.000000 4.073929 +v 1.205768 0.000000 3.974884 +v 1.589568 0.000000 3.837557 +v 1.958061 0.000000 3.663273 +v 2.307695 0.000000 3.453710 +v 2.635106 0.000000 3.210886 +v 2.937139 0.000000 2.937139 +v 3.210886 0.000000 2.635106 +v 3.453710 0.000000 2.307695 +v 3.663273 0.000000 1.958061 +v 3.837557 0.000000 1.589568 +v 3.974884 0.000000 1.205768 +v 4.073929 0.000000 0.810355 +v 4.133741 0.000000 0.407138 +v 4.153742 0.000000 -0.000000 +v 4.133741 0.000000 -0.407138 +v 4.073929 0.000000 -0.810355 +v 3.974884 0.000000 -1.205768 +v 3.837557 0.000000 -1.589568 +v 3.663273 0.000000 -1.958061 +v 3.453710 0.000000 -2.307696 +v 3.210886 0.000000 -2.635107 +v 2.937139 0.000000 -2.937139 +v 2.635106 0.000000 -3.210886 +v 2.307695 0.000000 -3.453710 +v 1.958061 0.000000 -3.663273 +v 1.589568 0.000000 -3.837557 +v 1.205768 0.000000 -3.974884 +v 0.810355 0.000000 -4.073929 +v 0.407138 0.000000 -4.133741 +v 3.453710 0.000000 2.307695 +v 3.453710 0.000000 2.307695 +v 3.453710 0.000000 2.307695 +v 0.000000 0.000000 -3.000000 +v -0.294051 0.000000 -2.985554 +v -0.585271 0.000000 -2.942356 +v -0.870854 0.000000 -2.870821 +v -1.148050 0.000000 -2.771638 +v -1.414190 0.000000 -2.645764 +v -1.666711 0.000000 -2.494409 +v -1.903180 0.000000 -2.319031 +v -2.121320 0.000000 -2.121320 +v -2.319031 0.000000 -1.903180 +v -2.494409 0.000000 -1.666711 +v -2.645764 0.000000 -1.414190 +v -2.771638 0.000000 -1.148050 +v -2.870821 0.000000 -0.870854 +v -2.942356 0.000000 -0.585271 +v -2.985554 0.000000 -0.294051 +v -3.000000 0.000000 -0.000000 +v -2.985554 0.000000 0.294051 +v -2.942356 0.000000 0.585271 +v -2.870821 0.000000 0.870854 +v -2.771638 0.000000 1.148050 +v -2.645764 0.000000 1.414190 +v -2.494409 0.000000 1.666711 +v -2.319031 0.000000 1.903180 +v -2.121320 0.000000 2.121320 +v -1.903180 0.000000 2.319031 +v -1.666711 0.000000 2.494409 +v -1.414190 0.000000 2.645764 +v -1.148050 0.000000 2.771638 +v -0.870854 0.000000 2.870821 +v -0.585271 0.000000 2.942356 +v -0.294051 0.000000 2.985554 +v 0.000000 0.000000 3.000000 +v 0.294051 0.000000 2.985554 +v 0.585271 0.000000 2.942356 +v 0.870854 0.000000 2.870821 +v 1.148050 0.000000 2.771638 +v 1.414190 0.000000 2.645764 +v 1.666711 0.000000 2.494409 +v 1.903180 0.000000 2.319031 +v 2.121320 0.000000 2.121320 +v 2.319031 0.000000 1.903180 +v 2.494409 0.000000 1.666711 +v 2.645764 0.000000 1.414190 +v 2.771638 0.000000 1.148050 +v 2.870821 0.000000 0.870854 +v 2.942356 0.000000 0.585271 +v 2.985554 0.000000 0.294051 +v 3.000000 0.000000 -0.000000 +v 2.985554 0.000000 -0.294051 +v 2.942356 0.000000 -0.585271 +v 2.870821 0.000000 -0.870854 +v 2.771638 0.000000 -1.148050 +v 2.645764 0.000000 -1.414190 +v 2.494409 0.000000 -1.666711 +v 2.319031 0.000000 -1.903180 +v 2.121320 0.000000 -2.121320 +v 1.903180 0.000000 -2.319031 +v 1.666711 0.000000 -2.494409 +v 1.414190 0.000000 -2.645764 +v 1.148050 0.000000 -2.771638 +v 0.870854 0.000000 -2.870821 +v 0.585271 0.000000 -2.942356 +v 0.294051 0.000000 -2.985554 +v -0.000000 0.000000 -4.153742 +v -0.407138 0.000000 -4.133741 +v -0.810355 0.000000 -4.073929 +v -1.205768 0.000000 -3.974884 +v -1.589568 0.000000 -3.837557 +v -1.958061 0.000000 -3.663273 +v -2.307696 0.000000 -3.453710 +v -2.635107 0.000000 -3.210886 +v -2.937139 0.000000 -2.937139 +v -3.210886 0.000000 -2.635107 +v -3.453710 0.000000 -2.307696 +v -3.663273 0.000000 -1.958061 +v -3.837557 0.000000 -1.589568 +v -3.974884 0.000000 -1.205768 +v -4.073929 0.000000 -0.810355 +v -4.133741 0.000000 -0.407138 +v -4.153742 0.000000 -0.000000 +v -4.133741 0.000000 0.407138 +v -4.073929 0.000000 0.810355 +v -3.974884 0.000000 1.205768 +v -3.837557 0.000000 1.589568 +v -3.663273 0.000000 1.958061 +v -3.453710 0.000000 2.307695 +v -3.210886 0.000000 2.635106 +v -2.937139 0.000000 2.937139 +v -2.635107 0.000000 3.210886 +v -2.307696 0.000000 3.453710 +v -1.958061 0.000000 3.663273 +v -1.589568 0.000000 3.837557 +v -1.205768 0.000000 3.974884 +v -0.810355 0.000000 4.073929 +v -0.407138 0.000000 4.133741 +v -0.000000 0.000000 4.153742 +v 0.407138 0.000000 4.133741 +v 0.810355 0.000000 4.073929 +v 1.205768 0.000000 3.974884 +v 1.589568 0.000000 3.837557 +v 1.958061 0.000000 3.663273 +v 2.307695 0.000000 3.453710 +v 2.635106 0.000000 3.210886 +v 2.937139 0.000000 2.937139 +v 3.210886 0.000000 2.635106 +v 3.453710 0.000000 2.307695 +v 3.663273 0.000000 1.958061 +v 3.837557 0.000000 1.589568 +v 3.974884 0.000000 1.205768 +v 4.073929 0.000000 0.810355 +v 4.133741 0.000000 0.407138 +v 4.153742 0.000000 -0.000000 +v 4.133741 0.000000 -0.407138 +v 4.073929 0.000000 -0.810355 +v 3.974884 0.000000 -1.205768 +v 3.837557 0.000000 -1.589568 +v 3.663273 0.000000 -1.958061 +v 3.453710 0.000000 -2.307696 +v 3.210886 0.000000 -2.635107 +v 2.937139 0.000000 -2.937139 +v 2.635106 0.000000 -3.210886 +v 2.307695 0.000000 -3.453710 +v 1.958061 0.000000 -3.663273 +v 1.589568 0.000000 -3.837557 +v 1.205768 0.000000 -3.974884 +v 0.810355 0.000000 -4.073929 +v 0.407138 0.000000 -4.133741 +v 3.453710 0.000000 2.307695 +v 0.254845 0.000000 -2.587480 +v 0.507235 0.000000 -2.550042 +v 0.754740 0.000000 -2.488045 +v 0.994977 0.000000 -2.402087 +v 1.225631 0.000000 -2.292995 +v 1.444483 0.000000 -2.161821 +v 1.649423 0.000000 -2.009827 +v 1.838478 0.000000 -1.838478 +v 2.009827 0.000000 -1.649423 +v 2.161821 0.000000 -1.444483 +v 2.292995 0.000000 -1.225631 +v 2.402087 0.000000 -0.994977 +v 2.488045 0.000000 -0.754740 +v 2.550042 0.000000 -0.507235 +v 2.587480 0.000000 -0.254845 +v 2.600000 0.000000 0.000000 +v 2.587480 0.000000 0.254845 +v 2.550042 0.000000 0.507235 +v 2.488045 0.000000 0.754740 +v 2.402087 0.000000 0.994977 +v 2.292995 0.000000 1.225631 +v 2.161821 0.000000 1.444483 +v 2.009827 0.000000 1.649423 +v 1.838478 0.000000 1.838478 +v 1.649423 0.000000 2.009827 +v 1.444483 0.000000 2.161821 +v 1.225631 0.000000 2.292995 +v 0.994977 0.000000 2.402087 +v 0.754740 0.000000 2.488045 +v 0.507235 0.000000 2.550042 +v 0.254845 0.000000 2.587480 +v -0.000000 0.000000 2.600000 +v -0.254845 0.000000 2.587480 +v -0.507235 0.000000 2.550042 +v -0.754740 0.000000 2.488045 +v -0.994977 0.000000 2.402087 +v -1.225631 0.000000 2.292995 +v -1.444483 0.000000 2.161821 +v -1.649423 0.000000 2.009827 +v -1.838478 0.000000 1.838478 +v -2.009827 0.000000 1.649423 +v -2.161821 0.000000 1.444483 +v -2.292995 0.000000 1.225631 +v -2.402087 0.000000 0.994977 +v -2.488045 0.000000 0.754740 +v -2.550042 0.000000 0.507235 +v -2.587480 0.000000 0.254845 +v -2.600000 0.000000 0.000000 +v -2.587480 0.000000 -0.254845 +v -2.550042 0.000000 -0.507235 +v -2.488045 0.000000 -0.754740 +v -2.402087 0.000000 -0.994977 +v -2.292995 0.000000 -1.225631 +v -2.161821 0.000000 -1.444483 +v -2.009827 0.000000 -1.649423 +v -1.838478 0.000000 -1.838478 +v -1.649423 0.000000 -2.009827 +v -1.444483 0.000000 -2.161821 +v -1.225631 0.000000 -2.292995 +v -0.994977 0.000000 -2.402087 +v -0.754740 0.000000 -2.488045 +v -0.507235 0.000000 -2.550042 +v -0.254845 0.000000 -2.587480 +v -0.000000 0.000000 -2.600000 +v 0.000000 0.000000 -2.600000 +v -0.254845 0.000000 -2.587480 +v -0.507235 0.000000 -2.550042 +v -0.754740 0.000000 -2.488045 +v -0.994977 0.000000 -2.402087 +v -1.225631 0.000000 -2.292995 +v -1.444483 0.000000 -2.161821 +v -1.649423 0.000000 -2.009827 +v -1.838478 0.000000 -1.838478 +v -2.009827 0.000000 -1.649423 +v -2.161821 0.000000 -1.444483 +v -2.292995 0.000000 -1.225631 +v -2.402087 0.000000 -0.994977 +v -2.488045 0.000000 -0.754740 +v -2.550042 0.000000 -0.507235 +v -2.587480 0.000000 -0.254845 +v -2.600000 0.000000 -0.000000 +v -2.587480 0.000000 0.254845 +v -2.550042 0.000000 0.507235 +v -2.488045 0.000000 0.754740 +v -2.402087 0.000000 0.994977 +v -2.292995 0.000000 1.225631 +v -2.161821 0.000000 1.444483 +v -2.009827 0.000000 1.649423 +v -1.838478 0.000000 1.838478 +v -1.649423 0.000000 2.009827 +v -1.444483 0.000000 2.161821 +v -1.225631 0.000000 2.292995 +v -0.994977 0.000000 2.402087 +v -0.754740 0.000000 2.488045 +v -0.507235 0.000000 2.550042 +v -0.254845 0.000000 2.587480 +v 0.000000 0.000000 2.600000 +v 0.254845 0.000000 2.587480 +v 0.507235 0.000000 2.550042 +v 0.754740 0.000000 2.488045 +v 0.994977 0.000000 2.402087 +v 1.225631 0.000000 2.292995 +v 1.444483 0.000000 2.161821 +v 1.649423 0.000000 2.009827 +v 1.838478 0.000000 1.838478 +v 2.009827 0.000000 1.649423 +v 2.161821 0.000000 1.444483 +v 2.292995 0.000000 1.225631 +v 2.402087 0.000000 0.994977 +v 2.488045 0.000000 0.754740 +v 2.550042 0.000000 0.507235 +v 2.587480 0.000000 0.254845 +v 2.600000 0.000000 -0.000000 +v 2.587480 0.000000 -0.254845 +v 2.550042 0.000000 -0.507235 +v 2.488045 0.000000 -0.754740 +v 2.402087 0.000000 -0.994977 +v 2.292995 0.000000 -1.225631 +v 2.161821 0.000000 -1.444483 +v 2.009827 0.000000 -1.649423 +v 1.838478 0.000000 -1.838478 +v 1.649423 0.000000 -2.009827 +v 1.444483 0.000000 -2.161821 +v 1.225631 0.000000 -2.292995 +v 0.994977 0.000000 -2.402087 +v 0.754740 0.000000 -2.488045 +v 0.507235 0.000000 -2.550042 +v 0.254845 0.000000 -2.587480 +v 0.000000 0.000000 -2.795478 +v -0.274005 0.000000 -2.782017 +v -0.545371 0.000000 -2.741764 +v -0.811484 0.000000 -2.675106 +v -1.069783 0.000000 -2.582685 +v -1.317779 0.000000 -2.465391 +v -1.553084 0.000000 -2.324355 +v -1.773433 0.000000 -2.160934 +v -1.976701 0.000000 -1.976701 +v -2.160934 0.000000 -1.773433 +v -2.324355 0.000000 -1.553084 +v -2.465391 0.000000 -1.317779 +v -2.582685 0.000000 -1.069783 +v -2.675106 0.000000 -0.811484 +v -2.741764 0.000000 -0.545371 +v -2.782017 0.000000 -0.274005 +v -2.795478 0.000000 -0.000000 +v -2.782017 0.000000 0.274005 +v -2.741764 0.000000 0.545371 +v -2.675106 0.000000 0.811484 +v -2.582685 0.000000 1.069783 +v -2.465391 0.000000 1.317779 +v -2.324355 0.000000 1.553084 +v -2.160934 0.000000 1.773433 +v -1.976701 0.000000 1.976701 +v -1.773433 0.000000 2.160934 +v -1.553084 0.000000 2.324355 +v -1.317779 0.000000 2.465391 +v -1.069783 0.000000 2.582685 +v -0.811484 0.000000 2.675106 +v -0.545371 0.000000 2.741764 +v -0.274005 0.000000 2.782017 +v 0.000000 0.000000 2.795478 +v 0.274005 0.000000 2.782017 +v 0.545371 0.000000 2.741764 +v 0.811484 0.000000 2.675106 +v 1.069783 0.000000 2.582685 +v 1.317779 0.000000 2.465391 +v 1.553084 0.000000 2.324355 +v 1.773433 0.000000 2.160934 +v 1.976701 0.000000 1.976701 +v 2.160934 0.000000 1.773433 +v 2.324355 0.000000 1.553084 +v 2.465391 0.000000 1.317779 +v 2.582685 0.000000 1.069783 +v 2.675106 0.000000 0.811484 +v 2.741764 0.000000 0.545371 +v 2.782017 0.000000 0.274005 +v 2.795478 0.000000 -0.000000 +v 2.782017 0.000000 -0.274005 +v 2.741764 0.000000 -0.545371 +v 2.675106 0.000000 -0.811484 +v 2.582685 0.000000 -1.069783 +v 2.465391 0.000000 -1.317779 +v 2.324355 0.000000 -1.553084 +v 2.160934 0.000000 -1.773433 +v 1.976701 0.000000 -1.976701 +v 1.773433 0.000000 -2.160934 +v 1.553084 0.000000 -2.324355 +v 1.317779 0.000000 -2.465391 +v 1.069783 0.000000 -2.582685 +v 0.811484 0.000000 -2.675106 +v 0.545371 0.000000 -2.741764 +v 0.274005 0.000000 -2.782017 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vt 0.312504 1.000012 +vt 0.328129 0.875013 +vt 0.312504 0.875013 +vt 0.718744 1.000012 +vt 0.734369 0.875013 +vt 0.718744 0.875013 +vt 0.296879 0.875013 +vt 0.703120 0.875013 +vt 0.281255 1.000012 +vt 0.281255 0.875013 +vt 0.687495 1.000012 +vt 0.687495 0.875013 +vt 0.265630 0.875013 +vt 0.671870 0.875013 +vt 0.250006 0.875013 +vt 0.265630 1.000012 +vt 0.656246 1.000012 +vt 0.656246 0.875013 +vt 0.234381 0.875013 +vt 0.250006 1.000012 +vt 0.640621 0.875013 +vt 0.218757 1.000012 +vt 0.218757 0.875013 +vt 0.624997 1.000012 +vt 0.624997 0.875013 +vt 0.203132 0.875013 +vt 0.609372 0.875013 +vt 0.187507 1.000012 +vt 0.187507 0.875013 +vt 0.593747 1.000012 +vt 0.593747 0.875013 +vt 0.171883 0.875013 +vt 0.578123 1.000012 +vt 0.578123 0.875013 +vt 0.984363 1.000012 +vt 0.999988 0.875013 +vt 0.984363 0.875013 +vt 0.156258 1.000012 +vt 0.156258 0.875013 +vt 0.562498 1.000012 +vt 0.562498 0.875013 +vt 0.968738 1.000012 +vt 0.968738 0.875013 +vt 0.140634 0.875013 +vt 0.546873 0.875013 +vt 0.953114 0.875013 +vt 0.125009 1.000012 +vt 0.125009 0.875013 +vt 0.531249 1.000012 +vt 0.531249 0.875013 +vt 0.937489 1.000012 +vt 0.937489 0.875013 +vt 0.109384 0.875013 +vt 0.515624 0.875013 +vt 0.921865 0.875013 +vt 0.093760 1.000012 +vt 0.093760 0.875013 +vt 0.500000 0.875013 +vt 0.515624 1.000012 +vt 0.906240 0.875013 +vt 0.921865 1.000012 +vt 0.078135 1.000012 +vt 0.078135 0.875013 +vt 0.484375 0.875013 +vt 0.500000 1.000012 +vt 0.890615 0.875013 +vt 0.906240 1.000012 +vt 0.062511 1.000012 +vt 0.062511 0.875013 +vt 0.468750 1.000012 +vt 0.468750 0.875013 +vt 0.874991 1.000012 +vt 0.874991 0.875013 +vt 0.046886 0.875013 +vt 0.453126 0.875013 +vt 0.859366 0.875013 +vt 0.031262 1.000012 +vt 0.031262 0.875013 +vt 0.437501 1.000012 +vt 0.437501 0.875013 +vt 0.843741 1.000012 +vt 0.843741 0.875013 +vt 0.015637 0.875013 +vt 0.421876 0.875013 +vt 0.828117 1.000012 +vt 0.828117 0.875013 +vt 0.000013 1.000012 +vt 0.000013 0.875013 +vt 0.406252 1.000012 +vt 0.406252 0.875013 +vt 0.812492 1.000012 +vt 0.812492 0.875013 +vt 0.390627 0.875013 +vt 0.796867 0.875013 +vt 0.375002 1.000012 +vt 0.375002 0.875013 +vt 0.781243 1.000012 +vt 0.781243 0.875013 +vt 0.359378 0.875013 +vt 0.765618 0.875013 +vt 0.343753 1.000012 +vt 0.343753 0.875013 +vt 0.749994 1.000012 +vt 0.749994 0.875013 +vt 0.328129 1.000012 +vt 0.734369 1.000012 +vt 0.328129 0.000013 +vt 0.312504 0.125012 +vt 0.312504 0.000013 +vt 0.734369 0.000013 +vt 0.718744 0.125012 +vt 0.718744 0.000013 +vt 0.296879 0.000013 +vt 0.296879 0.125012 +vt 0.703120 0.000013 +vt 0.703120 0.125012 +vt 0.281255 0.125012 +vt 0.281255 0.000013 +vt 0.687495 0.125012 +vt 0.687495 0.000013 +vt 0.265630 0.000012 +vt 0.265630 0.125012 +vt 0.671870 0.000013 +vt 0.671870 0.125012 +vt 0.250006 0.125012 +vt 0.250006 0.000012 +vt 0.656246 0.125012 +vt 0.656246 0.000013 +vt 0.234381 0.125012 +vt 0.234381 0.000012 +vt 0.640621 0.000013 +vt 0.640621 0.125012 +vt 0.218757 0.125012 +vt 0.218757 0.000012 +vt 0.624997 0.125012 +vt 0.624997 0.000013 +vt 0.203132 0.000012 +vt 0.203132 0.125012 +vt 0.609372 0.000013 +vt 0.609372 0.125012 +vt 0.187507 0.125012 +vt 0.187507 0.000012 +vt 0.593747 0.125012 +vt 0.593747 0.000013 +vt 0.171883 0.000012 +vt 0.171883 0.125012 +vt 0.578123 0.125012 +vt 0.578123 0.000013 +vt 0.999988 0.000013 +vt 0.984363 0.125012 +vt 0.984363 0.000013 +vt 0.156258 0.000012 +vt 0.156258 0.125012 +vt 0.562498 0.125012 +vt 0.562498 0.000013 +vt 0.968738 0.125012 +vt 0.968738 0.000013 +vt 0.140634 0.125012 +vt 0.140634 0.000012 +vt 0.546873 0.000013 +vt 0.546873 0.125012 +vt 0.953114 0.000013 +vt 0.953114 0.125012 +vt 0.125009 0.125012 +vt 0.125009 0.000012 +vt 0.531249 0.125012 +vt 0.531249 0.000013 +vt 0.937489 0.125012 +vt 0.937489 0.000013 +vt 0.109384 0.000012 +vt 0.109384 0.125012 +vt 0.515624 0.000013 +vt 0.515624 0.125012 +vt 0.921865 0.000013 +vt 0.921865 0.125012 +vt 0.093760 0.125012 +vt 0.093760 0.000012 +vt 0.500000 0.000013 +vt 0.500000 0.125012 +vt 0.906240 0.000013 +vt 0.906240 0.125012 +vt 0.078135 0.125012 +vt 0.078135 0.000012 +vt 0.484375 0.125012 +vt 0.484375 0.000013 +vt 0.890615 0.125012 +vt 0.890615 0.000013 +vt 0.062511 0.125012 +vt 0.062511 0.000012 +vt 0.468750 0.125012 +vt 0.468750 0.000013 +vt 0.874991 0.125012 +vt 0.874991 0.000013 +vt 0.046886 0.000012 +vt 0.046886 0.125012 +vt 0.453126 0.000013 +vt 0.453126 0.125012 +vt 0.859366 0.000013 +vt 0.859366 0.125012 +vt 0.031262 0.125012 +vt 0.031262 0.000012 +vt 0.437501 0.125012 +vt 0.437501 0.000013 +vt 0.843741 0.125012 +vt 0.843741 0.000013 +vt 0.015637 0.000013 +vt 0.015637 0.125012 +vt 0.421876 0.000013 +vt 0.421876 0.125012 +vt 0.828117 0.125012 +vt 0.828117 0.000013 +vt 0.000013 0.125012 +vt 0.000013 0.000012 +vt 0.406252 0.125012 +vt 0.406252 0.000013 +vt 0.812492 0.125012 +vt 0.812492 0.000013 +vt 0.390627 0.000013 +vt 0.390627 0.125012 +vt 0.796867 0.000013 +vt 0.796867 0.125012 +vt 0.375002 0.125012 +vt 0.375002 0.000013 +vt 0.781243 0.125012 +vt 0.781243 0.000013 +vt 0.359378 0.000013 +vt 0.359378 0.125012 +vt 0.765618 0.000013 +vt 0.765618 0.125012 +vt 0.343753 0.125012 +vt 0.343753 0.000013 +vt 0.749994 0.125012 +vt 0.749994 0.000013 +vt 0.328129 0.125012 +vt 0.734369 0.125012 +vt 0.868503 0.390619 +vt 0.863139 0.426778 +vt 0.870296 0.354109 +vt 0.854257 0.462236 +vt 0.841942 0.496654 +vt 0.826313 0.529698 +vt 0.807521 0.561052 +vt 0.785746 0.590413 +vt 0.761197 0.617497 +vt 0.734112 0.642046 +vt 0.704751 0.663821 +vt 0.673398 0.682614 +vt 0.640354 0.698243 +vt 0.605936 0.710558 +vt 0.570477 0.719439 +vt 0.534319 0.724803 +vt 0.497808 0.726597 +vt 0.461298 0.724803 +vt 0.425140 0.719439 +vt 0.389681 0.710558 +vt 0.355264 0.698243 +vt 0.322219 0.682614 +vt 0.290865 0.663821 +vt 0.261505 0.642046 +vt 0.234420 0.617498 +vt 0.209872 0.590413 +vt 0.188096 0.561052 +vt 0.169304 0.529699 +vt 0.153675 0.496654 +vt 0.141360 0.462237 +vt 0.132478 0.426778 +vt 0.127114 0.390619 +vt 0.125321 0.354109 +vt 0.868503 0.390619 +vt 0.863139 0.426778 +vt 0.870296 0.354109 +vt 0.854257 0.462237 +vt 0.841942 0.496654 +vt 0.826313 0.529699 +vt 0.807521 0.561052 +vt 0.785746 0.590413 +vt 0.761197 0.617498 +vt 0.734112 0.642046 +vt 0.704751 0.663821 +vt 0.673398 0.682614 +vt 0.640353 0.698243 +vt 0.605936 0.710558 +vt 0.570477 0.719440 +vt 0.534319 0.724803 +vt 0.497809 0.726597 +vt 0.461298 0.724803 +vt 0.425140 0.719440 +vt 0.389681 0.710558 +vt 0.355264 0.698243 +vt 0.322219 0.682614 +vt 0.290866 0.663821 +vt 0.261505 0.642046 +vt 0.234420 0.617498 +vt 0.209872 0.590413 +vt 0.188096 0.561052 +vt 0.169304 0.529699 +vt 0.153675 0.496654 +vt 0.141360 0.462237 +vt 0.132478 0.426778 +vt 0.125321 0.354109 +vt 0.390627 0.298860 +vt 0.375003 0.326578 +vt 0.390627 0.326578 +vt 0.812493 0.298860 +vt 0.796869 0.326578 +vt 0.812493 0.326578 +vt 0.406252 0.326578 +vt 0.406252 0.298860 +vt 0.828118 0.326578 +vt 0.828118 0.298860 +vt 0.421877 0.326578 +vt 0.421877 0.298860 +vt 0.000011 0.298860 +vt 0.015635 0.326578 +vt 0.015635 0.298860 +vt 0.843743 0.326578 +vt 0.843743 0.298860 +vt 0.437501 0.298860 +vt 0.437501 0.326578 +vt 0.031260 0.298860 +vt 0.031260 0.326578 +vt 0.859367 0.298860 +vt 0.859367 0.326578 +vt 0.453126 0.326578 +vt 0.453126 0.298860 +vt 0.046885 0.326578 +vt 0.046885 0.298860 +vt 0.874992 0.326578 +vt 0.874992 0.298860 +vt 0.468751 0.326578 +vt 0.468751 0.298860 +vt 0.062509 0.326578 +vt 0.062509 0.298860 +vt 0.890617 0.298860 +vt 0.890617 0.326578 +vt 0.484375 0.326578 +vt 0.484375 0.298860 +vt 0.078134 0.326578 +vt 0.078134 0.298860 +vt 0.906241 0.326578 +vt 0.906241 0.298860 +vt 0.500000 0.298860 +vt 0.500000 0.326578 +vt 0.093759 0.326578 +vt 0.093759 0.298860 +vt 0.921866 0.326578 +vt 0.921866 0.298860 +vt 0.515625 0.326578 +vt 0.515625 0.298860 +vt 0.109383 0.298860 +vt 0.109383 0.326578 +vt 0.937491 0.298860 +vt 0.937491 0.326578 +vt 0.531249 0.298860 +vt 0.531249 0.326578 +vt 0.125008 0.326578 +vt 0.125008 0.298860 +vt 0.953115 0.326578 +vt 0.953115 0.298860 +vt 0.546874 0.326578 +vt 0.546874 0.298860 +vt 0.140633 0.298860 +vt 0.140633 0.326578 +vt 0.968740 0.326578 +vt 0.968740 0.298860 +vt 0.562499 0.298860 +vt 0.562499 0.326578 +vt 0.156257 0.326578 +vt 0.156257 0.298860 +vt 0.984365 0.326578 +vt 0.984365 0.298860 +vt 0.578123 0.326578 +vt 0.578123 0.298860 +vt 0.171882 0.326578 +vt 0.171882 0.298860 +vt 0.999989 0.298860 +vt 0.999989 0.326578 +vt 0.593748 0.326578 +vt 0.593748 0.298860 +vt 0.187507 0.298860 +vt 0.187507 0.326578 +vt 0.609373 0.298860 +vt 0.609373 0.326578 +vt 0.203131 0.326578 +vt 0.203131 0.298860 +vt 0.624997 0.326578 +vt 0.624997 0.298860 +vt 0.218756 0.326578 +vt 0.218756 0.298860 +vt 0.640622 0.298860 +vt 0.640622 0.326578 +vt 0.234381 0.326578 +vt 0.234381 0.298860 +vt 0.656247 0.326578 +vt 0.656247 0.298860 +vt 0.250005 0.298860 +vt 0.250005 0.326578 +vt 0.671871 0.326578 +vt 0.671871 0.298860 +vt 0.265630 0.326578 +vt 0.265630 0.298860 +vt 0.687496 0.298860 +vt 0.687496 0.326578 +vt 0.281255 0.298860 +vt 0.281255 0.326578 +vt 0.703121 0.326578 +vt 0.703121 0.298860 +vt 0.296879 0.326578 +vt 0.296879 0.298860 +vt 0.718745 0.326578 +vt 0.718745 0.298860 +vt 0.312504 0.298860 +vt 0.312504 0.326578 +vt 0.734370 0.326578 +vt 0.734370 0.298860 +vt 0.328129 0.326578 +vt 0.328129 0.298860 +vt 0.749995 0.298860 +vt 0.749995 0.326578 +vt 0.343753 0.326578 +vt 0.343753 0.298860 +vt 0.765619 0.326578 +vt 0.765619 0.298860 +vt 0.359378 0.298860 +vt 0.359378 0.326578 +vt 0.781244 0.298860 +vt 0.781244 0.326578 +vt 0.375003 0.298860 +vt 0.796869 0.298860 +vt 0.296879 1.000012 +vt 0.703120 1.000012 +vt 0.671870 1.000012 +vt 0.234381 1.000012 +vt 0.640621 1.000012 +vt 0.203132 1.000012 +vt 0.609372 1.000012 +vt 0.171883 1.000012 +vt 0.999988 1.000012 +vt 0.140634 1.000012 +vt 0.546873 1.000012 +vt 0.953114 1.000012 +vt 0.109384 1.000012 +vt 0.484375 1.000012 +vt 0.890615 1.000012 +vt 0.046886 1.000012 +vt 0.453126 1.000012 +vt 0.859366 1.000012 +vt 0.015637 1.000012 +vt 0.421876 1.000012 +vt 0.390627 1.000012 +vt 0.796867 1.000012 +vt 0.359378 1.000012 +vt 0.765618 1.000012 +vt 0.999988 0.125012 +vt 0.000011 0.326578 +s 0 +usemtl Material.001 +f 109/1/1 44/2/1 45/3/1 +f 83/4/1 18/5/1 19/6/1 +f 46/7/1 109/1/1 45/3/1 +f 20/8/1 83/4/1 19/6/1 +f 111/9/1 46/7/1 47/10/1 +f 85/11/1 20/8/1 21/12/1 +f 48/13/1 111/9/1 47/10/1 +f 22/14/1 85/11/1 21/12/1 +f 49/15/1 112/16/1 48/13/1 +f 87/17/1 22/14/1 23/18/1 +f 50/19/1 113/20/1 49/15/1 +f 24/21/1 87/17/1 23/18/1 +f 115/22/1 50/19/1 51/23/1 +f 89/24/1 24/21/1 25/25/1 +f 52/26/1 115/22/1 51/23/1 +f 26/27/1 89/24/1 25/25/1 +f 117/28/1 52/26/1 53/29/1 +f 91/30/1 26/27/1 27/31/1 +f 54/32/1 117/28/1 53/29/1 +f 92/33/1 27/31/1 28/34/1 +f 66/35/1 1/36/1 2/37/1 +f 119/38/1 54/32/1 55/39/1 +f 93/40/1 28/34/1 29/41/1 +f 67/42/1 2/37/1 3/43/1 +f 56/44/1 119/38/1 55/39/1 +f 30/45/1 93/40/1 29/41/1 +f 4/46/1 67/42/1 3/43/1 +f 121/47/1 56/44/1 57/48/1 +f 95/49/1 30/45/1 31/50/1 +f 69/51/1 4/46/1 5/52/1 +f 58/53/1 121/47/1 57/48/1 +f 32/54/1 95/49/1 31/50/1 +f 6/55/1 69/51/1 5/52/1 +f 123/56/1 58/53/1 59/57/1 +f 33/58/1 96/59/1 32/54/1 +f 7/60/1 70/61/1 6/55/1 +f 124/62/1 59/57/1 60/63/1 +f 34/64/1 97/65/1 33/58/1 +f 8/66/1 71/67/1 7/60/1 +f 125/68/1 60/63/1 61/69/1 +f 99/70/1 34/64/1 35/71/1 +f 73/72/1 8/66/1 9/73/1 +f 62/74/1 125/68/1 61/69/1 +f 36/75/1 99/70/1 35/71/1 +f 10/76/1 73/72/1 9/73/1 +f 127/77/1 62/74/1 63/78/1 +f 101/79/1 36/75/1 37/80/1 +f 75/81/1 10/76/1 11/82/1 +f 64/83/1 127/77/1 63/78/1 +f 38/84/1 101/79/1 37/80/1 +f 76/85/1 11/82/1 12/86/1 +f 65/87/1 64/83/1 1/88/1 +f 103/89/1 38/84/1 39/90/1 +f 77/91/1 12/86/1 13/92/1 +f 40/93/1 103/89/1 39/90/1 +f 14/94/1 77/91/1 13/92/1 +f 105/95/1 40/93/1 41/96/1 +f 79/97/1 14/94/1 15/98/1 +f 42/99/1 105/95/1 41/96/1 +f 16/100/1 79/97/1 15/98/1 +f 107/101/1 42/99/1 43/102/1 +f 81/103/1 16/100/1 17/104/1 +f 108/105/1 43/102/1 44/2/1 +f 82/106/1 17/104/1 18/5/1 +f 175/107/2 240/108/2 176/109/2 +f 149/110/2 214/111/2 150/112/2 +f 177/113/2 240/108/2 241/114/2 +f 151/115/2 214/111/2 215/116/2 +f 177/113/2 242/117/2 178/118/2 +f 151/115/2 216/119/2 152/120/2 +f 179/121/2 242/117/2 243/122/2 +f 153/123/2 216/119/2 217/124/2 +f 179/121/2 244/125/2 180/126/2 +f 153/123/2 218/127/2 154/128/2 +f 180/126/2 245/129/2 181/130/2 +f 155/131/2 218/127/2 219/132/2 +f 181/130/2 246/133/2 182/134/2 +f 155/131/2 220/135/2 156/136/2 +f 183/137/2 246/133/2 247/138/2 +f 157/139/2 220/135/2 221/140/2 +f 183/137/2 248/141/2 184/142/2 +f 157/139/2 222/143/2 158/144/2 +f 185/145/2 248/141/2 249/146/2 +f 158/144/2 223/147/2 159/148/2 +f 132/149/2 197/150/2 133/151/2 +f 186/152/2 249/146/2 250/153/2 +f 159/148/2 224/154/2 160/155/2 +f 133/151/2 198/156/2 134/157/2 +f 186/152/2 251/158/2 187/159/2 +f 161/160/2 224/154/2 225/161/2 +f 135/162/2 198/156/2 199/163/2 +f 187/159/2 252/164/2 188/165/2 +f 161/160/2 226/166/2 162/167/2 +f 135/162/2 200/168/2 136/169/2 +f 189/170/2 252/164/2 253/171/2 +f 163/172/2 226/166/2 227/173/2 +f 137/174/2 200/168/2 201/175/2 +f 189/170/2 254/176/2 190/177/2 +f 164/178/2 227/173/2 228/179/2 +f 138/180/2 201/175/2 202/181/2 +f 190/177/2 255/182/2 191/183/2 +f 164/178/2 229/184/2 165/185/2 +f 138/180/2 203/186/2 139/187/2 +f 191/183/2 256/188/2 192/189/2 +f 165/185/2 230/190/2 166/191/2 +f 139/187/2 204/192/2 140/193/2 +f 193/194/2 256/188/2 257/195/2 +f 167/196/2 230/190/2 231/197/2 +f 141/198/2 204/192/2 205/199/2 +f 193/194/2 258/200/2 194/201/2 +f 167/196/2 232/202/2 168/203/2 +f 141/198/2 206/204/2 142/205/2 +f 195/206/2 258/200/2 259/207/2 +f 169/208/2 232/202/2 233/209/2 +f 142/205/2 207/210/2 143/211/2 +f 195/206/2 196/212/2 132/213/2 +f 169/208/2 234/214/2 170/215/2 +f 143/211/2 208/216/2 144/217/2 +f 171/218/2 234/214/2 235/219/2 +f 145/220/2 208/216/2 209/221/2 +f 171/218/2 236/222/2 172/223/2 +f 145/220/2 210/224/2 146/225/2 +f 173/226/2 236/222/2 237/227/2 +f 147/228/2 210/224/2 211/229/2 +f 173/226/2 238/230/2 174/231/2 +f 147/228/2 212/232/2 148/233/2 +f 174/231/2 239/234/2 175/107/2 +f 148/233/2 213/235/2 149/110/2 +f 323/236/2 322/237/2 324/238/2 +f 321/239/2 320/240/2 322/237/2 +f 319/241/2 318/242/2 320/240/2 +f 317/243/2 316/244/2 318/242/2 +f 315/245/2 314/246/2 316/244/2 +f 313/247/2 312/248/2 314/246/2 +f 311/249/2 310/250/2 312/248/2 +f 309/251/2 308/252/2 310/250/2 +f 307/253/2 306/254/2 308/252/2 +f 305/255/2 304/256/2 306/254/2 +f 303/257/2 302/258/2 304/256/2 +f 301/259/2 300/260/2 302/258/2 +f 299/261/2 298/262/2 300/260/2 +f 297/263/2 296/264/2 298/262/2 +f 295/265/2 294/266/2 296/264/2 +f 293/267/2 292/268/2 294/266/2 +f 291/269/2 290/270/2 292/271/2 +f 289/272/2 288/273/2 290/270/2 +f 287/274/2 286/275/2 288/273/2 +f 285/276/2 284/277/2 286/275/2 +f 283/278/2 282/279/2 284/277/2 +f 281/280/2 280/281/2 282/279/2 +f 279/282/2 278/283/2 280/281/2 +f 277/284/2 276/285/2 278/283/2 +f 275/286/2 274/287/2 276/285/2 +f 273/288/2 272/289/2 274/287/2 +f 271/290/2 270/291/2 272/289/2 +f 269/292/2 268/293/2 270/291/2 +f 267/294/2 266/295/2 268/293/2 +f 265/296/2 264/297/2 266/295/2 +f 263/298/2 262/299/2 264/297/2 +f 261/267/2 324/300/2 262/299/2 +f 322/237/2 320/240/2 324/238/2 +f 318/242/2 316/244/2 320/240/2 +f 314/246/2 312/248/2 316/244/2 +f 310/250/2 308/252/2 312/248/2 +f 306/254/2 304/256/2 308/252/2 +f 302/258/2 300/260/2 304/256/2 +f 298/262/2 296/264/2 300/260/2 +f 294/266/2 292/268/2 296/264/2 +f 290/270/2 288/273/2 292/271/2 +f 286/275/2 284/277/2 288/273/2 +f 282/279/2 280/281/2 284/277/2 +f 278/283/2 276/285/2 280/281/2 +f 274/287/2 272/289/2 276/285/2 +f 270/291/2 268/293/2 272/289/2 +f 266/295/2 264/297/2 268/293/2 +f 262/299/2 324/300/2 264/297/2 +f 320/240/2 316/244/2 324/238/2 +f 312/248/2 308/252/2 316/244/2 +f 304/256/2 300/260/2 308/252/2 +f 296/264/2 292/268/2 300/260/2 +f 288/273/2 284/277/2 292/271/2 +f 280/281/2 276/285/2 284/277/2 +f 272/289/2 268/293/2 276/285/2 +f 264/297/2 324/300/2 268/293/2 +f 316/244/2 308/252/2 324/238/2 +f 300/260/2 292/268/2 308/252/2 +f 284/277/2 276/285/2 292/271/2 +f 268/293/2 324/300/2 276/285/2 +f 308/252/2 292/268/2 324/238/2 +f 292/271/2 276/285/2 324/300/2 +f 350/301/2 413/302/2 414/303/2 +f 377/304/2 440/305/2 441/306/2 +f 350/301/2 415/307/2 351/308/2 +f 377/304/2 442/309/2 378/310/2 +f 351/308/2 416/311/2 352/312/2 +f 325/313/2 390/314/2 326/315/2 +f 378/310/2 443/316/2 379/317/2 +f 353/318/2 416/311/2 417/319/2 +f 327/320/2 390/314/2 391/321/2 +f 380/322/2 443/316/2 444/323/2 +f 353/318/2 418/324/2 354/325/2 +f 327/320/2 392/326/2 328/327/2 +f 380/322/2 445/328/2 381/329/2 +f 354/325/2 419/330/2 355/331/2 +f 328/327/2 393/332/2 329/333/2 +f 382/334/2 445/328/2 446/335/2 +f 355/331/2 420/336/2 356/337/2 +f 329/333/2 394/338/2 330/339/2 +f 382/334/2 447/340/2 383/341/2 +f 357/342/2 420/336/2 421/343/2 +f 330/339/2 395/344/2 331/345/2 +f 383/341/2 448/346/2 384/347/2 +f 357/342/2 422/348/2 358/349/2 +f 332/350/2 395/344/2 396/351/2 +f 385/352/2 448/346/2 449/353/2 +f 359/354/2 422/348/2 423/355/2 +f 332/350/2 397/356/2 333/357/2 +f 385/352/2 450/358/2 386/359/2 +f 359/354/2 424/360/2 360/361/2 +f 334/362/2 397/356/2 398/363/2 +f 386/359/2 451/364/2 387/365/2 +f 361/366/2 424/360/2 425/367/2 +f 334/362/2 399/368/2 335/369/2 +f 387/365/2 452/370/2 388/371/2 +f 361/366/2 426/372/2 362/373/2 +f 335/369/2 400/374/2 336/375/2 +f 325/376/2 452/370/2 389/377/2 +f 362/373/2 427/378/2 363/379/2 +f 337/380/2 400/374/2 401/381/2 +f 364/382/2 427/378/2 428/383/2 +f 337/380/2 402/384/2 338/385/2 +f 364/382/2 429/386/2 365/387/2 +f 338/385/2 403/388/2 339/389/2 +f 366/390/2 429/386/2 430/391/2 +f 339/389/2 404/392/2 340/393/2 +f 366/390/2 431/394/2 367/395/2 +f 341/396/2 404/392/2 405/397/2 +f 367/395/2 432/398/2 368/399/2 +f 341/396/2 406/400/2 342/401/2 +f 369/402/2 432/398/2 433/403/2 +f 343/404/2 406/400/2 407/405/2 +f 369/402/2 434/406/2 370/407/2 +f 343/404/2 408/408/2 344/409/2 +f 370/407/2 435/410/2 371/411/2 +f 345/412/2 408/408/2 409/413/2 +f 371/411/2 436/414/2 372/415/2 +f 345/412/2 410/416/2 346/417/2 +f 373/418/2 436/414/2 437/419/2 +f 346/417/2 411/420/2 347/421/2 +f 373/418/2 438/422/2 374/423/2 +f 348/424/2 411/420/2 412/425/2 +f 375/426/2 438/422/2 439/427/2 +f 348/424/2 413/302/2 349/428/2 +f 375/426/2 440/305/2 376/429/2 +f 109/1/1 108/105/1 44/2/1 +f 83/4/1 82/106/1 18/5/1 +f 46/7/1 110/430/1 109/1/1 +f 20/8/1 84/431/1 83/4/1 +f 111/9/1 110/430/1 46/7/1 +f 85/11/1 84/431/1 20/8/1 +f 48/13/1 112/16/1 111/9/1 +f 22/14/1 86/432/1 85/11/1 +f 49/15/1 113/20/1 112/16/1 +f 87/17/1 86/432/1 22/14/1 +f 50/19/1 114/433/1 113/20/1 +f 24/21/1 88/434/1 87/17/1 +f 115/22/1 114/433/1 50/19/1 +f 89/24/1 88/434/1 24/21/1 +f 52/26/1 116/435/1 115/22/1 +f 26/27/1 90/436/1 89/24/1 +f 117/28/1 116/435/1 52/26/1 +f 91/30/1 90/436/1 26/27/1 +f 54/32/1 118/437/1 117/28/1 +f 92/33/1 91/30/1 27/31/1 +f 66/35/1 65/438/1 1/36/1 +f 119/38/1 118/437/1 54/32/1 +f 93/40/1 92/33/1 28/34/1 +f 67/42/1 66/35/1 2/37/1 +f 56/44/1 120/439/1 119/38/1 +f 30/45/1 94/440/1 93/40/1 +f 4/46/1 68/441/1 67/42/1 +f 121/47/1 120/439/1 56/44/1 +f 95/49/1 94/440/1 30/45/1 +f 69/51/1 68/441/1 4/46/1 +f 58/53/1 122/442/1 121/47/1 +f 32/54/1 96/59/1 95/49/1 +f 6/55/1 70/61/1 69/51/1 +f 123/56/1 122/442/1 58/53/1 +f 33/58/1 97/65/1 96/59/1 +f 7/60/1 71/67/1 70/61/1 +f 124/62/1 123/56/1 59/57/1 +f 34/64/1 98/443/1 97/65/1 +f 8/66/1 72/444/1 71/67/1 +f 125/68/1 124/62/1 60/63/1 +f 99/70/1 98/443/1 34/64/1 +f 73/72/1 72/444/1 8/66/1 +f 62/74/1 126/445/1 125/68/1 +f 36/75/1 100/446/1 99/70/1 +f 10/76/1 74/447/1 73/72/1 +f 127/77/1 126/445/1 62/74/1 +f 101/79/1 100/446/1 36/75/1 +f 75/81/1 74/447/1 10/76/1 +f 64/83/1 128/448/1 127/77/1 +f 38/84/1 102/449/1 101/79/1 +f 76/85/1 75/81/1 11/82/1 +f 65/87/1 128/448/1 64/83/1 +f 103/89/1 102/449/1 38/84/1 +f 77/91/1 76/85/1 12/86/1 +f 40/93/1 104/450/1 103/89/1 +f 14/94/1 78/451/1 77/91/1 +f 105/95/1 104/450/1 40/93/1 +f 79/97/1 78/451/1 14/94/1 +f 42/99/1 106/452/1 105/95/1 +f 16/100/1 80/453/1 79/97/1 +f 107/101/1 106/452/1 42/99/1 +f 81/103/1 80/453/1 16/100/1 +f 108/105/1 107/101/1 43/102/1 +f 82/106/1 81/103/1 17/104/1 +f 175/107/2 239/234/2 240/108/2 +f 149/110/2 213/235/2 214/111/2 +f 177/113/2 176/109/2 240/108/2 +f 151/115/2 150/112/2 214/111/2 +f 177/113/2 241/114/2 242/117/2 +f 151/115/2 215/116/2 216/119/2 +f 179/121/2 178/118/2 242/117/2 +f 153/123/2 152/120/2 216/119/2 +f 179/121/2 243/122/2 244/125/2 +f 153/123/2 217/124/2 218/127/2 +f 180/126/2 244/125/2 245/129/2 +f 155/131/2 154/128/2 218/127/2 +f 181/130/2 245/129/2 246/133/2 +f 155/131/2 219/132/2 220/135/2 +f 183/137/2 182/134/2 246/133/2 +f 157/139/2 156/136/2 220/135/2 +f 183/137/2 247/138/2 248/141/2 +f 157/139/2 221/140/2 222/143/2 +f 185/145/2 184/142/2 248/141/2 +f 158/144/2 222/143/2 223/147/2 +f 132/149/2 196/454/2 197/150/2 +f 186/152/2 185/145/2 249/146/2 +f 159/148/2 223/147/2 224/154/2 +f 133/151/2 197/150/2 198/156/2 +f 186/152/2 250/153/2 251/158/2 +f 161/160/2 160/155/2 224/154/2 +f 135/162/2 134/157/2 198/156/2 +f 187/159/2 251/158/2 252/164/2 +f 161/160/2 225/161/2 226/166/2 +f 135/162/2 199/163/2 200/168/2 +f 189/170/2 188/165/2 252/164/2 +f 163/172/2 162/167/2 226/166/2 +f 137/174/2 136/169/2 200/168/2 +f 189/170/2 253/171/2 254/176/2 +f 164/178/2 163/172/2 227/173/2 +f 138/180/2 137/174/2 201/175/2 +f 190/177/2 254/176/2 255/182/2 +f 164/178/2 228/179/2 229/184/2 +f 138/180/2 202/181/2 203/186/2 +f 191/183/2 255/182/2 256/188/2 +f 165/185/2 229/184/2 230/190/2 +f 139/187/2 203/186/2 204/192/2 +f 193/194/2 192/189/2 256/188/2 +f 167/196/2 166/191/2 230/190/2 +f 141/198/2 140/193/2 204/192/2 +f 193/194/2 257/195/2 258/200/2 +f 167/196/2 231/197/2 232/202/2 +f 141/198/2 205/199/2 206/204/2 +f 195/206/2 194/201/2 258/200/2 +f 169/208/2 168/203/2 232/202/2 +f 142/205/2 206/204/2 207/210/2 +f 195/206/2 259/207/2 196/212/2 +f 169/208/2 233/209/2 234/214/2 +f 143/211/2 207/210/2 208/216/2 +f 171/218/2 170/215/2 234/214/2 +f 145/220/2 144/217/2 208/216/2 +f 171/218/2 235/219/2 236/222/2 +f 145/220/2 209/221/2 210/224/2 +f 173/226/2 172/223/2 236/222/2 +f 147/228/2 146/225/2 210/224/2 +f 173/226/2 237/227/2 238/230/2 +f 147/228/2 211/229/2 212/232/2 +f 174/231/2 238/230/2 239/234/2 +f 148/233/2 212/232/2 213/235/2 +f 350/301/2 349/428/2 413/302/2 +f 377/304/2 376/429/2 440/305/2 +f 350/301/2 414/303/2 415/307/2 +f 377/304/2 441/306/2 442/309/2 +f 351/308/2 415/307/2 416/311/2 +f 325/313/2 389/455/2 390/314/2 +f 378/310/2 442/309/2 443/316/2 +f 353/318/2 352/312/2 416/311/2 +f 327/320/2 326/315/2 390/314/2 +f 380/322/2 379/317/2 443/316/2 +f 353/318/2 417/319/2 418/324/2 +f 327/320/2 391/321/2 392/326/2 +f 380/322/2 444/323/2 445/328/2 +f 354/325/2 418/324/2 419/330/2 +f 328/327/2 392/326/2 393/332/2 +f 382/334/2 381/329/2 445/328/2 +f 355/331/2 419/330/2 420/336/2 +f 329/333/2 393/332/2 394/338/2 +f 382/334/2 446/335/2 447/340/2 +f 357/342/2 356/337/2 420/336/2 +f 330/339/2 394/338/2 395/344/2 +f 383/341/2 447/340/2 448/346/2 +f 357/342/2 421/343/2 422/348/2 +f 332/350/2 331/345/2 395/344/2 +f 385/352/2 384/347/2 448/346/2 +f 359/354/2 358/349/2 422/348/2 +f 332/350/2 396/351/2 397/356/2 +f 385/352/2 449/353/2 450/358/2 +f 359/354/2 423/355/2 424/360/2 +f 334/362/2 333/357/2 397/356/2 +f 386/359/2 450/358/2 451/364/2 +f 361/366/2 360/361/2 424/360/2 +f 334/362/2 398/363/2 399/368/2 +f 387/365/2 451/364/2 452/370/2 +f 361/366/2 425/367/2 426/372/2 +f 335/369/2 399/368/2 400/374/2 +f 325/376/2 388/371/2 452/370/2 +f 362/373/2 426/372/2 427/378/2 +f 337/380/2 336/375/2 400/374/2 +f 364/382/2 363/379/2 427/378/2 +f 337/380/2 401/381/2 402/384/2 +f 364/382/2 428/383/2 429/386/2 +f 338/385/2 402/384/2 403/388/2 +f 366/390/2 365/387/2 429/386/2 +f 339/389/2 403/388/2 404/392/2 +f 366/390/2 430/391/2 431/394/2 +f 341/396/2 340/393/2 404/392/2 +f 367/395/2 431/394/2 432/398/2 +f 341/396/2 405/397/2 406/400/2 +f 369/402/2 368/399/2 432/398/2 +f 343/404/2 342/401/2 406/400/2 +f 369/402/2 433/403/2 434/406/2 +f 343/404/2 407/405/2 408/408/2 +f 370/407/2 434/406/2 435/410/2 +f 345/412/2 344/409/2 408/408/2 +f 371/411/2 435/410/2 436/414/2 +f 345/412/2 409/413/2 410/416/2 +f 373/418/2 372/415/2 436/414/2 +f 346/417/2 410/416/2 411/420/2 +f 373/418/2 437/419/2 438/422/2 +f 348/424/2 347/421/2 411/420/2 +f 375/426/2 374/423/2 438/422/2 +f 348/424/2 412/425/2 413/302/2 +f 375/426/2 439/427/2 440/305/2 +l 107 129 +l 130 131 +l 238 260 diff --git a/src/main/resources/assets/gregtech/textures/model/blackhole.png b/src/main/resources/assets/gregtech/textures/model/blackhole.png new file mode 100644 index 0000000000000000000000000000000000000000..887e0bdf1eb412a8095341ee1a229006831ccae4 GIT binary patch literal 81661 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 q+H-*4$_4M`+OK>9{e=RG!T$g<&=qA}G;(SHQnr