- 737
- 2
Коротко, чисто код, без комментариев.
MDItems
Record
sounds.json
MDItems
Код:
public class MDItems {
public static Item CD_1;
public static void items()
{
CD_1 = new Record(0, "cd1") .setTextureName("records:1") .setUnlocalizedName("1");
GameRegistry.registerItem(CD_1, "CD_1");
}
}
Record
Код:
public class Record
extends ItemRecord
{
private static final Map records = new HashMap();
public final String recordName;
public Record(int par1, String par0Str)
{
super(par0Str);
this.recordName = par0Str;
this.maxStackSize = 1;
this.setCreativeTab(ModBase.materials);
records.put(par0Str, this);
}
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamage(int par1)
{
return this.itemIcon;
}
public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
{
if ((par3World.getBlock(par4, par5, par6) == Blocks.jukebox) && (par3World.getBlockMetadata(par4, par5, par6) == 0))
{
if (par3World.isRemote) {
return true;
}
((BlockJukebox)Blocks.jukebox).func_149926_b(par3World, par4, par5, par6, par1ItemStack);
par3World.playAuxSFXAtEntity((EntityPlayer)null, 1005, par4, par5, par6, Item.getIdFromItem(this));
par1ItemStack.stackSize -= 1;
return true;
}
return false;
}
@SideOnly(Side.CLIENT)
public void func_77624_a(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4)
{
par3List.add(getRecordTitle());
}
@SideOnly(Side.CLIENT)
public String getRecordTitle()
{
return this.recordName;
}
@SideOnly(Side.CLIENT)
public EnumRarity func_77613_e(ItemStack par1ItemStack)
{
return EnumRarity.rare;
}
@SideOnly(Side.CLIENT)
public static Record getRecord(String par0Str)
{
return (Record)records.get(par0Str);
}
public ResourceLocation getRecordResource(String name)
{
return new ResourceLocation("rcservmod:" + name);
}
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister iconRegister)
{
this.itemIcon = iconRegister.registerIcon("rcservmod:" + this.getUnlocalizedName().substring(5));
}
}
sounds.json
Код:
{
"records.cd1": {
"category": "record",
"sounds": [
{
"name": "records/cd1",
"stream": true
}
]
}
}
Немного костыльно, но пашет. Основная катка в updateEntity
TileEntityAcrCreator
TileEntityAcrCreator
Код:
public class TileEntityArcCreator extends TileEntity implements IInventory {
private static final int[] slotsSides = new int[] {0, 1, 2, 3, 4, 5, 6, 7};
private static final int[] slotsCenter = new int[] {8};
private ItemStack[] creatorStacks = new ItemStack[9];
private String name;
@Override
public int getSizeInventory() {
return creatorStacks.length;
}
@Override
public ItemStack getStackInSlot(int slot) {
return creatorStacks[slot];
}
@Override
public ItemStack decrStackSize(int slot, int par2) {
if (creatorStacks[slot] != null) {
ItemStack itemStack;
if (creatorStacks[slot].stackSize <= par2) {
itemStack = creatorStacks[slot];
creatorStacks[slot] = null;
return itemStack;
}
else {
itemStack = creatorStacks[slot].splitStack(par2);
if (creatorStacks[slot].stackSize == 0) {
creatorStacks[slot] = null;
}
return itemStack;
}
}
else {
return null;
}
}
@Override
public ItemStack getStackInSlotOnClosing(int slot) {
if (creatorStacks[slot] != null) {
ItemStack itemStack = creatorStacks[slot];
creatorStacks[slot] = null;
return itemStack;
}
else {
return null;
}
}
@Override
public void setInventorySlotContents(int slot, ItemStack itemStack) {
creatorStacks[slot] = itemStack;
if (itemStack != null && itemStack.stackSize > getInventoryStackLimit()) {
itemStack.stackSize = getInventoryStackLimit();
}
}
@Override
public String getInventoryName() {
return hasCustomInventoryName() ? name : "container.creator";
}
@Override
public boolean hasCustomInventoryName() {
return name != null && name.length() > 0;
}
@Override
public void readFromNBT(NBTTagCompound tagCompound) {
super.readFromNBT(tagCompound);
NBTTagList tagList = tagCompound.getTagList("Items", 10);
creatorStacks = new ItemStack[getSizeInventory()];
for (int i = 0; i < tagList.tagCount(); ++i) {
NBTTagCompound tagCompound1 = tagList.getCompoundTagAt(i);
byte b0 = tagCompound1.getByte("Slot");
if (b0 >= 0 && b0 < creatorStacks.length) {
creatorStacks[b0] = ItemStack.loadItemStackFromNBT(tagCompound1);
}
if (tagCompound.hasKey("CustomName", 8)) {
name = tagCompound.getString("CustomName");
}
}
}
@Override
public void writeToNBT(NBTTagCompound tagCompound) {
super.writeToNBT(tagCompound);
NBTTagList tagList = new NBTTagList();
for (int i = 0; i < creatorStacks.length; ++i) {
if (creatorStacks[i] != null) {
NBTTagCompound tagCompound1 = new NBTTagCompound();
tagCompound1.setByte("Slot", (byte)i);
creatorStacks[i].writeToNBT(tagCompound1);
tagList.appendTag(tagCompound1);
}
}
tagCompound.setTag("Items", tagList);
if (hasCustomInventoryName()) {
tagCompound.setString("CustomName", name);
}
}
@Override
public int getInventoryStackLimit() {
return 64;
}
@Override
public void updateEntity() {
if (!getWorldObj().isRemote) {
ItemStack itemStack = getStackInSlot(0);
ItemStack itemStack1 = getStackInSlot(1);
ItemStack itemStack2 = getStackInSlot(2);
ItemStack itemStack3 = getStackInSlot(3);
ItemStack itemStack4 = getStackInSlot(4);
ItemStack itemStack5 = getStackInSlot(5);
ItemStack itemStack6 = getStackInSlot(6);
ItemStack itemStack7 = getStackInSlot(7);
try {
if (itemStack.getItem()==PTItems.arcTubeWithCoil && itemStack1.getItem()==PTItems.arcTubeWithCoil && itemStack2.getItem()==PTItems.arcTubeWithCoil && itemStack3.getItem()==PTItems.arcTubeWithCoil && itemStack4.getItem()==PTItems.arcTubeWithCoil && itemStack5.getItem()==PTItems.arcTubeWithCoil && itemStack6.getItem()==PTItems.arcTubeWithCoil && itemStack7.getItem()==PTItems.arcTubeWithCoil) {
decrStackSize(0, 8);
decrStackSize(1, 8);
decrStackSize(2, 8);
decrStackSize(3, 8);
decrStackSize(4, 8);
decrStackSize(5, 8);
decrStackSize(6, 8);
decrStackSize(7, 8);
if (getStackInSlot(8) != null) {
setInventorySlotContents(8 ,new ItemStack(PTItems.arcModel));
} else {
setInventorySlotContents(8, new ItemStack(PTItems.arcModel));
markDirty();
}
}
} catch(NullPointerException e) {
}
}
}
@Override
public boolean isUseableByPlayer(EntityPlayer player) {
return worldObj.getTileEntity(xCoord, yCoord, zCoord) != this ? false : player.getDistanceSq((double)xCoord + 0.5D, (double)yCoord + 0.5D, (double)zCoord + 0.5D) <= 64.0D;
}
@Override
public void openInventory() {}
@Override
public void closeInventory() {}
@Override
public boolean isItemValidForSlot(int par1, ItemStack itemStack) {
return true;
}
}
Здесь будет только настройка предметов и регистрация материалов.
ModBase
Sword
Helmet
Items
ModBase
Код:
public class ModBase {
public static Item.ToolMaterial STEEL = EnumHelper.addToolMaterial("IRON", 4, 150, 5, 0, 10);
public static ItemArmor.ArmorMaterial CELVAR = EnumHelper.addArmorMaterial("IRON", 210, new int[] {5, 20, 10, 5}, 10);
//....
}
Sword
Код:
public class Sword extends ItemSword {
public Sword(ModBase.STEEL) {
}
}
Helmet
Код:
public class CevlarHelmet extends ItemArmor
{
public BoneBoots(EnumArmorMaterial par2EnumArmorMaterial, int par3, int par4)
{
super(par1, par2EnumArmorMaterial, par3, par4);
this.setCreativeTab(MArmory.tabMArmory);
}
public void onArmorTickUpdate(World world, EntityPlayer player, ItemStack itemStack)
{
/*
* Любой эффект, когда броня одета (не вся, а только определенный предмет(в данном случае - шлем))
*/
}
/*
* Текстура брони на игроке
*/
public String getArmorTexture(ItemStack stack, Entity entity, int slot, int layer)
{
return ModBase.MODID + ":textures/armor/cevlarArmor.png";
}
}
Items
Код:
public class Items {
public static Item sword;
public static ItemArmor helmet;
public static void items() {
sword = new Sword().setCreativeTab(ModBase.armory).setUnlocalizedName("sword").setTextureName(ModBase.MODID + ":" + "sword");
helmet = (ItemArmor) new CevlarHelmet(ModBase.CEVLAR, 0, 0).setCreativeTab(ModBase.armory).setUnlocalizedName("helmet").setTextureName(ModBase.MODID + ":" + "helmet");
//Ну, с GameRegistry сами разберетесь
}