forked from TAIGA/TAIGA
Fixed broken book page. Added examples for showing up in the book. Todo: Create a separate template!
This commit is contained in:
206
src/main/java/com/sosnitzka/taiga/book/ContentOres.java
Normal file
206
src/main/java/com/sosnitzka/taiga/book/ContentOres.java
Normal file
@@ -0,0 +1,206 @@
|
||||
package com.sosnitzka.taiga.book;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
import slimeknights.mantle.client.book.data.BookData;
|
||||
import slimeknights.mantle.client.book.data.element.ImageData;
|
||||
import slimeknights.mantle.client.book.data.element.TextData;
|
||||
import slimeknights.mantle.client.gui.book.GuiBook;
|
||||
import slimeknights.mantle.client.gui.book.element.BookElement;
|
||||
import slimeknights.mantle.client.gui.book.element.ElementImage;
|
||||
import slimeknights.mantle.client.gui.book.element.ElementText;
|
||||
import slimeknights.tconstruct.common.ClientProxy;
|
||||
import slimeknights.tconstruct.library.TinkerRegistry;
|
||||
import slimeknights.tconstruct.library.Util;
|
||||
import slimeknights.tconstruct.library.book.TinkerPage;
|
||||
import slimeknights.tconstruct.library.book.elements.ElementTinkerItem;
|
||||
import slimeknights.tconstruct.library.client.CustomFontColor;
|
||||
import slimeknights.tconstruct.library.materials.Material;
|
||||
import slimeknights.tconstruct.library.modifiers.IModifier;
|
||||
import slimeknights.tconstruct.library.modifiers.IModifierDisplay;
|
||||
import slimeknights.tconstruct.library.tools.ToolCore;
|
||||
import slimeknights.tconstruct.tools.TinkerMaterials;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class ContentOres extends TinkerPage {
|
||||
|
||||
public static final transient String ID = "modifier";
|
||||
|
||||
public static final transient int TEX_SIZE = 256;
|
||||
//public static final transient ImageData IMG_MODIFY = new ImageData(ClientProxy.BOOK_MODIFY), 0, 0, 122, 70, TEX_SIZE, TEX_SIZE);
|
||||
public static final transient ImageData IMG_SLOT_1 = new ImageData(ClientProxy.BOOK_MODIFY, 0, 75, 22, 22, TEX_SIZE, TEX_SIZE);
|
||||
public static final transient ImageData IMG_SLOT_2 = new ImageData(ClientProxy.BOOK_MODIFY, 0, 97, 40, 22, TEX_SIZE, TEX_SIZE);
|
||||
public static final transient ImageData IMG_SLOT_3 = new ImageData(ClientProxy.BOOK_MODIFY, 0, 119, 58, 22, TEX_SIZE, TEX_SIZE);
|
||||
public static final transient ImageData IMG_SLOT_5 = new ImageData(ClientProxy.BOOK_MODIFY, 0, 141, 58, 41, TEX_SIZE, TEX_SIZE);
|
||||
public static final transient ImageData IMG_TABLE = new ImageData(ClientProxy.BOOK_MODIFY, 214, 0, 42, 46, TEX_SIZE, TEX_SIZE);
|
||||
|
||||
private transient IModifier modifier;
|
||||
private transient List<Item> tool;
|
||||
|
||||
public TextData[] text;
|
||||
public String[] effects;
|
||||
|
||||
@SerializedName("modifier")
|
||||
public String modifierName;
|
||||
public String[] demoTool = new String[]{Util.getResource("pickaxe").toString()};
|
||||
|
||||
public ContentOres() {
|
||||
}
|
||||
|
||||
public ContentOres(IModifier modifier) {
|
||||
this.modifier = modifier;
|
||||
this.modifierName = modifier.getIdentifier();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load() {
|
||||
if (modifierName == null) {
|
||||
modifierName = parent.name;
|
||||
}
|
||||
if (modifier == null) {
|
||||
modifier = TinkerRegistry.getModifier(modifierName);
|
||||
}
|
||||
if (tool == null) {
|
||||
tool = Lists.newArrayList();
|
||||
for (String entry : demoTool) {
|
||||
Item item = Item.REGISTRY.getObject(new ResourceLocation(entry));
|
||||
if (item != null) {
|
||||
tool.add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(BookData book, ArrayList<BookElement> list, boolean rightSide) {
|
||||
int color = 0xdddddd;
|
||||
int inCount = 1;
|
||||
ItemStack[][] inputItems = null;
|
||||
if (modifier instanceof IModifierDisplay) {
|
||||
IModifierDisplay modifierDisplay = (IModifierDisplay) modifier;
|
||||
color = modifierDisplay.getColor();
|
||||
|
||||
// determine how many slots we need to display
|
||||
List<List<ItemStack>> inputList = modifierDisplay.getItems(); // cache it, can be expensive
|
||||
inputItems = new ItemStack[5][]; // max size so we don't have to iterate twice
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
inputItems[i] = new ItemStack[inputList.size()];
|
||||
}
|
||||
|
||||
for (int i = 0; i < inputList.size(); i++) {
|
||||
List<ItemStack> inputs = new ArrayList<>(inputList.get(i));
|
||||
if (inputs.size() > inCount) {
|
||||
inCount = inputs.size();
|
||||
}
|
||||
|
||||
for (int j = 0; j < inputs.size() && j < 5; j++) {
|
||||
ItemStack stack = inputs.get(j);
|
||||
if (stack != null && stack.getMetadata() == OreDictionary.WILDCARD_VALUE) {
|
||||
stack = stack.copy();
|
||||
stack.setItemDamage(0);
|
||||
}
|
||||
inputItems[j][i] = stack;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
addTitle(list, CustomFontColor.encodeColor(color) + modifier.getLocalizedName(), true);
|
||||
|
||||
// description
|
||||
int h = GuiBook.PAGE_WIDTH / 3 - 10;
|
||||
list.add(new ElementText(10, 20, GuiBook.PAGE_WIDTH - 20, h, text));
|
||||
|
||||
if (effects.length > 0) {
|
||||
TextData head = new TextData(parent.translate("modifier.effect"));
|
||||
head.underlined = true;
|
||||
list.add(new ElementText(10, 20 + h, GuiBook.PAGE_WIDTH / 2 - 5, GuiBook.PAGE_HEIGHT - h - 20, head));
|
||||
|
||||
List<TextData> effectData = Lists.newArrayList();
|
||||
for (String e : effects) {
|
||||
effectData.add(new TextData("\u25CF "));
|
||||
effectData.add(new TextData(e));
|
||||
effectData.add(new TextData("\n"));
|
||||
}
|
||||
|
||||
list.add(new ElementText(10, 30 + h, GuiBook.PAGE_WIDTH / 2 + 5, GuiBook.PAGE_HEIGHT - h - 20, effectData));
|
||||
}
|
||||
|
||||
ImageData img;
|
||||
switch (inCount) {
|
||||
case 1:
|
||||
img = IMG_SLOT_1;
|
||||
break;
|
||||
case 2:
|
||||
img = IMG_SLOT_2;
|
||||
break;
|
||||
case 3:
|
||||
img = IMG_SLOT_3;
|
||||
break;
|
||||
default:
|
||||
img = IMG_SLOT_5;
|
||||
}
|
||||
|
||||
int imgX = GuiBook.PAGE_WIDTH / 2 + 20;
|
||||
int imgY = GuiBook.PAGE_HEIGHT / 2 + 30;
|
||||
|
||||
// move ot towards the center wher ewe want it, since image sice can differ
|
||||
imgX = imgX + 29 - img.width / 2;
|
||||
imgY = imgY + 20 - img.height / 2;
|
||||
|
||||
//int[] slotX = new int[] { 7, 3, 28, 53, 49};
|
||||
//int[] slotY = new int[] {50, 24, 3, 24, 50};
|
||||
int[] slotX = new int[]{3, 21, 39, 12, 30};
|
||||
int[] slotY = new int[]{3, 3, 3, 22, 22};
|
||||
|
||||
//list.add(new ElementItemCustom(imgX + IMG_MODIFY.width/2 - 24, imgY - 25, 3f, new ItemStack(TinkerTools.toolTables, 1, BlockToolTable.TableTypes.ToolStation.meta), new ItemStack(TinkerTools.toolForge)));
|
||||
|
||||
list.add(new ElementImage(imgX + (img.width - IMG_TABLE.width) / 2, imgY - 24, -1, -1, IMG_TABLE));
|
||||
list.add(new ElementImage(imgX, imgY, -1, -1, img, book.appearance.slotColor));
|
||||
|
||||
ItemStack[] demo = getDemoTools(inputItems);
|
||||
|
||||
ElementTinkerItem toolItem = new ElementTinkerItem(imgX + (img.width - 16) / 2, imgY - 24, 1f, demo);
|
||||
toolItem.noTooltip = true;
|
||||
|
||||
list.add(toolItem);
|
||||
list.add(new ElementImage(imgX + (img.width - 22) / 2, imgY - 27, -1, -1, IMG_SLOT_1, 0xffffff));
|
||||
|
||||
if (inputItems != null) {
|
||||
for (int i = 0; i < inCount; i++) {
|
||||
list.add(new ElementTinkerItem(imgX + slotX[i], imgY + slotY[i], 1f, inputItems[i]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected ItemStack[] getDemoTools(ItemStack[][] inputItems) {
|
||||
ItemStack[] demo = new ItemStack[tool.size()];
|
||||
|
||||
for (int i = 0; i < tool.size(); i++) {
|
||||
if (tool.get(i) instanceof ToolCore) {
|
||||
ToolCore core = (ToolCore) tool.get(i);
|
||||
List<Material> mats = ImmutableList.<Material>of(TinkerMaterials.wood, TinkerMaterials.cobalt, TinkerMaterials.ardite, TinkerMaterials.manyullyn);
|
||||
mats = mats.subList(0, core.getRequiredComponents().size());
|
||||
demo[i] = ((ToolCore) tool.get(i)).buildItemForRendering(mats);
|
||||
} else if (tool != null) {
|
||||
demo[i] = new ItemStack(tool.get(i));
|
||||
}
|
||||
|
||||
if (demo[i] != null) {
|
||||
modifier.apply(demo[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return demo;
|
||||
}
|
||||
}
|
||||
85
src/main/java/com/sosnitzka/taiga/book/ContentSmelting.java
Normal file
85
src/main/java/com/sosnitzka/taiga/book/ContentSmelting.java
Normal file
@@ -0,0 +1,85 @@
|
||||
package com.sosnitzka.taiga.book;
|
||||
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import slimeknights.mantle.client.book.data.BookData;
|
||||
import slimeknights.mantle.client.book.data.content.PageContent;
|
||||
import slimeknights.mantle.client.book.data.element.ImageData;
|
||||
import slimeknights.mantle.client.book.data.element.ItemStackData;
|
||||
import slimeknights.mantle.client.book.data.element.TextData;
|
||||
import slimeknights.mantle.client.gui.book.GuiBook;
|
||||
import slimeknights.mantle.client.gui.book.element.BookElement;
|
||||
import slimeknights.mantle.client.gui.book.element.ElementImage;
|
||||
import slimeknights.mantle.client.gui.book.element.ElementItem;
|
||||
import slimeknights.mantle.client.gui.book.element.ElementText;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static slimeknights.mantle.client.gui.book.Textures.TEX_SMELTING;
|
||||
|
||||
public class ContentSmelting extends PageContent {
|
||||
|
||||
public static final transient int TEX_SIZE = 128;
|
||||
public static final transient ImageData IMG_SMELTING = new ImageData(TEX_SMELTING, 0, 0, 110, 114, TEX_SIZE, TEX_SIZE);
|
||||
|
||||
public static final transient int INPUT_X = 5;
|
||||
public static final transient int INPUT_Y = 5;
|
||||
public static final transient int RESULT_X = 74;
|
||||
public static final transient int RESULT_Y = 41;
|
||||
public static final transient int FUEL_X = 5;
|
||||
public static final transient int FUEL_Y = 77;
|
||||
|
||||
public static final transient float ITEM_SCALE = 2.0F;
|
||||
|
||||
public String title = "Smelting";
|
||||
public ItemStackData input;
|
||||
public ItemStackData result;
|
||||
public TextData[] description;
|
||||
|
||||
@Override
|
||||
public void build(BookData book, ArrayList<BookElement> list, boolean rightSide) {
|
||||
int x = GuiBook.PAGE_WIDTH / 2 - IMG_SMELTING.width / 2;
|
||||
int y = TITLE_HEIGHT;
|
||||
|
||||
TextData tdTitle = new TextData(title);
|
||||
tdTitle.underlined = true;
|
||||
list.add(new ElementText(0, 0, GuiBook.PAGE_WIDTH, 9, new TextData[]{tdTitle}));
|
||||
list.add(new ElementImage(x, y, IMG_SMELTING.width, IMG_SMELTING.height, IMG_SMELTING, book.appearance.slotColor));
|
||||
|
||||
if (input != null && !input.id.equals("")) {
|
||||
list.add(new ElementItem(x + INPUT_X, y + INPUT_Y, ITEM_SCALE, input.getItems(), input.action));
|
||||
}
|
||||
|
||||
if (result != null && !result.id.equals("")) {
|
||||
list.add(new ElementItem(x + RESULT_X, y + RESULT_Y, ITEM_SCALE, result.getItems(), result.action));
|
||||
}
|
||||
|
||||
list.add(new ElementItem(x + FUEL_X, y + FUEL_Y, ITEM_SCALE, getFuelsList()));
|
||||
|
||||
if (description != null && description.length > 0) {
|
||||
list.add(new ElementText(0, IMG_SMELTING.height + y + 5, GuiBook.PAGE_WIDTH, GuiBook.PAGE_HEIGHT - y - 5, description));
|
||||
}
|
||||
}
|
||||
|
||||
public ItemStack[] getFuelsList() {
|
||||
//TODO ask JEI for fuel list if it is present
|
||||
|
||||
ItemStack[] fuels = new ItemStack[13];
|
||||
fuels[0] = new ItemStack(Blocks.WOODEN_SLAB);
|
||||
fuels[1] = new ItemStack(Blocks.PLANKS);
|
||||
fuels[2] = new ItemStack(Blocks.COAL_BLOCK);
|
||||
fuels[3] = new ItemStack(Items.WOODEN_PICKAXE);
|
||||
fuels[4] = new ItemStack(Items.WOODEN_SWORD);
|
||||
fuels[5] = new ItemStack(Items.WOODEN_HOE);
|
||||
fuels[6] = new ItemStack(Items.STICK);
|
||||
fuels[7] = new ItemStack(Items.COAL);
|
||||
fuels[8] = new ItemStack(Items.LAVA_BUCKET);
|
||||
fuels[9] = new ItemStack(Blocks.SAPLING);
|
||||
fuels[10] = new ItemStack(Items.BLAZE_ROD);
|
||||
fuels[11] = new ItemStack(Items.WOODEN_SHOVEL);
|
||||
fuels[12] = new ItemStack(Items.WOODEN_AXE);
|
||||
|
||||
return fuels;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.sosnitzka.taiga.book;
|
||||
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
import slimeknights.mantle.client.book.data.BookData;
|
||||
import slimeknights.mantle.client.book.data.content.PageContent;
|
||||
import slimeknights.mantle.client.book.data.element.ImageData;
|
||||
import slimeknights.mantle.client.book.data.element.TextData;
|
||||
import slimeknights.mantle.client.gui.book.GuiBook;
|
||||
import slimeknights.mantle.client.gui.book.element.BookElement;
|
||||
import slimeknights.mantle.client.gui.book.element.ElementImage;
|
||||
import slimeknights.mantle.client.gui.book.element.ElementText;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class ContentTextRightImage extends PageContent {
|
||||
|
||||
public String title;
|
||||
public TextData[] text1;
|
||||
public TextData[] text2;
|
||||
public ImageData image;
|
||||
|
||||
@Override
|
||||
public void build(BookData book, ArrayList<BookElement> list, boolean rightSide) {
|
||||
int y = TITLE_HEIGHT;
|
||||
|
||||
if (title == null || title.isEmpty()) {
|
||||
y = 0;
|
||||
} else {
|
||||
addTitle(list, title);
|
||||
}
|
||||
|
||||
if (text1 != null && text1.length > 0) {
|
||||
list.add(new ElementText(0, y, GuiBook.PAGE_WIDTH - 55, 50, text1));
|
||||
}
|
||||
|
||||
if (image != null && image.location != null) {
|
||||
list.add(new ElementImage(GuiBook.PAGE_WIDTH - 50, y, 50, 50, image));
|
||||
} else {
|
||||
list.add(new ElementImage(GuiBook.PAGE_WIDTH - 50, y, 50, 50, ImageData.MISSING));
|
||||
}
|
||||
|
||||
if (text2 != null && text2.length > 0) {
|
||||
list.add(new ElementText(0, y + 55, GuiBook.PAGE_WIDTH, GuiBook.PAGE_HEIGHT - 55 - y, text2));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user