Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[TUTORIAL] Minecraft; tworzenie modyfikacji!


Rekomendowane odpowiedzi

Opublikowano

I. DODAWANIE NOWEGO BLOKU

 

1. Stwórz nowy plik nazwany BlockExample.java w ścieżce /src/

 

2. Podstawowa struktura tego pliku wygląda mniej więcej tak:

 

package net.minecraft.src;

import java.util.Random;

public class BlockExample extends Block
{
   public BlockExample(int i, int j)
   {
       super(i, j, Material.rock);
   }

   public int idDropped(int i, Random random)
   {
       return 0;
   }
}

 

3. Musisz teraz dodać nowy blok do gry. Aby to zrobić, otwórz Block.java

 

4. Powinieneś zobaczyć całą masę deklaracji zmiennych, dodaj nową:

 

public static final Block example;

 

5. Pod deklaracjami znajdują się inicjalizacje tych zmiennych, zainicjalizuj swój blok:

 

example = (new BlockExample(92, 1)).setHardness(1.5F).setResistance(10F).setStepSound(soundStoneFootstep);

 

Jak wspomniano wcześniej, ten przykład tworzy nowy "kamienny" blok. new BlockExample(92, 1) tworzy nowy blok, pierwsza cyfra to ID bloku (które musi być niepowtarzalne!); druga cyfra to grafika bloku, w tym przypadku taka sama jak grafika Stone (kamienia). setHardness(1.5F)*, wyznacza, ile zajmuje zniszczenie bloku. setResistance(10F)* wyznacza odporność bloku na eksplozje. setStepSound(soundStoneFootstep)* wyznacza dźwięk, który usłyszymy chodząc po danym bloku.

 

Gratuluję - stworzyłeś właśnie nowy blok do gry Minecraft! Aby użyć tego bloku musisz go wygenerować, możesz to zrobić poprzez SPC (Single Player Commands) wpisując "/give 92"!

 

* - wszystkie parametry zostały skopiowane z ustawień Stone (kamienia - ID: 1). możesz je dowolnie modyfikować!

 


 

II. DODAWANIE TZW. "CRAFTING RECIPE"

 

1. Otwórz plik CraftingManager.java

 

2. Powinieneś zauważyć konstruktor klas, a w nim "crafting recipes" dodawane funkcją addRecipe

 

3. Przejdź na dół listy "crafting recipes" i dodaj nową:

 

addRecipe(new ItemStack(Block.example, 1), new Object[] {"##", "##", Character.valueOf('#'), Block.dirt});

 

Kod ten spowoduje, że ułożenie 4 dirt'ów (ziemia, ID: 2) w kształt kwadratu wytworzy nowy blok. new ItemStack(Block.example, 1) - określa, jaki przedmiot zostanie wytworzony (oraz określa jego ilość). new Object[] {"##", "##", Character.valueOf('#'), Block.dirt} - określa w jaki sposób jest on tworzony.

 

Zamieszczony w pkt. 3 przykład pozwoli na wytworzenie bloku z części "TWORZENIE NOWEGO BLOKU" (BlockExample, ID: 92) w sposób przedstawiony poniżej:

 

soil.pngsoil.png

soil.pngsoil.png

 


 

III. DODAWANIE NOWEGO PRZEDMIOTU

 

1. Stwórz nowy plik nazwany ItemExample.java w ścieżce /src/

 

2. Podstawowa struktura tego pliku wygląda mniej więcej tak:

 

package net.minecraft.src;

public class ItemExample extends Item
{
   public ItemFood(int i)
   {
       super(i);
       maxStackSize = 64;
   }

   public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)
   {
   }
}

 

3. Musisz teraz dodać nowy przedmiot do gry. Aby to zrobić, otwórz Item.java

 

4. Powinieneś zobaczyć całą masę zmiennych wystąpienia, dodaj nową:

 

public static Item example = (new ItemExample(95)).setIconIndex(42);

 

