aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsyeyoung <cyong06@naver.com>2021-08-06 12:54:28 +0900
committersyeyoung <cyong06@naver.com>2021-08-06 12:54:28 +0900
commit0eb7119eb1fab1ac0c7ea96955aa23889a4f3b2e (patch)
treee5173b5b5fff5be3258b347d79dc60c076f5bf96
parentb47ac84df55dd594105f436eb53c49882364e82e (diff)
downloadSkyblock-Dungeons-Guide-0eb7119eb1fab1ac0c7ea96955aa23889a4f3b2e.tar.gz
Skyblock-Dungeons-Guide-0eb7119eb1fab1ac0c7ea96955aa23889a4f3b2e.tar.bz2
Skyblock-Dungeons-Guide-0eb7119eb1fab1ac0c7ea96955aa23889a4f3b2e.zip
- Restore Penguins, with much better 3d models
-rwxr-xr-xsrc/main/java/kr/syeyoung/dungeonsguide/DungeonsGuide.java1
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/eventlistener/FeatureListener.java24
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/FeaturePenguins.java118
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/features/listener/TextureStichListener.java26
-rw-r--r--src/main/resources/assets/dg/models/penguin.mtl4
-rw-r--r--src/main/resources/assets/dg/models/penguin.obj1685
-rw-r--r--src/main/resources/assets/dg/penguin.pngbin51869 -> 0 bytes
-rw-r--r--src/main/resources/assets/dg/textures/penguin.pngbin0 -> 207 bytes
8 files changed, 1828 insertions, 30 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/DungeonsGuide.java b/src/main/java/kr/syeyoung/dungeonsguide/DungeonsGuide.java
index 0a744e11..48c392e0 100755
--- a/src/main/java/kr/syeyoung/dungeonsguide/DungeonsGuide.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/DungeonsGuide.java
@@ -175,6 +175,7 @@ public class DungeonsGuide implements DGInterface, CloseListener {
try {
List<IResourcePack> resourcePackList = ReflectionHelper.getPrivateValue(Minecraft.class, Minecraft.getMinecraft(),"defaultResourcePacks", "aA", "field_110449_ao");
resourcePackList.add(new DGTexturePack(authenticator));
+ Minecraft.getMinecraft().refreshResources();
} catch (Throwable t){
t.printStackTrace();
}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/eventlistener/FeatureListener.java b/src/main/java/kr/syeyoung/dungeonsguide/eventlistener/FeatureListener.java
index 96683f5b..ab7eae21 100644
--- a/src/main/java/kr/syeyoung/dungeonsguide/eventlistener/FeatureListener.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/eventlistener/FeatureListener.java
@@ -68,6 +68,30 @@ public class FeatureListener {
}
}
@SubscribeEvent
+ public void onStomp(TextureStitchEvent.Pre textureStitchEvent) {
+ try {
+ for (AbstractFeature abstractFeature : FeatureRegistry.getFeatureList()) {
+ if (abstractFeature instanceof TextureStichListener) {
+ ((TextureStichListener) abstractFeature).onTextureStitch(textureStitchEvent);
+ }
+ }
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ }
+ @SubscribeEvent
+ public void onStomp(TextureStitchEvent.Post textureStitchEvent) {
+ try {
+ for (AbstractFeature abstractFeature : FeatureRegistry.getFeatureList()) {
+ if (abstractFeature instanceof TextureStichListener) {
+ ((TextureStichListener) abstractFeature).onTextureStitch(textureStitchEvent);
+ }
+ }
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ }
+ @SubscribeEvent
public void onWindowUpdate(WindowUpdateEvent windowUpdateEvent) {
try {
SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/FeaturePenguins.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/FeaturePenguins.java
index ab3a7a83..076fc0ce 100644
--- a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/FeaturePenguins.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/etc/FeaturePenguins.java
@@ -18,59 +18,103 @@
package kr.syeyoung.dungeonsguide.features.impl.etc;
+import com.google.common.collect.ImmutableMap;
import kr.syeyoung.dungeonsguide.DungeonsGuide;
import kr.syeyoung.dungeonsguide.SkyblockStatus;
import kr.syeyoung.dungeonsguide.features.SimpleFeature;
import kr.syeyoung.dungeonsguide.features.listener.PlayerRenderListener;
+import kr.syeyoung.dungeonsguide.features.listener.TextureStichListener;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.client.gui.Gui;
+import net.minecraft.client.renderer.EntityRenderer;
import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
+import net.minecraft.client.renderer.texture.TextureMap;
+import net.minecraft.client.renderer.texture.TextureUtil;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.resources.model.IBakedModel;
+import net.minecraft.client.resources.model.ModelManager;
+import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemBlock;
-import net.minecraft.item.ItemStack;
+import net.minecraft.item.*;
+import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
+import net.minecraftforge.client.ForgeHooksClient;
import net.minecraftforge.client.event.RenderPlayerEvent;
+import net.minecraftforge.client.event.TextureStitchEvent;
+import net.minecraftforge.client.model.IModel;
+import net.minecraftforge.client.model.ModelLoader;
+import net.minecraftforge.client.model.ModelLoaderRegistry;
+import net.minecraftforge.client.model.obj.OBJLoader;
+import net.minecraftforge.client.model.obj.OBJModel;
+import net.minecraftforge.fml.relauncher.ReflectionHelper;
+import java.io.IOException;
+import java.util.List;
-public class FeaturePenguins extends SimpleFeature implements PlayerRenderListener {
+
+public class FeaturePenguins extends SimpleFeature implements PlayerRenderListener, TextureStichListener {
public FeaturePenguins() {
super("Misc", "Penguins", "Awwww", "etc.penguin", false);
+ OBJLoader.instance.addDomain("dungeonsguide");
+
+ }
+ @Override
+ public void onTextureStitch(TextureStitchEvent event) {
+ System.out.println("STICH!");
+ if (event instanceof TextureStitchEvent.Pre) {
+ objModel = null;
+ ResourceLocation modelResourceLocation = new ResourceLocation("dungeonsguide:models/penguin.obj");
+ try {
+ objModel = (OBJModel) OBJLoader.instance.loadModel(modelResourceLocation);
+ objModel = (OBJModel) objModel.process(new ImmutableMap.Builder<String, String>().put("flip-v", "true").build());
+ for (String obj : objModel.getMatLib().getMaterialNames()) {
+ ResourceLocation resourceLocation = objModel.getMatLib().getMaterial(obj).getTexture().getTextureLocation();
+ event.map.registerSprite(resourceLocation);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ if (objModel != null && event instanceof TextureStitchEvent.Post) {
+ model = objModel.bake(objModel.getDefaultState(), DefaultVertexFormats.ITEM, ModelLoader.defaultTextureGetter());
+ }
}
+ private OBJModel objModel;
private final SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus();
- private final ResourceLocation penguin = new ResourceLocation("dungeonsguide:penguin.png");
+ private IBakedModel model;
@Override
public void onEntityRenderPre(RenderPlayerEvent.Pre renderPlayerEvent) {
+
if (!isEnabled()) return;
+ if (renderPlayerEvent.entityPlayer.isInvisible()) return;
renderPlayerEvent.setCanceled(true);
GlStateManager.pushMatrix();
+ GlStateManager.color(1,1,1,1);
GlStateManager.translate(renderPlayerEvent.x, renderPlayerEvent.y, renderPlayerEvent.z);
-
- GlStateManager.rotate(-renderPlayerEvent.renderer.getRenderManager().playerViewY, 0.0f, 1.0f, 0.0f);
-
- GlStateManager.translate(0.5,2,0);
- GlStateManager.scale(-1,-1,-1);
-
if (renderPlayerEvent.entityPlayer.isSneaking())
{
- GlStateManager.translate(0.0F, 0.203125F, 0.0F);
+ GlStateManager.translate(0.0F, -0.203125F, 0.0F);
}
+ float f1 = renderPlayerEvent.entityPlayer.prevRotationYawHead + (renderPlayerEvent.entityPlayer.rotationYawHead - renderPlayerEvent.entityPlayer.prevRotationYawHead) * renderPlayerEvent.partialRenderTick;
+ GlStateManager.rotate(f1+180,0,-1,0);
+ Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
- Minecraft.getMinecraft().getTextureManager().bindTexture(penguin);
- GlStateManager.disableLighting();
- GlStateManager.color(1f, 1f, 1f, 1f);
- Gui.drawModalRectWithCustomSizedTexture(0,0,0,0,1,2,1,2);
- GlStateManager.bindTexture(0);
- GlStateManager.enableLighting();
+ Minecraft.getMinecraft().getBlockRendererDispatcher().getBlockModelRenderer().renderModelBrightnessColor(
+ model, 1,1,1,1
+ );
GlStateManager.popMatrix();
+
EntityPlayer entitylivingbaseIn = renderPlayerEvent.entityPlayer;
{
ItemStack itemstack = entitylivingbaseIn.getHeldItem();
@@ -79,9 +123,13 @@ public class FeaturePenguins extends SimpleFeature implements PlayerRenderListen
{
GlStateManager.pushMatrix();
GlStateManager.translate(renderPlayerEvent.x, renderPlayerEvent.y, renderPlayerEvent.z);
- GlStateManager.rotate(-renderPlayerEvent.renderer.getRenderManager().playerViewY, 0.0f, 1.0f, 0.0f);
- GlStateManager.translate(-0.3,1.8,0.1);
- GlStateManager.scale(0.8,0.8,0.8);
+ if (renderPlayerEvent.entityPlayer.isSneaking())
+ {
+ GlStateManager.translate(0.0F, -0.203125F, 0.0F);
+ }
+ GlStateManager.rotate(f1+180, 0.0f, -1.0f, 0.0f);
+ GlStateManager.translate(0,1.30 ,-0.5);
+
if (entitylivingbaseIn.fishEntity != null)
@@ -92,20 +140,30 @@ public class FeaturePenguins extends SimpleFeature implements PlayerRenderListen
Item item = itemstack.getItem();
Minecraft minecraft = Minecraft.getMinecraft();
- if (item instanceof ItemBlock && Block.getBlockFromItem(item).getRenderType() == 2)
- {
- GlStateManager.translate(0,0,0.2);
+ GlStateManager.rotate(180, 0.0f, 0.0f, 1.0f);
+ if (item.isFull3D()) {
+ GlStateManager.translate(0.05,0,0);
+ GlStateManager.rotate(90, 0.0f, 0.0f, 1.0f);
+ GlStateManager.rotate(-45, 1.0f, 0.0f, 0.0f);
+ } else if (item instanceof ItemBow) {
+ GlStateManager.translate(0,0.1, -0);
+ GlStateManager.rotate(90, 0.0f, 1.0f, 0.0f);
+ GlStateManager.rotate(-90, 0.0f, 0.0f, 1.0f);
+ } else if (item instanceof ItemBlock && Block.getBlockFromItem(item).getRenderType() == 2) {
+ GlStateManager.translate(0,-0.20,0.1);
GlStateManager.translate(0.0F, 0.1875F, -0.3125F);
- GlStateManager.rotate(20.0F, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(-25.0F, 1.0F, 0.0F, 0.0F);
GlStateManager.rotate(45.0F, 0.0F, 1.0F, 0.0F);
- float f1 = 0.375F;
+ f1 = 0.375F;
GlStateManager.scale(-f1, -f1, f1);
+ } else if (item instanceof ItemBlock) {
+ GlStateManager.translate(0.0F, 0.05, 0.1);
+ GlStateManager.rotate(-25.0F, 1.0F, 0.0F, 0.0F);
+ } else {
+ GlStateManager.translate(0,-0.1, 0.1);
}
- if (entitylivingbaseIn.isSneaking())
- {
- GlStateManager.translate(0.0F, 0.203125F, 0.0F);
- }
+ GlStateManager.scale(0.8,0.8,0.8);
minecraft.getItemRenderer().renderItem(entitylivingbaseIn, itemstack, ItemCameraTransforms.TransformType.THIRD_PERSON);
GlStateManager.popMatrix();
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/listener/TextureStichListener.java b/src/main/java/kr/syeyoung/dungeonsguide/features/listener/TextureStichListener.java
new file mode 100644
index 00000000..77600d1e
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/features/listener/TextureStichListener.java
@@ -0,0 +1,26 @@
+/*
+ * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
+ * Copyright (C) 2021 cyoung06
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package kr.syeyoung.dungeonsguide.features.listener;
+
+import net.minecraftforge.client.event.GuiScreenEvent;
+import net.minecraftforge.client.event.TextureStitchEvent;
+
+public interface TextureStichListener {
+ void onTextureStitch(TextureStitchEvent event);
+}
diff --git a/src/main/resources/assets/dg/models/penguin.mtl b/src/main/resources/assets/dg/models/penguin.mtl
new file mode 100644
index 00000000..1fc14a2f
--- /dev/null
+++ b/src/main/resources/assets/dg/models/penguin.mtl
@@ -0,0 +1,4 @@
+# Made in Blockbench 3.8.4
+newmtl m_2
+map_Kd dungeonsguide:penguin
+newmtl none \ No newline at end of file
diff --git a/src/main/resources/assets/dg/models/penguin.obj b/src/main/resources/assets/dg/models/penguin.obj
new file mode 100644
index 00000000..29fe4680
--- /dev/null
+++ b/src/main/resources/assets/dg/models/penguin.obj
@@ -0,0 +1,1685 @@
+# Made in Blockbench 3.8.4
+mtllib penguin.mtl
+o cube
+v -0.09375 0.17922794117647123 -0.04411764705882426
+v -0.09375 0.17922794117647123 -0.41911764705882437
+v -0.09375 -0.008272058823528772 -0.04411764705882426
+v -0.09375 -0.008272058823528772 -0.41911764705882437
+v -0.28125 0.17922794117647123 -0.41911764705882437
+v -0.28125 0.17922794117647123 -0.04411764705882426
+v -0.28125 -0.008272058823528772 -0.41911764705882437
+v -0.28125 -0.008272058823528772 -0.04411764705882426
+vt 0.875 0.0625
+vt 0.875 0
+vt 1 0.0625
+vt 0.875 0
+vt 1 0
+vt 1 0.0625
+vt 0.875 0.0625
+vt 0.875 0
+vt 1 0.0625
+vt 0.875 0
+vt 1 0
+vt 1 0.0625
+vt 0.875 0.0625
+vt 0.875 0
+vt 1 0.0625
+vt 0.875 0
+vt 1 0
+vt 1 0.0625
+vt 0.875 0.0625
+vt 0.875 0
+vt 1 0.0625
+vt 0.875 0
+vt 1 0
+vt 1 0.0625
+vt 0.875 0.0625
+vt 0.875 0
+vt 1 0.0625
+vt 0.875 0
+vt 1 0
+vt 1 0.0625
+vt 0.875 0.0625
+vt 0.875 0
+vt 1 0.0625
+vt 0.875 0
+vt 1 0
+vt 1 0.0625
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+usemtl m_2
+f 1/1/1 3/2/2 2/3/3
+f 3/4/4 4/5/5 2/6/6
+usemtl m_2
+f 5/7/7 7/8/8 6/9/9
+f 7/10/10 8/11/11 6/12/12
+usemtl m_2
+f 5/13/13 6/14/14 2/15/15
+f 6/16/16 1/17/17 2/18/18
+usemtl m_2
+f 8/19/19 7/20/20 3/21/21
+f 7/22/22 4/23/23 3/24/24
+usemtl m_2
+f 6/25/25 8/26/26 1/27/27
+f 8/28/28 3/29/29 1/30/30
+usemtl m_2
+f 2/31/31 4/32/32 5/33/33
+f 4/34/34 7/35/35 5/36/36
+o cube
+v 0.28125 0.17922794117647123 -0.04411764705882426
+v 0.28125 0.17922794117647123 -0.41911764705882437
+v 0.28125 -0.008272058823528772 -0.04411764705882426
+v 0.28125 -0.008272058823528772 -0.41911764705882437
+v 0.09375 0.17922794117647123 -0.41911764705882437
+v 0.09375 0.17922794117647123 -0.04411764705882426
+v 0.09375 -0.008272058823528772 -0.41911764705882437
+v 0.09375 -0.008272058823528772 -0.04411764705882426
+vt 0.9375 0.0625
+vt 0.9375 0
+vt 1 0.0625
+vt 0.9375 0
+vt 1 0
+vt 1 0.0625
+vt 0.9375 0.0625
+vt 0.9375 0
+vt 1 0.0625
+vt 0.9375 0
+vt 1 0
+vt 1 0.0625
+vt 0.9375 0.0625
+vt 0.9375 0
+vt 1 0.0625
+vt 0.9375 0
+vt 1 0
+vt 1 0.0625
+vt 0.9375 0.0625
+vt 0.9375 0
+vt 1 0.0625
+vt 0.9375 0
+vt 1 0
+vt 1 0.0625
+vt 0.9375 0.0625
+vt 0.9375 0
+vt 1 0.0625
+vt 0.9375 0
+vt 1 0
+vt 1 0.0625
+vt 0.9375 0.0625
+vt 0.9375 0
+vt 1 0.0625
+vt 0.9375 0
+vt 1 0
+vt 1 0.0625
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+usemtl m_2
+f 9/37/37 11/38/38 10/39/39
+f 11/40/40 12/41/41 10/42/42
+usemtl m_2
+f 13/43/43 15/44/44 14/45/45
+f 15/46/46 16/47/47 14/48/48
+usemtl m_2
+f 13/49/49 14/50/50 10/51/51
+f 14/52/52 9/53/53 10/54/54
+usemtl m_2
+f 16/55/55 15/56/56 11/57/57
+f 15/58/58 12/59/59 11/60/60
+usemtl m_2
+f 14/61/61 16/62/62 9/63/63
+f 16/64/64 11/65/65 9/66/66
+usemtl m_2
+f 10/67/67 12/68/68 13/69/69
+f 12/70/70 15/71/71 13/72/72
+o cube
+v 0.09375 0.17922794117647123 0.8933823529411757
+v 0.09375 0.17922794117647123 -0.04411764705882426
+v 0.09375 -0.008272058823528772 0.8933823529411757
+v 0.09375 -0.008272058823528772 -0.04411764705882426
+v -0.09375 0.17922794117647123 -0.04411764705882426
+v -0.09375 0.17922794117647123 0.8933823529411757
+v -0.09375 -0.008272058823528772 -0.04411764705882426
+v -0.09375 -0.008272058823528772 0.8933823529411757
+vt 0 0.5625
+vt 0 0.5
+vt 0.3125 0.5625
+vt 0 0.5
+vt 0.3125 0.5
+vt 0.3125 0.5625
+vt 0 0.5625
+vt 0 0.5
+vt 0.3125 0.5625
+vt 0 0.5
+vt 0.3125 0.5
+vt 0.3125 0.5625
+vt 0 0.5625
+vt 0 0.5
+vt 0.3125 0.5625
+vt 0 0.5
+vt 0.3125 0.5
+vt 0.3125 0.5625
+vt 0 0.5625
+vt 0 0.5
+vt 0.3125 0.5625
+vt 0 0.5
+vt 0.3125 0.5
+vt 0.3125 0.5625
+vt 0 0.5625
+vt 0 0.5
+vt 0.3125 0.5625
+vt 0 0.5
+vt 0.3125 0.5
+vt 0.3125 0.5625
+vt 0 0.5625
+vt 0 0.5
+vt 0.3125 0.5625
+vt 0 0.5
+vt 0.3125 0.5
+vt 0.3125 0.5625
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+usemtl m_2
+f 17/73/73 19/74/74 18/75/75
+f 19/76/76 20/77/77 18/78/78
+usemtl m_2
+f 21/79/79 23/80/80 22/81/81
+f 23/82/82 24/83/83 22/84/84
+usemtl m_2
+f 21/85/85 22/86/86 18/87/87
+f 22/88/88 17/89/89 18/90/90
+usemtl m_2
+f 24/91/91 23/92/92 19/93/93
+f 23/94/94 20/95/95 19/96/96
+usemtl m_2
+f 22/97/97 24/98/98 17/99/99
+f 24/100/100 19/101/101 17/102/102
+usemtl m_2
+f 18/103/103 20/104/104 21/105/105
+f 20/106/106 23/107/107 21/108/108
+o cube
+v 0.09375 0.3667279411764711 0.5183823529411757
+v 0.09375 0.3667279411764711 -0.04411764705882426
+v 0.09375 0.17922794117647123 0.5183823529411757
+v 0.09375 0.17922794117647123 -0.04411764705882426
+v -0.09375 0.3667279411764711 -0.04411764705882426
+v -0.09375 0.3667279411764711 0.5183823529411757
+v -0.09375 0.17922794117647123 -0.04411764705882426
+v -0.09375 0.17922794117647123 0.5183823529411757
+vt 0.25 0.75
+vt 0.25 0.5625
+vt 0.3125 0.75
+vt 0.25 0.5625
+vt 0.3125 0.5625
+vt 0.3125 0.75
+vt 0.25 0.75
+vt 0.25 0.5625
+vt 0.3125 0.75
+vt 0.25 0.5625
+vt 0.3125 0.5625
+vt 0.3125 0.75
+vt 0.25 0.75
+vt 0.25 0.5625
+vt 0.3125 0.75
+vt 0.25 0.5625
+vt 0.3125 0.5625
+vt 0.3125 0.75
+vt 0.25 0.75
+vt 0.25 0.5625
+vt 0.3125 0.75
+vt 0.25 0.5625
+vt 0.3125 0.5625
+vt 0.3125 0.75
+vt 0.25 0.75
+vt 0.25 0.5625
+vt 0.3125 0.75
+vt 0.25 0.5625
+vt 0.3125 0.5625
+vt 0.3125 0.75
+vt 0.25 0.75
+vt 0.25 0.5625
+vt 0.3125 0.75
+vt 0.25 0.5625
+vt 0.3125 0.5625
+vt 0.3125 0.75
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+usemtl m_2
+f 25/109/109 27/110/110 26/111/111
+f 27/112/112 28/113/113 26/114/114
+usemtl m_2
+f 29/115/115 31/116/116 30/117/117
+f 31/118/118 32/119/119 30/120/120
+usemtl m_2
+f 29/121/121 30/122/122 26/123/123
+f 30/124/124 25/125/125 26/126/126
+usemtl m_2
+f 32/127/127 31/128/128 27/129/129
+f 31/130/130 28/131/131 27/132/132
+usemtl m_2
+f 30/133/133 32/134/134 25/135/135
+f 32/136/136 27/137/137 25/138/138
+usemtl m_2
+f 26/139/139 28/140/140 29/141/141
+f 28/142/142 31/143/143 29/144/144
+o cube
+v 0.28125 1.679227941176471 0.33088235294117574
+v 0.28125 1.679227941176471 0.14338235294117574
+v 0.28125 0.17922794117647123 0.33088235294117574
+v 0.28125 0.17922794117647123 0.14338235294117574
+v -0.28125 1.679227941176471 0.14338235294117574
+v -0.28125 1.679227941176471 0.33088235294117574
+v -0.28125 0.17922794117647123 0.14338235294117574
+v -0.28125 0.17922794117647123 0.33088235294117574
+vt 0.8125 0.875
+vt 0.8125 0.375
+vt 0.875 0.875
+vt 0.8125 0.375
+vt 0.875 0.375
+vt 0.875 0.875
+vt 0.8125 0.875
+vt 0.8125 0.375
+vt 0.875 0.875
+vt 0.8125 0.375
+vt 0.875 0.375
+vt 0.875 0.875
+vt 0.8125 0.875
+vt 0.8125 0.8125
+vt 1 0.875
+vt 0.8125 0.8125
+vt 1 0.8125
+vt 1 0.875
+vt 0 0.625
+vt 0 0.5625
+vt 0.1875 0.625
+vt 0 0.5625
+vt 0.1875 0.5625
+vt 0.1875 0.625
+vt 0.4375 0.6875
+vt 0.4375 0.1875
+vt 0.625 0.6875
+vt 0.4375 0.1875
+vt 0.625 0.1875
+vt 0.625 0.6875
+vt 0 1
+vt 0 0.5
+vt 0.1875 1
+vt 0 0.5
+vt 0.1875 0.5
+vt 0.1875 1
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+usemtl m_2
+f 33/145/145 35/146/146 34/147/147
+f 35/148/148 36/149/149 34/150/150
+usemtl m_2
+f 37/151/151 39/152/152 38/153/153
+f 39/154/154 40/155/155 38/156/156
+usemtl m_2
+f 37/157/157 38/158/158 34/159/159
+f 38/160/160 33/161/161 34/162/162
+usemtl m_2
+f 40/163/163 39/164/164 35/165/165
+f 39/166/166 36/167/167 35/168/168
+usemtl m_2
+f 38/169/169 40/170/170 33/171/171
+f 40/172/172 35/173/173 33/174/174
+usemtl m_2
+f 34/175/175 36/176/176 37/177/177
+f 36/178/178 39/179/179 37/180/180
+o cube
+v 0.28125 1.3042279411764715 0.14338235294117574
+v 0.28125 1.3042279411764715 -0.04411764705882426
+v 0.28125 0.17922794117647123 0.14338235294117574
+v 0.28125 0.17922794117647123 -0.04411764705882426
+v -0.28125 1.3042279411764715 -0.04411764705882426
+v -0.28125 1.3042279411764715 0.14338235294117574
+v -0.28125 0.17922794117647123 -0.04411764705882426
+v -0.28125 0.17922794117647123 0.14338235294117574
+vt 0.1875 1
+vt 0.1875 0.625
+vt 0.25 1
+vt 0.1875 0.625
+vt 0.25 0.625
+vt 0.25 1
+vt 0.1875 1
+vt 0.1875 0.625
+vt 0.25 1
+vt 0.1875 0.625
+vt 0.25 0.625
+vt 0.25 1
+vt 0.1875 1
+vt 0.1875 0.625
+vt 0.25 1
+vt 0.1875 0.625
+vt 0.25 0.625
+vt 0.25 1
+vt 0.1875 1
+vt 0.1875 0.625
+vt 0.25 1
+vt 0.1875 0.625
+vt 0.25 0.625
+vt 0.25 1
+vt 0.1875 1
+vt 0.1875 0.625
+vt 0.25 1
+vt 0.1875 0.625
+vt 0.25 0.625
+vt 0.25 1
+vt 0.1875 1
+vt 0.1875 0.625
+vt 0.25 1
+vt 0.1875 0.625
+vt 0.25 0.625
+vt 0.25 1
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+usemtl m_2
+f 41/181/181 43/182/182 42/183/183
+f 43/184/184 44/185/185 42/186/186
+usemtl m_2
+f 45/187/187 47/188/188 46/189/189
+f 47/190/190 48/191/191 46/192/192
+usemtl m_2
+f 45/193/193 46/194/194 42/195/195
+f 46/196/196 41/197/197 42/198/198
+usemtl m_2
+f 48/199/199 47/200/200 43/201/201
+f 47/202/202 44/203/203 43/204/204
+usemtl m_2
+f 46/205/205 48/206/206 41/207/207
+f 48/208/208 43/209/209 41/210/210
+usemtl m_2
+f 42/211/211 44/212/212 45/213/213
+f 44/214/214 47/215/215 45/216/216
+o cube
+v 0.28125 1.3042279411764715 -0.04411764705882426
+v 0.28125 1.3042279411764715 -0.23161764705882426
+v 0.28125 0.17922794117647123 -0.04411764705882426
+v 0.28125 0.17922794117647123 -0.23161764705882426
+v -0.28125 1.3042279411764715 -0.23161764705882426
+v -0.28125 1.3042279411764715 -0.04411764705882426
+v -0.28125 0.17922794117647123 -0.23161764705882426
+v -0.28125 0.17922794117647123 -0.04411764705882426
+vt 0 1
+vt 0 0.625
+vt 0.0625 1
+vt 0 0.625
+vt 0.0625 0.625
+vt 0.0625 1
+vt 0 1
+vt 0 0.625
+vt 0.0625 1
+vt 0 0.625
+vt 0.0625 0.625
+vt 0.0625 1
+vt 0 1
+vt 0 0.9375
+vt 0.1875 1
+vt 0 0.9375
+vt 0.1875 0.9375
+vt 0.1875 1
+vt 0 1
+vt 0 0.9375
+vt 0.1875 1
+vt 0 0.9375
+vt 0.1875 0.9375
+vt 0.1875 1
+vt 0 1
+vt 0 0.625
+vt 0.1875 1
+vt 0 0.625
+vt 0.1875 0.625
+vt 0.1875 1
+vt 0 1
+vt 0 0.625
+vt 0.1875 1
+vt 0 0.625
+vt 0.1875 0.625
+vt 0.1875 1
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+usemtl m_2
+f 49/217/217 51/218/218 50/219/219
+f 51/220/220 52/221/221 50/222/222
+usemtl m_2
+f 53/223/223 55/224/224 54/225/225
+f 55/226/226 56/227/227 54/228/228
+usemtl m_2
+f 53/229/229 54/230/230 50/231/231
+f 54/232/232 49/233/233 50/234/234
+usemtl m_2
+f 56/235/235 55/236/236 51/237/237
+f 55/238/238 52/239/239 51/240/240
+usemtl m_2
+f 54/241/241 56/242/242 49/243/243
+f 56/244/244 51/245/245 49/246/246
+usemtl m_2
+f 50/247/247 52/248/248 53/249/249
+f 52/250/250 55/251/251 53/252/252
+o cube
+v 0.28125 1.679227941176471 0.14338235294117574
+v 0.28125 1.679227941176471 -0.23161764705882426
+v 0.28125 1.491727941176471 0.14338235294117574
+v 0.28125 1.491727941176471 -0.23161764705882426
+v -0.28125 1.679227941176471 -0.23161764705882426
+v -0.28125 1.679227941176471 0.14338235294117574
+v -0.28125 1.491727941176471 -0.23161764705882426
+v -0.28125 1.491727941176471 0.14338235294117574
+vt 0.8125 1
+vt 0.8125 0.9375
+vt 1 1
+vt 0.8125 0.9375
+vt 1 0.9375
+vt 1 1
+vt 0.875 1
+vt 0.875 0.9375
+vt 1 1
+vt 0.875 0.9375
+vt 1 0.9375
+vt 1 1
+vt 0.8125 1
+vt 0.8125 0.875
+vt 1 1
+vt 0.8125 0.875
+vt 1 0.875
+vt 1 1
+vt 0 1
+vt 0 0.875
+vt 0.1875 1
+vt 0 0.875
+vt 0.1875 0.875
+vt 0.1875 1
+vt 0 1
+vt 0 0.9375
+vt 0.1875 1
+vt 0 0.9375
+vt 0.1875 0.9375
+vt 0.1875 1
+vt 0.8125 1
+vt 0.8125 0.9375
+vt 1 1
+vt 0.8125 0.9375
+vt 1 0.9375
+vt 1 1
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+vn 0 0 -1
+usemtl m_2
+f 57/253/253 59/254/254 58/255/255
+f 59/256/256 60/257/257 58/258/258
+usemtl m_2
+f 61/259/259 63/260/260 62/261/261
+f 63/262/262 64/263/263 62/264/264
+usemtl m_2
+f 61/265/265 62/266/266 58/267/267
+f 62/268/268 57/269/269 58/270/270
+usemtl m_2
+f 64/271/271 63/272/272 59/273/273
+f 63/274/274 60/275/275 59/276/276
+usemtl m_2
+f 62/277/277 64/278/278 57/279/279
+f 64/280/280 59/281/281 57/282/282
+usemtl m_2
+f 58/283/283 60/284/284 61/285/285
+f 60/286/286 63/287/287 61/288/288
+o cube
+v 0.28125 1.679227941176471 0.5183823529411757
+v 0.28125 1.679227941176471 0.33088235294117574
+v 0.28125 1.491727941176471 0.5183823529411757
+v 0.28125 1.491727941176471 0.33088235294117574
+v 0.09375 1.679227941176471 0.33088235294117574
+v 0.09375 1.679227941176471 0.5183823529411757
+v 0.09375 1.491727941176471 0.33088235294117574
+v 0.09375 1.491727941176471 0.5183823529411757
+vt 0.9375 0.75
+vt 0.9375 0.6875
+vt 1 0.75
+vt 0.9375 0.6875
+vt 1 0.6875
+vt 1 0.75
+vt 0.9375 0.75
+vt 0.9375 0.6875
+vt 1 0.75
+vt 0.9375 0.6875
+vt 1 0.6875
+vt 1 0.75
+vt 0.9375 0.75
+vt 0.9375 0.6875
+vt 1 0.75
+vt 0.9375 0.6875
+vt 1 0.6875
+vt 1 0.75
+vt 0.9375 0.75
+vt 0.9375 0.6875
+vt 1 0.75
+vt 0.9375 0.6875
+vt 1 0.6875
+vt 1 0.75
+vt 0.9375 0.75
+vt 0.9375 0.6875
+vt 1 0.75
+vt 0.9375 0.6875
+vt 1 0.6875
+vt 1 0.75
+vt 0.9375 0.75
+vt 0.9375 0.6875
+vt 1 0.75
+vt 0.9375 0.6875
+vt 1 0.6875
+vt 1 0.75
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn 1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn -1 0 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 -1 0
+vn 0 0