package blusunrize.immersiveengineering.common.util.compat; import blusunrize.immersiveengineering.api.shader.ShaderCaseMinecart; import blusunrize.immersiveengineering.api.tool.RailgunHandler; import blusunrize.immersiveengineering.client.models.ModelShaderMinecart; import blusunrize.immersiveengineering.common.Config; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelMinecart; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityMinecart; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.Map; public class RailcraftHelper extends IECompatModule { @Override public void preInit() { } @Override public void init() { Item itemRail = Item.REGISTRY.getObject(new ResourceLocation("railcraft:rail")); RailgunHandler.registerProjectileProperties(new ItemStack(itemRail,1,0), 7,1.25).setColourMap(new int[][]{{0xa4a4a4,0x686868}}); RailgunHandler.registerProjectileProperties(new ItemStack(itemRail,1,1), 6,1.375).setColourMap(new int[][]{{0xa4a4a4,0xa4a4a4,0x686868, 0xddb82c,0xc9901f}, {0xa4a4a4,0xa4a4a4,0x686868, 0xf5cc2d,0xddb82c},{0xa4a4a4,0xa4a4a4,0x686868, 0xf5cc2d,0xddb82c}, {0xa4a4a4,0xa4a4a4,0x686868, 0xddb82c,0xc9901f}}); RailgunHandler.registerProjectileProperties(new ItemStack(itemRail,1,3), 7,1).setColourMap(new int[][]{{0x999999,0xa4a4a4,0xa4a4a4, 0xc9901f,0xc9901f,0xba851d}}); RailgunHandler.registerProjectileProperties(new ItemStack(itemRail,1,4), 8,1.375).setColourMap(new int[][]{{0x686868,0x808080,0x808080, 0x3e2e60,0x3e2e60,0x31254d}}); RailgunHandler.registerProjectileProperties(new ItemStack(itemRail,1,5), 7,1).setColourMap(new int[][]{{0x999999,0xa4a4a4,0xa4a4a4, 0x9a6033,0x9a6033,0xa86938}}); Item itemRebar = Item.REGISTRY.getObject(new ResourceLocation("railcraft:rebar")); int[][] rebarColourMap = new int[8*3+1][]; rebarColourMap[0] = new int[]{0x4a2700, 0x592f00,0x592f00,0x592f00, 0x4a2700}; rebarColourMap[1] = new int[]{0x572e00, 0x673700,0x673700,0x673700, 0x572e00}; for(int i=0; i<8; i++) { rebarColourMap[1+ i*3] = rebarColourMap[1+ i*3+1] = rebarColourMap[1]; rebarColourMap[1+ i*3+2] = rebarColourMap[0]; } RailgunHandler.registerProjectileProperties(new ItemStack(itemRebar), 7,1.25).setColourMap(rebarColourMap); Config.manual_bool.put("literalRailGun", true); } @Override public void postInit() { if(FMLCommonHandler.instance().getEffectiveSide()== Side.CLIENT) { try{ Class c_CartModelManager = Class.forName("mods.railcraft.client.render.carts.CartModelManager"); Field f_modelMinecart = c_CartModelManager.getDeclaredField("modelMinecart"); f_modelMinecart.setAccessible(true); Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.set(f_modelMinecart, f_modelMinecart.getModifiers() & ~Modifier.FINAL); ModelMinecart wrapped = (ModelMinecart)f_modelMinecart.get(null); f_modelMinecart.set(null, new ModelShaderMinecart(wrapped)); modifiersField.set(f_modelMinecart, f_modelMinecart.getModifiers() | Modifier.FINAL); Field f_modelsCore = c_CartModelManager.getDeclaredField("modelsCore"); Map<Class, ModelBase> modelMap = (Map<Class, ModelBase>)f_modelsCore.get(null); for(Map.Entry<Class, ModelBase> e : modelMap.entrySet()) if(e.getValue().getClass().getName().endsWith("ModelLowSidesMinecart")) e.setValue(new ModelShaderLowSidesMinecart()); ShaderCaseMinecart.invalidMinecartClasses.add((Class<? extends EntityMinecart>)Class.forName("mods.railcraft.common.carts.EntityLocomotive")); ShaderCaseMinecart.invalidMinecartClasses.add((Class<? extends EntityMinecart>)Class.forName("mods.railcraft.common.carts.EntityTunnelBore")); }catch(Exception e){ e.printStackTrace(); } } } @SideOnly(Side.CLIENT) public class ModelShaderLowSidesMinecart extends ModelShaderMinecart { public ModelShaderLowSidesMinecart() { super(new ModelMinecart()); byte length = 20; byte width = 16; byte yOffset = 4; byte height = 6; this.sideModels[3] = new ModelRenderer(this, 0, 0); this.sideModels[4] = new ModelRenderer(this, 0, 0); this.sideModels[4].mirror = true; this.sideModels[3].addBox(-length/2+2, -height-1, -1, length-4, height, 2, 0); this.sideModels[3].setRotationPoint(0, yOffset, -width/2+1); this.sideModels[4].addBox(-length/2+2, -height-1, -1, length-4, height, 2, 0); this.sideModels[4].setRotationPoint(0, yOffset, width/2-1); this.sideModels[3].rotateAngleY = (float)Math.PI; this.sideModelsMirrored[3] = new ModelRenderer(this, 0, 0); this.sideModelsMirrored[4] = new ModelRenderer(this, 0, 0); this.sideModelsMirrored[4].mirror = true; this.sideModelsMirrored[3].addBox(-length/2+2, -height-1, -1, length-4, height, 2, 0); this.sideModelsMirrored[3].setRotationPoint(0, yOffset, -width/2+1); this.sideModelsMirrored[4].addBox(-length/2+2, -height-1, -1, length-4, height, 2, 0); this.sideModelsMirrored[4].setRotationPoint(0, yOffset, width/2-1); this.sideModelsMirrored[3].rotateAngleY = (float)Math.PI; } @Override public void render(Entity entity, float f0, float f1, float f2, float f3, float f4, float f5) { super.render(entity, f0, f1, f2, f3, f4, f5); } } }