Salut ! Merci à Nicotbb pour le tuto et à CaptaineCookies pour les informations supplémentaires !
Bon j'avance beaucoup grace a ce tuto et j'en suis a mon 5ème mod. Je pourrias publier certains de mes mods ?
J'vais avoir besoin d'aide pour une chose et je vais aider ce que je peux aider ^^
@Dadavolt: Tu ne pourras pas créer de mob, car tes fonctions sont incompatibles avec MCP !
Je suis désolé :/ (en tout cas c'est ce que je pense)
Je sais d'où tu as trouvé tes fonctions mais sinon essaye avec "la class de ta source".AddSpawn(....) au lieu de ModLoader.AddSpawn .... parce qu'en faite tu dis comme quoi cette fonction fait partit de modLoader.
Si sa marche toujours pas... bah dit le nous ^^
@Da Vinci: Déjà j'aime bien ton pseudo ^^ Sinon pour ton crash y a tellement de cas que...
Bon il se peut que ça soit : - Image pas trouvé
- ID doublé
- Mauvais codage
- Ou encore comme ça me l'avais fait une boucle infinie que ne se termine pas et crash minecraft très très bizarrement !! Je vous ferez voir ma vidéo quand je l'aurai publier ;)
Et aussi, donne nous un screen sur le crash, Merci :)
Bon pour moi, j'voudrai savoir comment faire pour créer un temps qui bloque une fonction un certain temps.
Je m'explique, je cherche un fonction qui permet de lancer une autre fonction après un temps donné. Mais j'aimerai qu'il soit compatible avec MCP, Minecraft et ModLoader. Merci ! ;)
Hors ligne
Merci pour ta réponse, mais enfaite j'ai trouvé tout seul : l'ID de mon bloc était beaucoup trop élevé.
Hors ligne
Allez, j'ose faire un up pour une question dont je n'ai trouvé réponse nul part ailleur...
Que faut-il modifier dans le code lors d'une mise à jour de minecraft?
En attente d'une réponse,
Craterus
Hors ligne
Ex-Seigneur Pumpkins!
Euh bonjour,
J'en suis au premier tuto sur les ressorts et Cela ne marche pas
Je vous envois un screen de la cmd et du script:
http://upload.fr-minecraft.net/images/f … cmdsjq.bmp
http://upload.fr-minecraft.net/images/f … script.bmp
Hors ligne
Quadaboum, pour ton problème (j'ai eu le même), il faut modifier le Minecraft.java qui se situe dans un dossier similaire à celui qui contient les src, il s'appelle client. Tu a deux problèmes qui apparaitront, il faut choisir la première option je crois. Mets aussi à jour ton JRE. J'ai fait ça et ça marchait ;) Ton IDE devrait te proposer une solution qui est d'ajouter à deux fonctions ça: "throws LWJGLException".
Sinon, j'ai moi aussi un problème concernant un mod simple qui rajoute des items, qui à l'air codé sans erreur. Le jeu n'arrive pas à le charger, pourtant Eclipse ne m'indique aucune erreur sur le code :/
Voici le message d'erreur:
Mods loaded: 1
ModLoader 1.1
Minecraft has crashed!
----------------------
Minecraft has stopped running because it encountered a problem.
If you wish to report this, please copy this entire text and email it to support@mojang.com.
Please include a description of what you did when the error occured.
--- BEGIN ERROR REPORT 9c4f49b2 --------
Generated 29/02/12 09:15
Minecraft: Minecraft 1.1
OS: Windows 7 (x86) version 6.1
Java: 1.7.0_03, Oracle Corporation
VM: Java HotSpot(TM) Client VM (mixed mode), Oracle Corporation
LWJGL: 2.4.2
OpenGL: ATI Radeon HD 5450 version 4.2.11399 Compatibility Profile Context, ATI Technologies Inc.
java.lang.InstantiationException
at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at java.lang.Class.newInstance0(Class.java:372)
at java.lang.Class.newInstance(Class.java:325)
at net.minecraft.src.ModLoader.addMod(ModLoader.java:234)
at net.minecraft.src.ModLoader.readFromClassPath(ModLoader.java:1217)
at net.minecraft.src.ModLoader.init(ModLoader.java:708)
at net.minecraft.src.ModLoader.AddAllRenderers(ModLoader.java:150)
at net.minecraft.src.RenderManager.<init>(RenderManager.java:78)
at net.minecraft.src.RenderManager.<clinit>(RenderManager.java:9)
at net.minecraft.client.Minecraft.startGame(Minecraft.java:315)
at net.minecraft.client.Minecraft.run(Minecraft.java:618)
at java.lang.Thread.run(Thread.java:722)
--- END ERROR REPORT dec2d7b3 ----------
Voici le code de mod_DarKsSwords:
package net.minecraft.src;
public abstract class mod_DarKsSwords extends BaseMod
{
public static final Item DarkDye = (new ItemDarkMetal(500)).setIconIndex(ModLoader.addOverride("/gui/items.png", "/DarkDye.png")).setItemName("DarkDye");
public static final Item DarkMetal = (new ItemDarkMetal(501)).setIconIndex(ModLoader.addOverride("/gui/items.png", "/DarkMetal.png")).setItemName("DarkMetal");
public mod_DarKsSwords()
{
ModLoader.SetInGameHook(this, true, true);
ModLoader.AddName(DarkDye, "Dark Dye");
ModLoader.AddName(DarkMetal, "Dark Metal");
addRecipes();
}
private void addRecipes()
{
ModLoader.AddRecipe(new ItemStack(DarkDye, 3), new Object[] {"XXX", "XXX", "XXX", Character.valueOf('X'), Item.eyeOfEnder});
ModLoader.AddRecipe(new ItemStack(DarkMetal, 1), new Object[] {"XXX", "CCC", "VVV", Character.valueOf('X'), DarkDye, Character.valueOf('C'), Item.diamond, Character.valueOf('V'), Item.ingotIron});
}
public String Version()
{
return "1.1.0";
}
}
Le code du premier item, ItemDarkDye:
package net.minecraft.src;
public class ItemDarkDye extends Item {
public ItemDarkDye(int id){
super(id);
}
}
Le code du deuxième item, ItemDarkMetal:
package net.minecraft.src;
public class ItemDarkMetal extends Item {
public ItemDarkMetal(int id){
super(id);
}
}
Je précise que le crash report arrive au moment ou la console de test me dit un truc du style "Fail loading mod_DarKsSwords."
Hors ligne
Désolé du double post, j'ai trouvé la solution tout seul. Ma conclusion est que...
//!\\CE TUTO N'EST PLUS A JOUR!!!!//!\\
La fonction pour récupérer la version n'est pas :
public String Version()
{
return "1.1.0";
}
MAIS:
public String getVersion() {
return "1.1.0";
}
De plus, la fonction dans laquelle vous devrez tout mettre concernant l'ajout de recettes, item, etc...n'est pas:
public mod_NomDuMod() {
ModLoader.SetInGameHook(this, true, false);
Ressort = (new ItemRessort(113)).setIconCoord(0, 0);
addRecipes(); //On ajoute les recettes
//J'ai repris l'exemple du tuto...
}
MAIS:
public void load(){
//Votre code pour ajouter items et blocs à foison
}
Voilà, si un modérateur passe par là et peut mettre à jour svp =)
J'ai fait ces modifs et mon code marche sans problème =)
Pour donner l'exemple avec mon code de mon précédent post, ça donne ça (seulement le mod_DarKsSwords):
package net.minecraft.src;
public class mod_DarKsSwords extends BaseMod
{
public static final Item DarkDye = (new ItemDarkMetal(500)).setIconIndex(ModLoader.addOverride("/gui/items.png", "/DarkDye.png")).setItemName("DarkDye");
public static final Item DarkMetal = (new ItemDarkMetal(501)).setIconIndex(ModLoader.addOverride("/gui/items.png", "/DarkMetal.png")).setItemName("DarkMetal");
public void load()
{
ModLoader.SetInGameHook(this, true, true);
ModLoader.AddName(DarkDye, "Dark Dye");
ModLoader.AddName(DarkMetal, "Dark Metal");
addRecipes();
}
private void addRecipes()
{
ModLoader.AddRecipe(new ItemStack(DarkDye, 3), new Object[] {"XXX", "XXX", "XXX", Character.valueOf('X'), Item.eyeOfEnder});
ModLoader.AddRecipe(new ItemStack(DarkMetal, 1), new Object[] {"XXX", "CCC", "VVV", Character.valueOf('X'), DarkDye, Character.valueOf('C'), Item.diamond, Character.valueOf('V'), Item.ingotIron});
}
public String getVersion()
{
return "1.1.0";
}
}
Voilà tout =)
DarKobalt
Hors ligne
Merci pour ce tuto, ça donne vraiment envie de se lancer dans un mod!
Hors ligne
C'est très dur de créer un mod
Hors ligne
Bonjour,
tout d'abord merci pour ce tuto.
je sais qu'il n'est plus mis a jour mais j'aurai une question, j'ai bien réussi a créer le ressort mais comment fait on pour pouvoir le créer sur un serveur car la ça marche sur une partie solo mais pas sur mon serveur
Merci
Toisur
Hors ligne
@nicotbb
tous d'abord merci ton sujet n'est pas mort il est encore bien afficher dans les recherche google (en première page même)
Ensuite pourquoi "notepad(bèèè)"? C'est très bien, c'est facile d'utilisation et ça pique pas les yeux avec 36 000 onglet^^
@tous
Maintenant j'aimerais savoir comment peut on récupérer un texte écrit in-game sur un panneau pour le retranscrire dans le code!
Cela me serai utile car j'aimerai créer un bloc de téléportation ou les coordonnée de destination serait à écrire par le joueur sur un panneau!
Un peu comme l'un des mod du zombe's modpack
Merci
Dernière modification par scadiv (18/04/2012 12:38:39)
Hors ligne
Salut, j'ai un problème :
Quand je lance "recompile.bat" (je suis a la deuxième partie), j'ai un message d'erreur
javac: invalid flag: -Xlint:-options
Usage: javac <options> <source files>
Use -help for a list of possible options
Puis le programme s'arrete, help please :'(
Hors ligne
Bonsoir à tous!
Avant tout, un grand merci à Nicotbb. Ca fait quelques temps que j'essaye de trouver comment créer un mod et des objets, histoire de repimenter un peu mon server, donc tu m'aides grandement :)
Ceci dit j'ai quelques petits soucis au moment de recompiller (le 1er test de la 1ère étape ). Le CMD me dit en fait que j'ai 4 erreurs et ce sur le mode_jump. Par exemple il n'a pas l'air d'aimer du tout le public static Item Ressort;
Je vous met en copie mon code
package net.minecraft.src;
//Nous sommes dans les sources de Minecraft
//Et nous déclarons notre classe (qui, soit dit en passant, ne l'a pas encore)
public class mod_Jump extends BaseMod {
public static Item Ressort;
public mod_Jump() {
ModLoader.SetInGameHook(this, true, false); //J'explique plus tard...
Ressort = (new ItemRessort(113)).setIconCoord(0, 0);
addRecipes(); //On ajoute les recettes
}
private void addRecipes() {
ModLoader.AddRecipe(new ItemStack(Ressort, 1), new Object[] {"C", Character.valueOf('C'), Block.cobblestone});
}
public String Version() {
//Ici j'ai l'habitude de mettre la version de Minecraft, mais (à vérifier) tu peu mettre la version de ton mod.
return "1.6.5";
}
}
Merci par avance pour votre aide
Hors ligne
Re,
Petite précision, si j'enlève le ; à public static Item Ressort; il n'est pas content non plus, me disant qu'il manque un ; . J'ai essayé aussi avec des parenthèse et des crochets mais ca n'a pas non plus l'air de lui plaire...
Hors ligne
Bonjour!
Déjà, merci pour ce tuto.
Maitenant, ma question:
Quand je lance decompile.bat, il m'affiche :
== MCP 7.2 (data: 7.2, client: 1.3.2, server: 1.3.2) ==
# found ff, ff patches, srgs, name csvs, doc csvs, param csvs, renumber csv, ast
yle, astyle config
Et il ne se passe rien...
Help please :) !
MaloZ
Hors ligne
Déso je suis resté sur les premiers messages du tuto^^
Alors voilà g un gros problème d'erreurs TT :
Je suis un peu une bille en java^^
Voici le code que j'ai marqué :
Dans ItemRessort.java :
package net.minecraft.src;
public class ItemRessort extends Item {
public ItemRessort(int id) {
super(id);
}
}
Et puis dans mod_Jump.java :
package net.minecraft.src;
public class mod_Jump extends BaseMod {
public static Item Ressort;
public mod_Jump() {
ModLoader.SetInGameHook(this, true, false);
Ressort = (new ItemRessort(113)).setIconCoord(0, 0);
addRecipes();
}
private void addRecipes() {
ModLoader.AddRecipe(new ItemStack(Ressort, 1), new Object[] {"C", Character.valueOf('C'), Block.cobblestone});
}
public String Version() {
return "1.3.2";
}
}
J'ai aussi d'autres petites questions :
Fallait-il mettre le modloader dans les fichier .jar de minecraft avant de décompiler ?
> Pour me répondre il faut que vous sachiez que je l'ai fait.
Merci d'avance^^
Hors ligne
Sa doit vachement être dur pour en créer un tuez moi
Dernière modification par mario76-110 (07/11/2012 01:06:01)
Si quelqu'un pouvai me créé mon mod ca serai gentil .
Je n'y connait rien même avec ce tuto .
Pitié quelqu'un peu me le créé ...
Je suis nul ...
Hors ligne
Bonjour à tous,
premièrement merci beaucoup pour ce tutoriel qui est très bien fait mais j'ai remarqué que je n'étais pas le seul à avoir des problèmes avec le code de l'auteur. N'ayant pas trouver de réponse dans les messages précédents ( du moins pas pour tout mes problèmes ) alors je fais un petit résumé ici de ce à quoi je suis confronté en espérant avoir des réponses.
Alors déjà je suis toujours au deuxième message de l'auteur.
1) Voici ce que j'ai mis ( avec mes solutions en commentaire, même si elles n'ont l'air de ne pas suffire ).
mod_Jump.java :
package net.minecraft.src;
//import net.minecraft.src.*;
public class mod_Jump extends BaseMod {
public static Item Ressort//;
public mod_Jump()
{
ModLoader.SetInGameHook(this, true, false); //J'explique plus tard...
Ressort = (new ItemRessort(113)).setIconCoord(0, 0);
addRecipes(); //On ajoute les recettes
}
private void addRecipes()
{
ModLoader.AddRecipe/*s*/(new ItemStack(Ressort, 1), new Object[] {"C", Character.valueOf('C'), Block.cobblestone});
}
public String Version()
{
return "1.4.6"; // J'ai mis ma version de MC.
}
}
ItemRessort.java :
package net.minecraft.src;
//import net.minecraft.src.*;
public class ItemRessort extends Item
{
public ItemRessort(int id)
{
super(id); //On initialise la classe Item dans ItemRessort avec comme paramètre l'ID de l'item...
}
}
Et donc en faisant çà j'obtient :
2/ Donc, je pensais que c'était du au manque de ';' alors j'ai essayé avec mais ...
... voilà :
3/ Du coup j'ai ajouté les "imports" et enlever le SetInGameHook et ...
4/ Enfin bref je peut continuer ainsi infiniment ... Alors s'il vous plaît si vous pouviez nous passer le code sans erreur alors je suis preneur, merci d'avance.
Hors ligne
très bon tuto des que j'aurais le temps je me ferais un petit mod
Hors ligne
Salut, pourriez-vous me dire pourquoi vous n'utilisez pas eclipse, qui vous faciliterez grandement la tâche.
Dernière modification par BluebiiBoulga (23/01/2013 00:32:50)
Hors ligne
Bonjour !
je suis déja le tutoriel depuis plusieurs mois.
j'aimerait créer un mod avec des classeurs pour ranger :
1- des livres éditées
2- du papier
avec une gui
code modifiée du coffre:
package net.minecraft.src;
import java.util.Iterator;
import java.util.Random;
public class Blockclasseur extends BlockContainer
{
private Random random = new Random();
protected BlockChest(int par1)
{
super(par1, Material.wood);
this.blockIndexInTexture = 26;
this.setCreativeTab(CreativeTabs.tabDecorations);
this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F);
}
/**
* Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two
* adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.
*/
public boolean isOpaqueCube()
{
return false;
}
/**
* If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
*/
public boolean renderAsNormalBlock()
{
return false;
}
/**
* The type of render function that is called for this block
*/
public int getRenderType()
{
return 22;
}
/**
* Updates the blocks bounds based on its current state. Args: world, x, y, z
*/
public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
{
if (par1IBlockAccess.getBlockId(par2, par3, par4 - 1) == this.blockID)
{
this.setBlockBounds(0.0625F, 0.0F, 0.0F, 0.9375F, 0.875F, 0.9375F);
}
else if (par1IBlockAccess.getBlockId(par2, par3, par4 + 1) == this.blockID)
{
this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 1.0F);
}
else if (par1IBlockAccess.getBlockId(par2 - 1, par3, par4) == this.blockID)
{
this.setBlockBounds(0.0F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F);
}
else if (par1IBlockAccess.getBlockId(par2 + 1, par3, par4) == this.blockID)
{
this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 1.0F, 0.875F, 0.9375F);
}
else
{
this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F);
}
}
/**
* Called whenever the block is added into the world. Args: world, x, y, z
*/
public void onBlockAdded(World par1World, int par2, int par3, int par4)
{
super.onBlockAdded(par1World, par2, par3, par4);
this.unifyAdjacentChests(par1World, par2, par3, par4);
int var5 = par1World.getBlockId(par2, par3, par4 - 1);
int var6 = par1World.getBlockId(par2, par3, par4 + 1);
int var7 = par1World.getBlockId(par2 - 1, par3, par4);
int var8 = par1World.getBlockId(par2 + 1, par3, par4);
if (var5 == this.blockID)
{
this.unifyAdjacentChests(par1World, par2, par3, par4 - 1);
}
if (var6 == this.blockID)
{
this.unifyAdjacentChests(par1World, par2, par3, par4 + 1);
}
if (var7 == this.blockID)
{
this.unifyAdjacentChests(par1World, par2 - 1, par3, par4);
}
if (var8 == this.blockID)
{
this.unifyAdjacentChests(par1World, par2 + 1, par3, par4);
}
}
/**
* Called when the block is placed in the world.
*/
public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLiving par5EntityLiving)
{
int var6 = par1World.getBlockId(par2, par3, par4 - 1);
int var7 = par1World.getBlockId(par2, par3, par4 + 1);
int var8 = par1World.getBlockId(par2 - 1, par3, par4);
int var9 = par1World.getBlockId(par2 + 1, par3, par4);
byte var10 = 0;
int var11 = MathHelper.floor_double((double)(par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
if (var11 == 0)
{
var10 = 2;
}
if (var11 == 1)
{
var10 = 5;
}
if (var11 == 2)
{
var10 = 3;
}
if (var11 == 3)
{
var10 = 4;
}
if (var6 != this.blockID && var7 != this.blockID && var8 != this.blockID && var9 != this.blockID)
{
par1World.setBlockMetadataWithNotify(par2, par3, par4, var10);
}
else
{
if ((var6 == this.blockID || var7 == this.blockID) && (var10 == 4 || var10 == 5))
{
if (var6 == this.blockID)
{
par1World.setBlockMetadataWithNotify(par2, par3, par4 - 1, var10);
}
else
{
par1World.setBlockMetadataWithNotify(par2, par3, par4 + 1, var10);
}
par1World.setBlockMetadataWithNotify(par2, par3, par4, var10);
}
if ((var8 == this.blockID || var9 == this.blockID) && (var10 == 2 || var10 == 3))
{
if (var8 == this.blockID)
{
par1World.setBlockMetadataWithNotify(par2 - 1, par3, par4, var10);
}
else
{
par1World.setBlockMetadataWithNotify(par2 + 1, par3, par4, var10);
}
par1World.setBlockMetadataWithNotify(par2, par3, par4, var10);
}
}
}
/**
* Turns the adjacent chests to a double chest.
*/
public void unifyAdjacentChests(World par1World, int par2, int par3, int par4)
{
if (!par1World.isRemote)
{
int var5 = par1World.getBlockId(par2, par3, par4 - 1);
int var6 = par1World.getBlockId(par2, par3, par4 + 1);
int var7 = par1World.getBlockId(par2 - 1, par3, par4);
int var8 = par1World.getBlockId(par2 + 1, par3, par4);
boolean var9 = true;
int var10;
int var11;
boolean var12;
byte var13;
int var14;
if (var5 != this.blockID && var6 != this.blockID)
{
if (var7 != this.blockID && var8 != this.blockID)
{
var13 = 3;
if (Block.opaqueCubeLookup[var5] && !Block.opaqueCubeLookup[var6])
{
var13 = 3;
}
if (Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var5])
{
var13 = 2;
}
if (Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var8])
{
var13 = 5;
}
if (Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var7])
{
var13 = 4;
}
}
else
{
var10 = par1World.getBlockId(var7 == this.blockID ? par2 - 1 : par2 + 1, par3, par4 - 1);
var11 = par1World.getBlockId(var7 == this.blockID ? par2 - 1 : par2 + 1, par3, par4 + 1);
var13 = 3;
var12 = true;
if (var7 == this.blockID)
{
var14 = par1World.getBlockMetadata(par2 - 1, par3, par4);
}
else
{
var14 = par1World.getBlockMetadata(par2 + 1, par3, par4);
}
if (var14 == 2)
{
var13 = 2;
}
if ((Block.opaqueCubeLookup[var5] || Block.opaqueCubeLookup[var10]) && !Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var11])
{
var13 = 3;
}
if ((Block.opaqueCubeLookup[var6] || Block.opaqueCubeLookup[var11]) && !Block.opaqueCubeLookup[var5] && !Block.opaqueCubeLookup[var10])
{
var13 = 2;
}
}
}
else
{
var10 = par1World.getBlockId(par2 - 1, par3, var5 == this.blockID ? par4 - 1 : par4 + 1);
var11 = par1World.getBlockId(par2 + 1, par3, var5 == this.blockID ? par4 - 1 : par4 + 1);
var13 = 5;
var12 = true;
if (var5 == this.blockID)
{
var14 = par1World.getBlockMetadata(par2, par3, par4 - 1);
}
else
{
var14 = par1World.getBlockMetadata(par2, par3, par4 + 1);
}
if (var14 == 4)
{
var13 = 4;
}
if ((Block.opaqueCubeLookup[var7] || Block.opaqueCubeLookup[var10]) && !Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var11])
{
var13 = 5;
}
if ((Block.opaqueCubeLookup[var8] || Block.opaqueCubeLookup[var11]) && !Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var10])
{
var13 = 4;
}
}
par1World.setBlockMetadataWithNotify(par2, par3, par4, var13);
}
}
/**
* Retrieves the block texture to use based on the display side. Args: iBlockAccess, x, y, z, side
*/
public int getBlockTexture(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)
{
return 4;
}
/**
* Returns the block texture based on the side being looked at. Args: side
*/
public int getBlockTextureFromSide(int par1)
{
return 4;
}
/**
* Checks to see if its valid to put this block at the specified coordinates. Args: world, x, y, z
*/
public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4)
{
int var5 = 0;
if (par1World.getBlockId(par2 - 1, par3, par4) == this.blockID)
{
++var5;
}
if (par1World.getBlockId(par2 + 1, par3, par4) == this.blockID)
{
++var5;
}
if (par1World.getBlockId(par2, par3, par4 - 1) == this.blockID)
{
++var5;
}
if (par1World.getBlockId(par2, par3, par4 + 1) == this.blockID)
{
++var5;
}
return var5 > 1 ? false : (this.isThereANeighborChest(par1World, par2 - 1, par3, par4) ? false : (this.isThereANeighborChest(par1World, par2 + 1, par3, par4) ? false : (this.isThereANeighborChest(par1World, par2, par3, par4 - 1) ? false : !this.isThereANeighborChest(par1World, par2, par3, par4 + 1))));
}
/**
* Checks the neighbor blocks to see if there is a chest there. Args: world, x, y, z
*/
private boolean isThereANeighborChest(World par1World, int par2, int par3, int par4)
{
return par1World.getBlockId(par2, par3, par4) != this.blockID ? false : (par1World.getBlockId(par2 - 1, par3, par4) == this.blockID ? true : (par1World.getBlockId(par2 + 1, par3, par4) == this.blockID ? true : (par1World.getBlockId(par2, par3, par4 - 1) == this.blockID ? true : par1World.getBlockId(par2, par3, par4 + 1) == this.blockID)));
}
/**
* Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are
* their own) Args: x, y, z, neighbor blockID
*/
public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5)
{
super.onNeighborBlockChange(par1World, par2, par3, par4, par5);
TileEntityChest var6 = (TileEntityChest)par1World.getBlockTileEntity(par2, par3, par4);
if (var6 != null)
{
var6.updateContainingBlockInfo();
}
}
/**
* ejects contained items into the world, and notifies neighbours of an update, as appropriate
*/
public void breakBlock(World par1World, int par2, int par3, int par4, int par5, int par6)
{
TileEntityChest var7 = (TileEntityChest)par1World.getBlockTileEntity(par2, par3, par4);
if (var7 != null)
{
for (int var8 = 0; var8 < var7.getSizeInventory(); ++var8)
{
ItemStack var9 = var7.getStackInSlot(var8);
if (var9 != null)
{
float var10 = this.random.nextFloat() * 0.8F + 0.1F;
float var11 = this.random.nextFloat() * 0.8F + 0.1F;
EntityItem var14;
for (float var12 = this.random.nextFloat() * 0.8F + 0.1F; var9.stackSize > 0; par1World.spawnEntityInWorld(var14))
{
int var13 = this.random.nextInt(21) + 10;
if (var13 > var9.stackSize)
{
var13 = var9.stackSize;
}
var9.stackSize -= var13;
var14 = new EntityItem(par1World, (double)((float)par2 + var10), (double)((float)par3 + var11), (double)((float)par4 + var12), new ItemStack(var9.itemID, var13, var9.getItemDamage()));
float var15 = 0.05F;
var14.motionX = (double)((float)this.random.nextGaussian() * var15);
var14.motionY = (double)((float)this.random.nextGaussian() * var15 + 0.2F);
var14.motionZ = (double)((float)this.random.nextGaussian() * var15);
if (var9.hasTagCompound())
{
var14.getEntityItem().setTagCompound((NBTTagCompound)var9.getTagCompound().copy());
}
}
}
}
}
super.breakBlock(par1World, par2, par3, par4, par5, par6);
}
/**
* Called upon block activation (right click on the block.)
*/
public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
{
Object var10 = (TileEntityChest)par1World.getBlockTileEntity(par2, par3, par4);
if (var10 == null)
{
return true;
}
else if (par1World.isBlockNormalCube(par2, par3 + 1, par4))
{
return true;
}
else if (isOcelotBlockingChest(par1World, par2, par3, par4))
{
return true;
}
else if (par1World.getBlockId(par2 - 1, par3, par4) == this.blockID && (par1World.isBlockNormalCube(par2 - 1, par3 + 1, par4) || isOcelotBlockingChest(par1World, par2 - 1, par3, par4)))
{
return true;
}
else if (par1World.getBlockId(par2 + 1, par3, par4) == this.blockID && (par1World.isBlockNormalCube(par2 + 1, par3 + 1, par4) || isOcelotBlockingChest(par1World, par2 + 1, par3, par4)))
{
return true;
}
else if (par1World.getBlockId(par2, par3, par4 - 1) == this.blockID && (par1World.isBlockNormalCube(par2, par3 + 1, par4 - 1) || isOcelotBlockingChest(par1World, par2, par3, par4 - 1)))
{
return true;
}
else if (par1World.getBlockId(par2, par3, par4 + 1) == this.blockID && (par1World.isBlockNormalCube(par2, par3 + 1, par4 + 1) || isOcelotBlockingChest(par1World, par2, par3, par4 + 1)))
{
return true;
}
else
{
if (par1World.getBlockId(par2 - 1, par3, par4) == this.blockID)
{
var10 = new InventoryLargeChest("container.chestDouble", (TileEntityChest)par1World.getBlockTileEntity(par2 - 1, par3, par4), (IInventory)var10);
}
if (par1World.getBlockId(par2 + 1, par3, par4) == this.blockID)
{
var10 = new InventoryLargeChest("container.chestDouble", (IInventory)var10, (TileEntityChest)par1World.getBlockTileEntity(par2 + 1, par3, par4));
}
if (par1World.getBlockId(par2, par3, par4 - 1) == this.blockID)
{
var10 = new InventoryLargeChest("container.chestDouble", (TileEntityChest)par1World.getBlockTileEntity(par2, par3, par4 - 1), (IInventory)var10);
}
if (par1World.getBlockId(par2, par3, par4 + 1) == this.blockID)
{
var10 = new InventoryLargeChest("container.chestDouble", (IInventory)var10, (TileEntityChest)par1World.getBlockTileEntity(par2, par3, par4 + 1));
}
if (par1World.isRemote)
{
return true;
}
else
{
par5EntityPlayer.displayGUIclasseur((IInventory)var10);
return true;
}
}
}
/**
* Returns a new instance of a block's tile entity class. Called on placing the block.
*/
public TileEntity createNewTileEntity(World par1World)
{
return new TileEntityclasseur();
}
/**
* Looks for a sitting ocelot within certain bounds. Such an ocelot is considered to be blocking access to the
* chest.
*/
private static boolean isOcelotBlockingChest(World par0World, int par1, int par2, int par3)
{
Iterator var4 = par0World.getEntitiesWithinAABB(EntityOcelot.class, AxisAlignedBB.getAABBPool().addOrModifyAABBInPool((double)par1, (double)(par2 + 1), (double)par3, (double)(par1 + 1), (double)(par2 + 2), (double)(par3 + 1))).iterator();
EntityOcelot var6;
do
{
if (!var4.hasNext())
{
return false;
}
EntityOcelot var5 = (EntityOcelot)var4.next();
var6 = (EntityOcelot)var5;
}
while (!var6.isSitting());
return true;
}
}
help please ?
ps:
et pour répondre à BluebiiBoulga, j'utilise éclipse
et je ne souhaite pas qu'il y ait de double classeur (côte à côte)
Dernière modification par mario28865 (02/02/2013 20:14:55)
Hors ligne
j'ai vérifier, il y à un autre fichier.java: ContainerChest.java pour le coffre
code:
package net.minecraft.src;
public class ContainerChest extends Container
{
private IInventory lowerChestInventory;
private int numRows;
public ContainerChest(IInventory par1IInventory, IInventory par2IInventory)
{
this.lowerChestInventory = par2IInventory;
this.numRows = par2IInventory.getSizeInventory() / 9;
par2IInventory.openChest();
int var3 = (this.numRows - 4) * 18;
int var4;
int var5;
for (var4 = 0; var4 < this.numRows; ++var4)
{
for (var5 = 0; var5 < 9; ++var5)
{
this.addSlotToContainer(new Slot(par2IInventory, var5 + var4 * 9, 8 + var5 * 18, 18 + var4 * 18));
}
}
for (var4 = 0; var4 < 3; ++var4)
{
for (var5 = 0; var5 < 9; ++var5)
{
this.addSlotToContainer(new Slot(par1IInventory, var5 + var4 * 9 + 9, 8 + var5 * 18, 103 + var4 * 18 + var3));
}
}
for (var4 = 0; var4 < 9; ++var4)
{
this.addSlotToContainer(new Slot(par1IInventory, var4, 8 + var4 * 18, 161 + var3));
}
}
public boolean canInteractWith(EntityPlayer par1EntityPlayer)
{
return this.lowerChestInventory.isUseableByPlayer(par1EntityPlayer);
}
/**
* Called when a player shift-clicks on a slot. You must override this or you will crash when someone does that.
*/
public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2)
{
ItemStack var3 = null;
Slot var4 = (Slot)this.inventorySlots.get(par2);
if (var4 != null && var4.getHasStack())
{
ItemStack var5 = var4.getStack();
var3 = var5.copy();
if (par2 < this.numRows * 9)
{
if (!this.mergeItemStack(var5, this.numRows * 9, this.inventorySlots.size(), true))
{
return null;
}
}
else if (!this.mergeItemStack(var5, 0, this.numRows * 9, false))
{
return null;
}
if (var5.stackSize == 0)
{
var4.putStack((ItemStack)null);
}
else
{
var4.onSlotChanged();
}
}
return var3;
}
/**
* Callback for when the crafting gui is closed.
*/
public void onCraftGuiClosed(EntityPlayer par1EntityPlayer)
{
super.onCraftGuiClosed(par1EntityPlayer);
this.lowerChestInventory.closeChest();
}
/**
* Return this chest container's lower chest inventory.
*/
public IInventory getLowerChestInventory()
{
return this.lowerChestInventory;
}
}
(code non modifiée)
Hors ligne
excuser moi est ce que quelqu'un pourrait me créer le cgb mods pour 1.5.1 car je n ai pas compris comment faire sil vous plait merci d avance pour moi trouver des et je sais c'est triche mais j en ai besoin
Hors ligne
Bonjour à vous ! :D
Je me présente, chartreux77.
J'ai un mod que je suis désireux de mettre en 1.5.2 ! Ce mod est improved first person view ! Le problème c'est que je n'ai absolument aucune idée de comment m'y prendre pour le convertir à cette version, alors s'il vous plait...Aidez-moi ! :)
Hors ligne