Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Awesome_Spider

Forge Modder
  • Posts

    892
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by Awesome_Spider

  1. Thanks for the detailed replay. I'll try that.
  2. Thanks. I would have thought it would just be a damage value.
  3. I would like to, when the player drinks a water bottle, add hydration to an already attached capability on the player. I found an event called LivingEntityUseItemEvent that has a few sub-events. I think the one I want is Finish but I'm not entirely sure. I want the water bottle to be consumed by the player, but I also want to add to the capability when the player is done drinking it. Would this be the right event? My second question is what is the water bottle called in the Minecraft code? Is it under the potion?
  4. Thanks for pointing that out. Now it isn't rendering. protected static BlockRendererDispatcher blockRenderer; @Override public void renderTileEntityFast(TileEntityRobot te, double x, double y, double z, float partialTicks, int destroyStage, VertexBuffer renderer) { if(blockRenderer == null) blockRenderer = Minecraft.getMinecraft().getBlockRendererDispatcher(); BlockPos pos = te.getPos(); IBlockAccess world = MinecraftForgeClient.getRegionRenderCache(te.getWorld(), pos); IBlockState state = world.getBlockState(pos); final IBakedModel model = blockRenderer.getBlockModelShapes().getModelForState(state); renderer.setTranslation(x - pos.getX() + 2.0f, y - pos.getY(), z - pos.getZ() + 2.0f); final List<BakedQuad> quadList = model.getQuads(state, null, 0L); final List<BakedQuad> newQuadList = Lists.newArrayList(); for(BakedQuad quad : quadList) { newQuadList.add(transform(quad, new TRSRTransformation(new Vector3f(0, 0, 0), new Quat4f(-0.49f, 0, 0, -0.87f), new Vector3f(1, 1, 1), new Quat4f(0.49f, 0, 0, 0.87f)))); } final IBakedModel newModel = new IBakedModel() { @Override public List<BakedQuad> getQuads(IBlockState state, EnumFacing side, long rand) { return newQuadList; } @Override public boolean isAmbientOcclusion() { return model.isAmbientOcclusion(); } @Override public boolean isGui3d() { return model.isGui3d(); } @Override public boolean isBuiltInRenderer() { return model.isBuiltInRenderer(); } @Override public TextureAtlasSprite getParticleTexture() { return model.getParticleTexture(); } @Override public ItemCameraTransforms getItemCameraTransforms() { return model.getItemCameraTransforms(); } @Override public ItemOverrideList getOverrides() { return model.getOverrides(); } }; blockRenderer.getBlockModelRenderer().renderModel(world, newModel, state, pos, renderer, false); } //This method was borrowed from Vazkii's mod called Botania. It was modified to work for a block instead of an item. public static BakedQuad transform(BakedQuad quad, final TRSRTransformation transform) { UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder(DefaultVertexFormats.BLOCK); final IVertexConsumer consumer = new VertexTransformer(builder) { @Override public void put(int element, float... data) { VertexFormatElement formatElement = DefaultVertexFormats.BLOCK.getElement(element); switch(formatElement.getUsage()) { case POSITION: { float[] newData = new float[3]; Vector3f vec = new Vector3f(data); transform.getMatrix().transform(vec); vec.get(newData); parent.put(element, newData); break; } default: { parent.put(element, data); break; } } } }; quad.pipe(consumer); return builder.build(); } Did I get the Quat4fs right? I haven't really worked with them. I used this to get the numbers for them.
  5. Ok. I tried that and it only renders the top face (unrotated). I'm probably still doing it wrong. protected static BlockRendererDispatcher blockRenderer; public int curStep = 0; public int totalSteps = 0; @Override public void renderTileEntityFast(TileEntityRobot te, double x, double y, double z, float partialTicks, int destroyStage, VertexBuffer renderer) { if(blockRenderer == null) blockRenderer = Minecraft.getMinecraft().getBlockRendererDispatcher(); BlockPos pos = te.getPos(); IBlockAccess world = MinecraftForgeClient.getRegionRenderCache(te.getWorld(), pos); IBlockState state = world.getBlockState(pos); final IBakedModel model = blockRenderer.getBlockModelShapes().getModelForState(state); renderer.setTranslation(x - pos.getX() + 2.0f, y - pos.getY(), z - pos.getZ() + 2.0f); final List<BakedQuad> quadList = model.getQuads(state, null, 0L); for(BakedQuad quad : quadList) { transform(quad, new TRSRTransformation(new Vector3f(0, 0, 0), new Quat4f(-0.49f, 0, 0, -0.87f), new Vector3f(1, 1, 1), new Quat4f(0.49f, 0, 0, 0.87f))); } final IBakedModel newModel = new IBakedModel() { @Override public List<BakedQuad> getQuads(IBlockState state, EnumFacing side, long rand) { return quadList; } @Override public boolean isAmbientOcclusion() { return model.isAmbientOcclusion(); } @Override public boolean isGui3d() { return model.isGui3d(); } @Override public boolean isBuiltInRenderer() { return model.isBuiltInRenderer(); } @Override public TextureAtlasSprite getParticleTexture() { return model.getParticleTexture(); } @Override public ItemCameraTransforms getItemCameraTransforms() { return model.getItemCameraTransforms(); } @Override public ItemOverrideList getOverrides() { return model.getOverrides(); } }; blockRenderer.getBlockModelRenderer().renderModel(world, newModel, state, pos, renderer, false); } //This method was borrowed from Vazkii's mod called Botania. It was modified to work for a block instead of an item. public static BakedQuad transform(BakedQuad quad, final TRSRTransformation transform) { UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder(DefaultVertexFormats.BLOCK); final IVertexConsumer consumer = new VertexTransformer(builder) { @Override public void put(int element, float... data) { VertexFormatElement formatElement = DefaultVertexFormats.BLOCK.getElement(element); switch(formatElement.getUsage()) { case POSITION: { float[] newData = new float[3]; Vector3f vec = new Vector3f(data); transform.getMatrix().transform(vec); vec.get(newData); parent.put(element, newData); break; } default: { parent.put(element, data); break; } } } }; quad.pipe(consumer); return builder.build(); } Mind you, I am creating a new instance of the model every rendering tick. Not sure how to get around that.
  6. It's still not working. Isn't that what I'm doing? I'm rotating one of the cubes?
  7. Ok, I now have the following code, and it isn't rotating like I wanted it to.
  8. First of all, this a sub forum for a specific mod, and second of all 1.7.10 isn't supported by Forge.
  9. I just stored json in the item's NBT. It may not be the best solution in the world, but it works. Thanks for the suggestion though.
  10. I don't completely understand matrices yet, as I am only in grade 12 math currently. I tried it and got this code in my Renderer: protected static BlockRendererDispatcher blockRenderer; @Override public void renderTileEntityFast(TileEntityRobot te, double x, double y, double z, float partialTicks, int destroyStage, VertexBuffer renderer) { if(blockRenderer == null) blockRenderer = Minecraft.getMinecraft().getBlockRendererDispatcher(); BlockPos pos = te.getPos(); IBlockAccess world = MinecraftForgeClient.getRegionRenderCache(te.getWorld(), pos); IBlockState state = world.getBlockState(pos); IBakedModel model = blockRenderer.getBlockModelShapes().getModelForState(state); renderer.setTranslation(x - pos.getX() + 2.0f, y - pos.getY(), z - pos.getZ() + 2.0f); BakedQuad bq = model.getQuads(state, null, 0L).get(0); int[] vertexData = handleXRotation(bq.getVertexData(), 45); model.getQuads(state, null, 0L).set(0, new BakedQuad(vertexData, bq.getTintIndex(), bq.getFace(), bq.getSprite(), bq.shouldApplyDiffuseLighting(), bq.getFormat())); blockRenderer.getBlockModelRenderer().renderModel(world, model, state, pos, renderer, false); } public int[] handleXRotation(int[] vertexData, double rot) { int vx = vertexData[0]; int vy = vertexData[1]; vx = (int)((vx * Math.cos(Math.toRadians(rot))) - (vy * Math.sin(Math.toRadians(rot)))); vy = (int)((vx * Math.sin(Math.toRadians(rot))) + (vy * Math.cos(Math.toRadians(rot)))); vertexData[0] = vx; vertexData[1] = vy; //Next Vertex vx = vertexData[8]; vy = vertexData[9]; vx = (int)((vx * Math.cos(Math.toRadians(rot))) - (vy * Math.sin(Math.toRadians(rot)))); vy = (int)((vx * Math.sin(Math.toRadians(rot))) + (vy * Math.cos(Math.toRadians(rot)))); vertexData[8] = vx; vertexData[9] = vy; //Next Vertex vx = vertexData[14]; vy = vertexData[15]; vx = (int)((vx * Math.cos(Math.toRadians(-rot))) - (vy * Math.sin(Math.toRadians(-rot)))); vy = (int)((vx * Math.sin(Math.toRadians(-rot))) + (vy * Math.cos(Math.toRadians(-rot)))); vertexData[14] = vx; vertexData[15] = vy; //Next Vertex vx = vertexData[20]; vy = vertexData[21]; vx = (int)((vx * Math.cos(Math.toRadians(-rot))) - (vy * Math.sin(Math.toRadians(-rot)))); vy = (int)((vx * Math.sin(Math.toRadians(-rot))) + (vy * Math.cos(Math.toRadians(-rot)))); vertexData[20] = vx; vertexData[21] = vy; return vertexData; } The method handleXRotation only handles the top face so far. I'm probably doing this way wrong, but this what I got. When I test this code the top face disappears.
  11. I know this is probably fairly easy to do, but I'm struggling a little bit. Which vertexes use cos and which use sin? I've taken trigonometry but this is way beyond me. All I want is a basic rotation on the x axis.
  12. A similar topic was covered here recently (although I can't find it with all this spam) for a modded block involving a TESR, but I'm not sure about vanilla blocks.
  13. What exactly do you mean by this? Explain.
  14. Does anyone know how I could do this? PS: Kind of off-topic but these spammers are getting really annoying. So glad the moderators are working on getting it fixed. I translated one of their user names on google translate from Chinese and it meant "Make a Fortune". They are obviously gaining something from this.
  15. Oh, sorry. Replace world.getBlock(i, k, j) with world.getBlock(new BlockPos(i, k, j)).
  16. Thank you. I now have this basic code for my renderer: protected static BlockRendererDispatcher blockRenderer; @Override public void renderTileEntityFast(TileEntityRobot te, double x, double y, double z, float partialTicks, int destroyStage, VertexBuffer renderer) { if(blockRenderer == null) blockRenderer = Minecraft.getMinecraft().getBlockRendererDispatcher(); BlockPos pos = te.getPos(); IBlockAccess world = MinecraftForgeClient.getRegionRenderCache(te.getWorld(), pos); IBlockState state = world.getBlockState(pos); IBakedModel model = blockRenderer.getBlockModelShapes().getModelForState(state); renderer.setTranslation(x - pos.getX(), y - pos.getY(), z - pos.getZ()); blockRenderer.getBlockModelRenderer().renderModel(world, model, state, pos, renderer, false); } I have tested it by adding an offset to the translation (for testing), and it works. It renders the model I defined in my blockstate file. Now how would I add rotation/change the position of some of the parts of the model?
  17. What format would the int array passed to VertexBuffer#addVertexData use?
  18. Would I have to define something in a blockstate/model json file?
×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.