From 2e4b51ddbaa928496a8999b90351690c2e58d4c4 Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 14 May 2019 01:30:17 +0200 Subject: [PATCH] Added reactor preliminary rendering (very wip) Crystal model by mouse961 Matter model & texture by LemADEC --- .../block/energy/BlockEnanReactorCore.java | 16 + .../energy/TileEntityEnanReactorCore.java | 56 +++ .../TileEntityEnanReactorCoreRenderer.java | 144 +++++++ .../models/block/energy/reactor_crystal.mtl | 24 ++ .../models/block/energy/reactor_crystal.obj | 350 ++++++++++++++++++ .../models/block/energy/reactor_matter.mtl | 11 + .../models/block/energy/reactor_matter.obj | 250 +++++++++++++ .../blocks/energy/reactor_core-crystal.png | Bin 0 -> 161 bytes .../blocks/energy/reactor_core-grip.png | Bin 0 -> 158 bytes .../textures/blocks/energy/reactor_matter.png | Bin 0 -> 22864 bytes 10 files changed, 851 insertions(+) create mode 100644 src/main/java/cr0s/warpdrive/render/TileEntityEnanReactorCoreRenderer.java create mode 100644 src/main/resources/assets/warpdrive/models/block/energy/reactor_crystal.mtl create mode 100644 src/main/resources/assets/warpdrive/models/block/energy/reactor_crystal.obj create mode 100644 src/main/resources/assets/warpdrive/models/block/energy/reactor_matter.mtl create mode 100644 src/main/resources/assets/warpdrive/models/block/energy/reactor_matter.obj create mode 100644 src/main/resources/assets/warpdrive/textures/blocks/energy/reactor_core-crystal.png create mode 100644 src/main/resources/assets/warpdrive/textures/blocks/energy/reactor_core-grip.png create mode 100644 src/main/resources/assets/warpdrive/textures/blocks/energy/reactor_matter.png diff --git a/src/main/java/cr0s/warpdrive/block/energy/BlockEnanReactorCore.java b/src/main/java/cr0s/warpdrive/block/energy/BlockEnanReactorCore.java index d4c45709..0432e76a 100644 --- a/src/main/java/cr0s/warpdrive/block/energy/BlockEnanReactorCore.java +++ b/src/main/java/cr0s/warpdrive/block/energy/BlockEnanReactorCore.java @@ -3,6 +3,7 @@ package cr0s.warpdrive.block.energy; import cr0s.warpdrive.block.BlockAbstractContainer; import cr0s.warpdrive.data.ReactorFace; import cr0s.warpdrive.data.EnumTier; +import cr0s.warpdrive.render.TileEntityEnanReactorCoreRenderer; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; @@ -14,6 +15,10 @@ import net.minecraft.world.World; import javax.annotation.Nonnull; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + public class BlockEnanReactorCore extends BlockAbstractContainer { public static final PropertyInteger ENERGY = PropertyInteger.create("energy", 0, 3); @@ -56,6 +61,17 @@ public class BlockEnanReactorCore extends BlockAbstractContainer { return new TileEntityEnanReactorCore(); } + @SideOnly(Side.CLIENT) + @Override + public void modelInitialisation() { + super.modelInitialisation(); + + if (enumTier != EnumTier.BASIC) { + // Bind our TESR to our tile entity + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityEnanReactorCore.class, new TileEntityEnanReactorCoreRenderer()); + } + } + @Override public void breakBlock(final World world, @Nonnull final BlockPos blockPos, @Nonnull final IBlockState blockState) { super.breakBlock(world, blockPos, blockState); diff --git a/src/main/java/cr0s/warpdrive/block/energy/TileEntityEnanReactorCore.java b/src/main/java/cr0s/warpdrive/block/energy/TileEntityEnanReactorCore.java index 3b31c8c7..3f1c67c5 100644 --- a/src/main/java/cr0s/warpdrive/block/energy/TileEntityEnanReactorCore.java +++ b/src/main/java/cr0s/warpdrive/block/energy/TileEntityEnanReactorCore.java @@ -67,6 +67,16 @@ public class TileEntityEnanReactorCore extends TileEntityEnanReactorController { private long releasedThisCycle = 0; // amount of energy released during current cycle private long energyReleasedLastCycle = 0; + // client properties + public float client_rotationCore_deg = 0.0F; + public float client_rotationSpeedCore_degPerTick = 2.0F; + public float client_rotationMatter_deg = 0.0F; + public float client_rotationSpeedMatter_degPerTick = 2.0F; + public float client_radiusMatter_m = 0.0F; + public float client_radiusSpeedMatter_mPerTick = 0.0F; + public float client_yCore = 0.0F; + public float client_yCoreSpeed_mPerTick = 0.0F; + @SuppressWarnings("unchecked") private final WeakReference[] weakTileEntityLasers = (WeakReference[]) Array.newInstance(WeakReference.class, ReactorFace.maxInstabilities); @@ -105,11 +115,57 @@ public class TileEntityEnanReactorCore extends TileEntityEnanReactorController { } } + @Override + protected void onFirstUpdateTick() { + super.onFirstUpdateTick(); + + client_rotationCore_deg = world.rand.nextFloat() * 360.0F; + client_rotationSpeedCore_degPerTick = 2.0F * (float) instabilityValues[0]; + + client_rotationMatter_deg = world.rand.nextFloat() * 360.0F; + client_rotationSpeedMatter_degPerTick = client_rotationSpeedCore_degPerTick * 0.98F; + + client_radiusMatter_m = 0.0F; + client_radiusSpeedMatter_mPerTick = 0.0F; + + // we start at 0.5F to have a small animation on block placement + client_yCore = containedEnergy == 0 ? 0.5F : (float) vCenter.y - pos.getY(); + client_yCoreSpeed_mPerTick = 0.0F; + } + @Override public void update() { super.update(); if (world.isRemote) { + float stabilityAverage = 0.0F; + final ReactorFace[] reactorFaces = ReactorFace.getLasers(enumTier); + for (final ReactorFace reactorFace : reactorFaces) { + stabilityAverage += (float) instabilityValues[reactorFace.indexStability]; + } + stabilityAverage /= reactorFaces.length; + final float radiusMatterMax = (float) vCenter.y - pos.getY(); + final float rotationTarget_degPerTick = 0.5F * stabilityAverage; + final float radiusMatterTarget = containedEnergy <= 10000 ? 0.0F : radiusMatterMax * (containedEnergy / (float) energyStored_max); + final float yCoreTarget = containedEnergy == 0 ? 1.0F : radiusMatterMax; + + // elastic rotation + client_rotationCore_deg += client_rotationSpeedCore_degPerTick; + client_rotationSpeedCore_degPerTick = 0.975F * client_rotationSpeedCore_degPerTick + + 0.025F * rotationTarget_degPerTick; + client_rotationMatter_deg += client_rotationSpeedMatter_degPerTick; + client_rotationSpeedMatter_degPerTick = 0.985F * client_rotationSpeedMatter_degPerTick + + 0.015F * rotationTarget_degPerTick; + + // linear radius + client_radiusMatter_m += client_radiusSpeedMatter_mPerTick; + final float radiusDelta = radiusMatterTarget - client_radiusMatter_m; + client_radiusSpeedMatter_mPerTick = Math.signum(radiusDelta) * Math.min(0.05F, Math.abs(radiusDelta)); + + // linear position + client_yCore += client_yCoreSpeed_mPerTick; + final float yDelta = yCoreTarget - client_yCore; + client_yCoreSpeed_mPerTick = Math.signum(yDelta) * Math.min(0.05F, Math.abs(yDelta)); return; } diff --git a/src/main/java/cr0s/warpdrive/render/TileEntityEnanReactorCoreRenderer.java b/src/main/java/cr0s/warpdrive/render/TileEntityEnanReactorCoreRenderer.java new file mode 100644 index 00000000..677830a6 --- /dev/null +++ b/src/main/java/cr0s/warpdrive/render/TileEntityEnanReactorCoreRenderer.java @@ -0,0 +1,144 @@ +package cr0s.warpdrive.render; + +import cr0s.warpdrive.WarpDrive; +import cr0s.warpdrive.block.energy.TileEntityEnanReactorCore; +import cr0s.warpdrive.client.SpriteManager; + +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.GlStateManager.DestFactor; +import net.minecraft.client.renderer.GlStateManager.SourceFactor; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; + +import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.common.model.TRSRTransformation; + +public class TileEntityEnanReactorCoreRenderer extends TileEntitySpecialRenderer { + + private IBakedModel bakedModelCrystal; + private IBakedModel bakedModelMatter; + private static List quadsCrystal; + private static List quadsMatter; + + public TileEntityEnanReactorCoreRenderer() { + super(); + SpriteManager.add(new ResourceLocation("warpdrive:blocks/energy/reactor_core-crystal")); + SpriteManager.add(new ResourceLocation("warpdrive:blocks/energy/reactor_core-grip")); + SpriteManager.add(new ResourceLocation("warpdrive:blocks/energy/reactor_matter")); + } + + private List getCrystalQuads() { + // Since we cannot bake in preInit() we do lazy baking of the model as soon as we need it for rendering + if (bakedModelCrystal == null) { + final ResourceLocation resourceLocation = new ResourceLocation(WarpDrive.MODID, "block/energy/reactor_crystal.obj"); + final IModel model = RenderCommons.getModel(resourceLocation); + bakedModelCrystal = model.bake(TRSRTransformation.identity(), DefaultVertexFormats.ITEM, ModelLoader.defaultTextureGetter()); + } + quadsCrystal = bakedModelCrystal.getQuads(null, null, 0L); + return quadsCrystal; + } + + private List getMatterQuads() { + // Since we cannot bake in preInit() we do lazy baking of the model as soon as we need it for rendering + if (bakedModelMatter == null) { + final ResourceLocation resourceLocation = new ResourceLocation(WarpDrive.MODID, "block/energy/reactor_matter.obj"); + final IModel model = RenderCommons.getModel(resourceLocation); + bakedModelMatter = model.bake(TRSRTransformation.identity(), DefaultVertexFormats.ITEM, ModelLoader.defaultTextureGetter()); + } + quadsMatter = bakedModelMatter.getQuads(null, null, 0L); + return quadsMatter; + } + + @Override + public void render(final TileEntityEnanReactorCore tileEntityEnanReactorCore, final double x, final double y, final double z, + final float partialTicks, final int destroyStage, final float alpha) { + if (!tileEntityEnanReactorCore.getWorld().isBlockLoaded(tileEntityEnanReactorCore.getPos(), false)) { + return; + } + if (quadsCrystal == null) { + quadsCrystal = getCrystalQuads(); + } + if (quadsMatter == null) { + quadsMatter = getMatterQuads(); + } + final Tessellator tessellator = Tessellator.getInstance(); + GlStateManager.pushAttrib(); + GlStateManager.pushMatrix(); + + final double yCore = y + tileEntityEnanReactorCore.client_yCore + partialTicks * tileEntityEnanReactorCore.client_yCoreSpeed_mPerTick; + GlStateManager.translate(x + 0.5D, yCore, z + 0.5D); + + GlStateManager.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA); + GlStateManager.enableBlend(); + // GlStateManager.disableCull(); + RenderHelper.disableStandardItemLighting(); + + // render the crystal + GlStateManager.enableLighting(); + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + final BufferBuilder worldRenderer = tessellator.getBuffer(); + + final float rotationCrystal = tileEntityEnanReactorCore.client_rotationCore_deg + partialTicks * tileEntityEnanReactorCore.client_rotationSpeedCore_degPerTick; + GlStateManager.rotate(rotationCrystal, 0.0F, 1.0F, 0.0F); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); + RenderCommons.renderModelTESR(quadsCrystal, worldRenderer, tileEntityEnanReactorCore.getWorld().getCombinedLight(tileEntityEnanReactorCore.getPos(), 15)); + tessellator.draw(); + + // render the matter cloud + if (tileEntityEnanReactorCore.client_radiusMatter_m > 0.0F) { + GlStateManager.disableLighting(); + + // main model + final float radiusMatter = tileEntityEnanReactorCore.client_radiusMatter_m + partialTicks * tileEntityEnanReactorCore.client_radiusSpeedMatter_mPerTick; + final float heightMatter = Math.max(0.75F, radiusMatter / 2.0F); + GlStateManager.scale(radiusMatter, heightMatter, radiusMatter); + + final float rotationMatter = tileEntityEnanReactorCore.client_rotationMatter_deg + partialTicks * tileEntityEnanReactorCore.client_rotationSpeedMatter_degPerTick + - rotationCrystal; + GlStateManager.rotate(rotationMatter, 0.0F, 1.0F, 0.0F); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); + RenderCommons.renderModelTESR(quadsMatter, worldRenderer, tileEntityEnanReactorCore.getWorld().getCombinedLight(tileEntityEnanReactorCore.getPos(), 15)); + tessellator.draw(); + + // surface model, slightly bigger + GlStateManager.scale(1.1F, 1.05F, 1.1F); + final float rotationSurface = 0.5F * tileEntityEnanReactorCore.client_rotationSpeedMatter_degPerTick; + GlStateManager.rotate(rotationSurface, 0.0F, 1.0F, 0.0F); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); + RenderCommons.renderModelTESR(quadsMatter, worldRenderer, tileEntityEnanReactorCore.getWorld().getCombinedLight(tileEntityEnanReactorCore.getPos(), 15)); + tessellator.draw(); + + // core model, slightly smaller + GlStateManager.scale(1.1F, 1.05F, 1.1F); + final float rotationCore = -0.75F * tileEntityEnanReactorCore.client_rotationSpeedMatter_degPerTick; + GlStateManager.rotate(rotationCore, 0.0F, 1.0F, 0.0F); + + worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); + RenderCommons.renderModelTESR(quadsMatter, worldRenderer, tileEntityEnanReactorCore.getWorld().getCombinedLight(tileEntityEnanReactorCore.getPos(), 15)); + tessellator.draw(); + } + + worldRenderer.setTranslation(0.0D, 0.0D, 0.0D); + + RenderHelper.enableStandardItemLighting(); + GlStateManager.disableBlend(); + // GlStateManager.enableCull(); + GlStateManager.popMatrix(); + GlStateManager.popAttrib(); + } +} diff --git a/src/main/resources/assets/warpdrive/models/block/energy/reactor_crystal.mtl b/src/main/resources/assets/warpdrive/models/block/energy/reactor_crystal.mtl new file mode 100644 index 00000000..a5fee0d2 --- /dev/null +++ b/src/main/resources/assets/warpdrive/models/block/energy/reactor_crystal.mtl @@ -0,0 +1,24 @@ +# Blender MTL File: 'None' +# Material Count: 2 + +newmtl m_crystal +# Ns 96.078431 +# Ka 1.000000 1.000000 1.000000 +# Kd 0.027200 0.112621 0.800000 +# Ks 0.022863 0.263922 0.500000 +# Ke 0.000000 0.000000 0.000000 +# Ni 1.000000 +d 1.000000 +# illum 2 +map_Kd warpdrive:blocks/energy/reactor_core-crystal + +newmtl m_grip +# Ns 96.078431 +# Ka 1.000000 1.000000 1.000000 +# Kd 0.800000 0.543579 0.404160 +# Ks 0.500000 0.433684 0.327299 +# Ke 0.000000 0.000000 0.000000 +# Ni 1.000000 +d 1.000000 +# illum 2 +map_Kd warpdrive:blocks/energy/reactor_core-grip diff --git a/src/main/resources/assets/warpdrive/models/block/energy/reactor_crystal.obj b/src/main/resources/assets/warpdrive/models/block/energy/reactor_crystal.obj new file mode 100644 index 00000000..0b717d09 --- /dev/null +++ b/src/main/resources/assets/warpdrive/models/block/energy/reactor_crystal.obj @@ -0,0 +1,350 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +mtllib reactor_crystal.mtl +o crystal +v 0.044966 -0.508000 -0.153414 +v -0.000951 -0.508000 -0.053779 +v -0.050220 -0.508000 -0.151799 +v -0.003016 -0.508000 -0.175526 +v 0.159193 0.508000 -0.015059 +v 0.052666 0.508000 0.011164 +v 0.139586 0.508000 0.078100 +v 0.171821 0.508000 0.036242 +v -0.091978 -0.508000 -0.130810 +v -0.042708 -0.508000 -0.032789 +v -0.150063 -0.508000 -0.055384 +v -0.139182 -0.508000 -0.107083 +v 0.087412 0.508000 -0.133853 +v 0.041495 0.508000 -0.034218 +v 0.148022 0.508000 -0.060440 +v 0.135394 0.508000 -0.111741 +v -0.073543 0.508000 0.159572 +v -0.020718 0.508000 0.158676 +v -0.022579 0.508000 0.048985 +v -0.107179 0.508000 0.118831 +v 0.148022 -0.508000 -0.060440 +v 0.041495 -0.508000 -0.034218 +v 0.087412 -0.508000 -0.133853 +v 0.135394 -0.508000 -0.111741 +v -0.073543 -0.508000 0.159572 +v 0.078835 -0.508000 0.156987 +v 0.078835 0.508000 0.156987 +v -0.170569 0.508000 0.042050 +v -0.170569 -0.508000 0.042050 +v -0.139182 0.508000 -0.107083 +v 0.171821 -0.508000 0.036242 +v -0.003016 0.508000 -0.175526 +v -0.020718 -0.508000 0.158676 +v -0.107179 -0.508000 0.118831 +v -0.022579 -0.508000 0.048985 +v 0.026011 -0.508000 0.157883 +v 0.024150 -0.508000 0.048192 +v 0.111070 -0.508000 0.115129 +v -0.050220 0.508000 -0.151799 +v -0.000951 0.508000 -0.053778 +v 0.044966 0.508000 -0.153414 +v -0.136933 0.508000 0.082791 +v -0.052334 0.508000 0.012945 +v -0.159689 0.508000 -0.009650 +v 0.139586 -0.508000 0.078100 +v 0.052666 -0.508000 0.011164 +v 0.159193 -0.508000 -0.015059 +v -0.150063 0.508000 -0.055384 +v -0.042708 0.508000 -0.032789 +v -0.091978 0.508000 -0.130810 +v 0.111070 0.508000 0.115129 +v 0.024150 0.508000 0.048192 +v 0.026011 0.508000 0.157883 +v -0.159689 -0.508000 -0.009650 +v -0.052334 -0.508000 0.012945 +v -0.136933 -0.508000 0.082791 +v -0.207411 0.563880 -0.019694 +v -0.052334 0.563880 0.012945 +v -0.042708 0.563880 -0.032789 +v -0.197786 0.563880 -0.065428 +v 0.149709 0.304800 0.144884 +v 0.111070 0.304800 0.115129 +v 0.139586 0.304800 0.078100 +v 0.178224 0.304800 0.107856 +v 0.026838 0.563880 0.206644 +v 0.024150 0.563880 0.048192 +v -0.022579 0.563880 0.048985 +v -0.019891 0.563880 0.207437 +v 0.178224 0.563880 0.107856 +v 0.052666 0.563880 0.011164 +v 0.149709 0.563880 0.144884 +v -0.072122 0.304800 -0.195373 +v -0.113880 0.304800 -0.174383 +v -0.113880 0.563880 -0.174383 +v -0.072122 0.563880 -0.195373 +v 0.065378 0.563880 -0.197705 +v -0.000951 0.563880 -0.053778 +v 0.041495 0.563880 -0.034218 +v 0.107823 0.563880 -0.178144 +v -0.113880 -0.304800 -0.174383 +v -0.091978 -0.304800 -0.130810 +v -0.050220 -0.304800 -0.151799 +v -0.072122 -0.304800 -0.195373 +v -0.022579 0.970280 0.048986 +v 0.024150 0.970280 0.048193 +v 0.024150 -0.970280 0.048192 +v 0.024150 -0.563880 0.048192 +v -0.022579 -0.563880 0.048985 +v -0.022579 -0.970280 0.048985 +v 0.052666 0.970280 0.011165 +v -0.000951 0.970280 -0.053777 +v -0.042708 0.970280 -0.032788 +v -0.052334 -0.563880 0.012945 +v -0.052334 -0.970280 0.012945 +v 0.107823 0.304800 -0.178144 +v 0.065378 0.304800 -0.197705 +v -0.113880 -0.563880 -0.174383 +v -0.072122 -0.563880 -0.195373 +v -0.000951 -0.563880 -0.053779 +v -0.042708 -0.563880 -0.032789 +v 0.026838 -0.563880 0.206644 +v -0.019891 -0.563880 0.207437 +v -0.042708 -0.970280 -0.032789 +v -0.000951 -0.970280 -0.053779 +v 0.065378 -0.304800 -0.197705 +v 0.044966 -0.304800 -0.153414 +v 0.087412 -0.304800 -0.133853 +v 0.107823 -0.304800 -0.178144 +v 0.178224 -0.304800 0.107856 +v 0.139586 -0.304800 0.078100 +v 0.111070 -0.304800 0.115129 +v 0.149709 -0.304800 0.144884 +v 0.041495 0.970280 -0.034217 +v -0.207411 0.304800 -0.019694 +v -0.159689 0.304800 -0.009650 +v 0.087412 0.304800 -0.133853 +v -0.207411 -0.304800 -0.019694 +v -0.159689 -0.304800 -0.009650 +v -0.150063 -0.304800 -0.055384 +v -0.197786 -0.304800 -0.065428 +v -0.197786 0.304800 -0.065428 +v -0.150063 0.304800 -0.055384 +v -0.052334 0.970280 0.012946 +v -0.174541 0.563880 0.113839 +v 0.195376 0.563880 -0.072097 +v 0.065378 -0.563880 -0.197705 +v 0.107823 -0.563880 -0.178144 +v 0.041495 -0.563880 -0.034218 +v 0.206547 0.563880 -0.026716 +v -0.144786 0.563880 0.149880 +v -0.174541 0.304800 0.113839 +v -0.136933 0.304800 0.082791 +v -0.107179 0.304800 0.118831 +v -0.144786 0.304800 0.149880 +v 0.206547 0.304800 -0.026716 +v 0.159193 0.304800 -0.015059 +v 0.044966 0.304800 -0.153414 +v 0.178224 -0.563880 0.107856 +v 0.149709 -0.563880 0.144884 +v 0.052666 -0.563880 0.011164 +v 0.195376 0.304800 -0.072097 +v 0.148022 0.304800 -0.060440 +v -0.091978 0.304800 -0.130810 +v 0.041495 -0.970280 -0.034218 +v -0.019891 0.304800 0.207437 +v -0.020718 0.304800 0.158676 +v -0.050220 0.304800 -0.151799 +v -0.144786 -0.563880 0.149880 +v -0.174541 -0.563880 0.113839 +v 0.052666 -0.970280 0.011164 +v -0.144786 -0.304800 0.149880 +v -0.174541 -0.304800 0.113839 +v 0.195376 -0.563880 -0.072097 +v 0.206547 -0.563880 -0.026716 +v -0.207411 -0.563880 -0.019694 +v -0.019891 -0.304800 0.207437 +v -0.020718 -0.304800 0.158676 +v 0.195376 -0.304800 -0.072097 +v 0.148022 -0.304800 -0.060440 +v 0.159193 -0.304800 -0.015059 +v 0.206547 -0.304800 -0.026716 +v -0.197786 -0.563880 -0.065428 +v 0.026011 0.304800 0.157883 +v 0.026838 0.304800 0.206644 +v -0.107179 -0.304800 0.118831 +v 0.026838 -0.304800 0.206644 +v 0.026011 -0.304800 0.157883 +v -0.136933 -0.304800 0.082791 +vn 0.0000 1.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.4491 0.0000 -0.8935 +vn 0.0170 -0.0000 0.9999 +vn 0.7923 -0.0000 0.6102 +vn -0.7711 -0.0000 0.6367 +vn 0.4185 0.0000 -0.9082 +vn -0.2060 -0.0000 0.9786 +vn 0.9082 -0.0000 0.4185 +vn -0.9999 -0.0000 0.0170 +vn 0.2060 0.0000 -0.9786 +vn -0.9082 0.0000 -0.4185 +vn -0.6101 0.0000 0.7923 +vn 0.6102 0.0000 -0.7923 +vn -0.6367 -0.0000 -0.7712 +vn -0.6367 -0.0000 -0.7711 +vn -0.8935 -0.0000 0.4491 +vn -0.2390 -0.0000 -0.9710 +vn 0.2390 0.0000 0.9710 +vn -0.9786 0.0000 -0.2059 +vn 0.6101 0.0000 -0.7923 +vn 0.6367 -0.0000 0.7711 +vn -0.9082 0.0000 -0.4186 +vn 0.9999 0.0000 -0.0170 +vn 0.8935 0.0000 -0.4491 +vn -0.6366 0.0000 -0.7712 +vn 0.7923 -0.0000 0.6101 +vn -0.7712 -0.0000 0.6367 +vn 0.9710 0.0000 -0.2390 +vn -0.9786 0.0000 -0.2060 +vn -0.4185 -0.0000 0.9082 +vn 0.4491 -0.0000 0.8935 +vn -0.9710 -0.0000 0.2390 +vn -0.7923 0.0000 -0.6101 +vn 0.7711 0.0000 -0.6367 +vn -0.0170 0.0000 -0.9999 +usemtl m_grip +s 1 +f 57//1 58//1 59//1 60//1 +f 61//2 62//2 63//2 64//2 +f 65//1 66//1 67//1 68//1 +f 69//1 70//1 66//1 71//1 +f 72//3 73//3 74//3 75//3 +f 76//1 77//1 78//1 79//1 +f 80//1 81//1 82//1 83//1 +f 84//4 67//4 66//4 85//4 +f 86//4 87//4 88//4 89//4 +f 85//5 66//5 70//5 90//5 +f 91//3 77//3 59//3 92//3 +f 89//6 88//6 93//6 94//6 +f 95//7 96//7 76//7 79//7 +f 74//1 59//1 77//1 75//1 +f 97//2 98//2 99//2 100//2 +f 101//2 102//2 88//2 87//2 +f 103//3 100//3 99//3 104//3 +f 105//1 106//1 107//1 108//1 +f 109//1 110//1 111//1 112//1 +f 113//1 84//1 85//1 90//1 +f 57//8 114//8 115//8 44//8 +f 95//9 79//9 13//9 116//9 +f 58//8 57//8 44//8 43//8 +f 68//10 67//10 19//10 18//10 +f 117//1 118//1 119//1 120//1 +f 60//11 59//11 49//11 48//11 +f 121//11 60//11 48//11 122//11 +f 77//12 76//12 41//12 40//12 +f 71//13 66//13 52//13 51//13 +f 84//1 113//1 91//1 123//1 +f 69//14 64//14 63//14 7//14 +f 124//15 58//16 43//16 42//15 +f 59//17 74//17 50//17 49//17 +f 78//18 125//18 15//18 14//18 +f 126//2 127//2 128//2 99//2 +f 61//13 71//13 51//13 62//13 +f 129//19 70//19 6//19 5//19 +f 121//20 114//20 57//20 60//20 +f 70//21 69//21 7//21 6//21 +f 67//22 130//22 20//22 19//22 +f 131//2 132//2 133//2 134//2 +f 135//19 129//19 5//19 136//19 +f 79//9 78//9 14//9 13//9 +f 76//23 96//23 137//23 41//23 +f 66//24 65//24 53//24 52//24 +f 138//2 139//2 87//2 140//2 +f 130//22 134//22 133//22 20//22 +f 125//18 141//18 142//18 15//18 +f 105//7 108//7 127//7 126//7 +f 75//25 77//25 40//25 39//25 +f 74//17 73//17 143//17 50//17 +f 104//7 99//7 128//7 144//7 +f 145//10 68//10 18//10 146//10 +f 131//26 124//15 42//15 132//26 +f 61//27 64//27 69//27 71//27 +f 72//25 75//25 39//25 147//25 +f 130//1 67//1 58//1 124//1 +f 148//2 149//2 93//2 88//2 +f 150//5 140//5 87//5 86//5 +f 151//28 152//28 149//28 148//28 +f 153//2 154//2 140//2 128//2 +f 80//3 83//3 98//3 97//3 +f 131//28 134//28 130//28 124//28 +f 72//2 147//2 143//2 73//2 +f 104//2 89//2 94//2 103//2 +f 92//1 123//1 91//1 +f 89//2 104//2 144//2 86//2 +f 101//24 87//24 37//24 36//24 +f 117//8 155//8 54//8 118//8 +f 144//29 128//29 140//29 150//29 +f 102//10 156//10 157//10 33//10 +f 153//18 128//18 22//18 21//18 +f 158//1 159//1 160//1 161//1 +f 87//13 139//13 38//13 37//13 +f 154//19 161//19 160//19 47//19 +f 109//27 112//27 139//27 138//27 +f 162//11 120//11 119//11 11//11 +f 97//17 100//17 10//17 9//17 +f 145//2 146//2 163//2 164//2 +f 99//25 98//25 3//25 2//25 +f 151//22 148//22 34//22 165//22 +f 117//20 120//20 162//20 155//20 +f 166//24 101//24 36//24 167//24 +f 109//14 138//21 45//21 110//14 +f 166//1 167//1 157//1 156//1 +f 88//10 102//10 33//10 35//10 +f 125//1 78//1 70//1 129//1 +f 105//23 126//12 1//12 106//23 +f 128//9 127//9 23//9 22//9 +f 135//2 136//2 142//2 141//2 +f 155//8 93//8 55//8 54//8 +f 158//18 153//18 21//18 159//18 +f 123//6 58//6 67//6 84//6 +f 98//25 83//25 82//25 3//25 +f 148//22 88//22 35//22 34//22 +f 113//7 78//7 77//7 91//7 +f 126//12 99//12 2//12 1//12 +f 139//13 112//13 111//13 38//13 +f 127//9 108//9 107//9 23//9 +f 138//21 140//21 46//21 45//21 +f 95//2 116//2 137//2 96//2 +f 93//16 149//16 56//16 55//16 +f 149//26 152//26 168//26 56//26 +f 155//2 162//2 100//2 93//2 +f 80//17 97//17 9//17 81//17 +f 100//11 162//11 11//11 10//11 +f 121//2 122//2 115//2 114//2 +f 90//29 70//29 78//29 113//29 +f 166//4 156//4 102//4 101//4 +f 151//1 165//1 168//1 152//1 +f 158//29 161//29 154//29 153//29 +f 135//29 141//29 125//29 129//29 +f 94//30 93//30 100//30 103//30 +f 92//30 59//30 58//30 123//30 +f 150//2 86//2 144//2 +f 145//4 164//4 65//4 68//4 +f 65//24 164//24 163//24 53//24 +f 140//19 154//19 47//19 46//19 +usemtl m_crystal +f 1//2 2//2 3//2 4//2 +f 5//1 6//1 7//1 8//1 +f 9//2 10//2 11//2 12//2 +f 13//1 14//1 15//1 16//1 +f 17//1 18//1 19//1 20//1 +f 21//2 22//2 23//2 24//2 +f 17//31 25//31 26//32 27//32 +f 25//31 17//31 28//33 29//33 +f 12//34 29//33 28//33 30//34 +f 8//27 27//32 26//32 31//27 +f 16//35 8//29 31//29 24//35 +f 4//36 12//34 30//34 32//36 +f 24//35 4//36 32//36 16//35 +f 33//2 25//2 34//2 35//2 +f 36//2 37//2 38//2 26//2 +f 39//1 40//1 41//1 32//1 +f 42//1 43//1 44//1 28//1 +f 45//2 46//2 47//2 31//2 +f 48//1 49//1 50//1 30//1 +f 51//1 52//1 53//1 27//1 +f 54//2 55//2 56//2 29//2 diff --git a/src/main/resources/assets/warpdrive/models/block/energy/reactor_matter.mtl b/src/main/resources/assets/warpdrive/models/block/energy/reactor_matter.mtl new file mode 100644 index 00000000..815bee20 --- /dev/null +++ b/src/main/resources/assets/warpdrive/models/block/energy/reactor_matter.mtl @@ -0,0 +1,11 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl m_matter +# Ns 0 +# Ka 0.000000 0.000000 0.000000 +# Kd 0.8 0.8 0.8 +# Ks 0.8 0.8 0.8 +d 1 +# illum 2 +map_Kd warpdrive:blocks/energy/reactor_matter diff --git a/src/main/resources/assets/warpdrive/models/block/energy/reactor_matter.obj b/src/main/resources/assets/warpdrive/models/block/energy/reactor_matter.obj new file mode 100644 index 00000000..56845a50 --- /dev/null +++ b/src/main/resources/assets/warpdrive/models/block/energy/reactor_matter.obj @@ -0,0 +1,250 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +mtllib reactor_matter.mtl +o matter +v -0.000000 0.287013 -0.692910 +v -0.000000 0.530330 -0.530330 +v 0.327762 0.530330 -0.429046 +v 0.428242 0.287013 -0.560576 +v -0.000000 0.750000 0.000000 +v 0.287013 0.692910 0.088692 +v 0.287013 0.692910 -0.088692 +v 0.177383 0.692910 -0.232198 +v -0.177383 0.692910 0.232198 +v -0.000000 0.692910 0.287012 +v 0.177384 0.692910 0.232198 +v -0.000000 -0.530330 -0.530330 +v -0.000000 -0.287013 -0.692910 +v 0.428242 -0.287013 -0.560576 +v 0.327762 -0.530330 -0.429046 +v -0.000000 0.000000 -0.750000 +v 0.463525 0.000000 -0.606763 +v -0.000000 0.692910 -0.287013 +v -0.000000 -0.692910 -0.287013 +v 0.177383 -0.692910 -0.232198 +v 0.692909 -0.287013 -0.214121 +v 0.530330 -0.530330 -0.163881 +v 0.692909 0.287013 -0.214121 +v 0.750000 0.000000 -0.231763 +v 0.530330 0.530330 -0.163881 +v 0.287013 -0.692910 -0.088692 +v -0.287013 -0.692910 0.088692 +v -0.287013 -0.692910 -0.088692 +v -0.000000 -0.750000 -0.000000 +v -0.177383 -0.692910 0.232198 +v 0.530330 -0.530330 0.163881 +v 0.287013 -0.692910 0.088692 +v 0.750000 -0.000000 0.231763 +v 0.692909 -0.287013 0.214121 +v 0.530330 0.530330 0.163881 +v 0.692909 0.287013 0.214121 +v -0.287013 0.692910 -0.088692 +v -0.287013 0.692910 0.088692 +v 0.463525 -0.000000 0.606763 +v 0.428242 -0.287013 0.560576 +v 0.327762 0.530330 0.429046 +v 0.428242 0.287013 0.560576 +v 0.327762 -0.530330 0.429046 +v 0.177384 -0.692910 0.232198 +v -0.000000 -0.287013 0.692910 +v -0.000000 -0.530330 0.530330 +v -0.000000 0.287013 0.692910 +v -0.000000 -0.000000 0.750000 +v -0.000000 0.530330 0.530330 +v -0.000000 -0.692910 0.287012 +v -0.428242 0.287013 0.560576 +v -0.463525 -0.000000 0.606763 +v -0.327762 0.530330 0.429046 +v -0.327762 -0.530330 0.429046 +v -0.428242 -0.287013 0.560576 +v -0.530330 -0.530330 0.163881 +v -0.750000 -0.000000 0.231763 +v -0.692910 -0.287013 0.214121 +v -0.530330 0.530330 0.163881 +v -0.692910 0.287013 0.214121 +v -0.177384 -0.692910 -0.232198 +v -0.530330 0.530330 -0.163881 +v -0.692910 0.287013 -0.214121 +v -0.692910 -0.287013 -0.214121 +v -0.530330 -0.530330 -0.163881 +v -0.750000 0.000000 -0.231763 +v -0.428242 -0.287013 -0.560576 +v -0.327762 -0.530330 -0.429046 +v -0.428242 0.287013 -0.560576 +v -0.463525 0.000000 -0.606763 +v -0.177384 0.692910 -0.232198 +v -0.327762 0.530330 -0.429046 +vn 0.2489 0.5381 -0.8053 +vn 0.1765 0.9824 -0.0613 +vn 0.1771 0.9824 -0.0591 +vn 0.1577 0.9801 -0.1205 +vn -0.0000 0.9808 0.1951 +vn 0.0602 0.9790 0.1947 +vn 0.2489 -0.5381 -0.8053 +vn 0.2901 0.1867 -0.9386 +vn 0.1692 0.8195 -0.5476 +vn 0.1692 -0.8195 -0.5476 +vn 0.2901 -0.1867 -0.9386 +vn 0.6643 -0.5487 -0.5075 +vn 0.7799 0.1918 -0.5958 +vn 0.4470 0.8268 -0.3414 +vn 0.4470 -0.8268 -0.3414 +vn 0.7799 -0.1918 -0.5958 +vn 0.6643 0.5487 -0.5075 +vn -0.1771 -0.9824 0.0591 +vn -0.1765 -0.9824 0.0613 +vn -0.1577 -0.9801 0.1205 +vn 0.1577 -0.9801 -0.1205 +vn 0.5556 -0.8315 0.0000 +vn 0.9808 -0.1951 -0.0000 +vn 0.8315 0.5556 0.0000 +vn -0.1765 0.9824 0.0613 +vn -0.1771 0.9824 0.0591 +vn -0.1577 0.9801 0.1205 +vn 0.8315 -0.5556 0.0000 +vn 0.9808 0.1951 0.0000 +vn 0.5556 0.8315 0.0000 +vn 0.7799 -0.1918 0.5958 +vn 0.6643 0.5487 0.5075 +vn 0.1577 0.9801 0.1205 +vn 0.6643 -0.5487 0.5075 +vn 0.7799 0.1918 0.5958 +vn 0.4470 0.8268 0.3414 +vn 0.4470 -0.8268 0.3414 +vn 0.2489 -0.5381 0.8053 +vn 0.2901 0.1867 0.9386 +vn 0.1692 0.8195 0.5476 +vn 0.1692 -0.8195 0.5476 +vn 0.2901 -0.1867 0.9386 +vn 0.2489 0.5381 0.8053 +vn -0.0000 -0.9808 0.1951 +vn 0.0602 -0.9790 0.1947 +vn -0.2901 0.1867 0.9386 +vn -0.1692 0.8195 0.5476 +vn -0.1692 -0.8195 0.5476 +vn -0.2901 -0.1867 0.9386 +vn -0.2489 0.5381 0.8053 +vn -0.2489 -0.5381 0.8053 +vn -0.4470 -0.8268 0.3414 +vn -0.7799 -0.1918 0.5958 +vn -0.6643 0.5487 0.5075 +vn 0.0000 -0.9808 -0.1951 +vn 0.0602 -0.9790 -0.1947 +vn 0.1771 -0.9824 0.0591 +vn 0.1765 -0.9824 0.0613 +vn 0.1951 -0.9808 0.0000 +vn -0.6643 -0.5487 0.5075 +vn -0.7799 0.1918 0.5958 +vn -0.4470 0.8268 0.3414 +vn -0.8315 0.5556 0.0000 +vn -0.8315 -0.5556 0.0000 +vn -0.9808 0.1951 0.0000 +vn -0.5556 0.8315 0.0000 +vn -0.5556 -0.8315 0.0000 +vn -0.9808 -0.1951 -0.0000 +vn -0.1577 -0.9801 -0.1205 +vn -0.6643 -0.5487 -0.5075 +vn -0.7799 0.1918 -0.5958 +vn -0.4470 0.8268 -0.3414 +vn -0.4470 -0.8268 -0.3414 +vn -0.7799 -0.1918 -0.5958 +vn -0.6643 0.5487 -0.5075 +vn -0.1577 0.9801 -0.1205 +vn -0.1692 0.8195 -0.5476 +vn -0.1692 -0.8195 -0.5476 +vn -0.2901 -0.1867 -0.9386 +vn -0.2489 0.5381 -0.8053 +vn -0.2489 -0.5381 -0.8053 +vn -0.2901 0.1867 -0.9386 +vn 0.0000 0.9808 -0.1951 +vn -0.0602 0.9790 -0.1947 +vn 0.1951 0.9808 0.0000 +vn 0.0602 0.9790 -0.1947 +vn -0.1951 0.9808 0.0000 +vn -0.0602 0.9790 0.1947 +vn -0.1951 -0.9808 0.0000 +vn -0.0602 -0.9790 0.1947 +vn -0.0602 -0.9790 -0.1947 +vn 0.1577 -0.9801 0.1205 +usemtl m_matter +s 1 +f 1//1 2//1 3//1 4//1 +f 5//2 7//3 8//4 +f 5//5 10//5 11//6 +f 12//7 13//7 14//7 15//7 +f 16//8 1//8 4//8 17//8 +f 2//9 18//9 8//9 3//9 +f 19//10 12//10 15//10 20//10 +f 13//11 16//11 17//11 14//11 +f 15//12 14//12 21//12 22//12 +f 17//13 4//13 23//13 24//13 +f 3//14 8//14 7//14 25//14 +f 20//15 15//15 22//15 26//15 +f 14//16 17//16 24//16 21//16 +f 4//17 3//17 25//17 23//17 +f 27//18 29//19 30//20 +f 29//21 20//21 26//21 +f 26//22 22//22 31//22 32//22 +f 21//23 24//23 33//23 34//23 +f 23//24 25//24 35//24 36//24 +f 5//25 38//26 9//27 +f 22//28 21//28 34//28 31//28 +f 24//29 23//29 36//29 33//29 +f 25//30 7//30 6//30 35//30 +f 34//31 33//31 39//31 40//31 +f 36//32 35//32 41//32 42//32 +f 6//33 5//33 11//33 +f 31//34 34//34 40//34 43//34 +f 33//35 36//35 42//35 39//35 +f 35//36 6//36 11//36 41//36 +f 32//37 31//37 43//37 44//37 +f 43//38 40//38 45//38 46//38 +f 39//39 42//39 47//39 48//39 +f 41//40 11//40 10//40 49//40 +f 44//41 43//41 46//41 50//41 +f 40//42 39//42 48//42 45//42 +f 42//43 41//43 49//43 47//43 +f 50//44 29//44 44//45 +f 48//46 47//46 51//46 52//46 +f 49//47 10//47 9//47 53//47 +f 50//48 46//48 54//48 30//48 +f 45//49 48//49 52//49 55//49 +f 47//50 49//50 53//50 51//50 +f 46//51 45//51 55//51 54//51 +f 30//52 54//52 56//52 27//52 +f 55//53 52//53 57//53 58//53 +f 51//54 53//54 59//54 60//54 +f 29//55 19//55 20//56 +f 32//57 29//58 26//59 +f 54//60 55//60 58//60 56//60 +f 52//61 51//61 60//61 57//61 +f 53//62 9//62 38//62 59//62 +f 60//63 59//63 62//63 63//63 +f 56//64 58//64 64//64 65//64 +f 57//65 60//65 63//65 66//65 +f 59//66 38//66 37//66 62//66 +f 27//67 56//67 65//67 28//67 +f 58//68 57//68 66//68 64//68 +f 29//69 28//69 61//69 +f 65//70 64//70 67//70 68//70 +f 66//71 63//71 69//71 70//71 +f 62//72 37//72 71//72 72//72 +f 28//73 65//73 68//73 61//73 +f 64//74 66//74 70//74 67//74 +f 63//75 62//75 72//75 69//75 +f 37//76 5//76 71//76 +f 72//77 71//77 18//77 2//77 +f 61//78 68//78 12//78 19//78 +f 67//79 70//79 16//79 13//79 +f 69//80 72//80 2//80 1//80 +f 68//81 67//81 13//81 12//81 +f 70//82 69//82 1//82 16//82 +f 5//83 18//83 71//84 +f 5//2 6//85 7//3 +f 5//83 8//86 18//83 +f 5//25 37//87 38//26 +f 5//5 9//88 10//5 +f 27//18 28//89 29//19 +f 50//44 30//90 29//44 +f 29//55 61//91 19//55 +f 32//57 44//92 29//58 diff --git a/src/main/resources/assets/warpdrive/textures/blocks/energy/reactor_core-crystal.png b/src/main/resources/assets/warpdrive/textures/blocks/energy/reactor_core-crystal.png new file mode 100644 index 0000000000000000000000000000000000000000..54e56bd56869ffc63648cd51acc785e7958a553b GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={W7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0h7I;J!GcfQS24TkI`72U@f@YpBjv*f2Z_h4dWH8`qIgtNt{-VpJJ+msV vSf5j{+^O%od2L~Xi~{=!#v(Y?@PyfH0^_OFDRm2gCNOxq`njxgN@xNA2(>UB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/warpdrive/textures/blocks/energy/reactor_core-grip.png b/src/main/resources/assets/warpdrive/textures/blocks/energy/reactor_core-grip.png new file mode 100644 index 0000000000000000000000000000000000000000..c273f491317509ac1234b403c4a1c79f184acd74 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1SJ1Ryj={W7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0h7I;J!GcfQS24TkI`72U@g2tXMjv*f2Z_g?+F&OYPA6O%Q{(AbWz|uL6 rpKd+7lyly~fo}ry69!8- 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 literal 0 HcmV?d00001