tried and failed shader magic

This commit is contained in:
Bob 2021-09-04 18:20:09 +02:00
parent 80a8883706
commit 7a24c74435
22 changed files with 416 additions and 129 deletions

View File

@ -0,0 +1,15 @@
package api.hbm.item;
import java.util.List;
import com.hbm.util.ArmorRegistry.HazardClass;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public interface IGasMask {
public List<HazardClass> getBlacklist(ItemStack stack, EntityPlayer player);
public ItemStack getFilter(ItemStack stack, EntityPlayer player);
public void damageFilter(ItemStack stack, EntityPlayer player);
}

View File

@ -10,6 +10,7 @@ import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@ -64,7 +65,7 @@ public class MachineFractionTower extends BlockDummyable {
player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.YELLOW + "=== FRACTIONING TOWER Y:" + pos[1] + " ==="));
for(int i = 0; i < frac.tanks.length; i++)
player.addChatComponentMessage(new ChatComponentText(frac.tanks[i].getTankType() + ": " + frac.tanks[i].getFill() + "/" + frac.tanks[i].getMaxFill() + "mB"));
player.addChatComponentMessage(new ChatComponentTranslation("hbmfluid." + frac.tanks[i].getTankType().getName().toLowerCase()).appendSibling(new ChatComponentText(": " + frac.tanks[i].getFill() + "/" + frac.tanks[i].getMaxFill() + "mB")));
} else {
if(world.getTileEntity(pos[0], pos[1] - 3, pos[2]) instanceof TileEntityMachineFractionTower) {

View File

@ -49,7 +49,7 @@ public class ToolRecipes {
addHoe( ModItems.ingot_combine_steel, ModItems.cmb_hoe);
addSword( "ingotDesh", ModItems.desh_sword);
addPickaxe( "ingotDesh", ModItems.desh_pickaxe);
addAxe( "ingotDesh", ModItems.desh_pickaxe);
addAxe( "ingotDesh", ModItems.desh_axe);
addShovel( "ingotDesh", ModItems.desh_shovel);
addHoe( "ingotDesh", ModItems.desh_hoe);

View File

@ -2,6 +2,8 @@ package com.hbm.entity.mob;
import net.minecraft.entity.EntityAgeable;
import net.minecraft.entity.passive.EntityChicken;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
public class EntityDuck extends EntityChicken {
@ -9,21 +11,29 @@ public class EntityDuck extends EntityChicken {
public EntityDuck(World world) {
super(world);
}
protected String getLivingSound() {
return "hbm:entity.ducc";
}
protected String getHurtSound() {
return "hbm:entity.ducc";
}
protected String getDeathSound() {
return "hbm:entity.ducc";
}
public EntityDuck createChild(EntityAgeable entity) {
return new EntityDuck(this.worldObj);
}
protected String getLivingSound() {
return "hbm:entity.ducc";
}
protected void damageEntity(DamageSource p_70665_1_, float p_70665_2_) {
super.damageEntity(p_70665_1_, p_70665_2_);
}
protected String getHurtSound() {
return "hbm:entity.ducc";
}
protected String getDeathSound() {
return "hbm:entity.ducc";
}
public EntityDuck createChild(EntityAgeable entity)
{
return new EntityDuck(this.worldObj);
}
public void onDeath(DamageSource p_70645_1_) {
if(!worldObj.isRemote) MinecraftServer.getServer().getConfigurationManager().sendChatMsg(this.func_110142_aN().func_151521_b());
super.onDeath(p_70645_1_);
}
}

View File

@ -12,7 +12,6 @@ import com.hbm.interfaces.IBulletUpdateBehavior;
import com.hbm.interfaces.Untested;
import com.hbm.lib.ModDamageSource;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.Item;
import net.minecraft.potion.PotionEffect;

View File

@ -6,6 +6,7 @@ import com.hbm.handler.BulletConfigSyncingUtil;
import com.hbm.handler.BulletConfiguration;
import com.hbm.handler.GunConfiguration;
import com.hbm.items.ModItems;
import com.hbm.lib.ModDamageSource;
import com.hbm.potion.HbmPotion;
import com.hbm.render.util.RenderScreenOverlay.Crosshair;
@ -292,10 +293,13 @@ public class Gun357MagnumFactory {
bullet.bulletsMax = 6;
bullet.dmgMin = 50;
bullet.dmgMax = 150;
bullet.doesRicochet = false;
bullet.destroysBlocks = true;
bullet.style = bullet.STYLE_BOLT;
bullet.trail = bullet.BOLT_NIGHTMARE;
bullet.damageType = ModDamageSource.s_laser;
return bullet;
}

View File

@ -4553,9 +4553,9 @@ public class ModItems {
goggles = new ArmorModel(ArmorMaterial.IRON, 7, 0).setUnlocalizedName("goggles").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":goggles");
ashglasses = new ArmorAshGlasses(ArmorMaterial.IRON, 7, 0).setUnlocalizedName("ashglasses").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ashglasses");
gas_mask = new ArmorModel(ArmorMaterial.IRON, 7, 0).setUnlocalizedName("gas_mask").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask");
gas_mask_m65 = new ArmorModel(ArmorMaterial.IRON, 7, 0).setUnlocalizedName("gas_mask_m65").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask_m65");
gas_mask_mono = new ArmorModel(ArmorMaterial.IRON, 7, 0).setUnlocalizedName("gas_mask_mono").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask_mono");
gas_mask = new ArmorGasMask().setUnlocalizedName("gas_mask").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask");
gas_mask_m65 = new ArmorGasMask().setUnlocalizedName("gas_mask_m65").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask_m65");
gas_mask_mono = new ArmorGasMask().setUnlocalizedName("gas_mask_mono").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask_mono");
hat = new ArmorHat(ArmorMaterial.IRON, 7, 0).setUnlocalizedName("nossy_hat").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":hat");
beta = new ItemDrop().setUnlocalizedName("beta").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":beta");
//oxy_mask = new ArmorModel(ArmorMaterial.IRON, 7, 0).setUnlocalizedName("oxy_mask").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":oxy_mask");

View File

@ -0,0 +1,162 @@
package com.hbm.items.armor;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.lwjgl.opengl.GL11;
import com.hbm.items.ModItems;
import com.hbm.lib.RefStrings;
import com.hbm.render.model.ModelGasMask;
import com.hbm.render.model.ModelM65;
import com.hbm.util.ArmorRegistry.HazardClass;
import api.hbm.item.IGasMask;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
public class ArmorGasMask extends ItemArmor implements IGasMask {
@SideOnly(Side.CLIENT)
private ModelGasMask modelGas;
@SideOnly(Side.CLIENT)
private ModelM65 modelM65;
private ResourceLocation[] googleBlur = new ResourceLocation[] {
new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_goggles_0.png"),
new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_goggles_1.png"),
new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_goggles_2.png"),
new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_goggles_3.png"),
new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_goggles_4.png"),
new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_goggles_5.png")
};
private ResourceLocation[] maskBlur = new ResourceLocation[] {
new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_gasmask_0.png"),
new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_gasmask_1.png"),
new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_gasmask_2.png"),
new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_gasmask_3.png"),
new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_gasmask_4.png"),
new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_gasmask_5.png")
};
public ArmorGasMask() {
super(ArmorMaterial.IRON, 7, 0);
}
@Override
@SideOnly(Side.CLIENT)
public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) {
if(this == ModItems.gas_mask) {
if(armorSlot == 0) {
if(this.modelGas == null) {
this.modelGas = new ModelGasMask();
}
return this.modelGas;
}
}
if(this == ModItems.gas_mask_m65 || this == ModItems.gas_mask_mono) {
if(armorSlot == 0) {
if(this.modelM65 == null) {
this.modelM65 = new ModelM65();
}
return this.modelM65;
}
}
return null;
}
@Override
public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) {
if(stack.getItem() == ModItems.gas_mask) {
return "hbm:textures/models/GasMask.png";
}
if(stack.getItem() == ModItems.gas_mask_m65) {
return "hbm:textures/models/ModelM65.png";
}
if(stack.getItem() == ModItems.gas_mask_mono) {
return "hbm:textures/models/ModelM65Mono.png";
}
return null;
}
@SideOnly(Side.CLIENT)
public void renderHelmetOverlay(ItemStack stack, EntityPlayer player, ScaledResolution resolution, float partialTicks, boolean hasScreen, int mouseX, int mouseY) {
ResourceLocation tex = null;
if(this == ModItems.goggles || this == ModItems.gas_mask_m65) {
int index = (int) ((double) stack.getItemDamage() / (double) stack.getMaxDamage() * 6D);
tex = this.googleBlur[index];
}
if(this == ModItems.gas_mask) {
int index = (int) ((double) stack.getItemDamage() / (double) stack.getMaxDamage() * 6D);
tex = this.maskBlur[index];
}
if(tex == null)
return;
Minecraft.getMinecraft().getTextureManager().bindTexture(tex);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthMask(false);
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glDisable(GL11.GL_ALPHA_TEST);
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
tessellator.addVertexWithUV(0.0D, (double) resolution.getScaledHeight(), -90.0D, 0.0D, 1.0D);
tessellator.addVertexWithUV((double) resolution.getScaledWidth(), (double) resolution.getScaledHeight(), -90.0D, 1.0D, 1.0D);
tessellator.addVertexWithUV((double) resolution.getScaledWidth(), 0.0D, -90.0D, 1.0D, 0.0D);
tessellator.addVertexWithUV(0.0D, 0.0D, -90.0D, 0.0D, 0.0D);
tessellator.draw();
GL11.glDepthMask(true);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
}
@Override
public List<HazardClass> getBlacklist(ItemStack stack, EntityPlayer player) {
if(this == ModItems.gas_mask_mono) {
return Arrays.asList(new HazardClass[] {HazardClass.GAS_CHLORINE, HazardClass.BACTERIA});
}
return new ArrayList();
}
@Override
public ItemStack getFilter(ItemStack stack, EntityPlayer player) {
if(stack == null || !(stack.getItem() instanceof IGasMask) || !stack.hasTagCompound())
return null;
return null;
}
@Override
public void damageFilter(ItemStack stack, EntityPlayer player) {
}
}

