Jump to content

[1.14] Forge. rotating .obj based on blockstates.


Verthicha

Recommended Posts

is this possible. if so. what have I messed up. i cant seem to find anyone else having this problem. the model used to load and render, but i think with my constant tinkering i messed that up too.

block .class

package com.mod.rsmc.block;

import net.minecraft.block.*;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.state.*;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.Direction;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

public class BlockSmelter extends Block {
    public static final DirectionProperty FACING = DirectionProperty.create("facing",Direction.values());

    public BlockSmelter(Properties properties) {
        super(properties);
        this.setDefaultState(this.getDefaultState().with(FACING, Direction.NORTH));
        LOGGER.debug("RSMC::" + Direction.values());
    }

    @Override
    protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
        builder.add(BlockStateProperties.FACING);
    }
    @OnlyIn(Dist.CLIENT)
    public BlockRenderLayer getBlockLayer()
    {
        return BlockRenderLayer.CUTOUT_MIPPED;
    }
    public BlockState getStateForPlacement(BlockItemUseContext context) {
        return this.getDefaultState().with(FACING, context.getNearestLookingDirection().getOpposite());
    }


}

block .json

{
  "forge_marker": 1,
  "model": "rsmc:block/block_smelter.obj",
  "custom": {
    "flip-v": true
  },
  "variants": {
    "facing": {
      "up": {
        "transform": {
          "rotation": {
            "y": 0
          }
        }
      },
      "north": {
        "transform": {
          "rotation": {
            "y": 0
          }
        }
      },
      "south": {
        "transform": {
          "rotation": {
            "y": 180
          }
        }
      },
      "east": {
        "transform": {
          "rotation": {
            "y": 270
          }
        }
      },
      "west": {
        "transform": {
          "rotation": {
            "y": 90
          }
        }
      },
      "down": {
        "transform": {
          "rotation": {
            "y": 0
          }
        }
      }
    }
  }
}


mod "main" .kt yes it is in Kotlin, no i didn't have a choice in the matter

package com.mod.rsmc

import com.mod.rsmc.client.ClientEventHandler
import com.mod.rsmc.library.block.BlockLibrary
import com.mod.rsmc.library.block.TileEntityLibrary
import com.mod.rsmc.library.feature.FeatureLibrary
import com.mod.rsmc.library.item.ItemLibrary
import com.mod.rsmc.packets.RSMCPacketHandler
import com.mod.rsmc.util.CVManager
import net.minecraft.client.renderer.model.ModelResourceLocation
import net.minecraft.client.renderer.vertex.DefaultVertexFormats
import net.minecraft.util.ResourceLocation
import net.minecraftforge.client.event.ModelBakeEvent
import net.minecraftforge.client.event.ModelRegistryEvent
import net.minecraftforge.client.event.TextureStitchEvent
import net.minecraftforge.client.model.BasicState
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.common.MinecraftForge
import net.minecraftforge.eventbus.api.SubscribeEvent
import net.minecraftforge.fml.common.Mod
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext
import org.apache.logging.log4j.LogManager


const val RSMC_MOD_ID = "rsmc"

val LOGGER = LogManager.getLogger(RSMC_MOD_ID)

@Mod(RSMC_MOD_ID)
class RSMC {
    init {
        MinecraftForge.EVENT_BUS
        FMLJavaModLoadingContext.get().modEventBus.register(BlockLibrary)
        FMLJavaModLoadingContext.get().modEventBus.register(ItemLibrary)
        FMLJavaModLoadingContext.get().modEventBus.register(FeatureLibrary)
        FMLJavaModLoadingContext.get().modEventBus.register(TileEntityLibrary)
        FMLJavaModLoadingContext.get().modEventBus.register(RegistryEvents)

        MinecraftForge.EVENT_BUS.register(PlayerEventHandler)
        MinecraftForge.EVENT_BUS.register(GuffCoreEventContainer)
        MinecraftForge.EVENT_BUS.register(RegistryEvents)

        FMLJavaModLoadingContext.get().modEventBus.register(ClientEventHandler)

        RSMCPacketHandler //initializes the network channel

        FMLJavaModLoadingContext.get().modEventBus.addListener<FMLCommonSetupEvent> { commonSetup(it) }
        FMLJavaModLoadingContext.get().modEventBus.addListener<FMLClientSetupEvent> { clientSetup(it) }
    }

    private fun commonSetup(event: FMLCommonSetupEvent) {
        FeatureLibrary.populateBiomes()
        CVManager.load() //load item values
    }

    private fun clientSetup(event: FMLClientSetupEvent) {
        OBJLoader.INSTANCE.addDomain(RSMC_MOD_ID)
    }

    @Mod.EventBusSubscriber(modid = RSMC_MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
    object RegistryEvents {

        @SubscribeEvent
        fun onModelBakeEvent(event: ModelBakeEvent) {
            try { // Try to load an OBJ model (placed in src/main/resources/assets/examplemod/models/)
                val model = ModelLoaderRegistry.getModelOrMissing(ResourceLocation("rsmc:block/block_smelter.obj"))
                if (model is OBJModel) { // If loading OBJ model succeeds, bake the model and replace stick's model with the baked model
                    val bakedModel = model.bake(event.modelLoader, ModelLoader.defaultTextureGetter(), BasicState(model.getDefaultState(), false), DefaultVertexFormats.ITEM)
                    event.modelRegistry[ModelResourceLocation("rsmc:block_smelter")] = bakedModel
                }
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }

        @SubscribeEvent
        fun onPreTextureStitch(event: TextureStitchEvent.Pre) {
            LOGGER.debug(event.addSprite(ResourceLocation.tryCreate("rsmc:block/block_smelter_mat")))
        }
    }
}

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.