Stworzy to nowy przedmiot którego ID to 256 + 95 i który używa ikony 42. W związku z tym powinien on wyglądać jak znak. Obecnie nie ma on właściwości i nie możesz go wytworzyć. Lecz po kompliacji i uruchomieniu modyfikacji dodana ona nowy przedmiot do Minecraft'a.

 


 

IV. DODAWANIE NOWEGO NPC

 

W tej części wyjaśnię, jak dodać do gry nowego NPC. Ostrzegam, że jest to dużo bardziej skomplikowane niż np. dodawanie nowego bloku. W tym przykładzie pokażę, jak stworzyć nowego NPC którym będzie Mad Cow (szalona krowa). Początkowo będzie to mob przyjazny, ale pokażę także, jak uczynić go agresywnym.

 

Aby zacząć musisz stworzyć klasę "logiczną", logika dla rozszerzonych elementów gry jest obsługiwana przez klasy Entity. Po prostu dodaj cokolwiek do klas etnity, aby otrzymać dowolne zachowanie gry. Stwórzmy więc klasę etnity nazwaną EtnityExample.java aby stworzyć nowego, przyjaznego NPC.

 

package net.minecraft.src;

public class EntityExample extends EntityAnimals
{
   public EntityExample(World world)
   {
       super(world);
       texture = "/mob/example.png";
       setSize(0.9F, 1.3F);
   }

   public void writeEntityToNBT(NBTTagCompound nbttagcompound)
   {
       super.writeEntityToNBT(nbttagcompound);
   }

   public void readEntityFromNBT(NBTTagCompound nbttagcompound)
   {
       super.readEntityFromNBT(nbttagcompound);
   }

   protected String getLivingSound()
   {
       return "mob.example";
   }

   protected String getHurtSound()
   {
       return "mob.example";
   }

   protected String getDeathSound()
   {
       return "mob.example";
   }

   protected float getSoundVolume()
   {
       return 0.4F;
   }

   protected int getDropItemId()
   {
       return 0;
   }
}

 

Powyższy kod powinien być dość zrozumiały, ale szybko wytłumaczę szczegóły.

 

getSoundVolume() zwraca liczbę 0 - 1, która jest "głośnością" dźwięku wydawanego przez stworzenie. Może być przedstawiona w procentach, poprzez pomnożenie jej przez 100.

getLivingSound, getHurtSound, getDeathSound zwraca lokalizację "ścieżki dźwiękowej" która gra odtwarza, gdy dzieją się te rzeczy: getLivingSound - dźwięki wydawane "ot tak" raz na jakiś czas; getHurtSound - dźwięk wydawany podczas zranienia moba; getDeathSound - dźwięk wydawany podczas śmierci moba. Dźwięki te mogą w ścieżce /resources/. Akutat w tym przykładzie skopiuję dźwięki innego moba, ale nic nie stoi na przeszkodzie, aby dodać własne!

 

Następnie upewnimy się, czy posiadamy wszystkie zasoby potrzebne do stworzenia moba - musisz umieścić dźwięki w /jars/resources/newsound/mob/example.ogg oraz tekstury w /temp/minecraft/mob/example.png

 

Możesz zdobyć teksturę Mad Cow tutaj:

 

ErVJX.png

 

Dźwięk jest poprostu skopiowanym dźwiękiem krowy z nazwą zmienioną na example.ogg

 

To znaczy, że klasa etnity została już ukończona!

 

Teraz musisz stworzyć klasę Modelu. Klasa modelu dostarcza grze szczegóły potrzebne do wygenerowania postaci oraz "etnity" poprzez Minecraft. Szczegóły te są zależne od Twojej tekstury - example.png - ja użyję tych samych detali co w ModelCow (modelu krowy).

 

package net.minecraft.src;

public class ModelExample extends ModelQuadraped
{

   public ModelExample()
   {
       super(12, 0.0F);
       head = new ModelRenderer(0, 0);
       head.addBox(-4F, -4F, -6F, 8, 8, 6, 0.0F);
       head.setPosition(0.0F, 4F, -8F);
       horn1 = new ModelRenderer(22, 0);
       horn1.addBox(-4F, -5F, -4F, 1, 3, 1, 0.0F);
       horn1.setPosition(0.0F, 3F, -7F);
       horn2 = new ModelRenderer(22, 0);
       horn2.addBox(4F, -5F, -4F, 1, 3, 1, 0.0F);
       horn2.setPosition(0.0F, 3F, -7F);
       udders = new ModelRenderer(52, 0);
       udders.addBox(-2F, -3F, 0.0F, 4, 6, 2, 0.0F);
       udders.setPosition(0.0F, 14F, 6F);
       udders.rotateAngleX = 1.570796F;
       body = new ModelRenderer(18, 4);
       body.addBox(-6F, -10F, -7F, 12, 18, 10, 0.0F);
       body.setPosition(0.0F, 5F, 2.0F);
       leg1.offsetX--;
       leg2.offsetX++;
       leg1.offsetZ += 0.0F;
       leg2.offsetZ += 0.0F;
       leg3.offsetX--;
       leg4.offsetX++;
       leg3.offsetZ--;
       leg4.offsetZ--;
   }

   public void render(float f, float f1, float f2, float f3, float f4, float f5)
   {
       super.render(f, f1, f2, f3, f4, f5);
       horn1.render(f5);
       horn2.render(f5);
       udders.render(f5);
   }

   public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5)
   {
       super.setRotationAngles(f, f1, f2, f3, f4, f5);
       horn1.rotateAngleY = head.rotateAngleY;
       horn1.rotateAngleX = head.rotateAngleX;
       horn2.rotateAngleY = head.rotateAngleY;
       horn2.rotateAngleX = head.rotateAngleX;
   }

   ModelRenderer udders;
   ModelRenderer horn1;
   ModelRenderer horn2;
}

 

Jak widzimy powyżej, ustawiamy pozycję oraz orientację nowego moba. Aby stworzyć zupełnie nowego NPC z nową orientacją i wymiarami powinieneś się dokładniej zapoznać z klasą modelu.

 

Po stworzeniu klasy Modelu musimy stworzyć klasę Renderowania. Klasa ta określa sposób łączenia klasy Modelu z klasą Etnity. Dlatego tworzymy nową plik o nazwie RenderExample.java

 

package net.minecraft.src;

public class RenderExample extends RenderLiving
{
   public RenderExample(ModelBase modelbase, float f)
   {
       super(modelbase, f);
   }

   public void doRenderLiving(EntityLiving entityliving, double d, double d1, double d2, 
           float f, float f1)
   {
       super.doRenderLiving((EntityExample)entityliving, d, d1, d2, f, f1);
   }

   public void doRender(Entity entity, double d, double d1, double d2, 
           float f, float f1)
   {
       doRenderLiving((EntityExample)entity, d, d1, d2, f, f1);
   }
}

 

Stworzyliśmy już wszystkie wymagane klasy, wypadałoby teraz więc "powiadomić" grę o naszym nowym mobie. Aby to zrobić dodaj kawałek kodu do pliku RenderManager.java w konstruktorze na dole listy.

 

entityRenderMap.put(EntityExample.class, new RenderExample(new ModelExample(),0.7F));

 

A także trzeba go dodać do listy generatorów biomu, można to zrobić w klasie MobSpawnerBase. W konstruktorze dodaj klasę Etnity do tablicy biomeCreature.

 

EntityExample.class

 

Kiedy to zrobisz, będziesz mógł już wejść do gry i cieszyć się nowym NPC.

 

Jeżeli chcesz stworzyć agresywnego Moba, możesz to osiągnąć poprzez edycję klasy Etnity zmieniając fragment kodu z extends EtnityAnimals na extends EtnityMobs. Będziesz musiał również zedytować listę MobSpawnerBase jeżeli chcesz, aby twój NPC pojawiał się raczej w nocy niż w ciągu dnia.

 

Rezultat:

 

 

TojNq.png

 

 


 

Poradniki & MadCow Texture by simo_415 z Minecraftforum.net!

 

Polskie tłumaczenie: Gaw3l dla MPCforum.pl

UWAGA: Zabrania się kopiowania bez zgody autora.

Opublikowano

Może tym ze to plagiat :D ?

Jeżeli pomogłem to proszę Cię o kliknięcie w stronę www.pajacyk.pl . Ciebie to nic nie kosztuję - innym pomaga .

Mam gdzieś plusy minusy 5 itp ;-)

 

Do 50 roku życia, bo jak Ci creeper wybuchnie podczas rąbania drzewa to zawału można dostać. 

Opublikowano
Identyczne tłumaczenie spotykałem na innych stronach. Jak to wyjaśnisz?

 

Nie będę niczego wyjaśniać, bo ten poradnik wczoraj sam tłumaczyłem.

Możliwości są takie: ktoś go skopiował bez podpisania (jeżeli tak jest, podaj link); istnieje podobne tłumaczenie.

 

Możesz wytłumaczyć gdzie jest folder src?

 

Musisz najpierw zdekompliować clienta Minecraft, napiszę jak to zrobić później. ;)

Opublikowano

@UP

Czekam cały czas 2h :P

Jeżeli masz jakieś pytania, pisz śmiało pw :)

Opublikowano

02-12-2011, 16:37

 

 

W tym poradniku opiszę jak stworzyć swój własny NPC. Muszę ostrzec każdego kto próbuje - to jednak jest znacznie bardziej skomplikowane niż dodanie nowego bloku do gry. Tak więc w tym przykładzie mam zamiar stworzyć nowy NPC, który wzorowany jest na krowie - szalone krowy. Ten tłum będzie początkowo przyjazny, ale pokażę również jak zrobić żeby był agresywny.

 

Na początek trzeba utworzyć "logikę" klasy. Logika dla rozszerzonych elementów gry jest rozpatrywana w ramach klas Entity. Stworzymy klasę o nazwie EntityExample.java dla nowego, przyjaznego NPC.

 

Kod:

package net.minecraft.src;

 

public class EntityExample extends EntityAnimals

{

public EntityExample(World world)

{

super(world);

texture = "/mob/example.png";

setSize(0.9F, 1.3F);

}

 

public void writeEntityToNBT(NBTTagCompound nbttagcompound)

{

super.writeEntityToNBT(nbttagcompound);

}

 

public void readEntityFromNBT(NBTTagCompound nbttagcompound)

{

super.readEntityFromNBT(nbttagcompound);

}

 

protected String getLivingSound()

{

return "mob.example";

}

 

protected String getHurtSound()

{

return "mob.example";

}

 

protected String getDeathSound()

{

return "mob.example";

}

 

protected float getSoundVolume()

{

return 0.4F;

}

 

protected int getDropItemId()

{

return 0;

}

}

 

Powyższy kod powinien być dość zrozumiały, ale szybko przejdę do szczegółów:

 

getSoundVolume() - zwraca liczbę od 0-1, która jest dźwiękiem NPC.

getLivingSound() - określa dźwięk gdy nasz NPC po prostu sobie żyje gdzieś tam w naszym świecie

getHurtSound() - określa dźwięk gdy nasz NPC otrzymuje obrażenia

getDeathSound() - określa dźwięk gdy nasz NPC zostanie zabity

getDropItemId() - określa jaki przedmiot ma "wylatywać" z NPC po jego śmierci

 

Tak więc następnym krokiem jest upewnić się, że wszystkie dźwięki i tekstury, które są określone w klasie znajdują się w odpowiednim folderze.

 

Dźwięki trzeba dodać do:

/jars/resources/newsound/mob/example.ogg

 

Tekstury trzeba dodać do:

/temp/minecraft/mob/example.png

 

Następnie należy utworzyć klasę modelu.

 

Kod:

package net.minecraft.src;

 

public class ModelExample extends ModelQuadraped

{

 

public ModelExample()

{

super(12, 0.0F);

head = new ModelRenderer(0, 0);

head.addBox(-4F, -4F, -6F, 8, 8, 6, 0.0F);

head.setPosition(0.0F, 4F, -8F);

horn1 = new ModelRenderer(22, 0);

horn1.addBox(-4F, -5F, -4F, 1, 3, 1, 0.0F);

horn1.setPosition(0.0F, 3F, -7F);

horn2 = new ModelRenderer(22, 0);

horn2.addBox(4F, -5F, -4F, 1, 3, 1, 0.0F);

horn2.setPosition(0.0F, 3F, -7F);

udders = new ModelRenderer(52, 0);

udders.addBox(-2F, -3F, 0.0F, 4, 6, 2, 0.0F);

udders.setPosition(0.0F, 14F, 6F);

udders.rotateAngleX = 1.570796F;

body = new ModelRenderer(18, 4);

body.addBox(-6F, -10F, -7F, 12, 18, 10, 0.0F);

body.setPosition(0.0F, 5F, 2.0F);

leg1.offsetX--;

leg2.offsetX++;

leg1.offsetZ += 0.0F;

leg2.offsetZ += 0.0F;

leg3.offsetX--;

leg4.offsetX++;

leg3.offsetZ--;

leg4.offsetZ--;

}

 

public void render(float f, float f1, float f2, float f3, float f4, float f5)

{

super.render(f, f1, f2, f3, f4, f5);

horn1.render(f5);

horn2.render(f5);

udders.render(f5);

}

 

public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5)

{

super.setRotationAngles(f, f1, f2, f3, f4, f5);

horn1.rotateAngleY = head.rotateAngleY;

horn1.rotateAngleX = head.rotateAngleX;

horn2.rotateAngleY = head.rotateAngleY;

horn2.rotateAngleX = head.rotateAngleX;

}

 

ModelRenderer udders;

ModelRenderer horn1;

ModelRenderer horn2;

}

 

Więc jak widać powyżej podajemy pozycję i orientację nowego NPC. Aby utworzyć zupełnie nowe stworzenie z nowymi pozycjami i orientacjami trzeba by nieco poeksperymentować z tymi numerami w konstruktorze ;)

 

Po utworzeniu klasy modelu musimy utworzyć klasę renderowania. Będziemy tworzyć nową klasę o nazwie RenderExample.java.

 

Kod:

package net.minecraft.src;

 

public class RenderExample extends RenderLiving

{

public RenderExample(ModelBase modelbase, float f)

{

super(modelbase, f);

}

 

public void doRenderLiving(EntityLiving entityliving, double d, double d1, double d2,

float f, float f1)

{

super.doRenderLiving((EntityExample)entityliving, d, d1, d2, f, f1);

}

 

public void doRender(Entity entity, double d, double d1, double d2,

float f, float f1)

{

doRenderLiving((EntityExample)entity, d, d1, d2, f, f1);

}

}

 

Mamy wszystkie gotowe klasy dla naszego NPC, więc teraz Minecraft musi się o nich "dowiedzieć" (tak znowu) żeby mogły być spawnowane. Na dole listy w pliku RenderManager.java dodaj:

 

Kod:

entityRenderMap.put(EntityExample.class, new RenderExample(new ModelExample(),0.7F));

 

Trzeba jeszcze dodać je do Biome List Generator'a. Odbywa się to w klasie MobSpawnerBase. W konstruktorze trzeba dodać jednostkę do tablicy biomeCreature.

 

Kod:

EntityExample.class

 

Po zakończeniu wszystkich czynności można teraz skompilować i uruchomić nowe NPC. No i oczywiście się nim cieszyć ;)

 

Jeśli chcesz tworzyć agresywne NPC to osiągnięsz to poprzez zmianę klasy Entity na EntityMobs zamiast EntityAnimals. Potrzebna będzie również zmiena listy MobSpawnerBase jeśli chcesz, aby spawnowały się w nocy a nie w dzień.

 

 

Przyznaj, wzorowałeś się na tym cytacie. :) (nie do końca kopiuj-wklej, sorki)

mpc.png

Opublikowano

