Vergeten!


@EventHandler
public  void init( FMLInitializationEvent event ) {
LanguageRegistry.addName(tomatoBlock, "Peter's Tomato");
GameRegistry.registerBlock(tomatoBlock, "PetersTomato");
LanguageRegistry.addName(pizza, "Peter's Pizza");
GameRegistry.registerWorldGenerator(tomataWorldGenerator);

 // Recipe : milk,wheat,tomato,porkRaw => pizza
 GameRegistry.addShapelessRecipe(
   new ItemStack(pizza, 1),
   new ItemStack(Item.bucketMilk),
   new ItemStack(Item.wheat),
   new ItemStack(tomatoBlock),
   new ItemStack(Item.porkRaw)
 );

 EntityRegistry.registerModEntity(EntityPizza.class, "Pizza", 1, this, 64, 10, true);
     RenderingRegistry.registerEntityRenderingHandler(EntityPizza.class, new RenderThrowingPizza(pizza));
}


RenderingThrowingPizza.java

package wsdec13.mymod.items;

import net.minecraft.client.renderer.entity.RenderSnowball;
import net.minecraft.item.Item;
import cpw.mods.fml.relauncher.SideOnly;
import cpw.mods.fml.relauncher.Side;


@SideOnly(Side.CLIENT)
public class RenderThrowingPizza extends RenderSnowball {

public RenderThrowingPizza(Item par1Item) {
super(par1Item);
}

public RenderThrowingPizza(Item item, int par2) {
super(item, par2);
}

}

Item - v3


In EntityPizza.java

    protected void onImpact(MovingObjectPosition movingObjectPosition) {
      if (movingObjectPosition.entityHit != null) {
        float damage = 0;
        if(movingObjectPosition.entityHit instanceof EntityZombie) {
          damage = 5;
          movingObjectPosition.entityHit.motionY=3;
        } else  if (movingObjectPosition.entityHit instanceof EntitySkeleton) {
          damage = 20;
          movingObjectPosition.entityHit.motionY=3;
        }
        movingObjectPosition.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), damage);
    }
    for (int i = 0; i <6; ++i) {
      //double red = 202D / 255D;
      //double green = 112D / 255D;
      //double blue = 15D / 255D;
      //this.worldObj.spawnParticle("reddust", this.posX, this.posY, this.posZ, red, green, blue);
      PizzaParticleEffects.spawnParticle("pizzaPiece",this.posX, this.posY, this.posZ, 0, -0.1, 0);
    }
    if (!this.worldObj.isRemote) {
     this.setDead();
    }
}


PizzaParticleEffects.java

package wsdec13.peter;
import net.minecraft.client.Minecraft;
import net.minecraft.client.particle.EntityBreakingFX;
import net.minecraft.client.particle.EntityFX;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.item.Item;
import net.minecraft.world.World;
public class PizzaParticleEffects {
  private static Minecraft mc = Minecraft.getMinecraft();
  private static World theWorld = mc.theWorld;
  private static TextureManager renderEngine = mc.renderEngine;
  public static EntityFX spawnParticle(String particleName, double par2, double par4, double par6, double par8, double par10, double par12) {
    if (mc != null && mc.renderViewEntity != null && mc.effectRenderer != null) {
      int var14 = mc.gameSettings.particleSetting;
      if (var14 == 1 && theWorld.rand.nextInt(3) == 0) {
        var14 = 2;
      }
      double var15 = mc.renderViewEntity.posX - par2;
      double var17 = mc.renderViewEntity.posY - par4;
      double var19 = mc.renderViewEntity.posZ - par6;
      EntityFX var21 = null;
      double var22 = 16.0D;
      if (var15 * var15 + var17 * var17 + var19 * var19 > var22 * var22) {
        return null;
      } else if (var14 > 1) {
        return null;
      } else {
        if (particleName.equals("pizzaPiece")) {
          var21 = new EntityBreakingFX(theWorld, par2, par4, par6, PetersMod.pizza);
        }
        mc.effectRenderer.addEffect(var21);
        return var21;
      }
    }
    return null;
  }
}

Item - v2

package wsdec13.peter.items;

import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.passive.EntitySheep;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntitySnowball;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import wsdec13.peter.items.EntityPizza;


public class PizzaItem extends Item {


public PizzaItem(int id) {
super(id);
setCreativeTab(CreativeTabs.tabMisc);
setUnlocalizedName("PetersPizza");
}


@Override
  @SideOnly(Side.CLIENT)
  public void registerIcons(IconRegister iconRegister) {
itemIcon = iconRegister.registerIcon("wsdec13pcmod" + ":" + "pizza");
}


  @Override
  public boolean hitEntity(ItemStack itemstack, EntityLivingBase entity1, EntityLivingBase entity2) {
if(entity1 instanceof EntityZombie) {
entity1.motionY = 3;
((EntityPlayer) entity2).addChatMessage("Danger...flying zombies!");
} else {
((EntityPlayer) entity2).addChatMessage("Je bent een klojo als je geen pizza lust!! ");
}
return false;
}

 public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
    {
        if (!par3EntityPlayer.capabilities.isCreativeMode)
        {
            --par1ItemStack.stackSize;
        }
        par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F));
        if (!par2World.isRemote)
        {
            par2World.spawnEntityInWorld(new EntityPizza(par2World, par3EntityPlayer));
        }
        return par1ItemStack;
 }




}

wsdec13.peter.items.EntityPizza.java

package wsdec13.peter.items;

import cpw.mods.fml.common.registry.IThrowableEntity;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.monster.EntityBlaze;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.projectile.EntityThrowable;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;

public class EntityPizza extends EntityThrowable {
    public EntityPizza(World world) {
        super(world);
    }

    public EntityPizza(World world, EntityLivingBase livingBase)  {
        super(world, livingBase);
    }

    public EntityPizza(World world, double x, double y, double z) {
        super(world, x, y, z);
    }

    protected void onImpact(MovingObjectPosition movingObjectPosition) {
   
        if (movingObjectPosition.entityHit != null) {
            float damage = 0;

            if(movingObjectPosition.entityHit instanceof EntityZombie) {
                damage = 5;
                movingObjectPosition.entityHit.motionY=3;
            } else  if (movingObjectPosition.entityHit instanceof EntityBlaze) {
                damage = 3;
            }

            movingObjectPosition.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), damage);
        }

        for (int i = 0; i < 8; ++i) {
           double red = 202D / 255D;
           double green = 112D / 255D;
           double blue = 15D / 255D;
           this.worldObj.spawnParticle("reddust", this.posX, this.posY, this.posZ, red, green, blue);
        }

        if (!this.worldObj.isRemote) {
            this.setDead();
        }
    }

}



Item - v1

package wsdec13.peter.items;

import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.passive.EntitySheep;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntitySnowball;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import wsdec13.peter.items.EntityPizza;

public class PizzaItem extends Item {

public PizzaItem(int id) {
super(id);
setCreativeTab(CreativeTabs.tabMisc);
setUnlocalizedName("PetersPizza");
}

@Override
  @SideOnly(Side.CLIENT)
  public void registerIcons(IconRegister iconRegister) {
itemIcon = iconRegister.registerIcon("wsdec13pcmod" + ":" + "pizza");
}

  @Override
  public boolean hitEntity(ItemStack itemstack, EntityLivingBase entity1, EntityLivingBase entity2) {
if(entity1 instanceof EntityZombie) {
entity1.motionY = 3;
((EntityPlayer) entity2).addChatMessage("Danger...flying zombies!");
} else {
((EntityPlayer) entity2).addChatMessage("Je bent een klojo als je geen pizza lust!! ");
}
return false;
}

}

In Mod class

public class PetersMod {
private static IWorldGenerator tomataWorldGenerator = new TomatoWorldGenerator(213);
public static PizzaItem pizza;
public static TomatoBlock tomatoBlock;
@EventHandler
public  void preInit( FMLPreInitializationEvent event ) {
pizza = new PizzaItem(16013);
  tomatoBlock = new TomatoBlock(213);
}
@EventHandler
public  void init( FMLInitializationEvent event ) {
LanguageRegistry.addName(pizza, "Peter's Pizza");
  LanguageRegistry.addName(tomatoBlock, "Peter's Tomato");
GameRegistry.registerBlock(tomatoBlock, "PetersTomato");
GameRegistry.registerWorldGenerator(tomataWorldGenerator);

// Recipe : milk,wheat,tomato,porkRaw => pizza
GameRegistry.addShapelessRecipe(
new ItemStack(pizza, 1),
new ItemStack(Item.bucketMilk),
new ItemStack(Item.wheat),
new ItemStack(tomatoBlock),
new ItemStack(Item.porkRaw)
); 


}
@EventHandler
public  void postInit( FMLPostInitializationEvent event ) {
}

}




Ook asset voor pizza in  assets.wsdec13pcmod.textures.items - pizza.png

Block

package wsdec13.peter.blocks;

import net.minecraft.block.Block;
import net.minecraft.block.BlockFlower;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;

public class TomatoBlock extends BlockFlower {

public TomatoBlock(int id) {
super(id, Material.plants);
this.setUnlocalizedName("PetersTomato");
this.setCreativeTab(CreativeTabs.tabBlock);
this.setHardness(0.0F);
this.setStepSound(soundGrassFootstep);
this.setUnlocalizedName("peterstomato");
this.setTextureName("peterstomato");
}

@Override public void registerIcons(IconRegister iconRegister)
    {
        this.blockIcon = iconRegister.registerIcon("wsdec13pcmod" + ":" + "peterstomato");
    }

}

World generator

package wsdec13.peter;

import java.util.Random;


import cpw.mods.fml.common.IWorldGenerator;

import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenFlowers;
import net.minecraft.world.gen.feature.WorldGenMinable;

public class TomatoWorldGenerator implements IWorldGenerator {


private int tomatoId;


public TomatoWorldGenerator(int tomatoId) {
this.tomatoId = tomatoId;
}

@Override

public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
switch(world.provider.dimensionId){
        case -1:
        generateNether(world, random, chunkX * 16, chunkZ * 16);
        break;
        case 0:
        generateSurface(world, random, chunkX * 16, chunkZ * 16);
        break;
        case 1:
        generateEnd(world, random, chunkX * 16, chunkZ * 16);
        break;
        }
}

private void generateEnd(World world, Random rand, int chunkX, int chunkZ) {

}

private void generateSurface(World world, Random rand, int chunkX, int chunkZ) {

        for(int k = 0; k < 50; k++){
        int firstBlockXCoord = chunkX + rand.nextInt(16) + 8;
        int firstBlockYCoord = rand.nextInt(64);
        int firstBlockZCoord = chunkZ + rand.nextInt(16) + 8;
            (new WorldGenFlowers(tomatoId)).generate(world, rand, firstBlockXCoord, firstBlockYCoord, firstBlockZCoord);

        }

}

private void generateNether(World world, Random rand, int chunkX, int chunkZ) {

}

}


Tomato item

Geen texture

  • Vertrek van de vorige lege mod
  • Nieuw package wsdec13.naam.items
  • Nieuwe class  wsdec13.naam.items.TomatoItem

package wsdec13.peter.items;

import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;


public class TomatoItem extends Item {

  public TomatoItem(int id) {
    super(id);
    setCreativeTab(CreativeTabs.tabMisc);
    setUnlocalizedName("PetersTomato");
  }
}

Met texture

  • Maak folder : dir\wsdec13\forge\mcp\src\minecraft\assets\wsdec13pcmod\textures\items
  • Pas TomatoItem class aan

package wsdec13.peter.items;

import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;


public class TomatoItem extends Item {

  public TomatoItem(int id) {
    super(id);
    setCreativeTab(CreativeTabs.tabMisc);
    setUnlocalizedName("PetersTomato");
  }
  @Override
  @SideOnly(Side.CLIENT)
  public void registerIcons(IconRegister iconRegister) {
    itemIcon = iconRegister.registerIcon("wsdec13pcmod" + ":" + "peterstomato");
  }

}


Met behavior

