Last active
August 29, 2015 14:27
-
-
Save StillManic/d279739b91dad4f6e90d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package rcteam.rc2.proxy; | |
import net.minecraft.client.renderer.ItemMeshDefinition; | |
import net.minecraft.client.resources.IReloadableResourceManager; | |
import net.minecraft.client.resources.model.ModelResourceLocation; | |
import net.minecraft.item.ItemStack; | |
import net.minecraftforge.client.MinecraftForgeClient; | |
import net.minecraftforge.client.model.ModelLoader; | |
import net.minecraftforge.client.model.ModelLoaderRegistry; | |
import net.minecraft.client.Minecraft; | |
import net.minecraft.item.Item; | |
import net.minecraftforge.common.MinecraftForge; | |
import net.minecraftforge.fml.client.FMLClientHandler; | |
import net.minecraftforge.fml.common.FMLCommonHandler; | |
import net.minecraftforge.fml.relauncher.Side; | |
import rcteam.rc2.RC2; | |
import rcteam.rc2.block.BlockTrack; | |
import rcteam.rc2.block.RC2Blocks; | |
import rcteam.rc2.client.gui.GuiThemeParkOverlay; | |
import rcteam.rc2.item.RC2Items; | |
import rcteam.rc2.rollercoaster.CategoryEnum; | |
import rcteam.rc2.rollercoaster.ThemeParkLogo; | |
import rcteam.rc2.util.FileManager; | |
import rcteam.rc2.util.OBJLoader; | |
import rcteam.rc2.util.TrackStateMapper; | |
import java.io.File; | |
import java.util.Map; | |
public class ClientProxy extends CommonProxy { | |
public static int trackRenderId = -1; | |
@Override | |
public void preInit() { | |
ModelLoaderRegistry.registerLoader(OBJLoader.instance); | |
OBJLoader.instance.addDomain(RC2.MODID.toLowerCase()); | |
} | |
@Override | |
public void init() { | |
RC2Items.init(Side.CLIENT); | |
RC2Blocks.init(Side.CLIENT); | |
initRenderers(); | |
} | |
@Override | |
public void initRenderers() { | |
ThemeParkLogo.init(); | |
MinecraftForge.EVENT_BUS.register(new GuiThemeParkOverlay(Minecraft.getMinecraft())); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package rcteam.rc2.proxy; | |
import net.minecraftforge.fml.relauncher.Side; | |
import rcteam.rc2.block.RC2Blocks; | |
import rcteam.rc2.item.RC2Items; | |
public class CommonProxy { | |
public void preInit() { | |
// initRenderers(); | |
} | |
public void init() { | |
RC2Items.init(Side.SERVER); | |
RC2Blocks.init(Side.SERVER); | |
initRenderers(); | |
} | |
public void initRenderers() { | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"forge_marker": 1, | |
"defaults": { | |
"textures": {}, | |
"model": "rc2:tracks/hyper_twister/straight.obj" | |
}, | |
"variants": { | |
"normal": [{}], | |
"inventory": [{ | |
"transform": "forge:default-block" | |
}], | |
"facing": { | |
"north": {}, | |
"south": {"y": 180}, | |
"west": {"y": 270}, | |
"east": {"y": 90} | |
}, | |
"piece": { | |
"straight": {"model": "rc2:tracks/hyper_twister/straight.obj"}, | |
"small_corner": {"model": "rc2:tracks/hyper_twister/small_corner.obj"}, | |
"medium_corner": {"model": "rc2:tracks/hyper_twister/medium_corner.obj"}, | |
"large_corner_left": {"model": "rc2:tracks/hyper_twister/large_corner_left.obj"}, | |
"large_corner_right": {"model": "rc2:tracks/hyper_twister/large_corner_right.obj"} | |
} | |
}, | |
"style_info": { | |
"display_name": "Hyper Twister Coaster", | |
"category": "steel", | |
"train_cars": ["default"] | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package rcteam.rc2.item; | |
import net.minecraft.block.Block; | |
import net.minecraft.block.state.IBlockState; | |
import net.minecraft.client.renderer.ItemMeshDefinition; | |
import net.minecraft.client.resources.model.ModelResourceLocation; | |
import net.minecraft.entity.player.EntityPlayer; | |
import net.minecraft.item.ItemBlock; | |
import net.minecraft.item.ItemStack; | |
import net.minecraft.launchwrapper.Launch; | |
import net.minecraft.nbt.NBTTagCompound; | |
import net.minecraft.util.BlockPos; | |
import net.minecraft.util.EnumFacing; | |
import net.minecraft.world.World; | |
import rcteam.rc2.block.BlockTrack; | |
import rcteam.rc2.rollercoaster.TrackPiece; | |
import rcteam.rc2.util.Reference; | |
import rcteam.rc2.util.TrackStateMapper; | |
public class ItemTrack extends ItemBlock { | |
private BlockTrack track; | |
public ItemTrack(Block track) { | |
super(track); | |
this.track = (BlockTrack) track; | |
} | |
public BlockTrack getTrack() { | |
return this.track; | |
} | |
@Override | |
public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState) { | |
if ((Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment")) { //this makes tracks placeable by hand when run in a dev env | |
//TODO! | |
if (!stack.hasTagCompound()) { | |
NBTTagCompound compound = new NBTTagCompound(); | |
compound.setTag("current_piece", track.getInfo().getCurrentPiece().writeToNBT()); | |
stack.setTagCompound(compound); | |
} | |
// TrackPiece piece = TrackPiece.readFromNBT(stack.getSubCompound("current_piece", true)); | |
TrackPiece piece = this.track.getInfo().getNextPiece(); | |
this.track.getInfo().setCurrentPiece(piece); | |
// world.setBlockState(pos, track.getStateFromMeta(Utils.getFacingFromEntity(world, pos, player, false, false).getHorizontalIndex()), 3); | |
world.setBlockState(pos, newState.withProperty(BlockTrack.PIECE_PROPERTY, piece), 3); | |
return true; | |
} | |
return false; | |
} | |
public static class ItemTrackMeshDefinition implements ItemMeshDefinition { | |
public static final ItemTrackMeshDefinition INSTANCE = new ItemTrackMeshDefinition(); | |
@Override | |
public ModelResourceLocation getModelLocation(ItemStack stack) { | |
ModelResourceLocation location = new ModelResourceLocation(Reference.RESOURCE_PREFIX + "tracks/hyper_twister", "inventory"); | |
return location; | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package rcteam.rc2; | |
import net.minecraft.client.Minecraft; | |
import net.minecraft.client.resources.IResource; | |
import net.minecraft.command.CommandHandler; | |
import net.minecraft.util.ResourceLocation; | |
import net.minecraftforge.fml.client.FMLClientHandler; | |
import net.minecraftforge.fml.common.FMLLog; | |
import net.minecraftforge.fml.common.Mod; | |
import net.minecraftforge.fml.common.Mod.EventHandler; | |
import net.minecraftforge.fml.common.Mod.Instance; | |
import net.minecraftforge.fml.common.SidedProxy; | |
import net.minecraftforge.fml.common.event.FMLInitializationEvent; | |
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; | |
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; | |
import net.minecraftforge.fml.common.event.FMLServerStartingEvent; | |
import net.minecraftforge.fml.common.network.NetworkRegistry; | |
import net.minecraftforge.fml.relauncher.Side; | |
import net.minecraftforge.fml.relauncher.SideOnly; | |
import net.minecraft.creativetab.CreativeTabs; | |
import net.minecraft.item.Item; | |
import net.minecraft.item.ItemStack; | |
import org.apache.logging.log4j.*; | |
import org.apache.logging.log4j.LogManager; | |
import org.apache.logging.log4j.Logger; | |
import rcteam.rc2.block.RC2Blocks; | |
import rcteam.rc2.client.gui.GuiHandler; | |
import rcteam.rc2.command.GiveThemeParkCommand; | |
import rcteam.rc2.item.RC2Items; | |
import rcteam.rc2.network.packets.PacketPipeline; | |
import rcteam.rc2.proxy.CommonProxy; | |
import rcteam.rc2.rollercoaster.CoasterStyle; | |
import rcteam.rc2.rollercoaster.StyleRegistry; | |
import rcteam.rc2.rollercoaster.TrackPieceRegistry; | |
import rcteam.rc2.util.CoasterPack; | |
import rcteam.rc2.util.FileManager; | |
import java.io.File; | |
import java.io.IOException; | |
import java.io.InputStreamReader; | |
import java.util.Collection; | |
import java.util.HashMap; | |
import rcteam.rc2.util.JsonParser; | |
import rcteam.rc2.util.Reference; | |
@Mod(modid = RC2.MODID, name = RC2.NAME, version = RC2.VERSION) | |
public class RC2 { | |
public static final String MODID = "rc2"; | |
public static final String NAME = "Roller Coaster 2"; | |
public static final String VERSION = "v0.1"; | |
public static HashMap<String, CoasterPack> packs = new HashMap<>(); | |
@Instance | |
public static RC2 instance; | |
@SidedProxy(clientSide="rcteam.rc2.proxy.ClientProxy", serverSide="rcteam.rc2.proxy.CommonProxy") | |
public static CommonProxy proxy; | |
public static String srcDir; | |
public static String packsDir; | |
public static Logger logger; | |
public static CreativeTabs tab; | |
public static final PacketPipeline packetPipeline = new PacketPipeline(); | |
@EventHandler | |
public void preInit(FMLPreInitializationEvent event) { | |
proxy.preInit(); | |
srcDir = event.getSourceFile().getAbsolutePath(); | |
packsDir = srcDir + "\\assets\\" + MODID + "\\packs\\"; | |
logger = LogManager.getLogger(NAME); | |
tab = new CreativeTabs(NAME) { | |
@Override | |
@SideOnly(Side.CLIENT) | |
public Item getTabIconItem() { | |
return null; | |
} | |
@Override | |
@SideOnly(Side.CLIENT) | |
public ItemStack getIconItemStack() { | |
return new ItemStack(RC2Items.hammer); | |
} | |
}; | |
TrackPieceRegistry.INSTANCE.registerDefaultPieces(); | |
// if (event.getSide() == Side.CLIENT) { | |
// readPackFolder(); | |
// } | |
// readPackFolder(); | |
// getListPacks().stream().forEach(CoasterPack::registerStyles); | |
// StyleRegistry.INSTANCE.registerBlocks(); | |
RC2Items.preInit(); | |
RC2Blocks.preInit(event.getSide()); | |
} | |
@EventHandler | |
public void init(FMLInitializationEvent event) { | |
packetPipeline.initalise(); | |
proxy.init(); | |
NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler()); | |
// readPackFolder(); | |
// getListPacks().stream().forEach(CoasterPack::registerStyles); | |
// StyleRegistry.INSTANCE.registerBlocks(); | |
} | |
@EventHandler | |
public void postInit(FMLPostInitializationEvent event) { | |
packetPipeline.postInitialise(); | |
} | |
@EventHandler | |
public void serverStarting(FMLServerStartingEvent event) { | |
((CommandHandler) event.getServer().getCommandManager()).registerCommand(new GiveThemeParkCommand()); | |
// event.registerServerCommand(new GiveThemeParkCommand()); | |
} | |
public static void readPackFolder() { | |
// logger.info("reading pack folder"); | |
// logger.info(srcDir + "\\assets\\rc2\\packs\\"); | |
File packsFolder = new File(packsDir); | |
for (File pack : packsFolder.listFiles()) { | |
CoasterPack coasterPack = FileManager.readPack(pack); | |
if (coasterPack != null) register(coasterPack); | |
} | |
} | |
public static Collection<CoasterPack> getListPacks() { | |
return packs.values(); | |
} | |
public static void register(CoasterPack pack) { | |
logger.info("Registering pack: " + pack.getName()); | |
if (packs.get(pack.getName()) == null) RC2.packs.put(pack.getName(), pack); | |
else logger.error("A coaster pack has already been registered with name {}", pack.getName()); | |
} | |
public static CoasterPack getPack(String name) { | |
return packs.get(name); | |
} | |
public static CoasterPack getPackContainingStyle(CoasterStyle style) { | |
return packs.values().stream().filter(pack -> pack.getStyles().containsKey(style.getName())).findFirst().get(); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package rcteam.rc2.block; | |
import com.google.common.collect.Lists; | |
import com.google.common.collect.Maps; | |
import net.minecraft.client.Minecraft; | |
import net.minecraft.client.resources.model.ModelResourceLocation; | |
import net.minecraft.item.Item; | |
import net.minecraft.item.ItemBlock; | |
import net.minecraft.item.ItemStack; | |
import net.minecraftforge.client.model.ModelLoader; | |
import net.minecraftforge.fml.common.registry.GameRegistry; | |
import net.minecraft.block.Block; | |
import net.minecraft.tileentity.TileEntity; | |
import net.minecraftforge.fml.relauncher.Side; | |
import org.apache.commons.lang3.tuple.Pair; | |
import rcteam.rc2.block.te.*; | |
import rcteam.rc2.item.ItemTrack; | |
import rcteam.rc2.rollercoaster.CategoryEnum; | |
import rcteam.rc2.rollercoaster.TrackPieceInfo; | |
import rcteam.rc2.rollercoaster.TrackPieceRegistry; | |
import rcteam.rc2.util.Reference; | |
import rcteam.rc2.util.TrackStateMapper; | |
import java.util.List; | |
import java.util.Map; | |
public class RC2Blocks { | |
public static final Map<Block, Pair<String, ModelResourceLocation>> modelMap = Maps.newHashMap(); | |
public static final Map<CategoryEnum, TrackPieceInfo> infoMap = Maps.newEnumMap(CategoryEnum.class); | |
public static Block entrance; | |
public static Block track_steel; | |
public static Block track_wood; | |
public static Block track_inverted; | |
public static Block track_water; | |
public static void preInit(Side side) { | |
entrance = new BlockEntrance(); | |
// TrackPieceInfo steelInfo = new TrackPieceInfo(CategoryEnum.STEEL, TrackPieceRegistry.INSTANCE.getPieces()); //TODO: distinguish between different category pieces and different Style pieces! | |
// TrackPieceInfo woodInfo = new TrackPieceInfo(CategoryEnum.WOODEN, TrackPieceRegistry.INSTANCE.getPieces()); | |
// TrackPieceInfo invertedInfo = new TrackPieceInfo(CategoryEnum.INVERTED, TrackPieceRegistry.INSTANCE.getPieces()); | |
// TrackPieceInfo waterInfo = new TrackPieceInfo(CategoryEnum.WATER, TrackPieceRegistry.INSTANCE.getPieces()); | |
infoMap.put(CategoryEnum.STEEL, new TrackPieceInfo(CategoryEnum.STEEL, TrackPieceRegistry.INSTANCE.getPieces())); | |
infoMap.put(CategoryEnum.WOODEN, new TrackPieceInfo(CategoryEnum.WOODEN, TrackPieceRegistry.INSTANCE.getPieces())); | |
infoMap.put(CategoryEnum.INVERTED, new TrackPieceInfo(CategoryEnum.INVERTED, TrackPieceRegistry.INSTANCE.getPieces())); | |
infoMap.put(CategoryEnum.WATER, new TrackPieceInfo(CategoryEnum.WATER, TrackPieceRegistry.INSTANCE.getPieces())); | |
// track_steel = new BlockTrackSteel(steelInfo); | |
// track_wood = new BlockTrackWood(woodInfo); | |
// track_inverted = new BlockTrackInverted(invertedInfo); | |
// track_water = new BlockTrackWater(waterInfo); | |
BlockTrack.PIECE_PROPERTY.setAllowedValues(infoMap.get(CategoryEnum.STEEL).getPieces()); | |
track_steel = new BlockTrack(infoMap.get(CategoryEnum.STEEL)); | |
BlockTrack.PIECE_PROPERTY.setAllowedValues(infoMap.get(CategoryEnum.WOODEN).getPieces()); | |
track_wood = new BlockTrack(infoMap.get(CategoryEnum.WOODEN)); | |
BlockTrack.PIECE_PROPERTY.setAllowedValues(infoMap.get(CategoryEnum.INVERTED).getPieces()); | |
track_inverted = new BlockTrack(infoMap.get(CategoryEnum.INVERTED)); | |
BlockTrack.PIECE_PROPERTY.setAllowedValues(infoMap.get(CategoryEnum.WATER).getPieces()); | |
track_water = new BlockTrack(infoMap.get(CategoryEnum.WATER)); | |
registerBlock(entrance, "entrance"); | |
registerBlock(track_steel, ItemTrack.class, "track_steel", side); | |
registerBlock(track_wood, ItemTrack.class, "track_wooden", side); | |
registerBlock(track_inverted, ItemTrack.class, "track_inverted", side); | |
registerBlock(track_water, ItemTrack.class, "track_water", side); | |
registerTE(TileEntityEntrance.class, entrance); | |
// registerTE(TileEntityTrackSteel.class, track_steel); | |
// registerTE(TileEntityTrackWood.class, track_wood); | |
// registerTE(TileEntityTrackInverted.class, track_inverted); | |
// registerTE(TileEntityTrackWater.class, track_water); | |
registerTE(TileEntityTrack.class, track_steel); | |
registerTE(TileEntityTrack.class, track_wood); | |
registerTE(TileEntityTrack.class, track_inverted); | |
registerTE(TileEntityTrack.class, track_water); | |
} | |
private static void registerBlock(Block block, String name) { | |
GameRegistry.registerBlock(block, name); | |
modelMap.put(block, Pair.of(name, null)); | |
} | |
private static void registerBlock(Block block, Class<? extends ItemBlock> itemClass, String name, Side side) { | |
if (block instanceof BlockTrack && side == Side.CLIENT) { | |
ModelLoader.setCustomStateMapper(block, TrackStateMapper.INSTANCE); | |
// ItemTrack track = new ItemTrack(block); | |
//// ModelLoader.setCustomMeshDefinition(track, ItemTrack.ItemTrackMeshDefinition.INSTANCE); | |
// ModelLoader.setCustomModelResourceLocation(track, 0, ItemTrack.ItemTrackMeshDefinition.INSTANCE.getModelLocation(new ItemStack(track))); | |
} | |
GameRegistry.registerBlock(block, itemClass, name); | |
modelMap.put(block, Pair.of(name, null)); | |
} | |
private static void registerTE(Class<? extends TileEntity> te, Block block) { | |
GameRegistry.registerTileEntity(te, modelMap.get(block).getLeft()); | |
} | |
public static void init(Side side) { | |
List<Block> blocks = Lists.newArrayList(modelMap.keySet()); | |
for (Block block : blocks) { | |
ModelResourceLocation location = new ModelResourceLocation(Reference.RESOURCE_PREFIX + modelMap.get(block).getLeft(), "inventory"); | |
modelMap.put(block, Pair.of(modelMap.get(block).getLeft(), location)); | |
if (side == Side.CLIENT) { | |
if (block instanceof BlockTrack) { | |
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block), ItemTrack.ItemTrackMeshDefinition.INSTANCE); | |
// Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block), 0, ItemTrack.ItemTrackMeshDefinition.INSTANCE.getModelLocation(new ItemStack(Item.getItemFromBlock(block)))); | |
// ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), 0, ItemTrack.ItemTrackMeshDefinition.INSTANCE.getModelLocation(new ItemStack(Item.getItemFromBlock(block)))); | |
} else { | |
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block), 0, location); | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment