Projet de " mod Lantien "



  • Bien le bonjour,
    étant passé par la case présentations je m'attelle a la présentations de mon projet en terme de modding.
    donc, pour un server a but " rp " sur  le thème de stargate-atlantis, nous avons besoin de quelques ajouts simple pour commencer

    - déployeur de porte automatique
            " description  littéraire "
    si le signal de redstone s'allume
    remplacer le type de block renseigné (dans le gui) par de l'air et ce sur la hauteur renseigné (aussi sur le gui)

    si le signal de redstone s’éteint 
    si c'est de l'air
    remplacer l'air par le type de block renseigné (dans le gui) et ce sur la hauteur renseigné (aussi renseigné sur le gui)
    si ce n'est pas de l'air
    ne rien faire.

    - détecteur de joueur avec rayon configurable
    comme son nom l'indique un bête block de détection de joueur configurable (via gui aussi)

    voici donc mon humble projet de mod.
    il faut savoir que j'ai déjà réussi par le passé ( 1.2.5) a faire les deployeur porte
    mais sans gui, ça regardai juste 4 block au dessus de lui et si c’était de l'air il le remplace par un block custom, et vice versa.
    je pousse donc le défi un peu plus loin cette fois !!!

    a[size=x-largevancement actuel (30/11/2015)]
    base du deployeur de porte vitrée sans gui / fini

    classe BlockDeployeurVitre

    package aaa.modding.modlantien;
    
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import java.util.Random;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.BlockContainer;
    import net.minecraft.block.material.Material;
    import net.minecraft.init.Blocks;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    
    public class BlockDeployeurVitre extends Block
    {
       private final boolean power;
       private static final String __OBFID = "CL_00000297";
    
       public BlockDeployeurVitre(boolean p_i45421_1_)
       {
           super(Material.rock);
           this.power = p_i45421_1_;
    
       }
       /**
        * 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 Block
        */
       public void breakBlock(World world, int x, int y, int z, Block p_149749_5_, int p_149749_6_)
       {
        if (!world.isRemote)
           {
            generationoff(world, x, y, z);
                System.out.println("block detruit");
               }
       }
       public void onBlockAdded(World world, int x, int y, int z)
       {
    
           if (!world.isRemote)
           {
            if (!world.isBlockIndirectlyGettingPowered(x, y, z) && world.getBlock(x, y + 2, z) == Blocks.air)
               {
            generationon(world, x, y, z);
                System.out.println("posé si eteint");
               }
            else if (world.isBlockIndirectlyGettingPowered(x, y, z) && world.getBlock(x, y + 2, z) == Blocks.glass_pane)
            {
            generationoff(world, x, y, z);
                System.out.println("posé si allumé");
               }
           }
       }
       public void onNeighborBlockChange(World world, int x, int y, int z, Block p_149695_5_)
       {
           if (!world.isRemote)
           {
               if (!world.isBlockIndirectlyGettingPowered(x, y, z) && world.getBlock(x, y + 2, z) == Blocks.air)
               {
                generationon(world, x, y, z);
                System.out.println("si eteint");
               }
               else if (world.isBlockIndirectlyGettingPowered(x, y, z) && world.getBlock(x, y + 2, z) == Blocks.glass_pane)
                {
                generationoff(world, x, y, z);
                System.out.println("si allumé");
                }
           }
       }
       /**
        * Ticks the block if it's been scheduled
        */
       public void updateTick(World world, int x, int y, int z, Random p_149674_5_)
       {
           if (!world.isRemote && !world.isBlockIndirectlyGettingPowered(x, y, z))
           {
    
               System.out.println("updatetick");
           }
       }
    
       public void generationon(World world, int x, int y, int z)
       {
        if (world.getBlock(x, y + 2, z) == Blocks.air)
        {
        world.setBlock(x, y + 2, z, Blocks.glass_pane);
        }
        if (world.getBlock(x, y + 3, z) == Blocks.air)
        {
        world.setBlock(x, y + 3, z, Blocks.glass_pane);
        }
        if (world.getBlock(x, y + 4, z) == Blocks.air)
        {
        world.setBlock(x, y + 4, z, Blocks.glass_pane);
        }
    
       }
       public void generationoff(World world, int x, int y, int z)
       {
        if (world.getBlock(x, y + 2, z) == Blocks.glass_pane)
        {
        world.setBlock(x, y + 2, z, Blocks.air);
        }
        if (world.getBlock(x, y + 3, z) == Blocks.glass_pane)
        {
        world.setBlock(x, y + 3, z, Blocks.air);
        }
        if (world.getBlock(x, y + 4, z) == Blocks.glass_pane)
        {
        world.setBlock(x, y + 4, z, Blocks.air);
        }
    
       }
    }
    
    

    et voila ce que ingame ca donne :

    old
    :::

    j'ai deja commencé les deployeur sans gui pour l'instant afin de (me remettre dans le bain déjà…) créer la base du block, capter la redstone que faire si redstone allumer etc etc ^^
    voila ou j'en suis :

    examplemod
    (je n'ai meme pas pris la peine de changer le package de l'exemple de forge^^)

    package com.example.examplemod;
    
    import com.example.examplemod.proxy.CommonProxy;
    
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.SidedProxy;
    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.registry.GameRegistry;
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.creativetab.CreativeTabs;
    
    @Mod(modid = ExampleMod.MODID, version = ExampleMod.VERSION)
    public class ExampleMod
    {
       public static final String MODID = "modlantia";
       public static final String VERSION = "1.0";
    
       @SidedProxy(clientSide = "com.example.examplemod.proxy.ClientProxy", serverSide = "com.example.examplemod.proxy.CommonProxy")
    public static CommonProxy proxy;
       public static Block blockdeployeurvitre;
       public static Block blockdeployeurporte;
    
       @EventHandler
    public void preInit(FMLPreInitializationEvent event)
    {
    blockdeployeurvitre = new BlockDeployeurVitre(Material.rock).setBlockName("deployeur1").setBlockTextureName(MODID + ":deployeur_vitre").setCreativeTab(CreativeTabs.tabBlock);
    blockdeployeurporte = new BlockDeployeurPorte(Material.rock).setBlockName("deployeur2").setBlockTextureName(MODID + ":deployeur_porte").setCreativeTab(CreativeTabs.tabBlock);
    
    GameRegistry.registerBlock(blockdeployeurvitre, "deployeur_vitre");
    GameRegistry.registerBlock(blockdeployeurporte, "deployeur_porte");
    
    }
    
    @EventHandler
    public void init(FMLInitializationEvent event)
    {
    proxy.registerRender();
    }
    
    @EventHandler
    public void postInit(FMLPostInitializationEvent event)
    {
    
    }
    }
    
    

    BlockDeployeurVitre

    package com.example.examplemod;
    
    import java.util.Random;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.init.Blocks;
    import net.minecraft.world.World;
    
    public class BlockDeployeurVitre extends Block
    {
    
    protected BlockDeployeurVitre(Material material)
    {
    super(material);
    
    }
    public boolean isOpaqueCube()
       {
           return false;
       }
    
    public void onNeighborBlockChange(World world, int x, int y, int z, Block p_149695_5_)
       {
           if (!world.isRemote)
           {
            if (world.getBlock(x, y + 2, z) == Blocks.glass_pane)
            {
            world.setBlock(x, y + 2, z, Blocks.air);
            }
            if (world.getBlock(x, y + 3, z) == Blocks.glass_pane)
            {
            world.setBlock(x, y + 3, z, Blocks.air);
            }
            if (world.getBlock(x, y + 4, z) == Blocks.glass_pane)
            {
            world.setBlock(x, y + 4, z, Blocks.air);
            }
            if (world.getBlock(x, y + 5, z) == Blocks.glass_pane)
            {
            world.setBlock(x, y + 5, z, Blocks.air);
            }
               else if (!this.canBlockGrass && world.isBlockIndirectlyGettingPowered(x, y, z))
               {
                if (world.getBlock(x, y + 2, z) == Blocks.air)
                {
                world.setBlock(x, y + 2, z, Blocks.glass_pane);
                }
                if (world.getBlock(x, y + 3, z) == Blocks.air)
                {
                world.setBlock(x, y + 3, z, Blocks.glass_pane);
                }
                if (world.getBlock(x, y + 4, z) == Blocks.air)
                {
                world.setBlock(x, y + 4, z, Blocks.glass_pane);
                }
                if (world.getBlock(x, y + 5, z) == Blocks.air)
                {
                world.setBlock(x, y + 5, z, Blocks.glass_pane);
               }
           }
       }
    }
    }
    
    

    tout ça fonctionne, 
    enfin faut le dire vite..
    si je met un levier ou un block de redstone juste a coté du block ça n'active pas le block en revanche avec le fil de redstone ça fonctionne.
    si vous souhaitez aider ^^  
    sinon, je trouverai !=)
    de plus sur ce que j'avais fait en 1.2.5 j'avais recuperer un bout de code de la torche redstone, 
    ce qui faisait que le fil de redstone se connectais au deployeur,

    exemple :
    si je faisais une longue ligne de deployeur et que je l'alimentais avec juste un long fil de redstone parallèle aux deployeurs ça se connectais et les activais

    je vais viser ça pour la premières ébauche de mes deployeur sans gui.
    une foi fait je ferais un autre indépendant avec le gui de réglages

    voila, j'ouvre éclipse !
    bonne soirée !

    :::


Log in to reply