Może i ładnie opisane, ale nie dokładnie ... może napisałbyś właśnie jak " zdekompilowac" minecrafta, bo nie każdy umie ? Wrzuć ss'y a wszystko będzie ładnie, pięknie, przejrzyście .

quebocoelho

Opublikowano

Poradnik fajny , tylko szkoda że ja nie ogarniam nawet w małym proc. Javy :D Oczywiście + się należy... Ja bym to podpiął :P

 F7FwxF8.png

Opublikowano

Poradnik dobry, ale nie twój tak więc nie daje + ani -.

A co do dekompilacji.. to jest zaledwie 5 minut więc nie wiem czemu robisz tutorial od 13 godziny. Albo poprostu nie umiesz i ten tutorial zrobiłeś przetłumaczyłeś na siłe.

 

@edit

przeczytałem troche i tak:

 

Tworzenie nowego blocku jest do dupy bo już się tak nie robi,

 

Tworzenie crafting receipe jest słabo wytłumaczone, nie napisałeś co oznaczają '#',

 

Poradnik nr. III to już w ogóle... do śmietnika się nadaje. Nie napisałeś o nim kompletnie nic, tylko "wklej tu to aby było tamto" i jak taki nowicjusz się w tym połapie jak nawet nie wie co to za funkcje

 

Poradnik nr. IV ujdzie.

 

@down

Wyobraź sobie, że nie wszyscy siedzą całą niedzielę w domu przed komputerem.

Pięciu minut ci szkoda ?

Opublikowano

@Manderigon_Back

 

Z ręką na sercu, nie wiedziałem, że istnieje już tutorial nt. dodawania nowego NPC.

Jeżeli by tak było, to zapewne nie marnowałbym czasu i nie pisał czegoś, co już zostało już napisane.

Co do tego, że tekst jest podobny - efekt dość dosłownego tłumaczenia. ;)

 

---

 

Dekompliacja Minecraft:

 

1. Pobierz MCP (Minecraft Coder Pack); WWW

2. Wypakuj MCP w dowolne miejsce, do folderu "jars" wklej foldery "resources" i "bin" z %appData/.minecraft

3. Jeżeli nie masz zainstalowanego Java Development Kit, pobierz go z tej strony: WWW

4. Uruchom "decomplier.bat" - po zakończeniu dekompliacji w folderze "src" znajdziesz pliki, których użyjesz do modyfikowania gry

 

@edit.

 

(...) to jest zaledwie 5 minut więc nie wiem czemu robisz tutorial od 13 godziny (...)

 

Wyobraź sobie, że nie wszyscy siedzą całą niedzielę w domu przed komputerem. o.O

  • 1 miesiąc temu...
Opublikowano

ehhh z tego co przeczytałem to wyniosłem tyle

 

pierwszy poradnik jest nie aktualny

nie wiem gdzie wpisać te napisy

nie wiem gdzie są te pliki java

nie wiem po co to jest ten dekompliktor

nie wimem co to jest ścierzka src

nic nie jest wytłumaczone

Opublikowano

uP@ Nie wiesz co to jest słownik ortograficzny

Podstaw javy się naucz

Topic@ ciekawy , + leci.

Z czego sie uczyłeś javy?

Przyjmuje zlecenia dot. web masterki.

while(!$success){
....try();
}

 

  • 5 miesięcy temu...
Opublikowano

JA WAM COŚ POWIEM

Mam mało lat i nie umiem tego bloku zrobić

Może wiecie jak zrobić program do robienia tego?

Albo macie taki?

Proszę o link do ściągnięcia.

Opublikowano

@up

 

Jak bloku nie umiesz zrobić to jak chcesz program napisać o.O ... Co mnie obchodzi że masz mało lat? NIe umiesz poczekaj może zrozumiesz za 2, 3 lata

1390144171-U592769.png

 

3x ExModerator Minecraft | ExModerator Battlefield | ExMentor | 2x Ex MPC Media Team | Gold Member | MPC Coders Team | ExMPC Modder | Combat Arms Private

  • 7 miesięcy temu...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...