View File

@ -8,7 +8,6 @@ import com.hbm.interfaces.Spaghetti;
import com.hbm.items.ModItems;
import com.hbm.lib.RefStrings;
import com.hbm.render.model.ModelCloak;
import com.hbm.render.model.ModelGasMask;
import com.hbm.render.model.ModelGoggles;
import com.hbm.render.model.ModelHat;
import com.hbm.render.model.ModelM65;
@ -35,8 +34,6 @@ public class ArmorModel extends ItemArmor {
@SideOnly(Side.CLIENT)
private ModelGoggles modelGoggles;
@SideOnly(Side.CLIENT)
private ModelGasMask modelGas;
@SideOnly(Side.CLIENT)
private ModelCloak modelCloak;
@SideOnly(Side.CLIENT)
private ModelOxygenMask modelOxy;
@ -51,59 +48,11 @@ public class ArmorModel extends ItemArmor {
private ResourceLocation goggleBlur3 = new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_goggles_3.png");
private ResourceLocation goggleBlur4 = new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_goggles_4.png");
private ResourceLocation goggleBlur5 = new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_goggles_5.png");
private ResourceLocation gasmaskBlur0 = new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_gasmask_0.png");
private ResourceLocation gasmaskBlur1 = new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_gasmask_1.png");
private ResourceLocation gasmaskBlur2 = new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_gasmask_2.png");
private ResourceLocation gasmaskBlur3 = new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_gasmask_3.png");
private ResourceLocation gasmaskBlur4 = new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_gasmask_4.png");
private ResourceLocation gasmaskBlur5 = new ResourceLocation(RefStrings.MODID + ":textures/misc/overlay_gasmask_5.png");
public ArmorModel(ArmorMaterial armorMaterial, int renderIndex, int armorType) {
super(armorMaterial, renderIndex, armorType);
}
//there was no reason to override this
/*@Override
public boolean isValidArmor(ItemStack stack, int armorType, Entity entity) {
if (this == ModItems.goggles) {
return armorType == 0;
}
if (this == ModItems.gas_mask) {
return armorType == 0;
}
if (this == ModItems.gas_mask_m65) {
return armorType == 0;
}
if (this == ModItems.gas_mask_mono) {
return armorType == 0;
}
if (this == ModItems.hat) {
return armorType == 0;
}
if (this == ModItems.hazmat_helmet_red) {
return armorType == 0;
}
if (this == ModItems.hazmat_helmet_grey) {
return armorType == 0;
}
if (this == ModItems.oxy_mask) {
return armorType == 0;
}
if (this == ModItems.cape_test) {
return armorType == 1;
}
if (this == ModItems.cape_radiation) {
return armorType == 1;
}
if (this == ModItems.cape_gasmask) {
return armorType == 1;
}
if (this == ModItems.cape_schrabidium) {
return armorType == 1;
}
return armorType == 0;
}*/
@Override
@SideOnly(Side.CLIENT)
public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) {
@ -115,15 +64,7 @@ public class ArmorModel extends ItemArmor {
return this.modelGoggles;
}
}
if (this == ModItems.gas_mask) {
if (armorSlot == 0) {
if (this.modelGas == null) {
this.modelGas = new ModelGasMask();
}
return this.modelGas;
}
}
if (this == ModItems.gas_mask_m65 || this == ModItems.hazmat_helmet_red || this == ModItems.hazmat_helmet_grey || this == ModItems.gas_mask_mono) {
if (this == ModItems.hazmat_helmet_red || this == ModItems.hazmat_helmet_grey) {
if (armorSlot == 0) {
if (this.modelM65 == null) {
this.modelM65 = new ModelM65();
@ -163,15 +104,6 @@ public class ArmorModel extends ItemArmor {
if (stack.getItem() == ModItems.goggles) {
return "hbm:textures/models/Goggles.png";
}
if (stack.getItem() == ModItems.gas_mask) {
return "hbm:textures/models/GasMask.png";
}
if (stack.getItem() == ModItems.gas_mask_m65) {
return "hbm:textures/models/ModelM65.png";
}
if (stack.getItem() == ModItems.gas_mask_mono) {
return "hbm:textures/models/ModelM65Mono.png";
}
if (stack.getItem() == ModItems.hazmat_helmet_red) {
return "hbm:textures/models/ModelHazRed.png";
}
@ -209,7 +141,7 @@ public class ArmorModel extends ItemArmor {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glDisable(GL11.GL_ALPHA_TEST);
if(this == ModItems.goggles || this == ModItems.gas_mask_m65 || this == ModItems.hazmat_helmet_red || this == ModItems.hazmat_helmet_grey) {
if(this == ModItems.hazmat_helmet_red || this == ModItems.hazmat_helmet_grey) {
switch((int)((double)stack.getItemDamage() / (double)stack.getMaxDamage() * 6D)) {
case 0:
Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur0); break;
@ -227,24 +159,6 @@ public class ArmorModel extends ItemArmor {
Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur5); break;
}
}
if(this == ModItems.gas_mask) {
switch((int)((double)stack.getItemDamage() / (double)stack.getMaxDamage() * 6D)) {
case 0:
Minecraft.getMinecraft().getTextureManager().bindTexture(gasmaskBlur0); break;
case 1:
Minecraft.getMinecraft().getTextureManager().bindTexture(gasmaskBlur1); break;
case 2:
Minecraft.getMinecraft().getTextureManager().bindTexture(gasmaskBlur2); break;
case 3:
Minecraft.getMinecraft().getTextureManager().bindTexture(gasmaskBlur3); break;
case 4:
Minecraft.getMinecraft().getTextureManager().bindTexture(gasmaskBlur4); break;
case 5:
Minecraft.getMinecraft().getTextureManager().bindTexture(gasmaskBlur5); break;
default:
Minecraft.getMinecraft().getTextureManager().bindTexture(gasmaskBlur5); break;
}
}
Tessellator tessellator = Tessellator.instance;
tessellator.startDrawingQuads();
@ -271,12 +185,5 @@ public class ArmorModel extends ItemArmor {
if(this == ModItems.cape_schrabidium) {
list.add("Avalible for everyone");
}
if(this == ModItems.gas_mask || this == ModItems.gas_mask_m65) {
list.add("Protects against most harmful gasses");
}
if(this == ModItems.gas_mask_mono) {
list.add("Protects against carbon monoxide");
}
}
}

View File

@ -466,7 +466,7 @@ public class ModEventHandlerClient {
List<String> list = event.toolTip;
/// HAZMAT INFO ///
List<HazardClass> hazInfo = ArmorRegistry.armor.get(stack.getItem());
List<HazardClass> hazInfo = ArmorRegistry.hazardClasses.get(stack.getItem());
if(hazInfo != null) {
list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("hazard.prot"));

View File

@ -2,12 +2,16 @@ package com.hbm.main;
import com.hbm.lib.RefStrings;
import com.hbm.render.loader.HFRWavefrontObject;
import com.hbm.render.shader.Shader;
import com.hbm.render.shader.ShaderManager;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;
public class ResourceManager {
public static final Shader test_shader = ShaderManager.loadShader(new ResourceLocation(RefStrings.MODID, "shaders/test_shader"));
//God
public static final IModelCustom error = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/error.obj"));

View File

@ -0,0 +1,42 @@
package com.hbm.render.shader;
import java.util.ArrayList;
import java.util.List;
import org.lwjgl.opengl.GL20;
public class Shader {
private int shader;
private List<Uniform> uniforms = new ArrayList<>(2);
public Shader(int shader) {
this.shader = shader;
}
public Shader withUniforms(Uniform... uniforms) {
for(Uniform u : uniforms) {
this.uniforms.add(u);
}
return this;
}
public void use() {
if(!ShaderManager.enableShaders)
return;
GL20.glUseProgram(shader);
for(Uniform u : uniforms) {
u.apply(shader);
}
}
public void release() {
GL20.glUseProgram(0);
}
public int getShaderId() {
return shader;
}
}

View File

@ -0,0 +1,81 @@
package com.hbm.render.shader;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import org.apache.commons.io.IOUtils;
import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL20;
import com.hbm.main.MainRegistry;
import net.minecraft.client.Minecraft;
import net.minecraft.util.ResourceLocation;
public class ShaderManager {
public static boolean enableShaders = true;
public static final Uniform LIGHTMAP = shader -> {
GL20.glUniform1i(GL20.glGetUniformLocation(shader, "lightmap"), 1);
};
public static Shader loadShader(ResourceLocation file) {
if(!enableShaders)
return new Shader(0);
int vertexShader = 0;
int fragmentShader = 0;
try {
int program = GL20.glCreateProgram();
vertexShader = GL20.glCreateShader(GL20.GL_VERTEX_SHADER);
GL20.glShaderSource(vertexShader, readFileToBuf(new ResourceLocation(file.getResourceDomain(), file.getResourcePath() + ".vert")));
GL20.glCompileShader(vertexShader);
if(GL20.glGetShaderi(vertexShader, GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE) {
MainRegistry.logger.error(GL20.glGetShaderInfoLog(vertexShader, GL20.GL_INFO_LOG_LENGTH));
throw new RuntimeException("Error creating vertex shader: " + file);
}
fragmentShader = GL20.glCreateShader(GL20.GL_FRAGMENT_SHADER);
GL20.glShaderSource(fragmentShader, readFileToBuf(new ResourceLocation(file.getResourceDomain(), file.getResourcePath() + ".frag")));
GL20.glCompileShader(fragmentShader);
if(GL20.glGetShaderi(fragmentShader, GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE) {
MainRegistry.logger.error(GL20.glGetShaderInfoLog(fragmentShader, GL20.GL_INFO_LOG_LENGTH));
throw new RuntimeException("Error creating fragment shader: " + file);
}
GL20.glAttachShader(program, vertexShader);
GL20.glAttachShader(program, fragmentShader);
GL20.glLinkProgram(program);
if(GL20.glGetProgrami(program, GL20.GL_LINK_STATUS) == GL11.GL_FALSE) {
MainRegistry.logger.error(GL20.glGetProgramInfoLog(program, GL20.GL_INFO_LOG_LENGTH));
throw new RuntimeException("Error creating fragment shader: " + file);
}
GL20.glDeleteShader(vertexShader);
GL20.glDeleteShader(fragmentShader);
return new Shader(program);
} catch(Exception x) {
GL20.glDeleteShader(vertexShader);
GL20.glDeleteShader(fragmentShader);
x.printStackTrace();
}
return new Shader(0);
}
private static ByteBuffer readFileToBuf(ResourceLocation file) throws IOException {
InputStream in = Minecraft.getMinecraft().getResourceManager().getResource(file).getInputStream();
byte[] bytes = IOUtils.toByteArray(in);
IOUtils.closeQuietly(in);
ByteBuffer buf = BufferUtils.createByteBuffer(bytes.length);
buf.put(bytes);
buf.rewind();
return buf;
}
}

View File

@ -0,0 +1,6 @@
package com.hbm.render.shader;
public interface Uniform {
public void apply(int shader);
}

View File

@ -16,6 +16,8 @@ public class RenderTurretChekhov extends RenderTurretBase {
TileEntityTurretChekhov turret = (TileEntityTurretChekhov)te;
Vec3 pos = turret.getHorizontalOffset();
ResourceManager.test_shader.use();
GL11.glPushMatrix();
GL11.glTranslated(x + pos.xCoord, y, z + pos.zCoord);
@ -50,5 +52,7 @@ public class RenderTurretChekhov extends RenderTurretBase {
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glPopMatrix();
ResourceManager.test_shader.release();
}
}

View File

@ -8,11 +8,11 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
public class ArmorRegistry {
public static HashMap<Item, List<HazardClass>> hazardClasses = new HashMap();
public static HashMap<Item, List<HazardClass>> armor = new HashMap();
public static void registerArmor(Item item, HazardClass... hazards) {
armor.put(item, Arrays.asList(hazards));
public static void registerHazard(Item item, HazardClass... hazards) {
hazardClasses.put(item, Arrays.asList(hazards));
}
public static boolean hasProtection(EntityPlayer player, int slot, HazardClass clazz) {
@ -20,7 +20,7 @@ public class ArmorRegistry {
if(ArmorUtil.checkArmorNull(player, slot))
return false;
List<HazardClass> list = armor.get(player.inventory.armorInventory[slot].getItem());
List<HazardClass> list = hazardClasses.get(player.inventory.armorInventory[slot].getItem());
if(list == null)
return false;
@ -43,12 +43,12 @@ public class ArmorRegistry {
}
}
public static enum ArmorClass {
/*public static enum ArmorClass {
MASK_FILTERED,
MASK_OXY,
GOGGLES,
HAZMAT_HEAT,
HAZMAT_RADIATION,
HAZMAT_BIO;
}
}*/
}

View File

@ -17,9 +17,8 @@ import net.minecraft.network.NetHandlerPlayServer;
public class ArmorUtil {
public static void register() {
ArmorRegistry.registerArmor(ModItems.gas_mask, HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE);
ArmorRegistry.registerArmor(ModItems.gas_mask_m65, HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE);
ArmorRegistry.registerArmor(ModItems.gas_mask_mono, HazardClass.PARTICLE_COARSE, HazardClass.GAS_MONOXIDE);
ArmorRegistry.registerHazard(ModItems.gas_mask_filter_mono, HazardClass.PARTICLE_COARSE, HazardClass.GAS_MONOXIDE);
ArmorRegistry.registerHazard(ModItems.gas_mask_filter, HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE, HazardClass.BACTERIA);
}
public static boolean checkArmor(EntityPlayer player, Item... armor) {

View File

@ -312,6 +312,7 @@ death.attack.euthanizedSelf2=%1$s gewinnt den Darwin Award.
death.attack.euthanizedSelf=%1$s hat sich selbst eingeschläfert, was für ein Vollpfosten.
death.attack.exhaust=%1$s wurde von einer startenden Rakete verbrutzelt.
death.attack.flamethrower=%1$s wurde von %2$s gegrillt.
death.attack.flamethrower.item=%1$s wurde von %2$s mit %3$s gegrillt.
death.attack.ice=%1$s wurde von %2$s in ein Eis am Stiel verwandelt.
death.attack.laser=%1$s wurde von %2$s zerbröselt.
death.attack.laser.item=%1$s wurde von %2$s mit %3$s zerbröselt.
@ -326,7 +327,7 @@ death.attack.pc=%1$s wurde zu einer Pfütze in der pinken Wolke.
death.attack.plasma=%1$s wurde von %2$s eingeäschert.
death.attack.radiation=%1$s starb an Strahlenvergiftung.
death.attack.revolverBullet=%1$s wurde von %2$s in den Kopf geschossen.
death.attack.revolverBullet.item=%1$s wurde von %2$s mit %3$s in den Kopf geschossen.
death.attack.revolverBullet.item.item=%1$s wurde von %2$s mit %3$s in den Kopf geschossen.
death.attack.rubble=%1$s wurde von Schutt zerquetscht.
death.attack.shrapnel=%1$s wurde von einem Schrapnell zerfetzt.
death.attack.spikes=%1$s wurde aufgespießt.

View File

@ -380,6 +380,7 @@ death.attack.euthanizedSelf2=%1$s wins the Darwin Award.
death.attack.euthanizedSelf=%1$s euthanized himself, what a dork.
death.attack.exhaust=%1$s was turned into shish kebab by a starting rocket.
death.attack.flamethrower=%1$s was cremated by %2$s.
death.attack.flamethrower.item=%1$s was cremated by %2$s using %3$s.
death.attack.ice=%1$s was turned into a popsicle by %2$s.
death.attack.laser=%1$s was turned into ash by %2$s.
death.attack.laser.item=%1$s was turned into ash by %2$s using %3$s.
@ -394,7 +395,7 @@ death.attack.pc=%1$s was reduced to a puddle in the pink cloud.
death.attack.plasma=%1$s was immolated by %2$s.
death.attack.radiation=%1$s died from radiation poisoning.
death.attack.revolverBullet=%1$s was shot in the head by %2$s.
death.attack.revolverBullet=%1$s was shot in the head by %2$s using %3$s.
death.attack.revolverBullet.item=%1$s was shot in the head by %2$s using %3$s.
death.attack.rubble=%1$s was squashed by debris.
death.attack.shrapnel=%1$s was ragged by a shrapnel.
death.attack.spikes=%1$s got impaled.

View File

@ -0,0 +1,25 @@
#version 330 compatibility
in vec2 texCoord;
in vec2 lightCoord;
in vec4 color;
in vec3 lighting;
out vec4 FragColor;
uniform sampler2D texture;
uniform sampler2D lightmap;
void main(){
vec4 center = texture2D(DiffuseSampler, texCoord);
vec4 up = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y));
vec4 down = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, 0.0));
vec4 left = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, 0.0));
vec4 right = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y));
vec4 uDiff = center - up;
vec4 dDiff = center - down;
vec4 lDiff = center - left;
vec4 rDiff = center - right;
vec4 sum = uDiff + dDiff + lDiff + rDiff;
vec3 clamped = clamp(center.rgb - sum.rgb, 0.0, 1.0);
gl_FragColor = vec4(clamped, center.a);
}

View File

@ -0,0 +1,26 @@
#version 330 compatibility
out vec2 texCoord;
out vec2 lightCoord;
out vec4 color;
out vec3 lighting;
void main(){
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
texCoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).st;
lightCoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).st;
color = gl_Color;
vec3 totalLighting = vec3(gl_LightModel.ambient) * vec3(gl_FrontMaterial.emission);
vec3 normal = (gl_NormalMatrix * gl_Normal).xyz;
vec4 difftot = vec4(0.0F);
for (int i = 0; i < gl_MaxLights; i ++){
vec4 diff = gl_FrontLightProduct[i].diffuse * max(dot(normal,gl_LightSource[i].position.xyz), 0.0f);
diff = clamp(diff, 0.0F, 1.0F);
difftot += diff;
}
lighting = clamp((difftot + gl_LightModel.ambient).rgb, 0.0F, 1.0F);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB