Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 10 additions & 57 deletions src/main/java/am2/client/ClientProxy.java
Original file line number Diff line number Diff line change
@@ -1,30 +1,5 @@
package am2.client;

import static am2.common.defs.IDDefs.GUI_ARCANE_DECONSTRUCTOR;
import static am2.common.defs.IDDefs.GUI_ARCANE_RECONSTRUCTOR;
import static am2.common.defs.IDDefs.GUI_ARMOR_INFUSION;
import static am2.common.defs.IDDefs.GUI_ASTRAL_BARRIER;
import static am2.common.defs.IDDefs.GUI_CALEFACTOR;
import static am2.common.defs.IDDefs.GUI_CRYSTAL_MARKER;
import static am2.common.defs.IDDefs.GUI_ESSENCE_BAG;
import static am2.common.defs.IDDefs.GUI_ESSENCE_REFINER;
import static am2.common.defs.IDDefs.GUI_FLICKER_HABITAT;
import static am2.common.defs.IDDefs.GUI_INERT_SPAWNER;
import static am2.common.defs.IDDefs.GUI_INSCRIPTION_TABLE;
import static am2.common.defs.IDDefs.GUI_KEYSTONE;
import static am2.common.defs.IDDefs.GUI_KEYSTONE_CHEST;
import static am2.common.defs.IDDefs.GUI_KEYSTONE_LOCKABLE;
import static am2.common.defs.IDDefs.GUI_MAGICIANS_WORKBENCH;
import static am2.common.defs.IDDefs.GUI_OBELISK;
import static am2.common.defs.IDDefs.GUI_OCCULUS;
import static am2.common.defs.IDDefs.GUI_RIFT;
import static am2.common.defs.IDDefs.GUI_RUNE_BAG;
import static am2.common.defs.IDDefs.GUI_SEER_STONE;
import static am2.common.defs.IDDefs.GUI_SPELL_BOOK;
import static am2.common.defs.IDDefs.GUI_SPELL_CUSTOMIZATION;
import static am2.common.defs.IDDefs.GUI_SPELL_SEALED_DOOR;
import static am2.common.defs.IDDefs.GUI_SUMMONER;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
Expand Down Expand Up @@ -57,33 +32,7 @@
import am2.client.blocks.render.TileSeerStoneRenderer;
import am2.client.blocks.render.TileSummonerRenderer;
import am2.client.commands.ConfigureAMUICommand;
import am2.client.gui.AMGuiHelper;
import am2.client.gui.AMIngameGUI;
import am2.client.gui.GuiArcaneDeconstructor;
import am2.client.gui.GuiArcaneReconstructor;
import am2.client.gui.GuiArmorImbuer;
import am2.client.gui.GuiAstralBarrier;
import am2.client.gui.GuiCalefactor;
import am2.client.gui.GuiCrystalMarker;
import am2.client.gui.GuiEssenceBag;
import am2.client.gui.GuiEssenceRefiner;
import am2.client.gui.GuiFlickerHabitat;
import am2.client.gui.GuiInertSpawner;
import am2.client.gui.GuiInscriptionTable;
import am2.client.gui.GuiKeystone;
import am2.client.gui.GuiKeystoneChest;
import am2.client.gui.GuiKeystoneLockable;
import am2.client.gui.GuiMagiciansWorkbench;
import am2.client.gui.GuiObelisk;
import am2.client.gui.GuiOcculus;
import am2.client.gui.GuiParticleEmitter;
import am2.client.gui.GuiRiftStorage;
import am2.client.gui.GuiRuneBag;
import am2.client.gui.GuiSeerStone;
import am2.client.gui.GuiSpellBook;
import am2.client.gui.GuiSpellCustomization;
import am2.client.gui.GuiSpellSealedDoor;
import am2.client.gui.GuiSummoner;
import am2.client.gui.*;
import am2.client.handlers.ClientTickHandler;
import am2.client.models.ArsMagicaModelLoader;
import am2.client.models.CullfaceModelLoader;
Expand Down Expand Up @@ -130,11 +79,7 @@
import am2.common.defs.ItemDefs;
import am2.common.extensions.RiftStorage;
import am2.common.handler.BakingHandler;
import am2.common.items.ItemEssenceBag;
import am2.common.items.ItemKeystone;
import am2.common.items.ItemRuneBag;
import am2.common.items.ItemSpellBase;
import am2.common.items.ItemSpellBook;
import am2.common.items.*;
import am2.common.packet.AMNetHandler;
import am2.common.power.PowerNodeEntry;
import am2.common.power.PowerTypes;
Expand All @@ -160,6 +105,8 @@
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.client.registry.ClientRegistry;

import static am2.common.defs.IDDefs.*;

public class ClientProxy extends CommonProxy {

public ClientTickHandler clientTickHandler;
Expand Down Expand Up @@ -226,6 +173,12 @@ public Object getClientGuiElement(int ID, EntityPlayer player, World world, int
}
ItemEssenceBag essenceBag = (ItemEssenceBag)bagStack.getItem();
return new GuiEssenceBag(player.inventory, player.getHeldItemMainhand(), essenceBag.ConvertToInventory(bagStack));
case GUI_SPELL_RECIPE:
ItemStack recipeStack = player.getHeldItemMainhand();
if (recipeStack.getItem() == null || !(recipeStack.getItem() instanceof ItemSpellRecipe))
return null;

return new GuiSpellRecipe(recipeStack);
}
return super.getClientGuiElement(ID, player, world, x, y, z);
}
Expand Down
164 changes: 164 additions & 0 deletions src/main/java/am2/client/gui/GuiSpellRecipe.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
package am2.client.gui;

import am2.api.ArsMagicaAPI;
import am2.api.affinity.Affinity;
import am2.api.skill.Skill;
import am2.client.gui.controls.GuiButtonVariableDims;
import am2.client.gui.widgets.*;
import am2.client.gui.widgets.events.WidgetEvent;
import am2.client.gui.widgets.events.WidgetEventListener;
import am2.common.defs.ItemDefs;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderItem;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagInt;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.input.Keyboard;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;

import static javax.swing.text.html.HTML.getTag;

public class GuiSpellRecipe extends GuiScreenWidget implements WidgetEventListener{
private static final int LABEL_HEIGHT = 12;
private static final ResourceLocation background = new ResourceLocation("arsmagica2", "textures/gui/SpellRecipe.png");

private final ItemStack recipeStack;
private String spellName;
private int spellNameWidth;

private WidgetList<WidgetIngridient> ingridients;
private WidgetList<Widget> spellInfo;

@Override
protected void keyTyped(char typedChar, int keyCode) throws IOException{
super.keyTyped(typedChar, keyCode);

if (keyCode == Keyboard.KEY_E)
this.mc.thePlayer.closeScreen();
}

public GuiSpellRecipe(ItemStack recipeStack){
super(256, 158);
this.recipeStack = recipeStack;
this.spellName = recipeStack.getDisplayName();

ingridients = new WidgetList<>(0, 135, 8, 100, 135, false);
this.widgets.add(ingridients);

spellInfo = new WidgetList<>(0, 20, 18, 87, 125, false);
this.widgets.add(spellInfo);

if (recipeStack.hasTagCompound()){
NBTTagCompound compound = recipeStack.getTagCompound();
NBTTagList materials = (NBTTagList)compound.getTag("materials");
for (int i = 0; i < materials.tagCount(); i++){
NBTTagCompound material = materials.getCompoundTagAt(i);
String itemId = material.getString("id");
int count = material.getInteger("count");
ItemStack itemStack = ItemStack.loadItemStackFromNBT(material.getCompoundTag("item"));

if (itemStack.getItem() == ItemDefs.etherium){
ingridients.add(new WidgetIngridient(
10,
itemId.substring(1),
count
));
}else{
ingridients.add(new WidgetIngridient(
10,
itemStack,
count
));
}
}

int groupsCount = compound.getInteger("numShapeGroups");
for (int i = 1; i <= groupsCount; i++){
int[] group = compound.getIntArray("shapeGroupCombo_" + (i - 1));
if (group.length == 0)
continue;

spellInfo.add(new WidgetLabel(
10,
I18n.format("am2.tooltip.spell_group", i),
0, 0,
100, LABEL_HEIGHT
));
for (int skillId : group){
Skill skill = ArsMagicaAPI.getSkillRegistry().getObjectById(skillId);
spellInfo.add(new WidgetSkill(10, skill));
}
}
int[] output = compound.getIntArray("output_combo");
spellInfo.add(new WidgetLabel(
10,
I18n.format("am2.tooltip.output_combo"),
0, 0,
100, LABEL_HEIGHT
));
for (int skillId : output){
Skill skill = ArsMagicaAPI.getSkillRegistry().getObjectById(skillId);
spellInfo.add(new WidgetSkill(10, skill));
}

spellInfo.add(new WidgetLabel(
10,
I18n.format("am2.gui.affinity"),
0, 0,
100, LABEL_HEIGHT
));
NBTTagList affinityList = (NBTTagList)compound.getTag("affinity");
for (int i = 0; i < affinityList.tagCount(); i++){
NBTTagCompound affinityTag = affinityList.getCompoundTagAt(i);
Affinity affinity = ArsMagicaAPI.getAffinityRegistry().getObject(new ResourceLocation(affinityTag.getString("id")));
float value = affinityTag.getFloat("value");
spellInfo.add(new WidgetAffinity(10, affinity, value));
}
}
}

@Override
public void initGui(){
super.initGui();

spellNameWidth = fontRendererObj.getStringWidth(spellName);
}

@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks){
int xMin = (width - xSize) / 2;
int yMin = (height - ySize) / 2;

GlStateManager.color(1.0f, 1.0f, 1.0f);
mc.renderEngine.bindTexture(background);
this.drawTexturedModalRect(xMin, yMin, 0, 0, xSize, ySize);

fontRendererObj.drawString(spellName, xMin + 64 - spellNameWidth / 2, yMin + 8, 0);

super.draw(xMin, yMin, mouseX, mouseY);
}

@Override
public void event(WidgetEvent type, int id, Object data){

}

@Override
public boolean doesGuiPauseGame(){
return false;
}
}
112 changes: 112 additions & 0 deletions src/main/java/am2/client/gui/widgets/GuiScreenWidget.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package am2.client.gui.widgets;

import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.lwjgl.input.Mouse;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
* Оболочка для взаимодействия виджетов с интерфейсом
*/
@SideOnly(Side.CLIENT)
public abstract class GuiScreenWidget extends GuiScreen{
protected List<Widget> widgets;
protected final int xSize, ySize;

public GuiScreenWidget(int xSize, int ySize){
this.widgets = new ArrayList<>();
this.xSize = xSize;
this.ySize = ySize;
}

@Override
public void handleMouseInput() throws IOException{
super.handleMouseInput();
int dWheel = Mouse.getEventDWheel();
if (dWheel != 0){
int x = Mouse.getEventX() * this.width / this.mc.displayWidth - (width - xSize) / 2;
int y = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1 - (height - ySize) / 2;
for (Widget widget : widgets){
if (widget.intersects(x, y)
&& widget.wheel(x - widget.x, y - widget.y, dWheel))
break;
}
}
}

@Override
protected void mouseClicked(int mouseX, int mouseY, int mouseButton){
//Не будем поддерживать стандартные кнопки и метки
//super.mouseClicked(mouseX, mouseY, mouseButton);

mouseX -= (width - xSize) / 2;
mouseY -= (height - ySize) / 2;

for (Widget widget : widgets) {
if (widget.intersects(mouseX, mouseY)
&& widget.click(mouseX - widget.x, mouseY - widget.y, mouseButton))
break;
}
}

protected void draw(int xMin, int yMin, int mouseX, int mouseY){
//Опять же, забиваем на стандартные кнопки и метки
//super.drawScreen(mouseX, mouseY, partialTicks);

for (Widget widget : widgets) {
widget.draw(this, xMin, yMin, mouseX, mouseY);
}
}

//region Font functions
public int getStringWidth(String text){
return fontRendererObj.getStringWidth(text);
}

public void drawSplitString(String str, int x, int y, int wrapWidth, int textColor){
this.fontRendererObj.drawSplitString(str, x, y, wrapWidth, textColor);
}

public int drawStringWithShadow(String text, float x, float y, int color){
return this.drawString(text, x, y, color, true);
}

/**
* Draws the specified string.
*/
public int drawString(String text, int x, int y, int color){
return this.drawString(text, (float)x, (float)y, color, false);
}

/**
* Draws the specified string.
*/
public int drawString(String text, float x, float y, int color, boolean dropShadow){
return fontRendererObj.drawString(text, x, y, color, dropShadow);
}
//endregion

//region Item drawing

/**
* Нарисовать предмет на выбранной позиции
*/
public void drawItem(ItemStack item, int x, int y){
this.itemRender.renderItemIntoGUI(item, x, y);
}

/**
* Нарисовать предмет с эффектами на выбранной позиции
*/
public void drawItemWithEffect(ItemStack item, int x, int y){
this.itemRender.renderItemAndEffectIntoGUI(item, x, y);
}
//endregion

}
Loading