ModLoader Учебник
Скрытый текст
Примечание: при декомпиляции minecraft.jar с ModLoader вы получите несколько ошибок, но не волнуйтесь, так и должно быть. 1. Создаём где угодно папку, но никакой кириллицы.
2. Извлекаем из архива с MCP содержимое в эту папку.
3. Прописываем переменную PATH.
4. Вставляем в minecraft.jar свежайший Modloader.
5. Кладём папку bin и resources в jars, запускаем decompile.bat.
2. Извлекаем из архива с MCP содержимое в эту папку.
3. Прописываем переменную PATH.
4. Вставляем в minecraft.jar свежайший Modloader.
5. Кладём папку bin и resources в jars, запускаем decompile.bat.
Простой блок
Классы:
mod_mymod
BlockNew
mod_mymod
Скрытый текст
заменить "newblock" на имя вашего блока (Примечание: соблюдать регистр).
ModLoader.RegisterBlock(newblock) - регистрация блока
ModLoader.AddName (newblock, "My First Block") - добавление имени, здесь вы установите название блока в игре.
newblock.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/something.png") - для этого вам нужно будет создать изображение размером 16x16 пикселей и сохранить его как "something.png", который будет текстурой вашего блокf. И еще вам нужно будет добавить его в свой minecraft.jar.(Примечание: текстура может быть и в папке, например "/GFX/something.png")
Далее идет (101, 0) первое число BlockID. Второе число говорит нам, где ее текстура. При открытии terrain.png это выглядит следующим образом: с лева на право, начиная отсчет не с 1, а с 0.
Теперь свойства:
1. .SetHardness (5.0F) - твердость блока (камень 1.0f).
2. .SetResistance (6000.0F) - сопротивление взрыву.
3. .SetLightValue (0.9375F) - свечение (например, ).
4. .SetBlockName ("newblock") - название блока, не в игре.
package net[paste][/paste]minecraft[paste][/paste]src; public class mod_mymod extends BaseModРедактирование: заменить "mymod" на собственное, например "mod_hammer" и так же нужно переименовать сам класс.
public String Version(){return "1[paste][/paste]6[paste][/paste]6";}Редактирование: просто указывает версию игры.
public mod_mymod() { ModLoader[paste][/paste]RegisterBlock(newblock); newblock[paste][/paste]blockIndexInTexture = ModLoader[paste][/paste]addOverride("/terrain[paste][/paste]png", "/something[paste][/paste]png"); ModLoader[paste][/paste]AddName(newblock, "My First Block"); }Редактирование: и вот наконец делаем сам блок.
заменить "newblock" на имя вашего блока (Примечание: соблюдать регистр).
ModLoader.RegisterBlock(newblock) - регистрация блока
ModLoader.AddName (newblock, "My First Block") - добавление имени, здесь вы установите название блока в игре.
newblock.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/something.png") - для этого вам нужно будет создать изображение размером 16x16 пикселей и сохранить его как "something.png", который будет текстурой вашего блокf. И еще вам нужно будет добавить его в свой minecraft.jar.(Примечание: текстура может быть и в папке, например "/GFX/something.png")
public static Block newblock = new BlockNew(101, 0)[paste][/paste]setHardness(5[paste][/paste]0F)[paste][/paste]setResistance(6000[paste][/paste]0F)[paste][/paste]setLightValue(0[paste][/paste]9375F)[paste][/paste]setBlockName("newblock");Редактирование: команда "new BlockNew", "BlockNew" - задает параметры блока в отдельном классе, в данном случае класс BlockNew.
Далее идет (101, 0) первое число BlockID. Второе число говорит нам, где ее текстура. При открытии terrain.png это выглядит следующим образом: с лева на право, начиная отсчет не с 1, а с 0.
Теперь свойства:
1. .SetHardness (5.0F) - твердость блока (камень 1.0f).
2. .SetResistance (6000.0F) - сопротивление взрыву.
3. .SetLightValue (0.9375F) - свечение (например, ).
4. .SetBlockName ("newblock") - название блока, не в игре.
Скрытый текст
package net[paste][/paste]minecraft[paste][/paste]src; public class mod_mymod extends BaseMod { public String Version() { return "1[paste][/paste]6[paste][/paste]6"; } public mod_mymod() { ModLoader[paste][/paste]RegisterBlock(newblock); newblock[paste][/paste]blockIndexInTexture = ModLoader[paste][/paste]addOverride("/terrain[paste][/paste]png", "/newblock[paste][/paste]png"); ModLoader[paste][/paste]AddName(newblock, "New Block"); } public static Block newblock = new BlockNew(101, 0)[paste][/paste]setHardness(5[paste][/paste]0F)[paste][/paste]setResistance(6000[paste][/paste]0F)[paste][/paste]setLightValue(0[paste][/paste]9375F)[paste][/paste]setBlockName("newblock");}
BlockNew
Скрытый текст
public BlockNew(int i, int j){super(i, j, Material[paste][/paste]rock);}Редактирование: Material.rock - тут мы указываем материал, в данном случае rock.
public int idDropped(int i, Random random){return mod_mymod[paste][/paste]newblock[paste][/paste]blockID;}Редактирование: тут указываем, что выпадет из блока, разберем как: "mod_mymod" - указывает где находится. "newblock" - что выпадет. "blockID" - и что это блок, если итем shiftedIndex
public int quantityDropped(Random random) { return 1; }Редактирование: это указывает количество выпавших предметов.
Скрытый текст
package net[paste][/paste]minecraft[paste][/paste]src;import java[paste][/paste]util[paste][/paste]Random;public class BlockNew extends Block{public BlockNew(int i, int j){super(i, j, Material[paste][/paste]rock);}public int idDropped(int i, Random random){return mod_mymod[paste][/paste]newblock[paste][/paste]blockID;}public int quantityDropped(Random random){return 1;} }
Простой элемент
Классы:
mod_mymod
mod_mymod
Скрытый текст
Теперь начнем с основы:
2000 - идентификатор элемента ID
. SetIconCoord (0,0) - расположение иконки
. SetItemName ("newdust") - как и в блоке название, используемое в программировании, НЕ в игре
newdust.iconIndex - скажет нам, где иконка
ModLoader.addOverride ("/GUI/items.png", "/newdust.png") - замена "/GUI/items.png" на "/newdust.png"
Теперь, как в блок, добавить следующее:
package net[paste][/paste]minecraft[paste][/paste]src; public class mod_mymod extends BaseMod { public String Version() { return "1[paste][/paste]6[paste][/paste]6"; } }Следующий код рассказать о элементе:
public mod_mymod() { newdust = new Item((2000))[paste][/paste]setIconCoord(0, 0)[paste][/paste]setItemName("newdust"); newdust[paste][/paste]iconIndex = ModLoader[paste][/paste]addOverride("/gui/items[paste][/paste]png", "/gfx/newdust[paste][/paste]png"); }Редактирование:
2000 - идентификатор элемента ID
. SetIconCoord (0,0) - расположение иконки
. SetItemName ("newdust") - как и в блоке название, используемое в программировании, НЕ в игре
newdust.iconIndex - скажет нам, где иконка
ModLoader.addOverride ("/GUI/items.png", "/newdust.png") - замена "/GUI/items.png" на "/newdust.png"
Теперь, как в блок, добавить следующее:
public static Item newdust;
Скрытый текст
package net[paste][/paste]minecraft[paste][/paste]src; public class mod_mymod extends BaseMod { public static Item newdust; public String Version() { return "1[paste][/paste]6[paste][/paste]6"; } public mod_mymod() { newdust = new Item((2000))[paste][/paste]setIconCoord(0, 0)[paste][/paste]setItemName("newdust"); newdust[paste][/paste]iconIndex = ModLoader[paste][/paste]addOverride("/gui/items[paste][/paste]png", "/gfx/newdust[paste][/paste]png"); } }
Функции ModLoader
Скрытый текст
Добавление рецептов:
ИТАК, при создании блока, поставить следующим образом:
ModLoader[paste][/paste]AddRecipe(new ItemStack(newItemYouWant, numberOfItemsCreatedExample1), new Object[]{"XXX", " # ", " Y ", Character[paste][/paste]valueOf('X'), Block[paste][/paste]Whatever, Character[paste][/paste]valueOf('#'), Item[paste][/paste]Whatever, Character[paste][/paste]valueOf('Y'), mod_YourClassName[paste][/paste]itemOrBlockInsideClass});Добавление рецептов печки:
FOR BLOCKS: ModLoader[paste][/paste]AddSmelting(Block[paste][/paste]obsidian[paste][/paste]blockID, new ItemStack(obsidianIngot, 3)); FOR ITEMS: ModLoader[paste][/paste]AddSmelting(Item[paste][/paste]whatever[paste][/paste]shiftedIndex, new ItemStack(obsidianIngot, 2));Добавление пользовательских текстур:
FOR BLOCKS: blockVariableNameSuchAsAwesomeBlock[paste][/paste]blockIndexInTexture = ModLoader[paste][/paste]addOverride("/terrain[paste][/paste]png", "/FolderIfYouLike/PicutreHasToBe16x16Dimensions[paste][/paste]png"); FOR ITEMS: itemVariableSuchAsAwesomeLookingStick[paste][/paste]iconIndex = ModLoader[paste][/paste]addOverride("/gui/items[paste][/paste]png", "/folderIfYouLike/PictureHasToBe16x16Dimensions[paste][/paste]png");Регистрация блока:
ModLoader[paste][/paste]RegisterBlock(newVariableName);Добавление имени блока / итема в игре:
ModLoader[paste][/paste]AddName(variableNameOfItem_Block, "Name In GAME such as super awesome minecraft ultimate superblock that can kill everything YAY");Добавление различных текстур с каждой стороны:
public int getBlockTextureFromSide(int side) { Random r = new Random(); for(side = 0; side < 5; side++){ if(side == 0){ return ModLoader[paste][/paste]addOverride("/terrain[paste][/paste]png", "/Top Pic[paste][/paste]png"); }else if(side == 1){ return ModLoader[paste][/paste]addOverride("/terrain[paste][/paste]png", "/Side Pic1[paste][/paste]png"); }else if(side == 2){ return ModLoader[paste][/paste]addOverride("/terrain[paste][/paste]png", "/side Pic 2[paste][/paste]png"); }else if(side == 3){ return ModLoader[paste][/paste]addOverride("/terrain[paste][/paste]png", "/Side Pic 3[paste][/paste]png"); }else if(side == 4){ return ModLoader[paste][/paste]addOverride("/terrain[paste][/paste]png", "/Side Pic 4[paste][/paste]png"); }else if(side ==5){ return ModLoader[paste][/paste]addOverride("/terrain[paste][/paste]png", "/Side Pic 5[paste][/paste]png"); } return 0; Не уверенДобавление новой брони:
public static final Item armorExampleHelmet = (new ItemArmor(127, 3, 5, 0))[paste][/paste]setItemName("exampleHelm");Добавление новых итемов:
public static final Item exampleAwesomeIngot = new Item(2000)[paste][/paste]setItemName("variableName");Добавление новых блоков:
public static final item awesomeBlockVariableName = new Block(120, Material[paste][/paste]glass)[paste][/paste]setBlockName("blockName");Добавление новых инструментов, таких как кирки, топоры, мотыги, мечи, лопаты:
public static final Item itemToolVariable = new ItemSpade(2002, EnumToolMaterial[paste][/paste]MATERIALSUCHAS WOODGOLDEMERALD)[paste][/paste]setItemName("itemToolVariable"); * Где ItemSpade, это может быть: ItemSpade, ItemAxe, ItemShovel, ItemSword, ItemPick* EnumToolMaterial[paste][/paste]MATERIAL - ПроверьтеEnumToolMaterial[paste][/paste]java для материалов[paste][/paste]Добавление лука и стрел:
//ARROW ModLoader[paste][/paste]RegisterEntityID(EntityYourNameArrow[paste][/paste]class, "newArrow", ModLoader[paste][/paste]getUniqueEntityId()); ModLoader[paste][/paste]AddName(newArrow, "Super Awesome Arrow Name"); newArrow[paste][/paste]iconIndex = ModLoader[paste][/paste]addOverride("/gui/items[paste][/paste]png", "/Folder/arrowPicture[paste][/paste]png"); ModLoader[paste][/paste]AddRecipe(new ItemStack(newArrow, 2), new Object[] {"X", "I", "#", Character[paste][/paste]valueOf('#'), Item[paste][/paste]feather, Character[paste][/paste]valueOf('I'), Item[paste][/paste]watever, Character[paste][/paste]valueOf('X'), watever}); //BOW newBow[paste][/paste]iconIndex = ModLoader[paste][/paste]addOverride("/gui/items[paste][/paste]png", "/A folder if you want/bowPicture[paste][/paste]png"); ModLoader[paste][/paste]AddRecipe(new ItemStack(newBow, 1), new Object[] {"#X ", "# I", "#X ", Character[paste][/paste]valueOf('#'), Item[paste][/paste]silk, Character[paste][/paste]valueOf('X'), whatever, Character[paste][/paste]valueOf('I'), Whatever your item is }); ModLoader[paste][/paste]AddName(newBow, "Super Awesome Bow Name");Добавление в генератор блока(например, блок, который порождается в пещерах):
public void GenerateSurface(World world, Random rand, int chunkX, int chunkZ) { for(int i = 0; i < RARITY; i++) { int randPosX = chunkX + rand[paste][/paste]nextInt(16); int randPosY = rand[paste][/paste]nextInt(DEPTH); int randPosZ = chunkZ + rand[paste][/paste]nextInt(16); (new WorldGenMinable(yoursuperawesomeblock[paste][/paste]blockID, 8))[paste][/paste]generate(world, rand, randPosX , randPosY , randPosZ ); } }Добавление топлива, как уголь:
public static final Item newFuelName = (new ItemFuel(10, 6000))[paste][/paste]setItemName("newFuel");ModLoader[paste][/paste]AddAllFuel(int id) не уверенНастройка звуков шагов (когда вы наступите на блок, он делает звук):
ИТАК, при создании блока, поставить следующим образом:
[paste][/paste]setStepSound (Soundhere)так на реальном блоке было бы что-то вроде этого:
Block = (new Block(130, Material[paste][/paste]rock))[paste][/paste]setBlockName("Block")[paste][/paste]setStepSound (SoundHere);где "SoundHere", звук. Есть Различные звуки:
1) soundWoodFootstep; 2) soundGravelFootstep; 3) soundGrassFootstep; 4) soundStoneFootstep; 5) soundMetalFootstep; 6) soundGlassFootstep; 7) soundClothFootstep; 8) soundSandFootstep; 9) soundPowderFootstep;Еще в коде должны быть такие строчки:
public static final StepSound soundClothFootstep; public StepSound stepSound;Так что в вашем коде вы должны иметь все это в конце:
package net[paste][/paste]minecraft[paste][/paste]src; public class mod_Main extends BaseMod { public static final Block Main; public static final StepSound soundHereThatYouWant; public StepSound stepSound; public mod_Main() { //functions Here } static { soundClothFootstep = new StepSound("cloth", 1[paste][/paste]0F, 1[paste][/paste]0F); Main = new Block(101, Material[paste][/paste]cloth)[paste][/paste]setHardness(0[paste][/paste]8F)[paste][/paste]setStepSound(soundClothFootstep)[paste][/paste]setBlockName("target");} }Если не работает, вы могли бы попробовать это.
[paste][/paste]setStepSound(Block[paste][/paste]soundHere)Добавление новых супов:
public static Item newSoupVariable = (new ItemSoup(26, 10))[paste][/paste]setItemName("newSoup"); 10, исцелить сумму[paste][/paste] И 26 является идентификатор элемента я думаю[paste][/paste]Добавление новой пищи:
public static Item newFood = (new ItemFood(63, 3, true))[paste][/paste]setItemName("newFood"); 63 это ID[paste][/paste] 3, исцелить сумму[paste][/paste] каждое целое число - это половина сердца в Minecraft[paste][/paste] true, как раз объясняет, волк будет получать здоровье, или false, означает, что волку это не нравится[paste][/paste]Добавление новой картины:
public static Item painting = (new ItemPainting(65))[paste][/paste]setItemName("painting");65 ID элементаДобавление новой таблички:
public static Item sign = (new ItemSign(67))[paste][/paste]setItemName("sign"); не уверенДобавление нового автомобиля:
Cart = public static Item minecartName = (new ItemMinecart(72, 0))[paste][/paste]setItemName("minecartName");Boat= public static Item boatName = (new ItemBoat(77))[paste][/paste]setItemName("boatName"); не уверенДобавление новой удочки:
public static Item fishingRod = (new ItemFishingRod(90))[paste][/paste]setItemName("fishingRod"); не уверенДобавление нового Седла:
public static Item saddle = (new ItemSaddle(73))[paste][/paste]setItemName("saddle"); не уверенДобавление нового пункта Редстоун:
public static Item redstone = (new ItemRedstone(75))[paste][/paste]setItemName("redstone"); не уверенДобавление новых дверей:
public static Item doorWood = (new ItemDoor(68, Material[paste][/paste]wood))[paste][/paste]setItemName("doorWood");опять не уверенДобавление новых ведрер:
Empty Container (bucket): bucketEmpty = (new ItemBucket(69, 0))[paste][/paste]setItemName("bucket"); Filled Container (bucket): bucketLava = (new ItemBucket(71, Block[paste][/paste]lavaMoving[paste][/paste]blockID))[paste][/paste]setItemName("bucketLava")[paste][/paste]setContainerItem(bucketEmpty);Добавление новой Лестницы:
public static final stairCompactName = (new BlockStairs(96, textureLikeSandOrDirt))[paste][/paste]setBlockName("stairsName");