Всем здравствуйте я хочу задать вопрос
как реализовать прицеливание оружия и модификацию оборудования так как
в игре Warface те. (ствол цевьё и прицел)
Вот мой код
blaster
BlasterRender
EntitiBlasterBullet
TestMod
Pricel
и ещё ошибка в файле pricel
if(event.type.equals(ElementType.CROSSHAIRS))
в слове CROSSHAIRS
как это исправить?
как реализовать прицеливание оружия и модификацию оборудования так как
в игре Warface те. (ствол цевьё и прицел)
Вот мой код
blaster
Код:
package assets.testmod.src;
import javax.swing.text.html.parser.Entity;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.MinecraftForgeClient;
public class blaster extends Item
{
public int fireSpeed;
private static Object amethyst;
public blaster(int par1) {
super(par1);
this.setCreativeTab(CreativeTabs.tabCombat);
MinecraftForgeClient.registerItemRenderer(this.itemID, (IItemRenderer) new BlasterRender());
this.setFull3D();
}
public void registerIcons(IconRegister par1IconRegister)
{
this.itemIcon = par1IconRegister.registerIcon("TestMod:blaster");
}
public void onUpdate(ItemStack is, World world, Entity entity, int i, boolean b)
{
this.fireSpeed++;
}
public ItemStack onItemRightClick(ItemStack is, World world, EntityPlayer player)
{
this.fireSpeed++;
if(this.fireSpeed >= 0.0) // 32 - задержка между выстрелами в (тиках вроде)
{
int itemAmmoID = Item.redstone.itemID; // Предмет патрон (в данном случае редстоун) - если есть в инвентаре - будет при выстреле забираться из инвентаря по одному
if(player.inventory.hasItem(itemAmmoID) || player.capabilities.isCreativeMode)
{
if(!world.isRemote)
{
this.fireSpeed = 0;
world.spawnEntityInWorld(new EntitiBlasterBullet(world, player));
}
player.rotationPitch -= 0.6F; // Отдача - пробуй эксперементировть в debug-mode
world.playSoundAtEntity(player, "random.explode", 1.5F, 1.8F); // Звук стрельбы - тут вроде всё понятно. "mod:sound" - смотрим туториал по загрузки звуков при помощи SoundLoadEvent // par3 - громкость (деф. 1.0F) par4 - тональность (деф. 1.0F)
if(!player.capabilities.isCreativeMode) player.inventory.consumeInventoryItem(itemAmmoID);
}
else
{
world.playSoundAtEntity(player, "random.click", 0.5F, 1.1F); // Звук, когда нету патрон (редстоуна) - см альтернативу выше
}
}
return is;
}
}
BlasterRender
Код:
package assets.testmod.src;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;
import org.lwjgl.opengl.GL11;
//("testmod","textures/models/FN_SCAR.png")
//("/assets/testmod/textures/models/FN_SCAR.obj")
public class BlasterRender implements IItemRenderer
{
private static IModelCustom model;
private static ResourceLocation tex = new ResourceLocation("testmod","textures/models/FN_SCAR.png");
public BlasterRender() {
model = AdvancedModelLoader.loadModel("/assets/testmod/textures/models/FN_SCAR.obj");
}
public boolean handleRenderType(ItemStack is, ItemRenderType type) {
return type != ItemRenderType.INVENTORY;
}
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack is, ItemRendererHelper helper) {
return true;
}
public void renderItem(ItemRenderType type, ItemStack is, Object ... data) {
if(type == type.EQUIPPED_FIRST_PERSON)
{
GL11.glPushMatrix();
GL11.glEnable(3042);
GL11.glBlendFunc(770, 771);
GL11.glTranslatef(0.0F, 0.0F, -0.2F);
GL11.glRotatef(620F, 10F, -8F, 5F);
GL11.glRotatef(-230F, -10F, 1F, 2F);
GL11.glRotatef(825F, 0F, 0F, 1F);
GL11.glScaled(1.00F, 1.20F, 1.20F);
Minecraft.getMinecraft().renderEngine.bindTexture(tex);
model.renderAll();
GL11.glDisable(3042);
GL11.glPopMatrix();
}
else {
double sne = 0.7D;
GL11.glPushMatrix();
GL11.glEnable(3042);
GL11.glBlendFunc(770, 771);
GL11.glTranslatef(1.2F, -1.0F, 1.0F);
GL11.glRotatef(780F, 10F, -6F, 10F);
GL11.glRotatef(50F, -10F, 1F, 0F);
GL11.glRotatef(410F, 0F, 0F, 1F);
GL11.glScaled(1.50F, 1.50F, 1.50F);
Minecraft.getMinecraft().renderEngine.bindTexture(tex);
model.renderAll();
GL11.glDisable(3042);
GL11.glPopMatrix();
}
}
}
EntitiBlasterBullet
Код:
package assets.testmod.src;
import java.util.List;
import net.minecraft.enchantment.EnchantmentThorns;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.IProjectile;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.projectile.EntityThrowable;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.packet.Packet70GameEvent;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EntityDamageSourceIndirect;
import net.minecraft.util.EnumMovingObjectType;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class EntitiBlasterBullet extends EntityThrowable
{
public EntitiBlasterBullet(World world)
{
super(world);
}
public EntitiBlasterBullet(World world, double x, double y, double z)
{
super(world, x, y, z);
}
public EntitiBlasterBullet(World world, EntityLivingBase entity)
{
super(world, entity);
}
@Override
public void onUpdate()
{
super.onUpdate();
this.motionX *= (double)this.getVelocity();
this.motionY *= (double)this.getVelocity();
this.motionZ *= (double)this.getVelocity();
this.setPosition(this.posX, this.posY, this.posZ);
}
protected float getVelocity()
{
return 50.0F;
}
protected float getGravityVelocity()
{
return 0.01F;
}
@Override
protected void onImpact(MovingObjectPosition mop)
{
for (int i = 0; i < 10000; ++i)
{
this.worldObj.spawnParticle("smoke", this.posX - this.motionX , this.posY - this.motionY, this.posZ - this.motionZ , this.motionX, this.motionY, this.motionZ);
}
if(mop.typeOfHit.equals(EnumMovingObjectType.ENTITY))
{
Entity entity = mop.entityHit;
DamageSource dmgSrc = (DamageSource.causeMobDamage(this.getThrower()));
int damage = 60;
entity.attackEntityFrom(dmgSrc, damage);
}
else if(mop.typeOfHit.equals(EnumMovingObjectType.TILE))
{
if(!this.worldObj.isRemote)
{
boolean flag = this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing");
this.setDead();
}
}
}
}
TestMod
Код:
package assets.testmod.src;
import net.minecraft.item.Item;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;
@Mod(modid=ModInfo.MODID, name=ModInfo.NAME, version=ModInfo.VERSION)
public class TestMod
{
public static Item blaster;
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
}
@EventHandler
public void init(FMLInitializationEvent event)
{
blaster = new blaster(3000).setUnlocalizedName("FN_SCAR");
LanguageRegistry.addName(blaster, "FN_SCAR");
EntityRegistry.registerModEntity(EntitiBlasterBullet.class, "bullet", 1, this, 40, 100, true);
}
@EventHandler
public void postInit(FMLPostInitializationEvent event)
{
}
}
Pricel
Код:
package assets.testmod.src;
import java.lang.annotation.ElementType;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemRedstone;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.event.ForgeSubscribe;
public class Pricel {
Minecraft mc = Minecraft.getMinecraft();
public static final ResourceLocation NEW_CROSSHAIRS = new ResourceLocation("testmod","textures/gui/bed.png");
@ForgeSubscribe
public void onRenderCrosshairs(RenderGameOverlayEvent.Pre event)
{
if(event.type.equals(ElementType.CROSSHAIRS))
{
ItemStack heldItem = mc.thePlayer.getHeldItem();
if(heldItem != null && heldItem.getItem() instanceof ItemRedstone)
{
event.setCanceled(true);
mc.getTextureManager().bindTexture(NEW_CROSSHAIRS);
int x = event.resolution.getScaledWidth() / 2 - 15;
int y = event.resolution.getScaledHeight() / 2 - 15;
mc.ingameGUI.drawTexturedModalRect(x, y, 0, 0, 32, 32);
}
}
}
}
и ещё ошибка в файле pricel
if(event.type.equals(ElementType.CROSSHAIRS))
в слове CROSSHAIRS
как это исправить?