1
0
mirror of https://github.com/chylex/Hardcore-Ender-Expansion.git synced 2025-04-10 20:15:42 +02:00

Fixeees and polishiiiiing

This commit is contained in:
chylex 2014-09-19 20:41:11 +02:00
parent 6877fb1fe3
commit 39920d3a6c
7 changed files with 45 additions and 29 deletions

View File

@ -1,7 +1,6 @@
package chylex.hee.gui;
import gnu.trove.map.hash.TByteObjectHashMap;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
@ -32,6 +31,7 @@ import chylex.hee.mechanics.compendium.content.KnowledgeObject;
import chylex.hee.mechanics.compendium.content.fragments.KnowledgeFragmentText;
import chylex.hee.mechanics.compendium.objects.IKnowledgeObjectInstance;
import chylex.hee.mechanics.compendium.player.PlayerCompendiumData;
import chylex.hee.mechanics.compendium.player.PlayerCompendiumData.FragmentPurchaseStatus;
import chylex.hee.mechanics.compendium.render.CategoryDisplayElement;
import chylex.hee.mechanics.compendium.render.ObjectDisplayElement;
import chylex.hee.mechanics.compendium.render.PurchaseDisplayElement;
@ -150,6 +150,8 @@ public class GuiEnderCompendium extends GuiScreen implements ITooltipRenderer{
HardcoreEnderExpansion.proxy.loadConfiguration();
}
if (button.id == 3 || button.id == 4)updatePurchaseElements();
}
@Override
@ -157,6 +159,8 @@ public class GuiEnderCompendium extends GuiScreen implements ITooltipRenderer{
if (buttonId == 1)actionPerformed((GuiButton)buttonList.get(0));
else if (buttonId == 0){
if (!hasHighlightedCategory){
objectElements.clear();
for(CategoryDisplayElement element:categoryElements){
if (element.isMouseOver(mouseX,mouseY,(int)offsetX.value(),(int)offsetY.value())){
for(KnowledgeObject object:element.category.getAllObjects())objectElements.add(new ObjectDisplayElement(object));
@ -168,7 +172,7 @@ public class GuiEnderCompendium extends GuiScreen implements ITooltipRenderer{
}
else{
boolean stop = false;
int offX = (int)offsetX.value()-(width>>1), offY = (int)offsetY.value()+guiObjectTopY;
int offX = (int)offsetX.value()-(width>>1)+(width>>2), offY = (int)offsetY.value()+guiObjectTopY;
for(ObjectDisplayElement element:objectElements){
if (element.isMouseOver(mouseX,mouseY,offX,offY)){
@ -243,7 +247,7 @@ public class GuiEnderCompendium extends GuiScreen implements ITooltipRenderer{
if (fragment == null)break;
else{
pageMap = new HashMap<>();
pageMap = new LinkedHashMap<>();
pageMap.put(fragment,isUnlocked);
yy = 0;
continue;
@ -257,14 +261,20 @@ public class GuiEnderCompendium extends GuiScreen implements ITooltipRenderer{
if (object == KnowledgeRegistrations.HELP)return;
if (!compendiumData.hasDiscoveredObject(currentObject)){
if (currentObject.isBuyable())purchaseElements.add(new PurchaseDisplayElement(currentObject,(this.height>>1)-3,compendiumData.getPoints() >= currentObject.getUnlockPrice()));
if (currentObject.isBuyable())purchaseElements.add(new PurchaseDisplayElement(currentObject,(this.height>>1)-3,compendiumData.getPoints() >= currentObject.getUnlockPrice() ? FragmentPurchaseStatus.CAN_PURCHASE : FragmentPurchaseStatus.NOT_ENOUGH_POINTS));
}
else{
yy = ((this.height-guiPageTexHeight)>>1)+guiPageTop;
else updatePurchaseElements();
}
private void updatePurchaseElements(){
purchaseElements.clear();
if (currentObject != null){
int yy = ((this.height-guiPageTexHeight)>>1)+guiPageTop, height;
for(Entry<KnowledgeFragment,Boolean> entry:currentObjectPages.get(pageIndex).entrySet()){
height = entry.getKey().getHeight(this,entry.getValue());
if (!entry.getValue() && entry.getKey().isBuyable())purchaseElements.add(new PurchaseDisplayElement(entry.getKey(),yy+(height>>1)+2,compendiumData.getPoints() >= entry.getKey().getPrice()));
if (!entry.getValue())purchaseElements.add(new PurchaseDisplayElement(entry.getKey(),yy+(height>>1)+2,compendiumData.canPurchaseFragment(entry.getKey())));
yy += 10+height;
}
}
@ -314,7 +324,7 @@ public class GuiEnderCompendium extends GuiScreen implements ITooltipRenderer{
}
}
offX = ptt(offsetX.value(),prevOffsetX,partialTickTime)-(width>>1);
offX = ptt(offsetX.value(),prevOffsetX,partialTickTime)-(width>>1)+(width>>2);
offY = ptt(offsetY.value(),prevOffsetY,partialTickTime)+guiObjectTopY;
GL11.glPushMatrix();
@ -325,9 +335,7 @@ public class GuiEnderCompendium extends GuiScreen implements ITooltipRenderer{
for(ObjectDisplayElement element:objectElements){
if (element.isMouseOver(mouseX,mouseY,(int)offX,(int)offY)){
String tooltip = element.object.getTooltip();
//if (!compendiumData.hasDiscoveredObject(element.object))tooltip += "\n\nNot discovered yet.";
GuiItemRenderHelper.drawTooltip(this,fontRendererObj,mouseX,mouseY,tooltip);
GuiItemRenderHelper.drawTooltip(this,fontRendererObj,mouseX,mouseY,element.object.getTooltip());
}
}

View File

@ -71,7 +71,7 @@ public final class KnowledgeRegistrations{
END_POWDER = create(ItemList.end_powder),
ENHANCED_ENDER_PEARL = create(ItemList.enhanced_ender_pearl),
TEMPLE_CALLER = create(ItemList.temple_caller),
ENDER_DRAGON = create(EntityBossDragon.class),
ENDER_DRAGON = new KnowledgeObject<ObjectMob>(new ObjectMob(EntityBossDragon.class),new ItemStack(Blocks.dragon_egg),"Ender Dragon"),
ANGRY_ENDERMAN = create(EntityMobAngryEnderman.class),
VAMPIRE_BAT = create(EntityMobVampiricBat.class),
@ -216,7 +216,7 @@ public final class KnowledgeRegistrations{
new KnowledgeFragmentText(4).setContents("Note that discovering objects also unlocks some of their fragments and gives you points, whereas buying the object does neither."),
new KnowledgeFragmentText(5).setContents("Knowledge Notes are items found in dungeons and traded by villagers. Using them gives you Knowledge Points, but destroys the item in the process."),
new KnowledgeFragmentText(6).setContents("You can use right mouse button instead of the Back button for easier use of the Compendium."),
new KnowledgeFragmentText(7).setContents("Opening the Compendium while looking at a block, item or a mob opens the appropriate object.")
new KnowledgeFragmentText(7).setContents("Opening the Compendium while sneaking and looking at a block, item or a mob opens the appropriate object.")
});
ESSENCE.setNonBuyable().setDiscoveryReward(12).setFragments(new KnowledgeFragment[]{

View File

@ -32,7 +32,7 @@ public class KnowledgeFragmentItemConversion extends KnowledgeFragment{
gui.drawTexturedModalRect(x+20,y,0,59,22,20);
GuiItemRenderHelper.renderItemIntoGUI(gui.mc.getTextureManager(),isUnlocked ? itemFrom : KnowledgeFragmentCrafting.lockedItem,x+1,y+1);
GuiItemRenderHelper.renderItemIntoGUI(gui.mc.getTextureManager(),isUnlocked ? itemTo : KnowledgeFragmentCrafting.lockedItem,x+24,y+1);
GuiItemRenderHelper.renderItemIntoGUI(gui.mc.getTextureManager(),isUnlocked ? itemTo : KnowledgeFragmentCrafting.lockedItem,x+45,y+1);
RenderHelper.disableStandardItemLighting();
@ -40,7 +40,7 @@ public class KnowledgeFragmentItemConversion extends KnowledgeFragment{
if (mouseX >= x && mouseX <= x+17){
GuiItemRenderHelper.drawTooltip(gui,gui.mc.fontRenderer,mouseX,mouseY,Joiner.on('\n').join(itemFrom.getTooltip(gui.mc.thePlayer,false)));
}
else if (mouseX >= x+23 && mouseX <= x+40){
else if (mouseX >= x+44 && mouseX <= x+61){
GuiItemRenderHelper.drawTooltip(gui,gui.mc.fontRenderer,mouseX,mouseY,Joiner.on('\n').join(itemTo.getTooltip(gui.mc.thePlayer,false)));
}
}

View File

@ -26,7 +26,7 @@ public class KnowledgeFragmentText extends KnowledgeFragment{
public int getHeight(GuiEnderCompendium gui, boolean isUnlocked){
boolean origFont = gui.mc.fontRenderer.getUnicodeFlag();
gui.mc.fontRenderer.setUnicodeFlag(true);
int h = gui.mc.fontRenderer.listFormattedStringToWidth(getString(isUnlocked),GuiEnderCompendium.guiPageWidth-10).size()*gui.mc.fontRenderer.FONT_HEIGHT;
int h = gui.mc.fontRenderer.listFormattedStringToWidth(getString(true),GuiEnderCompendium.guiPageWidth-10).size()*gui.mc.fontRenderer.FONT_HEIGHT;
gui.mc.fontRenderer.setUnicodeFlag(origFont);
return h;
}

View File

@ -32,6 +32,10 @@ public final class CompendiumEventsClient{
}
}
public static int getCompendiumKeyCode(){
return instance.keyOpenCompendium.getKeyCode();
}
private final KeyBinding keyOpenCompendium;
private PlayerCompendiumData data;
@ -50,10 +54,12 @@ public final class CompendiumEventsClient{
GuiEnderCompendium compendium = new GuiEnderCompendium(data);
mc.displayGuiScreen(compendium);
KnowledgeObject<? extends IKnowledgeObjectInstance<?>> obj = CompendiumEvents.getObservation(mc.thePlayer).getObject();
if (obj != null)compendium.showObject(obj);
if (mc.thePlayer.isSneaking()){
KnowledgeObject<? extends IKnowledgeObjectInstance<?>> obj = CompendiumEvents.getObservation(mc.thePlayer).getObject();
if (obj != null)compendium.showObject(obj);
}
if (mc.thePlayer.getStatFileWriter().hasAchievementUnlocked(AchievementManager.THE_MORE_YOU_KNOW))PacketPipeline.sendToServer(new S03OpenCompendium());
if (!mc.thePlayer.getStatFileWriter().hasAchievementUnlocked(AchievementManager.THE_MORE_YOU_KNOW))PacketPipeline.sendToServer(new S03OpenCompendium());
}
else mc.thePlayer.addChatMessage(new ChatComponentText("Error opening Ender Compendium, server did not provide required data. Relog, wait a few seconds, pray to your favourite deity and try again!"));
}

View File

@ -5,25 +5,26 @@ import org.lwjgl.opengl.GL11;
import chylex.hee.gui.GuiEnderCompendium;
import chylex.hee.mechanics.compendium.content.KnowledgeFragment;
import chylex.hee.mechanics.compendium.content.KnowledgeObject;
import chylex.hee.mechanics.compendium.player.PlayerCompendiumData.FragmentPurchaseStatus;
public class PurchaseDisplayElement{
public final Object object;
public final int price;
public final FragmentPurchaseStatus status;
private final int y;
private final boolean canAfford;
public PurchaseDisplayElement(KnowledgeFragment fragment, int y, boolean canAfford){
public PurchaseDisplayElement(KnowledgeFragment fragment, int y, FragmentPurchaseStatus status){
this.object = fragment;
this.price = fragment.getPrice();
this.y = y;
this.canAfford = canAfford;
this.status = status;
}
public PurchaseDisplayElement(KnowledgeObject<?> object, int y, boolean canAfford){
public PurchaseDisplayElement(KnowledgeObject<?> object, int y, FragmentPurchaseStatus status){
this.object = object;
this.price = object.getUnlockPrice();
this.y = y;
this.canAfford = canAfford;
this.status = status;
}
public void render(GuiScreen gui, int pageCenterX){
@ -41,11 +42,12 @@ public class PurchaseDisplayElement{
GuiEnderCompendium.renderItem.renderItemIntoGUI(gui.mc.fontRenderer,gui.mc.getTextureManager(),GuiEnderCompendium.knowledgeFragmentIS,pageCenterX-22,y-10);
RenderHelper.disableStandardItemLighting();
String price = String.valueOf(this.price); // TODO canAfford
gui.mc.fontRenderer.drawString(price,pageCenterX-gui.mc.fontRenderer.getStringWidth(price)+20,y-5,4210752);
String price = status == FragmentPurchaseStatus.NOT_BUYABLE ? "~~~" : String.valueOf(this.price);
int color = status == FragmentPurchaseStatus.CAN_PURCHASE ? 0x404040 : status == FragmentPurchaseStatus.REQUIREMENTS_UNFULFILLED ? 0x888888 : status == FragmentPurchaseStatus.NOT_ENOUGH_POINTS ? 0xdd2020 : 0;
gui.mc.fontRenderer.drawString(price,pageCenterX-gui.mc.fontRenderer.getStringWidth(price)+20,y-5,color);
}
public boolean isMouseOver(int mouseX, int mouseY, int pageCenterX){
return mouseX >= (pageCenterX+3)-27 && mouseY >= y-14 && mouseX <= (pageCenterX+3)+27 && mouseY <= y+12;
return mouseX >= (pageCenterX+3)-27 && mouseY >= y-14 && mouseX <= (pageCenterX+3)+27 && mouseY <= y+12 && status == FragmentPurchaseStatus.CAN_PURCHASE;
}
}

View File

@ -4,7 +4,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
@ -16,6 +15,7 @@ import net.minecraftforge.common.AchievementPage;
import chylex.hee.block.BlockList;
import chylex.hee.item.ItemList;
import chylex.hee.item.ItemSpecialEffects;
import chylex.hee.mechanics.compendium.events.CompendiumEventsClient;
import chylex.hee.proxy.ModCommonProxy;
public final class AchievementManager{
@ -46,7 +46,7 @@ public final class AchievementManager{
@Override
public String formatString(String str){
try{
return String.format(str,GameSettings.getKeyDisplayString(Minecraft.getMinecraft().gameSettings.keyBindInventory.getKeyCode()));
return String.format(str,GameSettings.getKeyDisplayString(CompendiumEventsClient.getCompendiumKeyCode()));
}catch(Exception e){
return "Error: "+e.getLocalizedMessage();
}