Modulars Blocks
-
Salut à tous ,
Je reviens vers vous avec une toute nouvelle idée ! (Attention , ce post s’adresse a ceux qui ont un peu d’imagination , parce que sinon , je ne pourrai pas vous expliquer)Je vais prendre un exemple simple , celui d’un four .
Quel est le principe d’un four ? De chauffer un objet
Comment produire de la chaleur ? Avec de l’énergie électrique (par exemple)
Comment produire de la chaleur avec de l’énergie électrique ?
C’est Là que cela devient intéressant !
Mon idée est d’exploiter les propriétés d’un matériau afin de construire des objets utiles .
La réponse à cette question serait donc : La chaleur peut être produite lorsque qu’un courant traverse un conducteur , dépandant de l’épaisseur dudit conducteur et de l’intensité dudit courant
Ainsi , si de l’énergie électrique traverse , par exemple , un fil de cuivre , il se dégage de la chaleur de ce fil
Voilà , je viens d’utiliser une propriété du cuivreAutre exemple , la propulsion d’un projectile a l’aide d’une explosion :
Lorsqu’un morceau de silex se frotte a un morceau de fer , il se produit une étincelle
Si ladite étincelle atteint de la gunpowder , il se produit une explosion
Si l’explosion atteint un morceau de fer mobile dans un long tuyau , l’explosion se concentre derrière ce morceau , le propulsant à très grande vitesse . Ce système simple permettrait de fabriquer un fusil .Imaginez que l’on attribue des propriétés a tout un set de matériaux , on obtiendrait de merveilleuses machines
Alors , plus concrètement , ce mod consisterait à placer toutes sortes de matériaux possédant des propriétés dans un cube de 161616 slots (la texture d’un bloc classique si l’on considère qu’il est plein)
Ce cube possédant aussi la possibilité d’inception , ce qui permettrai de répéter plusieurs schémas fonctionnelsOu j’en suis actuellement et ce q’il faut que je fasse :
Faire un tableau de valeurs et d’attributs des materiaux
Faire une class à materiaux
Creer un GUI ou l’on peut faire “bouger” un bloc en 3D afin de poser les miniblocs
Gerer le rendu du Bloc Spécial
Creer les Miniblocks et leur renduSi quelqu’un est intéressé pour nous aider à le coder gagoi (développeur occasionel) et moi , ce projet pourrait venir au monde et ravir des centaines de joueurs !
Surtout , j’accepte n’importe quelle idée qui pourrait m’aider à le coder !Nwmqpa
P.S. : Je débute juste en java , je viens a peine d’attaquer la programmation événementielle ^^
-
Très bonne idée ! Cependant, ce doit être extrêmement compliqué à coder (Je suis aussi débutant avec l’API Forge)
-
Merci beaucoup , mais le plus dur a coder sera surement le classe mere materiau et le cube de mini-bloc
-
Il faudrait faire une sorte d’API pour faciliter tout ça
-
Euh , effectivement , ce serait mieux , mauis on ne sait pas le faire
-
Petit up pour vous dire que j’essaie d’avancer , mais que si quelqun est disposé à m’aider , j’aprécierai son aide , en particulier sur l’update des TileEntity
Voici mon probleme : Grace au tutoriel de robin , j’ai crée une TilEntity capable de changer les valeur avec un clique droit , et en fouillant un peu , j’ai réussi a faire “poser” un bloc de feu , seulement , mon souci est le suivant : Quand la valeur est suppérieure a 12 , un bloc de feu apparait , si je modifie la valeur du bloc , le feu apparait ou disparais , mais je voudrais que quoiqu’il arrive le feu sois présent si valeur > 12 , le véritable probleme , c’est que lorsque j’éteins le feu manuellement , il ne réapparait pas , pourtant , la valeur est toujours supérieure a 12 . Y’aurait t’il un moyen d’update le block tous les ticks ou moins sans cliquer dessus ? -
Déjà avant de commencer ton projet. Parceque j’ai l’impression que t’es déjà en train de coder alors que c’est pas par là qu’on commence.
Déjà défini toi tous les objets, propriétés, méthodes et évènements que tu as besoin et fait un diagramme sur papier.
Ensuite regarde ce qui réuni tous les objets entre eux, construit des interface
…
ça sert à rien de se lancer dans un grand projet si c’est pour faire du quick and dirty qui marche qu’à moitié et qui n’est pas extensible à souhait.Exemple. J’ai 10 matériaux.
interface materiau
conductible
chaleuremise
calculchaleuremise retourne chaleuremise
coefficientderesistance
destructible
methode soumisaucourant
noyé
…Tu as déjà des pistes pour faire une interface
-
@‘nwmqpa’:
Petit up pour vous dire que j’essaie d’avancer , mais que si quelqun est disposé à m’aider , j’aprécierai son aide , en particulier sur l’update des TileEntity
Voici mon probleme : Grace au tutoriel de robin , j’ai crée une TilEntity capable de changer les valeur avec un clique droit , et en fouillant un peu , j’ai réussi a faire “poser” un bloc de feu , seulement , mon souci est le suivant : Quand la valeur est suppérieure a 12 , un bloc de feu apparait , si je modifie la valeur du bloc , le feu apparait ou disparais , mais je voudrais que quoiqu’il arrive le feu sois présent si valeur > 12 , le véritable probleme , c’est que lorsque j’éteins le feu manuellement , il ne réapparait pas , pourtant , la valeur est toujours supérieure a 12 . Y’aurait t’il un moyen d’update le block tous les ticks ou moins sans cliquer dessus ?Tu devrais pouvoir gérer dans la TileEntity normalement
Sinon XcentY, pas forcément besoin d’une interface si 'y a qu’une implémentation.
Et noter ses idées c’est bien, mais c’est pas nécessaire de faire une liste complète. Beaucoup d’idées viendront lors des tests -
Alors , merci de ces deux retours !
@YcentY : Pour les idées , les poser sur papier , ce serait effectivement bien , mais je voulais connaitre le fonctionnement d’une TileEntity , mais t’inquiete pas , je commence deja a noter les propriétés de différents métaux . Pour l’interface , j’y avais deja pensé , en faisant plusieurs par groupe d’attributs , mais quelqun m’a conseillé de le mettre dans une classe mere , et de tout regrouper avec des comment pour plus de lisibilité , a savoir que je vais commencer par les metaux , car rien qu’avec ca , je vais avoir du boulot !@jglrxavpok : Euh… d’accord , mais OU et COMMENT . J’ai fouillé énormément avant de poster ici !
Ensuite , pour le moment je fonctionne avec des idées simples , tres extensibles , mais difficile a mettre en place , je pense que je vais commencer par des attributs simples , puis mettre des fonctionnalitées originales , et ensuite , impleter des attributs plus complexeEncore une fois , si vous avez d’autres idées , proposez les moi !
-
updateEntity fera ce que tu voudras
-
Petite exception …. :
et.minecraft.util.ReportedException: Ticking block entity at net.minecraft.world.World.updateEntities(World.java:2154) ~[World.class:?] at net.minecraft.client.Minecraft.runTick(Minecraft.java:2096) ~[Minecraft.class:?] at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1038) ~[Minecraft.class:?] at net.minecraft.client.Minecraft.run(Minecraft.java:961) [Minecraft.class:?] at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0] at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) [launchwrapper-1.9.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.9.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0] at GradleStart.bounce(GradleStart.java:107) [start/:?] at GradleStart.startClient(GradleStart.java:100) [start/:?] at GradleStart.main(GradleStart.java:55) [start/:?] Caused by: java.lang.NullPointerException at net.modularblocks.common.material.TileEntityMaterial.isHeating(TileEntityMaterial.java:77) ~[TileEntityMaterial.class:?] at net.modularblocks.common.material.TileEntityMaterial.updateEntity(TileEntityMaterial.java:80) ~[TileEntityMaterial.class:?] at net.minecraft.world.World.updateEntities(World.java:2139) ~[World.class:?] … 17 more ---- Minecraft Crash Report ---- // Why is it breaking :( Time: 05/09/14 14:05 Description: Ticking block entity java.lang.NullPointerException: Ticking block entity at net.modularblocks.common.material.TileEntityMaterial.isHeating(TileEntityMaterial.java:77) at net.modularblocks.common.material.TileEntityMaterial.updateEntity(TileEntityMaterial.java:80) at net.minecraft.world.World.updateEntities(World.java:2139) at net.minecraft.client.Minecraft.runTick(Minecraft.java:2096) at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1038) at net.minecraft.client.Minecraft.run(Minecraft.java:961) at net.minecraft.client.main.Main.main(Main.java:164) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at GradleStart.bounce(GradleStart.java:107) at GradleStart.startClient(GradleStart.java:100) at GradleStart.main(GradleStart.java:55)
Voici mon code :
public void isHeating() { World world = null; if(this.getElectricActualVoltage() > this.getCapacityVoltage()){ world.setBlock(xCoord, yCoord+1, zCoord, Blocks.fire); this.updateEntity(); } else world.setBlock(xCoord, yCoord+1, zCoord, Blocks.air); } public void updateEntity() { this.isHeating(); } }
Si quelqun a une solution …
-
World world = null;
…
Si l’objet world est null, c’est normal que ça cause un NPE …
utilise this.worldObj si tu as besoin de l’instance du monde. -
Aprs avoir fait ca j’ai encore une erreur …
C’était bien World world = this.worldObj; qu’i fallait faire ? -
Non, directement this.worldObj.setBlock(xCoord, yCoord+1, zCoord, Blocks.fire)
-
Alors , plus d’erreur , juste , la “surchauffe” ne se produit plus à 13.0 , voici mon code :
public void isHeating() { if(this.getElectricActualVoltage() > this.getCapacityVoltage()){ this.worldObj.setBlock(xCoord, yCoord+1, zCoord, Blocks.fire); } else this.worldObj.setBlock(xCoord, yCoord+1, zCoord, Blocks.air); } public void updateEntity() { this.isHeating(); }
Dans ma class Block , j’appelle bien la methode ths.updateEntity();
-
Vérifie les valeurs de this.getElectricActualVoltage() et this.getCapacityVoltage()
-
Voila :
player.addChatMessage(new ChatComponentTranslation("Le courant est de : " + tileEntityMaterial.getElectricActualVoltage())); tileEntityMaterial.setElectricVoltage(12.0); tileEntityMaterial.updateEntity();
La valeur est bien vrai , il m’affiche bien les bonnes valeurs lorsque je clique
-
Bon , j’ai résolu on probleme , il suffisait simplement de mettre le contenu de isHeating() dans updateEntity() au lieu d’appeler isHeating dans updateEntity
-
Est ce qu’un admin voudrait bien déplacer ce sujet dans la zone “En devellopement” ?
Merci -
Bonjour , j’ai deux nouveaux problemes :
- Mon render spécial de Table ne s’affiche pas , pouvez exactement me dir ou je dois placer le fichier par rapport au ressources ?
package net.modularblocks.proxy; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import net.modularblocks.client.Table; import net.modularblocks.common.microblock.TileEntityTable; import org.lwjgl.opengl.GL11; public class TileEntityTableSpecialRender extends TileEntitySpecialRenderer implements IInventoryRenderer { private final Table model = new Table(); public static final ResourceLocation textureLocation = new ResourceLocation("modularblocks" , "textures/blocks/modelTable.png"); public TileEntityTableSpecialRender() { this.func_147497_a(TileEntityRendererDispatcher.instance); } @Override public void renderInventory(double x, double y, double z) { this.renderTileEntityTableAt(null, x, y, z, 0.0F); } @Override public void renderTileEntityAt(TileEntity te, double x, double y, double z, float tick) { this.renderTileEntityTableAt((TileEntityTable)te, x, y, z, tick); } public void renderTileEntityTableAt(TileEntityTable te, double x, double y, double z, float tick) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5F, y + 1.5F, z + 0.5F); this.bindTexture(textureLocation); GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); this.model.render(0.0625F); GL11.glPopMatrix(); } }
Et 2 eme probleeme : je ne trouve pas de tuto récent sur les GUI , du coup , j’ai du me rabattre sur une JFrame
Sachant que la JFrame n’est qu’une interface qui sert à construire quelque chose à partir d’objets listés dans le code , y’a t’il
des problemes qui peuvent survenir ? (cette fenetre va me servir pour la conception des blocs “spéciaux”)