- 116
- 0
Не открывается гуи, все делал по уроку http://www.minecraftforge.net/wiki/Containers_and_GUIs
ObsidianForge:
TileEntityObsidianForge:
GuiObsidianForge:
ContainerObsidianForge:
CommonProxy:
P.S. делаю в первый раз, толком незнаю.
[merge_posts_bbcode]Добавлено: 19.09.2015 23:13:42[/merge_posts_bbcode]
Help
ObsidianForge:
Код:
package assets.armorness.src.blocks;
import java.util.Random;
import assets.armorness.src.ModInfo;
import assets.armorness.src.armorness;
import assets.armorness.src.tileentity.TileEntityObsidianForge;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class ObsidianForge extends Block{
@SideOnly(Side.CLIENT)
protected IIcon ObsidianForgeFront;
protected IIcon ObsidianForgeSide;
protected IIcon ObsidianForgeTop;
public ObsidianForge() {
super(Material.rock);
this.setCreativeTab(armorness.armornesstab);
this.setHardness(2.0F);
this.setBlockTextureName(ModInfo.MODID + ":ObsidianForge");
}
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_)
{
TileEntity tileEntity = world.getTileEntity(x, y, z);
if (tileEntity == null || player.isSneaking()) {
return false;
}
if(!world.isRemote){
player.openGui(armorness.instance, 0, world, 0, 0, 0);
}
return true;
}
@Override
public void breakBlock(World world, int x, int y, int z, Block par5, int par6) {
dropItems(world, x, y, z);
super.breakBlock(world, x, y, z, par5, par6);
}
private void dropItems(World world, int x, int y, int z){
Random rand = new Random();
TileEntity tileEntity = world.getTileEntity(x, y, z);
if (!(tileEntity instanceof IInventory)) {
return;
}
IInventory inventory = (IInventory) tileEntity;
for (int i = 0; i < inventory.getSizeInventory(); i++) {
ItemStack item = inventory.getStackInSlot(i);
if (item != null && item.stackSize > 0) {
float rx = rand.nextFloat() * 0.8F + 0.1F;
float ry = rand.nextFloat() * 0.8F + 0.1F;
float rz = rand.nextFloat() * 0.8F + 0.1F;
EntityItem entityItem = new EntityItem(world,
x + rx, y + ry, z + rz,
new ItemStack(item.getItem(), item.stackSize, item.getItemDamage()));
if (item.hasTagCompound()) {
entityItem.getEntityItem().setTagCompound((NBTTagCompound) item.getTagCompound().copy());
}
float factor = 0.05F;
entityItem.motionX = rand.nextGaussian() * factor;
entityItem.motionY = rand.nextGaussian() * factor + 0.2F;
entityItem.motionZ = rand.nextGaussian() * factor;
world.spawnEntityInWorld(entityItem);
item.stackSize = 0;
}
}
}
public TileEntity createNewTileEntity(World world) {
return new TileEntityObsidianForge();
}
@SideOnly(Side.CLIENT)
@Override
public void registerBlockIcons(IIconRegister par1IconRegister)
{
ObsidianForgeFront = par1IconRegister.registerIcon(ModInfo.MODID + ":" + "ObsidianForge_front");
ObsidianForgeSide = par1IconRegister.registerIcon(ModInfo.MODID + ":" + "ObsidianForge_side");
ObsidianForgeTop = par1IconRegister.registerIcon(ModInfo.MODID + ":" + "ObsidianForge_top");
}
@SideOnly(Side.CLIENT)
@Override
public IIcon getIcon(int par1int, int par2int)
{
if (par1int == 0 || par1int == 1) { return ObsidianForgeTop; }
if (par2int == 2 && par1int == 2) { return ObsidianForgeFront; }
if (par2int == 3 && par1int == 5) { return ObsidianForgeFront; }
if (par2int == 0 && par1int == 3) { return ObsidianForgeFront; }
if (par2int == 1 && par1int == 4) { return ObsidianForgeFront; }
return ObsidianForgeSide;
}
@Override
public void onBlockPlacedBy(World par1World, int par2int, int par3int, int par4int, EntityLivingBase par5EntityLivingBase, ItemStack par6ItemStack)
{
int i = MathHelper.floor_double((double)(par5EntityLivingBase.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
par1World.setBlockMetadataWithNotify(par2int, par3int, par4int, i, 2);
}
}
Код:
package assets.armorness.src.tileentity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
public class TileEntityObsidianForge extends TileEntity implements IInventory{
private ItemStack [] inv;
public TileEntityObsidianForge(){
inv = new ItemStack[1];
}
@Override
public int getSizeInventory() {
// TODO Auto-generated method stub
return inv.length;
}
@Override
public ItemStack getStackInSlot(int slot) {
// TODO Auto-generated method stub
return inv[slot];
}
@Override
public ItemStack decrStackSize(int slot, int amt) {
// TODO Auto-generated method stub
ItemStack stack = getStackInSlot(slot);
if (stack != null) {
if (stack.stackSize <= amt) {
setInventorySlotContents(slot, null);
} else {
stack = stack.splitStack(amt);
if (stack.stackSize == 0) {
setInventorySlotContents(slot, null);
}
}
}
return stack;
}
@Override
public ItemStack getStackInSlotOnClosing(int slot) {
ItemStack stack = getStackInSlot(slot);
if (stack != null) {
setInventorySlotContents(slot, null);
}
return stack;
}
@Override
public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) {
// TODO Auto-generated method stub
}
@Override
public String getInventoryName() {
// TODO Auto-generated method stub
return "Obsidian Forge";
}
@Override
public boolean hasCustomInventoryName() {
// TODO Auto-generated method stub
return false;
}
@Override
public int getInventoryStackLimit() {
// TODO Auto-generated method stub
return 1;
}
@Override
public boolean isUseableByPlayer(EntityPlayer player) {
return worldObj.getTileEntity(xCoord, yCoord, zCoord) == this &&
player.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64;
}
@Override
public void openInventory() {
// TODO Auto-generated method stub
}
@Override
public void closeInventory() {
// TODO Auto-generated method stub
}
@Override
public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) {
// TODO Auto-generated method stub
return false;
}
@Override
public void writeToNBT(NBTTagCompound tagCompound) {
super.writeToNBT(tagCompound);
NBTTagList itemList = new NBTTagList();
for (int i = 0; i < inv.length; i++) {
ItemStack stack = inv[i];
if (stack != null) {
NBTTagCompound tag = new NBTTagCompound();
tag.setByte("Slot", (byte) i);
stack.writeToNBT(tag);
itemList.appendTag(tag);
}
}
tagCompound.setTag("Inventory", itemList);
}
}
Код:
package assets.armorness.src;
import org.lwjgl.opengl.GL11;
import assets.armorness.src.items.ObsidianCrafter;
import assets.armorness.src.tileentity.TileEntityObsidianForge;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
public class GuiObsidianForge extends GuiContainer {
private static final ResourceLocation backgroundResourceLocation = new ResourceLocation("textures/gui/container/crafting_table.png");
public GuiObsidianForge(InventoryPlayer playerInventory, TileEntityObsidianForge world) {
super(new ContainerObsidianForge(playerInventory, world));
}
@Override
protected void drawGuiContainerForegroundLayer(int par1, int par2) {
this.fontRendererObj.drawString(StatCollector.translateToLocal("Obsidian Forge"), 8, 6, 4210752);
this.fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
}
@Override
protected void drawGuiContainerBackgroundLayer(float arg0, int arg1, int arg2) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
this.mc.renderEngine.bindTexture(backgroundResourceLocation);
int j = (this.width - this.xSize) / 2;
int k = (this.height - this.ySize) / 2;
this.drawTexturedModalRect(j, k, 0, 0, this.xSize, this.ySize);
}
}
Код:
package assets.armorness.src;
import assets.armorness.src.tileentity.TileEntityObsidianForge;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
public class ContainerObsidianForge extends Container{
protected TileEntityObsidianForge tileEntity;
public ContainerObsidianForge (InventoryPlayer inventoryPlayer, TileEntityObsidianForge te){
tileEntity = te;
//the Slot constructor takes the IInventory and the slot number in that it binds to
//and the x-y coordinates it resides on-screen
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
addSlotToContainer(new Slot(tileEntity, j + i * 3, 62 + j * 18, 17 + i * 18));
}
}
//commonly used vanilla code that adds the player's inventory
bindPlayerInventory(inventoryPlayer);
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return tileEntity.isUseableByPlayer(player);
}
protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 9; j++) {
addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9,
8 + j * 18, 84 + i * 18));
}
}
for (int i = 0; i < 9; i++) {
addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 142));
}
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int slot) {
ItemStack stack = null;
Slot slotObject = (Slot) inventorySlots.get(slot);
//null checks and checks if the item can be stacked (maxStackSize > 1)
if (slotObject != null && slotObject.getHasStack()) {
ItemStack stackInSlot = slotObject.getStack();
stack = stackInSlot.copy();
//merges the item into player inventory since its in the tileEntity
if (slot < tileEntity.getSizeInventory()) {
if (!this.mergeItemStack(stackInSlot, tileEntity.getSizeInventory(), 36+tileEntity.getSizeInventory(), true)) {
return null;
}
}
//places it into the tileEntity is possible since its in the player inventory
else if (!this.mergeItemStack(stackInSlot, 0, tileEntity.getSizeInventory(), false)) {
return null;
}
if (stackInSlot.stackSize == 0) {
slotObject.putStack(null);
} else {
slotObject.onSlotChanged();
}
if (stackInSlot.stackSize == stack.stackSize) {
return null;
}
slotObject.onPickupFromSlot(player, stackInSlot);
}
return stack;
}
}
Код:
package assets.armorness.src;
import assets.armorness.src.tileentity.TileEntityObsidianForge;
import cpw.mods.fml.common.FMLLog;
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.network.IGuiHandler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class CommonProxy implements IGuiHandler{
public void preInit(FMLPreInitializationEvent e) {
}
public void init(FMLInitializationEvent e) {
}
public void postInit(FMLPostInitializationEvent e) {
}
@Override
public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) {
if (player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == armorness.ObsidianCrafter)
return new GuiObsidianCrafter(player.inventory, world);
TileEntity tileEntity = world.getTileEntity(x, y, z);
if(tileEntity instanceof TileEntityObsidianForge){
return new GuiObsidianForge(player.inventory, (TileEntityObsidianForge) tileEntity);
}
FMLLog.info("No GUI to show");
return null;
}
@Override
public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) {
if (player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == armorness.ObsidianCrafter)
return new ContainerObsidianCrafter(player.inventory, world);
TileEntity tileEntity = world.getTileEntity(x, y, z);
if(tileEntity instanceof TileEntityObsidianForge){
return new ContainerObsidianForge(player.inventory, (TileEntityObsidianForge) tileEntity);
}
FMLLog.info("No GUI to show");
return null;
}
}
[merge_posts_bbcode]Добавлено: 19.09.2015 23:13:42[/merge_posts_bbcode]
Help