@Override
public boolean hitEntity(ItemStack itemstack,EntityLivingBase entity1, EntityLivingBase entity2) {

  if(entity1 instanceof EntitySheep) {
    entity1.motionY = 3;
  } else {
    ((EntityPlayer) entity2).addChatMessage("Waar mep jij nu op, dumbo :)");
  }
  return false;
}


    Lege mod


    Lege mod

    1. Installeer force 1.6.4 src (unzip + install.cmd)
    2. Start Eclipse
    3. Verander workspace naar C:\Users\naam\wsdec13\forge\mcp\eclipse
    4. Nieuw package : wsdec13.mod.naam\
    5. Nieuwe class  :   wsdec13.mod.naam.NaamMod

    package wsdec13.peter;

    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.network.NetworkMod;

    @Mod( 
      modid = "WSDEC13PCMOD", 
      name = "Workshop December 13, Peter's Mod", 
      version = "Eerste versie" )

    @NetworkMod(
      channels = {"WSDEC13PCMOD"}, 
      clientSideRequired = true, 
      serverSideRequired = true )

      public class PetersMod {


        @EventHandler

        public static void preInit( FMLPreInitializationEvent event {
        }

        @EventHandler
        public static void init( FMLInitializationEvent event ) {
        }

       @EventHandler
       public static void postInit(FMLPostInitializationEvent event){
       }

    }


    Merk op
    • @Mod : id, name, version
    • @NetworkMod : channels and "required"
    • @EventHandler : preInit, init en postInit

    Java

    ______________________________________________________

    Dag minecraft



    public class voorbeeld1 {
        public static void main(String[] args) {
            System.out.println("Hello minecraft");
       }
    }
    1. Maak een file, voorbeeld1.java
    2. Voeg de code toe en bewaar
    3. command prompt / terminal
    4. Compileren (vertalen) ==> javac voorbeeld1.java
    5. Uitvoeren ==> java voorbeeld1


    Merk op
    • hoofdletters, kleine letters
    • gebruik van ;
    • verder
      • Alles steekt in een "class"
      • Een class heeft methods 
      • main is een "method"

      • System.out... is een statement - die moeten eindigen met ;

    ______________________________________________________

    Dag wie


    public class voorbeeld2 {
      public static void main(String[] args) {
        System.out.println("Hello " + args[0]);
      } 
    }

    Merk op
    • String[] args - type + naam
    • String concatenatie via +

    ______________________________________________________

    Variabelen


    public class voorbeeld3 {
      public static void main(String[] args) {
       int getal1 = 124;
       int getal2 = 44438;   
                      int som = getal1 + getal2; 
            System.out.println(getal1 + "+" + getal2 + "=" + som  );
      }
    }

    Merk op

    • Variabelen hebben een naam
    • Variabelen hebben een type : (int, String, boolean, float)


    ______________________________________________________

    Condities


    public class voorbeeld4 {

      public static void main(String[] args) {

        int getal = 1240;
        
        if ( getal == 124 ) {
           System.out.println("Honderdvierentwintig");
        } else {
           System.out.println("Geen honderdvierentwintig");
        }
      }

    }

    Merk op
    • Gebruik == om te vergelijken (getallen)


    ______________________________________________________

    Loops (lussen)

    public class voorbeeld5 {

      public static void main(String[] args) {

        int aantalKeren = 100;
        
        for(int teller=1;teller <= aantalKeren;teller++) {
           System.out.println("Teller is : " + teller);
        }
      }

    }

    gelijkaardig

    public class Voorbeeld6 {

      public static void main(String[] args) {

        int teller = 100;
        while (teller >= 1  ) {
           System.out.println("Teller is : " + teller);
           teller--;
        }
      }

    }



    Merk op
    • variabele++ => verhoogt waarde van de varariabele met 1 (zelfde als variable = variable + 1)
    • variabele-- => vermindert waarde van de varariabele met 1 (zelfde als variable = variable - 1)

    ______________________________________________________

    Classes

    rekenmachine.java

    public class rekenmachine {

       int getal1;
       int getal2;

       public rekenmachine(int g1, int g2) {
          getal1 = g1;
          getal2 = g2;
       }

       public int plus() {
         return getal1 + getal2;
       }

       public int maal() {
         return getal1 * getal2;
       }

      public static int plus2(int waarde1, int waarde2) {
        return waarde1 + waarde2;
      }


    }


    voorbeeld7.java

    public class voorbeeld7 {

      public static void main(String[] args) {

        int getal1 = 124;
        int getal2 = 44438;

        Rekenmachine teller = new rekenmachine(getal1,getal2); 

        System.out.println("som="  + teller.plus() );
        System.out.println("maal="  + teller.maal() );

        int som2 = rekenmachine.plus2(100,200);
        System.out.println("som2="  + som2 );
      }
    }

    Merk op

    • new naam van class -> nieuw 'object' met als 'type' de class
    • instance method tov static method
      • object.method  : instance method
      • class.method : static/class method

    ______________________________________________________

    Packages


    - Maak "package" - stijn.minecraft.items
    - Maak class - stijn.minecraft.items.Tomato


    package stijn.minecraft.items;
    public class Tomato {
      String color;
     
      public Tomato() {
      }
                   public String getColor() {
      return "rood";
      }
    }

    - Maak "package"  - stijn.minecraft.mod
    - Maak class - stijn.minecraft.mod.Voorbeeld8

    package stijn.minecraft.mod;
    import 
    stijn.minecraft.items.Tomato;
    public class voorbeed8 {
      public static void main(String[] args) {
        Tomato mijnTomaat = new Tomato();
        System.out.println("Kleur is " + mijnTomaat.getColor());
      }
    }
    Merk op

    • package
    • import 

    ______________________________________________________

    Subclasses

    - Maak class wsdec13.items.Kind


    package wsdec13.mc.items;

    public class Kind {

    private String naam;

    public String play () {
    return "niets";
    }

    public String getNaam() {
    return naam;
    }

    public void setNaam(String naam) {
    this.naam = naam;
    }
    }


    - Maak class wsdec13.items.Minecrafter


    package wsdec13.mc.items;

    public class Minecrafter extends Kind {

    @Override
    public String play() {
    return "Minecraft!";
    }

    }


    - Maak class wsdec13.items.Loller


    package wsdec13.mc.items;
    public class Loller extends Kind {
    @Override
    public String play() {
    return "LOL!";
    }
    }



    - Maak class wsdec13.mod.Voorbeeld9

    package wsdec13.mc.mod;
    import wsdec13.mc.items.Kind;
    import wsdec13.mc.items.Loller;
    import wsdec13.mc.items.Minecrafter;
    public class Voorbeeld9 {
      public static void main(String[] args) {
            Kind k1 = new Kind();
            k1.setNaam("Besje");
             
            Loller k2 = new Loller();
            k2.setNaam("Stijn");

        Minecrafter k3 = new Minecrafter();
        k3.setNaam("Merlijn");

            System.out.println(k1.getNaam() + " speelt " + k1.play());
        System.out.println(k2.getNaam() + " speelt " + k2.play());
        System.out.println(k3.getNaam() + " speelt " + k3.play());
        }
    }



    Agenda

    26 decenber: 9u-12u :

    1. installeren van de nodige spullen (java, eclipse, minecraft forge )
    2. een eerste eenvoudig java programma
    3. een beetje minecraften met de deelnemers

    27 decenber: 9u-12u

    1. Beetje meer Java
    2. Een mod maken met een eigen blok
    3. Als er tijd is, minecraften met de deelnemers

    30 december: 9u-13u

    1. Nog wat Java
    2. Mod maken met : 
    - Tomato item 
    - Graan item
    - Kaas item
    - Pizza item  
    3. Mod uitbreiden met
    - Recept om pizza te maken in oven op basis van Tomaat, kaas en graan

    31 december: 9u-12u
    1. Nog wat Java
    2. Mod afmaken en kijken of we die op een server kunnen installeren

    3 Multiplayer minecraften

    Installatie

    Wireless


    CoLa5G / veedee22

    Download en installeer Java SDK

    1. Van usb stick of download
    2. Installeer

    Download en installeer Eclipse

    1. Van usb stick of download  Mac of Windows (32bit of 64bit )
    2. Installeer: unzip/uncompress en kopieer (mac -> /Applications  ; Win7 c:\program files\)

    Download en installeer minecraft forge code pack

    Informatie op http://www.minecraftforge.net/wiki/Installation/Source

    Web page lijkt niet helemaal correct. Readme in download is beter


    1. Download src via http://files.minecraftforge.net/ - Kies recommended src link