- 81
- 0
Всем привет. Только учусь создавать моды. Блоки, айтемы, крафты усвоил...есть одна проблема. Не получается создать интерфейс для своего блока(как у печки).
Перерыл много тем на форуме, сайтов.
Последний раз наткнулся на такой урок
[youtube]g7I0acMIRoo[/youtube]
[youtube]9w71MUms1IE[/youtube]
Сделал все точь в точь. Ошибок в коде не было, краша при запуске также, но при ПКМ по блоку ничего не работало.
Вписал System.out.println("Блок активирован"); чтобы через консоль проверить... и в консоли тоже ничего не выводилось. В чем может быть проблема подскажите пожалуйста!!
Molding Machine.java
MoldingMachineContainer.java
MoldingMachineGui.java
MoldingMachineGuiHandler.java
MoldingMachineTileEntity.java
Перерыл много тем на форуме, сайтов.
Последний раз наткнулся на такой урок
[youtube]g7I0acMIRoo[/youtube]
[youtube]9w71MUms1IE[/youtube]
Сделал все точь в точь. Ошибок в коде не было, краша при запуске также, но при ПКМ по блоку ничего не работало.
Вписал System.out.println("Блок активирован"); чтобы через консоль проверить... и в консоли тоже ничего не выводилось. В чем может быть проблема подскажите пожалуйста!!
Molding Machine.java
Код:
package com.essenxmax.additplus;
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.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class MoldingMachine extends Block {
// Объявляем текстуру для блока
@SideOnly(Side.CLIENT)
protected IIcon MoldingMachineSide;
protected IIcon MoldingMachineTop;
protected IIcon MoldingMachineFront;
// Конструктор класса
public MoldingMachine()
{
super(Material.iron);
// Указываем вкладку креатива, в которой будет наш блок (вкладка Блоки, можно указать любую)
setCreativeTab(BaseClass.tabAdditplus);
// Указываем имя для блока (понадобится для локализации)
setBlockName(BaseClass.MODID + "." + "moldingmachine");
}
////////////////////////TILE ENTITY///////////////////////////
public TileEntity createNewTileEntity(World var1, int var2){
return new MoldingMachineTileEntity();
}
//////////////////////////////////////////////////////////////
/////////////////////////TEXTURES//////////////////////////////////
// Этот метод позволяет зарегистрировать новые текстуры
@SideOnly(Side.CLIENT)
@Override
public void registerBlockIcons(IIconRegister par1IconRegister)
{
// Регистрируем путь до png-текстуры
MoldingMachineSide = par1IconRegister.registerIcon(BaseClass.MODID + ":" + "compressor_side");
MoldingMachineFront = par1IconRegister.registerIcon(BaseClass.MODID + ":" + "compressor_front");
MoldingMachineTop = par1IconRegister.registerIcon(BaseClass.MODID + ":" + "compressor_top");
}
// Этот метод получает текстуры блока
@SideOnly(Side.CLIENT)
@Override
public IIcon getIcon(int par1int, int par2int)
{
return par1int == 1 ? MoldingMachineTop : (par1int == 1 ? MoldingMachineTop : (par2int == 2 && par1int == 2 ? MoldingMachineFront : (par2int == 3 && par1int == 5 ? MoldingMachineFront : (par2int == 0 && par1int == 3 ? MoldingMachineFront : (par2int == 1 && par1int == 4 ? MoldingMachineFront : MoldingMachineSide)))));
}
@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);
}
//////////////////////////////////////////////////////////////////////////////
public boolean onBLockActivated(World world, int x,int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ){
player.openGui(BaseClass.instance, 0, world, x, y, z);
System.out.println("Блок активирован");
return true;
}
}
MoldingMachineContainer.java
Код:
package com.essenxmax.additplus;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
public class MoldingMachineContainer extends Container{
private MoldingMachineTileEntity MoldingMachineTileEntity;
public MoldingMachineContainer(InventoryPlayer invPlayer,MoldingMachineTileEntity entity ){
this.MoldingMachineTileEntity = entity;
}
@Override
public boolean canInteractWith(EntityPlayer var1) {
return MoldingMachineTileEntity.isUseableByPlayer(var1);
}
}
MoldingMachineGui.java
Код:
package com.essenxmax.additplus;
import java.io.IOException;
import org.lwjgl.opengl.GL11;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.util.ResourceLocation;
public class MoldingMachineGui extends GuiContainer{
public static final ResourceLocation texture = new ResourceLocation("additplus:/textures/gui/moldingmachine_gui.png");
public MoldingMachineGui(InventoryPlayer playerInv, MoldingMachineTileEntity tileentity) {
super(new MoldingMachineContainer(playerInv, tileentity));
xSize = 200;
ySize = 200;
}
@Override
protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) {
GL11.glColor4f(1F, 1F, 1F, 1F);
try{
Minecraft.getMinecraft().getResourceManager().getResource(texture);
}catch (IOException e){
System.out.println("Texture has not been loaded yet");
e.printStackTrace();
}
drawTexturedModalRect(guiLeft, guiTop, 0, 0, this.xSize, this.ySize);
}
}
MoldingMachineGuiHandler.java
Код:
package com.essenxmax.additplus;
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 MoldingMachineGuiHandler implements IGuiHandler{
@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
TileEntity entity = world.getTileEntity(x, y, z);
switch(ID){
case 0:
if(entity != null && entity instanceof MoldingMachineTileEntity){
return new MoldingMachineContainer(player.inventory,(MoldingMachineTileEntity)entity);
}else{
return null;
}
}
return null;
}
@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
TileEntity entity = world.getTileEntity(x, y, z);
switch(ID){
case 0:
if(entity != null && entity instanceof MoldingMachineTileEntity){
return new MoldingMachineGui(player.inventory,(MoldingMachineTileEntity)entity);
}
}
return null;
}
}
MoldingMachineTileEntity.java
Код:
package com.essenxmax.additplus;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
public class MoldingMachineTileEntity extends TileEntity implements IInventory{
private ItemStack[] inventory;
public MoldingMachineTileEntity(){
inventory = new ItemStack[1];
}
@Override
public int getSizeInventory() {
return inventory.length;
}
@Override
public ItemStack getStackInSlot(int slot) {
return (slot ==0 ? inventory[0]:null);
}
@Override
public ItemStack decrStackSize(int var1, int var2) {
ItemStack itemStack = getStackInSlot(var1);
if(itemStack != null){
if(itemStack.stackSize <= var2){
setInventorySlotContents(var1, null);
}else{
itemStack = itemStack.splitStack(var2);
onInventoryChanged();
}
}
return itemStack;
}
private void onInventoryChanged() {
}
@Override
public ItemStack getStackInSlotOnClosing(int var1) {
ItemStack itemStack = getStackInSlot(var1);
setInventorySlotContents (var1, null);
return itemStack;
}
@Override
public void setInventorySlotContents(int var1, ItemStack var2) {
inventory [var1] = var2;
if (var2 != null && var2.stackSize > getInventoryStackLimit()){
var2.stackSize = getInventoryStackLimit();
}
}
@Override
public String getInventoryName() {
return "MoldingMachine";
}
@Override
public boolean hasCustomInventoryName() {
return true;
}
@Override
public int getInventoryStackLimit() {
return 64;
}
@Override
public boolean isUseableByPlayer(EntityPlayer var1) {
if(var1.getDistanceSq(xCoord = (int)0.5D, yCoord + 0.5D, zCoord + 0.5D)<=64){
return true;
}else{
return false;
}
}
@Override
public void openInventory() {
// TODO Auto-generated method stub
}
@Override
public void closeInventory() {
// TODO Auto-generated method stub
}
@Override
public boolean isItemValidForSlot(int var1, ItemStack var2) {
return true;
}
}